gnucash master: Multiple changes pushed

Geert Janssens gjanssens at code.gnucash.org
Thu Sep 21 08:38:02 EDT 2017


Updated	 via  https://github.com/Gnucash/gnucash/commit/7448d8b5 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/0b85bbc1 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/5b99835c (commit)
	 via  https://github.com/Gnucash/gnucash/commit/678794c8 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/ff32ddc9 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/40006a3f (commit)
	 via  https://github.com/Gnucash/gnucash/commit/62824e00 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/c6f5118b (commit)
	 via  https://github.com/Gnucash/gnucash/commit/df764626 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/daf1bf35 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/1a84b4a0 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/0004a44f (commit)
	 via  https://github.com/Gnucash/gnucash/commit/350dd690 (commit)
	from  https://github.com/Gnucash/gnucash/commit/711cea1f (commit)



commit 7448d8b532e34ae1d4a750b23df065bd39b8db81
Merge: 0b85bbc c6f5118
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Sep 21 14:26:20 2017 +0200

    Merge 'maint' into unstable
    
    Resolved conflicts:
            configure.ac

diff --cc configure.ac
index beafb19,0649065..aec5aaa
--- a/configure.ac
+++ b/configure.ac
@@@ -1604,176 -1412,189 +1604,177 @@@ AC_CONFIG_FILES
    po/Makefile.in
    dnl # Makefiles
    Makefile
 -  accounts/Makefile
 -  accounts/C/Makefile
 -  accounts/ca/Makefile
 -  accounts/cs/Makefile
 -  accounts/da/Makefile
 -  accounts/de_AT/Makefile
 -  accounts/de_CH/Makefile
 -  accounts/de_DE/Makefile
 -  accounts/el_GR/Makefile
 -  accounts/en_GB/Makefile
 -  accounts/es_ES/Makefile
 -  accounts/es_MX/Makefile
 -  accounts/fi_FI/Makefile
 -  accounts/fr_CA/Makefile
 -  accounts/fr_CH/Makefile
 -  accounts/fr_FR/Makefile
 -  accounts/hu_HU/Makefile
 -  accounts/it/Makefile
 -  accounts/ja/Makefile
 -  accounts/ko/Makefile
 -  accounts/lt/Makefile
 -  accounts/lv/Makefile
 -  accounts/nb/Makefile
 -  accounts/nl/Makefile
 -  accounts/pl/Makefile
 -  accounts/pt_BR/Makefile
 -  accounts/pt_PT/Makefile
 -  accounts/ru/Makefile
 -  accounts/sk/Makefile
 -  accounts/sv_AX/Makefile
 -  accounts/sv_FI/Makefile
 -  accounts/sv_SE/Makefile
 -  accounts/tr_TR/Makefile
 -  accounts/zh_CN/Makefile
 -  accounts/zh_HK/Makefile
 -  accounts/zh_TW/Makefile
 -  checks/Makefile
 +  data/Makefile
 +  data/accounts/Makefile
 +  data/accounts/C/Makefile
++  data/accounts/ca/Makefile
 +  data/accounts/cs/Makefile
 +  data/accounts/da/Makefile
 +  data/accounts/de_AT/Makefile
 +  data/accounts/de_CH/Makefile
 +  data/accounts/de_DE/Makefile
 +  data/accounts/el_GR/Makefile
 +  data/accounts/en_GB/Makefile
 +  data/accounts/es_ES/Makefile
 +  data/accounts/es_MX/Makefile
 +  data/accounts/fi_FI/Makefile
 +  data/accounts/fr_CA/Makefile
 +  data/accounts/fr_CH/Makefile
 +  data/accounts/fr_FR/Makefile
 +  data/accounts/hu_HU/Makefile
 +  data/accounts/it/Makefile
 +  data/accounts/ja/Makefile
 +  data/accounts/ko/Makefile
 +  data/accounts/lt/Makefile
 +  data/accounts/lv/Makefile
 +  data/accounts/nb/Makefile
 +  data/accounts/nl/Makefile
 +  data/accounts/pl/Makefile
 +  data/accounts/pt_BR/Makefile
 +  data/accounts/pt_PT/Makefile
 +  data/accounts/ru/Makefile
 +  data/accounts/sk/Makefile
 +  data/accounts/sv_AX/Makefile
 +  data/accounts/sv_FI/Makefile
 +  data/accounts/sv_SE/Makefile
 +  data/accounts/tr_TR/Makefile
 +  data/accounts/zh_CN/Makefile
 +  data/accounts/zh_HK/Makefile
 +  data/accounts/zh_TW/Makefile
 +  data/checks/Makefile
 +  data/pixmaps/Makefile
 +  bindings/Makefile
 +  bindings/python/Makefile
 +  bindings/python/tests/Makefile
 +  borrowed/Makefile
 +  borrowed/goffice/Makefile
 +  borrowed/libc/Makefile
 +  borrowed/gwengui-gtk3/Makefile
 +  common/Makefile
 +  common/debug/Makefile
 +  common/debug/valgrind/Makefile
 +  common/test-core/Makefile
    doc/Makefile
    doc/examples/Makefile
 -  lib/Makefile
 -  lib/libc/Makefile
 -  lib/stf/Makefile
 -  packaging/Makefile
 -  src/Makefile
 -  src/app-utils/Makefile
 -  src/app-utils/test/Makefile
 -  src/backend/Makefile
 -  src/backend/dbi/Makefile
 -  src/backend/dbi/test/Makefile
 -  src/backend/xml/Makefile
 -  src/backend/xml/test/Makefile
 -  src/backend/xml/test/test-files/Makefile
 -  src/backend/xml/test/test-files/xml2/Makefile
 -  src/backend/sql/Makefile
 -  src/backend/sql/test/Makefile
 -  src/bin/Makefile
 -  src/bin/overrides/Makefile
 -  src/bin/test/Makefile
 -  src/core-utils/Makefile
 -  src/core-utils/test/Makefile
 -  src/debug/Makefile
 -  src/debug/valgrind/Makefile
 -  src/doc/Makefile
 -  src/doc/design/Makefile
 -  src/doc/xml/Makefile
 -  src/engine/Makefile
 -  src/engine/test/Makefile
 -  src/engine/test-core/Makefile
 -  src/gnc-module/Makefile
 -  src/gnc-module/test/Makefile
 -  src/gnc-module/test/mod-foo/Makefile
 -  src/gnc-module/test/mod-bar/Makefile
 -  src/gnc-module/test/mod-baz/Makefile
 -  src/gnc-module/test/misc-mods/Makefile
 -  src/gnome/Makefile
 -  src/gnome/gtkbuilder/Makefile
 -  src/gnome/gschemas/Makefile
 -  src/gnome/ui/Makefile
 -  src/gnome-utils/Makefile
 -  src/gnome-utils/gtkbuilder/Makefile
 -  src/gnome-utils/gschemas/Makefile
 -  src/gnome-utils/test/Makefile
 -  src/gnome-utils/ui/Makefile
 -  src/gnome-search/Makefile
 -  src/html/Makefile
 -  src/import-export/Makefile
 -  src/import-export/test/Makefile
 -  src/import-export/ofx/gschemas/Makefile
 -  src/import-export/qif-imp/Makefile
 -  src/import-export/qif/Makefile
 -  src/import-export/qif/test/Makefile
 -  src/import-export/qif-imp/gschemas/Makefile
 -  src/import-export/qif-imp/test/Makefile
 -  src/import-export/gschemas/Makefile
 -  src/import-export/ofx/Makefile
 -  src/import-export/ofx/test/Makefile
 -  src/import-export/csv-imp/Makefile
 -  src/import-export/csv-imp/gschemas/Makefile
 -  src/import-export/csv-imp/test/Makefile
 -  src/import-export/csv-exp/Makefile
 -  src/import-export/csv-exp/gschemas/Makefile
 -  src/import-export/log-replay/Makefile
 -  src/import-export/aqb/Makefile
 -  src/import-export/aqb/gschemas/Makefile
 -  src/libqof/Makefile
 -  src/libqof/qof/Makefile
 -  src/libqof/qof/test/Makefile
 -  src/optional/Makefile
 -  src/optional/gtkmm/Makefile
 -  src/optional/gtkmm/test/Makefile
 -  src/optional/python-bindings/Makefile
 -  src/optional/python-bindings/tests/Makefile
 -  src/pixmaps/Makefile
 -  src/python/Makefile
 -  src/python/pycons/Makefile
 -  src/quotes/Makefile
 -  src/register/Makefile
 -  src/register/ledger-core/Makefile
 -  src/register/ledger-core/test/Makefile
 -  src/register/register-core/Makefile
 -  src/register/register-core/test/Makefile
 -  src/register/register-gnome/Makefile
 -  src/register/register-gnome/test/Makefile
 -  src/report/Makefile
 -  src/report/report-gnome/Makefile
 -  src/report/report-gnome/test/Makefile
 -  src/report/report-system/Makefile
 -  src/report/report-system/test/Makefile
 -  src/report/standard-reports/Makefile
 -  src/report/standard-reports/test/Makefile
 -  src/report/business-reports/Makefile
 -  src/report/locale-specific/Makefile
 -  src/report/locale-specific/us/Makefile
 -  src/report/locale-specific/us/test/Makefile
 -  src/report/stylesheets/Makefile
 -  src/report/stylesheets/test/Makefile
 -  src/report/utility-reports/Makefile
 -  src/report/utility-reports/test/Makefile
 -  src/report/jqplot/Makefile
 -  src/scm/Makefile
 -  src/scm/gnumeric/Makefile
 -  src/tax/Makefile
 -  src/tax/us/Makefile
 -  src/tax/us/test/Makefile
 -  src/test-core/Makefile
 -  src/business/Makefile
 -  src/business/business-gnome/Makefile
 -  src/business/business-gnome/gtkbuilder/Makefile
 -  src/business/business-gnome/gschemas/Makefile
 -  src/business/business-gnome/ui/Makefile
 -  src/business/business-ledger/Makefile
 -  dnl # Stuff for bill/invoice import plugin
 -  src/plugins/Makefile
 -  src/plugins/bi_import/Makefile
 -  src/plugins/bi_import/gtkbuilder/Makefile
 -  src/plugins/bi_import/ui/Makefile
 -  dnl # Stuff for customer import.
 -  src/plugins/customer_import/Makefile
 -  src/plugins/customer_import/gtkbuilder/Makefile
 -  src/plugins/customer_import/ui/Makefile
 +  gnucash/Makefile
 +  gnucash/overrides/Makefile
 +  gnucash/test/Makefile
 +  gnucash/gnome/Makefile
 +  gnucash/gnome/gtkbuilder/Makefile
 +  gnucash/gnome/gschemas/Makefile
 +  gnucash/gnome/ui/Makefile
 +  gnucash/gnome-utils/Makefile
 +  gnucash/gnome-utils/gtkbuilder/Makefile
 +  gnucash/gnome-utils/gschemas/Makefile
 +  gnucash/gnome-utils/test/Makefile
 +  gnucash/gnome-utils/ui/Makefile
 +  gnucash/gnome-search/Makefile
 +  gnucash/html/Makefile
 +  gnucash/import-export/Makefile
 +  gnucash/import-export/test/Makefile
 +  gnucash/import-export/ofx/gschemas/Makefile
 +  gnucash/import-export/qif-imp/Makefile
 +  gnucash/import-export/qif/Makefile
 +  gnucash/import-export/qif/test/Makefile
 +  gnucash/import-export/qif-imp/gschemas/Makefile
 +  gnucash/import-export/qif-imp/test/Makefile
 +  gnucash/import-export/gschemas/Makefile
 +  gnucash/import-export/ofx/Makefile
 +  gnucash/import-export/ofx/test/Makefile
 +  gnucash/import-export/csv-imp/Makefile
 +  gnucash/import-export/csv-imp/gschemas/Makefile
 +  gnucash/import-export/csv-imp/test/Makefile
 +  gnucash/import-export/csv-exp/Makefile
 +  gnucash/import-export/csv-exp/gschemas/Makefile
 +  gnucash/import-export/log-replay/Makefile
 +  gnucash/import-export/aqb/Makefile
 +  gnucash/import-export/aqb/gschemas/Makefile
 +  gnucash/import-export/aqb/test/Makefile
 +  gnucash/import-export/bi-import/Makefile
 +  gnucash/import-export/bi-import/gtkbuilder/Makefile
 +  gnucash/import-export/bi-import/ui/Makefile
 +  gnucash/import-export/customer-import/Makefile
 +  gnucash/import-export/customer-import/gtkbuilder/Makefile
 +  gnucash/import-export/customer-import/ui/Makefile
 +  gnucash/python/Makefile
 +  gnucash/python/pycons/Makefile
 +  gnucash/register/Makefile
 +  gnucash/register/ledger-core/Makefile
 +  gnucash/register/ledger-core/test/Makefile
 +  gnucash/register/register-core/Makefile
 +  gnucash/register/register-core/test/Makefile
 +  gnucash/register/register-gnome/Makefile
 +  gnucash/register/register-gnome/test/Makefile
 +  gnucash/report/Makefile
 +  gnucash/report/report-gnome/Makefile
 +  gnucash/report/report-gnome/test/Makefile
 +  gnucash/report/report-system/Makefile
 +  gnucash/report/report-system/test/Makefile
 +  gnucash/report/standard-reports/Makefile
 +  gnucash/report/standard-reports/test/Makefile
 +  gnucash/report/business-reports/Makefile
 +  gnucash/report/locale-specific/Makefile
 +  gnucash/report/locale-specific/us/Makefile
 +  gnucash/report/locale-specific/us/test/Makefile
 +  gnucash/report/stylesheets/Makefile
 +  gnucash/report/stylesheets/test/Makefile
 +  gnucash/report/utility-reports/Makefile
 +  gnucash/report/jqplot/Makefile
 +  libgnucash/Makefile
 +  libgnucash/app-utils/Makefile
 +  libgnucash/app-utils/test/Makefile
 +  libgnucash/backend/Makefile
 +  libgnucash/backend/dbi/Makefile
 +  libgnucash/backend/dbi/test/Makefile
 +  libgnucash/backend/xml/Makefile
 +  libgnucash/backend/xml/test/Makefile
 +  libgnucash/backend/xml/test/test-files/Makefile
 +  libgnucash/backend/xml/test/test-files/xml2/Makefile
 +  libgnucash/backend/sql/Makefile
 +  libgnucash/backend/sql/test/Makefile
 +  libgnucash/core-utils/Makefile
 +  libgnucash/core-utils/test/Makefile
 +  libgnucash/doc/Makefile
 +  libgnucash/doc/design/Makefile
 +  libgnucash/doc/xml/Makefile
 +  libgnucash/engine/Makefile
 +  libgnucash/engine/test/Makefile
 +  libgnucash/engine/test-core/Makefile
 +  libgnucash/gnc-module/Makefile
 +  libgnucash/gnc-module/test/Makefile
 +  libgnucash/gnc-module/test/mod-foo/Makefile
 +  libgnucash/gnc-module/test/mod-bar/Makefile
 +  libgnucash/gnc-module/test/mod-baz/Makefile
 +  libgnucash/gnc-module/test/misc-mods/Makefile
 +  libgnucash/quotes/Makefile
 +  libgnucash/scm/Makefile
 +  libgnucash/scm/gnumeric/Makefile
 +  libgnucash/tax/Makefile
 +  libgnucash/tax/us/Makefile
 +  libgnucash/tax/us/test/Makefile
    dnl # non-makefiles
 -  src/bin/gnucash.rc
 -  src/app-utils/migratable-prefs.xml
 -  src/gnome/gnucash.desktop.in
 +  gnucash/gnucash.rc
 +  libgnucash/app-utils/migratable-prefs.xml
 +  gnucash/gnome/gnucash.desktop.in
    dnl # GSettings schema files
 -  src/business/business-gnome/gschemas/org.gnucash.dialogs.business.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.dialogs.checkprinting.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.dialogs.commodities.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.dialogs.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.dialogs.reconcile.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.dialogs.sxs.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.dialogs.totd.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.window.pages.account.tree.gschema.xml.in
 -  src/gnome/gschemas/org.gnucash.window.pages.gschema.xml.in
 -  src/gnome-utils/gschemas/org.gnucash.history.gschema.xml.in
 -  src/gnome-utils/gschemas/org.gnucash.warnings.gschema.xml.in
 -  src/import-export/aqb/gschemas/org.gnucash.dialogs.import.hbci.gschema.xml.in
 -  src/import-export/csv-exp/gschemas/org.gnucash.dialogs.export.csv.gschema.xml.in
 -  src/import-export/csv-imp/gschemas/org.gnucash.dialogs.import.csv.gschema.xml.in
 -  src/import-export/gschemas/org.gnucash.dialogs.import.generic.gschema.xml.in
 -  src/import-export/ofx/gschemas/org.gnucash.dialogs.import.ofx.gschema.xml.in
 -  src/import-export/qif-imp/gschemas/org.gnucash.dialogs.import.qif.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.dialogs.business.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.dialogs.checkprinting.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.dialogs.commodities.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.dialogs.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.dialogs.reconcile.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.dialogs.sxs.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.dialogs.totd.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.window.pages.account.tree.gschema.xml.in
 +  gnucash/gnome/gschemas/org.gnucash.window.pages.gschema.xml.in
 +  gnucash/gnome-utils/gschemas/org.gnucash.history.gschema.xml.in
 +  gnucash/gnome-utils/gschemas/org.gnucash.warnings.gschema.xml.in
 +  gnucash/import-export/aqb/gschemas/org.gnucash.dialogs.import.hbci.gschema.xml.in
 +  gnucash/import-export/csv-exp/gschemas/org.gnucash.dialogs.export.csv.gschema.xml.in
 +  gnucash/import-export/csv-imp/gschemas/org.gnucash.dialogs.import.csv.gschema.xml.in
 +  gnucash/import-export/gschemas/org.gnucash.dialogs.import.generic.gschema.xml.in
 +  gnucash/import-export/ofx/gschemas/org.gnucash.dialogs.import.ofx.gschema.xml.in
 +  gnucash/import-export/qif-imp/gschemas/org.gnucash.dialogs.import.qif.gschema.xml.in
    dnl # Please read doc/build-system before adding *anything* here
    ,
    dnl # init-commands go here
diff --cc data/accounts/ca/CMakeLists.txt
index 0000000,768fae4..768fae4
mode 000000,100644..100644
--- a/data/accounts/ca/CMakeLists.txt
+++ b/data/accounts/ca/CMakeLists.txt
diff --cc data/accounts/ca/Makefile.am
index 0000000,5b2b814..5b2b814
mode 000000,100644..100644
--- a/data/accounts/ca/Makefile.am
+++ b/data/accounts/ca/Makefile.am
diff --cc data/accounts/ca/acctchrt_brokerage.gnucash-xea
index 0000000,f7dd0f2..f7dd0f2
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_brokerage.gnucash-xea
+++ b/data/accounts/ca/acctchrt_brokerage.gnucash-xea
diff --cc data/accounts/ca/acctchrt_carloan.gnucash-xea
index 0000000,499b172..499b172
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_carloan.gnucash-xea
+++ b/data/accounts/ca/acctchrt_carloan.gnucash-xea
diff --cc data/accounts/ca/acctchrt_cdmoneymkt.gnucash-xea
index 0000000,c77b3c8..c77b3c8
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_cdmoneymkt.gnucash-xea
+++ b/data/accounts/ca/acctchrt_cdmoneymkt.gnucash-xea
diff --cc data/accounts/ca/acctchrt_childcare.gnucash-xea
index 0000000,3cfea6b..3cfea6b
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_childcare.gnucash-xea
+++ b/data/accounts/ca/acctchrt_childcare.gnucash-xea
diff --cc data/accounts/ca/acctchrt_common.gnucash-xea
index 0000000,e61093f..e61093f
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_common.gnucash-xea
+++ b/data/accounts/ca/acctchrt_common.gnucash-xea
diff --cc data/accounts/ca/acctchrt_currency.gnucash-xea
index 0000000,4b5acca..4b5acca
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_currency.gnucash-xea
+++ b/data/accounts/ca/acctchrt_currency.gnucash-xea
diff --cc data/accounts/ca/acctchrt_eduloan.gnucash-xea
index 0000000,c4f69f0..c4f69f0
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_eduloan.gnucash-xea
+++ b/data/accounts/ca/acctchrt_eduloan.gnucash-xea
diff --cc data/accounts/ca/acctchrt_fixedassets.gnucash-xea
index 0000000,d0bbe54..d0bbe54
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_fixedassets.gnucash-xea
+++ b/data/accounts/ca/acctchrt_fixedassets.gnucash-xea
diff --cc data/accounts/ca/acctchrt_homeloan.gnucash-xea
index 0000000,c872aef..c872aef
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_homeloan.gnucash-xea
+++ b/data/accounts/ca/acctchrt_homeloan.gnucash-xea
diff --cc data/accounts/ca/acctchrt_homeown.gnucash-xea
index 0000000,126c4f1..126c4f1
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_homeown.gnucash-xea
+++ b/data/accounts/ca/acctchrt_homeown.gnucash-xea
diff --cc data/accounts/ca/acctchrt_otherloan.gnucash-xea
index 0000000,9959254..9959254
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_otherloan.gnucash-xea
+++ b/data/accounts/ca/acctchrt_otherloan.gnucash-xea
diff --cc data/accounts/ca/acctchrt_renter.gnucash-xea
index 0000000,d076ff4..d076ff4
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_renter.gnucash-xea
+++ b/data/accounts/ca/acctchrt_renter.gnucash-xea
diff --cc data/accounts/ca/acctchrt_retiremt.gnucash-xea
index 0000000,9e26790..9e26790
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_retiremt.gnucash-xea
+++ b/data/accounts/ca/acctchrt_retiremt.gnucash-xea
diff --cc data/accounts/ca/acctchrt_spouseinc.gnucash-xea
index 0000000,a02afd7..a02afd7
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_spouseinc.gnucash-xea
+++ b/data/accounts/ca/acctchrt_spouseinc.gnucash-xea
diff --cc data/accounts/ca/acctchrt_spouseretire.gnucash-xea
index 0000000,b5f1393..b5f1393
mode 000000,100644..100644
--- a/data/accounts/ca/acctchrt_spouseretire.gnucash-xea
+++ b/data/accounts/ca/acctchrt_spouseretire.gnucash-xea
diff --cc gnucash/gnome-utils/dialog-options.c
index 356905c,0000000..ff0a51a
mode 100644,000000..100644
--- a/gnucash/gnome-utils/dialog-options.c
+++ b/gnucash/gnome-utils/dialog-options.c
@@@ -1,4329 -1,0 +1,4334 @@@
 +/********************************************************************\
 + * dialog-options.c -- GNOME option handling                        *
 + * Copyright (C) 1998-2000 Linas Vepstas                            *
 + * Copyright (c) 2006 David Hampton <hampton at employees.org>         *
 + * Copyright (c) 2011 Robert Fewell                                 *
 + *                                                                  *
 + * This program is free software; you can redistribute it and/or    *
 + * modify it under the terms of the GNU General Public License as   *
 + * published by the Free Software Foundation; either version 2 of   *
 + * the License, or (at your option) any later version.              *
 + *                                                                  *
 + * This program is distributed in the hope that it will be useful,  *
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of   *
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    *
 + * GNU General Public License for more details.                     *
 + *                                                                  *
 + * You should have received a copy of the GNU General Public License*
 + * along with this program; if not, contact:                        *
 + *                                                                  *
 + * Free Software Foundation           Voice:  +1-617-542-5942       *
 + * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
 + * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 +\********************************************************************/
 +
 +#include "config.h"
 +
 +#include <gtk/gtk.h>
 +#include <gdk/gdk.h>
 +#include <glib/gi18n.h>
 +#include "swig-runtime.h"
 +
 +#include "gnc-tree-model-budget.h" //FIXME?
 +#include "gnc-budget.h"
 +
 +#include "dialog-options.h"
 +#include "dialog-utils.h"
 +#include "engine-helpers-guile.h"
 +#include "glib-helpers.h"
 +#include "gnc-account-sel.h"
 +#include "gnc-tree-view-account.h"
 +#include "gnc-tree-model-account.h"
 +#include "gnc-combott.h"
 +#include "gnc-commodity-edit.h"
 +#include "gnc-component-manager.h"
 +#include "gnc-general-select.h"
 +#include "gnc-currency-edit.h"
 +#include "gnc-date-edit.h"
 +#include "gnc-engine.h"
 +#include "gnc-prefs.h"
 +#include "gnc-gui-query.h"
 +#include "gnc-session.h"
 +#include "gnc-ui.h"
 +#include "guile-util.h"
 +#include "gnc-guile-utils.h"
 +#include "option-util.h"
 +#include "guile-mappings.h"
 +#include "gnc-date-format.h"
 +#include "misc-gnome-utils.h"
 +
 +#define GNC_PREF_CLOCK_24H "clock-24h"
 +
 +#define FUNC_NAME G_STRFUNC
 +/* TODO: clean up "register-stocks" junk
 + */
 +
 +
 +/* This static indicates the debugging module that this .o belongs to.  */
 +static QofLogModule log_module = GNC_MOD_GUI;
 +
 +#define DIALOG_OPTIONS_CM_CLASS "dialog-options"
 +#define DIALOG_BOOK_OPTIONS_CM_CLASS "dialog-book-options"
 +
 +/*
 + * Point where preferences switch control method from a set of
 + * notebook tabs to a list.
 + */
 +#define MAX_TAB_COUNT 4
 +
 +/* A pointer to the last selected filename */
 +#define LAST_SELECTION "last-selection"
 +
 +/* A Hash-table of GNCOptionDef_t keyed with option names. */
 +static GHashTable *optionTable = NULL;
 +
 +static int gain_loss_accounts_in_filter = 0;
 +
 +struct gnc_option_win
 +{
 +    GtkWidget  * dialog;
 +    GtkWidget  * notebook;
 +    GtkWidget  * page_list_view;
 +    GtkWidget  * page_list;
 +
 +    gboolean toplevel;
 +
 +    GNCOptionWinCallback apply_cb;
 +    gpointer             apply_cb_data;
 +
 +    GNCOptionWinCallback help_cb;
 +    gpointer             help_cb_data;
 +
 +    GNCOptionWinCallback close_cb;
 +    gpointer             close_cb_data;
 +
 +    /* Hold onto this for a complete reset */
 +    GNCOptionDB *		option_db;
 +
 +    /* Hold on to this to unregister the right class */
 +    const char *component_class;
 +};
 +
 +typedef enum
 +{
 +    GNC_RD_WID_AB_BUTTON_POS = 0,
 +    GNC_RD_WID_AB_WIDGET_POS,
 +    GNC_RD_WID_REL_BUTTON_POS,
 +    GNC_RD_WID_REL_WIDGET_POS
 +} GNCRdPositions;
 +
 +enum page_tree
 +{
 +    PAGE_INDEX = 0,
 +    PAGE_NAME,
 +    NUM_COLUMNS
 +};
 +
 +typedef struct
 +{
 +    GtkWidget *gnc_currency_radiobutton_0;
 +    GtkWidget *gnc_currency_radiobutton_1;
 +    GtkWidget *gnc_currency_radiobutton_2;
 +    GtkWidget *book_currency_widget;
 +    GtkWidget *default_cost_policy_widget;
 +    GtkWidget *default_gain_loss_account_widget;
 +    GtkWidget *book_currency_table;
 +    GtkWidget *book_currency_vbox;
 +    GtkWidget *gain_loss_account_del_button;
 +    GtkWidget *gain_loss_account_table;
 +    GtkWidget *default_gain_loss_account_text;
 +    GNCOption *option;
 +    gnc_commodity *retrieved_book_currency;
 +    SCM retrieved_policy_scm;
 +    SCM retrieved_gain_loss_acct_guid_scm;
 +    Account *prior_gain_loss_account;
 +
 +} currency_accounting_data;
 +
 +static currency_accounting_data *book_currency_data = NULL;
 +
 +static GNCOptionWinCallback global_help_cb = NULL;
 +gpointer global_help_cb_data = NULL;
 +
 +void gnc_options_dialog_response_cb(GtkDialog *dialog, gint response,
 +                                    GNCOptionWin *window);
 +static void gnc_options_dialog_reset_cb(GtkWidget * w, gpointer data);
 +void gnc_options_dialog_list_select_cb (GtkTreeSelection *selection,
 +                                        gpointer data);
 +void gnc_set_default_cost_policy_widget(SCM list_symbol);
 +void gnc_set_default_gain_loss_account_widget(gnc_commodity *commodity);
 +void gnc_option_changed_book_currency_widget_cb(GtkWidget *widget);
 +void gnc_option_changed_gain_loss_account_widget_cb(GtkTreeSelection *selection,
 +                                                    gpointer data);
 +void gnc_option_changed_gain_loss_account_del_button_widget_cb (GtkButton *button,
 +                                                    gpointer data);
 +
 +GtkWidget *
 +gnc_option_get_gtk_widget (GNCOption *option)
 +{
 +    return (GtkWidget *)gnc_option_get_widget(option);
 +}
 +
 +static void
 +gnc_options_dialog_changed_internal (GtkWidget *widget, gboolean sensitive)
 +{
 +    GtkDialog *dialog;
 +
 +    while (widget && !GTK_IS_DIALOG(widget))
 +        widget = gtk_widget_get_parent(widget);
 +    if (widget == NULL)
 +        return;
 +
 +    dialog = GTK_DIALOG(widget);
 +    gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, sensitive);
 +    gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY, sensitive);
 +}
 +
 +void
 +gnc_options_dialog_changed (GNCOptionWin *win)
 +{
 +    if (!win) return;
 +
 +    gnc_options_dialog_changed_internal (win->dialog, TRUE);
 +}
 +
 +void
 +gnc_option_changed_widget_cb(GtkWidget *widget, GNCOption *option)
 +{
 +    gnc_option_set_changed (option, TRUE);
 +    gnc_option_call_option_widget_changed_proc(option);
 +    gnc_options_dialog_changed_internal (widget, TRUE);
 +}
 +
 +void
 +gnc_option_changed_option_cb(GtkWidget *dummy, GNCOption *option)
 +{
 +    GtkWidget *widget;
 +
 +    widget = gnc_option_get_gtk_widget (option);
 +    gnc_option_changed_widget_cb(widget, option);
 +}
 +
 +static void
 +gnc_date_option_set_select_method(GNCOption *option, gboolean use_absolute,
 +                                  gboolean set_buttons)
 +{
 +    GList* widget_list;
 +    GtkWidget *ab_button, *rel_button, *rel_widget, *ab_widget;
 +    GtkWidget *widget;
 +
 +    widget = gnc_option_get_gtk_widget (option);
 +
 +    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
 +    ab_button = g_list_nth_data(widget_list, GNC_RD_WID_AB_BUTTON_POS);
 +    ab_widget = g_list_nth_data(widget_list, GNC_RD_WID_AB_WIDGET_POS);
 +    rel_button = g_list_nth_data(widget_list, GNC_RD_WID_REL_BUTTON_POS);
 +    rel_widget = g_list_nth_data(widget_list, GNC_RD_WID_REL_WIDGET_POS);
 +    g_list_free(widget_list);
 +
 +    if (use_absolute)
 +    {
 +        gtk_widget_set_sensitive(ab_widget, TRUE);
 +        gtk_widget_set_sensitive(rel_widget, FALSE);
 +        if (set_buttons)
 +        {
 +            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ab_button), TRUE);
 +        }
 +    }
 +    else
 +    {
 +        gtk_widget_set_sensitive(rel_widget, TRUE);
 +        gtk_widget_set_sensitive(ab_widget, FALSE);
 +        if (set_buttons)
 +        {
 +            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rel_button), TRUE);
 +        }
 +    }
 +}
 +
 +static void
 +gnc_rd_option_ab_set_cb(GtkWidget *widget, gpointer *raw_option)
 +{
 +    GNCOption *option = (GNCOption *) raw_option;
 +    gnc_date_option_set_select_method(option, TRUE, FALSE);
 +    gnc_option_changed_option_cb(widget, option);
 +}
 +
 +static void
 +gnc_rd_option_rel_set_cb(GtkWidget *widget, gpointer *raw_option)
 +{
 +    GNCOption *option = (GNCOption *) raw_option;
 +    gnc_date_option_set_select_method(option, FALSE, FALSE);
 +    gnc_option_changed_option_cb(widget, option);
 +    return;
 +}
 +
 +static void
 +gnc_image_option_update_preview_cb (GtkFileChooser *chooser,
 +                                    GNCOption *option)
 +{
 +    gchar *filename;
 +    GtkImage *image;
 +    GdkPixbuf *pixbuf;
 +    gboolean have_preview;
 +
 +    g_return_if_fail(chooser != NULL);
 +
 +    ENTER("chooser %p, option %p", chooser, option);
 +    filename = gtk_file_chooser_get_preview_filename(chooser);
 +    DEBUG("chooser preview name is %s.", filename ? filename : "(null)");
 +    if (filename == NULL)
 +    {
 +        filename = g_strdup(g_object_get_data(G_OBJECT(chooser), LAST_SELECTION));
 +        DEBUG("using last selection of %s", filename ? filename : "(null)");
 +        if (filename == NULL)
 +        {
 +            LEAVE("no usable name");
 +            return;
 +        }
 +    }
 +
 +    image = GTK_IMAGE(gtk_file_chooser_get_preview_widget(chooser));
 +    pixbuf = gdk_pixbuf_new_from_file_at_size(filename, 128, 128, NULL);
 +    g_free(filename);
 +    have_preview = (pixbuf != NULL);
 +
 +    gtk_image_set_from_pixbuf(image, pixbuf);
 +    if (pixbuf)
 +        g_object_unref(pixbuf);
 +
 +    gtk_file_chooser_set_preview_widget_active(chooser, have_preview);
 +    LEAVE("preview visible is %d", have_preview);
 +}
 +
 +static void
 +gnc_image_option_selection_changed_cb (GtkFileChooser *chooser,
 +                                       GNCOption *option)
 +{
 +    gchar *filename;
 +
 +    filename = gtk_file_chooser_get_preview_filename(chooser);
 +    if (!filename)
 +        return;
 +    g_object_set_data_full(G_OBJECT(chooser), LAST_SELECTION, filename, g_free);
 +}
 +
 +/********************************************************************\
 + * gnc_option_set_ui_value_internal                                 *
 + *   sets the GUI representation of an option with either its       *
 + *   current guile value, or its default value                      *
 + *                                                                  *
 + * Args: option      - option structure containing option           *
 + *       use_default - if true, use the default value, otherwise    *
 + *                     use the current value                        *
 + * Return: nothing                                                  *
 +\********************************************************************/
 +static void
 +gnc_option_set_ui_value_internal (GNCOption *option, gboolean use_default)
 +{
 +    gboolean bad_value = FALSE;
 +    GtkWidget *widget;
 +    char *type;
 +    SCM getter;
 +    SCM value;
 +    GNCOptionDef_t *option_def;
 +
 +    widget = gnc_option_get_gtk_widget (option);
 +    if (!widget)
 +        return;
 +
 +    type = gnc_option_type(option);
 +
 +    if (use_default)
 +        getter = gnc_option_default_getter(option);
 +    else
 +        getter = gnc_option_getter(option);
 +
 +    value = scm_call_0(getter);
 +
 +    option_def = gnc_options_ui_get_option (type);
 +    if (option_def && option_def->set_value)
 +    {
 +        bad_value = option_def->set_value (option, use_default, widget, value);
 +        if (bad_value)
 +        {
 +            PERR("bad value\n");
 +        }
 +    }
 +    else
 +    {
 +        PERR("Unknown type. Ignoring.\n");
 +    }
 +
 +    free(type);
 +}
 +
 +/********************************************************************\
 + * gnc_option_get_ui_value_internal                                 *
 + *   returns the SCM representation of the GUI option value         *
 + *                                                                  *
 + * Args: option - option structure containing option                *
 + * Return: SCM handle to GUI option value                           *
 +\********************************************************************/
 +static SCM
 +gnc_option_get_ui_value_internal (GNCOption *option)
 +{
 +    SCM result = SCM_UNDEFINED;
 +    GtkWidget *widget;
 +    char *type;
 +    GNCOptionDef_t *option_def;
 +
 +    widget = gnc_option_get_gtk_widget (option);
 +    if (!widget)
 +        return result;
 +
 +    type = gnc_option_type(option);
 +
 +    option_def = gnc_options_ui_get_option (type);
 +    if (option_def && option_def->get_value)
 +    {
 +        result = option_def->get_value (option, widget);
 +    }
 +    else
 +    {
 +        PERR("Unknown type for refresh. Ignoring.\n");
 +    }
 +
 +    free(type);
 +
 +    return result;
 +}
 +
 +/********************************************************************\
 + * gnc_option_set_selectable_internal                               *
 + *   Change the selectable state of the widget that represents a    *
 + *   GUI option.                                                    *
 + *                                                                  *
 + * Args: option      - option to change widget state for            *
 + *       selectable  - if false, update the widget so that it       *
 + *                     cannot be selected by the user.  If true,    *
 + *                     update the widget so that it can be selected.*
 + * Return: nothing                                                  *
 +\********************************************************************/
 +static void
 +gnc_option_set_selectable_internal (GNCOption *option, gboolean selectable)
 +{
 +    GtkWidget *widget;
 +
 +    widget = gnc_option_get_gtk_widget (option);
 +    if (!widget)
 +        return;
 +
 +    gtk_widget_set_sensitive (widget, selectable);
 +}
 +
 +static void
 +gnc_option_default_cb(GtkWidget *widget, GNCOption *option)
 +{
 +    gnc_option_set_ui_value (option, TRUE);
 +    gnc_option_set_changed (option, TRUE);
 +    gnc_options_dialog_changed_internal (widget, TRUE);
 +}
 +
 +static void
 +gnc_option_show_hidden_toggled_cb(GtkWidget *widget, GNCOption* option)
 +{
 +    AccountViewInfo avi;
 +    GncTreeViewAccount *tree_view;
 +
 +    tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option));
 +    gnc_tree_view_account_get_view_info (tree_view, &avi);
 +    avi.show_hidden = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 +    gnc_tree_view_account_set_view_info (tree_view, &avi);
 +    gnc_option_changed_widget_cb(widget, option);
 +}
 +
 +static void
 +gnc_option_multichoice_cb(GtkWidget *widget, gpointer data)
 +{
 +    GNCOption *option = data;
 +    /* GtkComboBox per-item tooltip changes needed below */
 +    gnc_option_changed_widget_cb(widget, option);
 +}
 +
 +static void
 +gnc_option_radiobutton_cb(GtkWidget *w, gpointer data)
 +{
 +    GNCOption *option = data;
 +    GtkWidget *widget;
 +    gpointer _current, _new_value;
 +    gint current, new_value;
 +
 +    widget = gnc_option_get_gtk_widget (option);
 +
 +    _current = g_object_get_data(G_OBJECT(widget), "gnc_radiobutton_index");
 +    current = GPOINTER_TO_INT (_current);
 +
 +    _new_value = g_object_get_data (G_OBJECT(w), "gnc_radiobutton_index");
 +    new_value = GPOINTER_TO_INT (_new_value);
 +
 +    if (current == new_value)
 +        return;
 +
 +    g_object_set_data (G_OBJECT(widget), "gnc_radiobutton_index",
 +                       GINT_TO_POINTER(new_value));
 +    gnc_option_changed_widget_cb(widget, option);
 +}
 +
 +static gboolean
 +gnc_gain_loss_account_view_filter (Account  *account, gpointer  data)
 +{
 +    GNCAccountType type = xaccAccountGetType(account);
 +
 +    /* gain/loss accts must be an Income or Expense accts and not hidden;
 +       placeholder accounts must be included, irrespective of their currency,
 +       so their children are available to be considered */
 +    if (((type == ACCT_TYPE_INCOME) || (type == ACCT_TYPE_EXPENSE)) &&
 +        (!xaccAccountIsHidden(account)))
 +    {
 +        if (xaccAccountGetPlaceholder(account))
 +        {
 +            GList *placeholder_children = gnc_account_get_children (account);
 +
 +            if(placeholder_children)
 +            { /* determine if any children qualify; just need one but don't
 +                 double count in gain_loss_accounts_in_filter */
 +                int saved_gain_loss_accounts_in_filter =
 +                                                gain_loss_accounts_in_filter;
 +                gboolean child_pass_filter = FALSE;
 +                GList *l = NULL;
 +                for (l = placeholder_children; l != NULL; l = l->next)
 +                {
 +                    Account  *child_account = l->data;
 +                    child_pass_filter =
 +                        gnc_gain_loss_account_view_filter(child_account, NULL);
 +                    if (child_pass_filter)
 +                        break;
 +                }
 +                g_list_free(placeholder_children);
 +                gain_loss_accounts_in_filter =
 +                                           saved_gain_loss_accounts_in_filter;
 +                return child_pass_filter;
 +            }
 +            else return FALSE; // no children, not interested
 +        }
 +        else
 +        {
 +            gnc_commodity *commodity = NULL;
 +
 +            /* gain/loss accts must be in book-currency; if a book currency has been
 +               specified in the widget, use it to filter */
 +            if (gtk_combo_box_get_active (GTK_COMBO_BOX(book_currency_data->book_currency_widget)) != -1)
 +                commodity = gnc_currency_edit_get_currency(
 +                                GNC_CURRENCY_EDIT(
 +                                    book_currency_data->book_currency_widget));
 +            if (commodity)
 +            {
 +                if (gnc_commodity_equal(xaccAccountGetCommodity(account),
 +                                    commodity))
 +                {
 +                    gain_loss_accounts_in_filter++;
 +                    return TRUE;
 +                }
 +                else return FALSE;
 +            }
 +            /* else use the default currency */
 +            else if (gnc_commodity_equal(xaccAccountGetCommodity(account),
 +                                gnc_default_currency()))
 +            {
 +                gain_loss_accounts_in_filter++;
 +                return TRUE;
 +            }
 +            else return FALSE;
 +        }
 +    }
 +    else return FALSE;
 +}
 +
 +static gboolean
 +gnc_gain_loss_account_all_fail_filter (Account  *account, gpointer  data)
 +{
 +    return FALSE;
 +}
 +
 +void
 +gnc_set_default_cost_policy_widget(SCM list_symbol)
 +{
 +    GList *list_of_policies = gnc_get_valid_policy_list();
 +
 +    if (list_of_policies)
 +    {
 +        GList *l = NULL;
 +        gint i = 0;
 +        for (l = list_of_policies; l != NULL; l = l->next)
 +        {
 +            GNCPolicy *pcy = l->data;
 +            if (g_strcmp0(PolicyGetName (pcy),
 +                               gnc_scm_symbol_to_locale_string(list_symbol))
 +                               == 0)
 +            {
 +                /* GtkComboBox per-item tooltip changes needed below */
 +                gnc_combott_set_active(
 +                    GNC_COMBOTT(
 +                        book_currency_data->default_cost_policy_widget), i);
 +            }
 +            i++;
 +        }
 +        g_list_free(list_of_policies);
 +    }
 +    else
 +    {
 +        gnc_combott_set_active (
 +            GNC_COMBOTT(book_currency_data->default_cost_policy_widget), -1);
 +    }
 +}
 +
 +void
 +gnc_set_default_gain_loss_account_widget(gnc_commodity *commodity)
 +{
 +    if (book_currency_data->default_gain_loss_account_widget)
 +    {
 +        gtk_widget_destroy (
 +                    book_currency_data->default_gain_loss_account_widget);
 +        book_currency_data->default_gain_loss_account_widget = NULL;
 +        book_currency_data->prior_gain_loss_account = NULL;
 +        gain_loss_accounts_in_filter = 0;
 +    }
 +    if (book_currency_data->gain_loss_account_del_button)
 +    {
 +        gtk_widget_destroy (
 +                    book_currency_data->gain_loss_account_del_button);
 +        book_currency_data->gain_loss_account_del_button = NULL;
 +    }
 +    if (book_currency_data->default_gain_loss_account_text)
 +    {
 +        gtk_widget_destroy (
 +                    book_currency_data->default_gain_loss_account_text);
 +        book_currency_data->default_gain_loss_account_text = NULL;
 +    }
 +    if (gnc_is_new_book())
 +    {
 +        book_currency_data->default_gain_loss_account_text =
 +                    gtk_label_new( _("Because no accounts have " \
 +                        "been set up yet,you will need to return to this " \
 +                        "dialog (via File->Properties), after account setup, " \
 +                        "if you want to set a default gain/loss account.") );
 +
 +        gtk_label_set_line_wrap (GTK_LABEL(book_currency_data->default_gain_loss_account_text), TRUE);
 +
 +        gtk_grid_attach (GTK_GRID(book_currency_data->gain_loss_account_table),
 +                                  book_currency_data->default_gain_loss_account_text, 0, 1, 2, 1);
 +    }
 +    else
 +    {
 +        GtkTreeSelection *selection = NULL;
 +        book_currency_data->default_gain_loss_account_widget =
 +                            GTK_WIDGET(gnc_tree_view_account_new(FALSE));
 +        gain_loss_accounts_in_filter = 0;
 +        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(
 +                        book_currency_data->default_gain_loss_account_widget));
 +        if (!commodity) // that means not book currency
 +        {
 +            /* set the default_gain_loss_account_widget to be blank with a
 +               no-acct filter */
 +            gnc_tree_view_account_set_filter(GNC_TREE_VIEW_ACCOUNT (
 +                        book_currency_data->default_gain_loss_account_widget),
 +                        gnc_gain_loss_account_all_fail_filter,
 +                        NULL,  /* user data */
 +                        NULL  /* destroy callback */ );
 +            gtk_tree_selection_unselect_all (selection);
 +        }
 +        else // that means book currency
 +        {
 +            /* see if there are any accounts after filter */
 +            gnc_tree_view_account_set_filter(GNC_TREE_VIEW_ACCOUNT (
 +                        book_currency_data->default_gain_loss_account_widget),
 +                        gnc_gain_loss_account_view_filter,
 +                        NULL, /* user data */
 +                        NULL  /* destroy callback */);
 +            if (gain_loss_accounts_in_filter > 0)
 +            {   /* there are accounts; find out if one is selected */
 +                Account *gain_loss_account = NULL;
 +                Account *selected_account = NULL;
 +                GtkTreeViewColumn *col;
 +
 +                book_currency_data->gain_loss_account_del_button =
 +                        gtk_button_new_with_label( _("Select no account") );
 +
 +                g_signal_connect (GTK_BUTTON (
 +                        book_currency_data->gain_loss_account_del_button),
 +                        "clicked",
 +                        G_CALLBACK (
 +                            gnc_option_changed_gain_loss_account_del_button_widget_cb),
 +                        NULL);
 +                gtk_grid_attach (GTK_GRID(book_currency_data->gain_loss_account_table),
 +                                          book_currency_data->gain_loss_account_del_button, 1, 0, 1, 1);
 +
 +                gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(
 +                        book_currency_data->default_gain_loss_account_widget),
 +                        TRUE);
 +                col = 
 +                    gnc_tree_view_add_text_column(GNC_TREE_VIEW(
 +                        book_currency_data->default_gain_loss_account_widget),
 +                         _("Currency"), /* title */
 +                        "commodity", /* pref name */
 +                        NULL,
 +                        "Currency--", /* sizing text */
 +                        GNC_TREE_MODEL_ACCOUNT_COL_COMMODITY,
 +                        GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
 +                        NULL);
 +                g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE,
 +                    GINT_TO_POINTER(1));
 +
 +                // add the color background data function to the column
 +                gnc_tree_view_account_column_add_color (GNC_TREE_VIEW_ACCOUNT(
 +                         book_currency_data->default_gain_loss_account_widget), col);
 +
 +                col =
 +                    gnc_tree_view_add_toggle_column(GNC_TREE_VIEW(
 +                        book_currency_data->default_gain_loss_account_widget),
 +                        _("Placeholder"),
 +                        /* Translators: This string has a context prefix; the
 +                           translation must only contain the part after
 +                           the | character. */
 +                        Q_("Column letter for 'Placeholder'|P"),
 +                        "placeholder",
 +                        GNC_TREE_MODEL_ACCOUNT_COL_PLACEHOLDER,
 +                        GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
 +                        NULL,
 +                        NULL);
 +                g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE,
 +                    GINT_TO_POINTER(1));
 +
 +                // add the color background data function to the column
 +                gnc_tree_view_account_column_add_color (GNC_TREE_VIEW_ACCOUNT(
 +                         book_currency_data->default_gain_loss_account_widget), col);
 +
 +                gnc_tree_view_configure_columns (GNC_TREE_VIEW(
 +                        book_currency_data->default_gain_loss_account_widget));
 +                gnc_tree_view_set_show_column_menu(GNC_TREE_VIEW(
 +                        book_currency_data->default_gain_loss_account_widget),
 +                        FALSE);
 +                if (book_currency_data->retrieved_gain_loss_acct_guid_scm &&
 +                    (scm_is_string(
 +                        book_currency_data->retrieved_gain_loss_acct_guid_scm)))
 +                {
 +                    GncGUID *guid= g_new (GncGUID, 1);
 +
 +                    if (string_to_guid (
 +                        gnc_scm_to_utf8_string(
 +                        book_currency_data->retrieved_gain_loss_acct_guid_scm),
 +                        guid))
 +                    gain_loss_account =
 +                                xaccAccountLookup(guid, gnc_get_current_book());
 +                    g_free (guid);
 +                }
 +                if (gain_loss_account)
 +                {
 +                    (gnc_tree_view_account_set_selected_account
 +                        (GNC_TREE_VIEW_ACCOUNT(
 +                          book_currency_data->default_gain_loss_account_widget),
 +                        gain_loss_account));
 +                    selected_account =
 +                        gnc_tree_view_account_get_selected_account(
 +                            GNC_TREE_VIEW_ACCOUNT (
 +                            book_currency_data->default_gain_loss_account_widget));
 +                }
 +                if (selected_account)
 +                {
 +                    book_currency_data->prior_gain_loss_account =
 +                        selected_account;
 +                    gtk_widget_set_sensitive(
 +                        book_currency_data->gain_loss_account_del_button,
 +                        TRUE);
 +                }
 +                else /* none selected */
 +                {
 +                    gtk_tree_selection_unselect_all (selection);
 +                    gtk_widget_set_sensitive(
 +                        book_currency_data->gain_loss_account_del_button,
 +                        FALSE);
 +                }
 +            }
 +            else /* no accts in widget?; replace widget with text */
 +            {
 +                gtk_widget_destroy (
 +                    book_currency_data->default_gain_loss_account_widget);
 +                book_currency_data->default_gain_loss_account_widget = NULL;
 +                book_currency_data->prior_gain_loss_account = NULL;
 +                gain_loss_accounts_in_filter = 0;
 +                book_currency_data->default_gain_loss_account_text =
 +                    gtk_label_new( _("There are no income " \
 +                        "or expense accounts of the specified\n" \
 +                        "book currency; you will have to return to this " \
 +                        "dialog\n(via File->Properties), after account setup, " \
 +                        "to select a\ndefault gain/loss account.") );
 +                gtk_grid_attach (GTK_GRID(book_currency_data->gain_loss_account_table),
 +                                          book_currency_data->default_gain_loss_account_text, 0, 1, 2, 1);
 +            }
 +        }
 +        if (book_currency_data->default_gain_loss_account_widget)
 +        {
 +            gtk_widget_set_hexpand (GTK_WIDGET(book_currency_data->default_gain_loss_account_widget), TRUE);
 +            g_signal_connect (G_OBJECT (selection),
 +                        "changed",
 +                        G_CALLBACK (gnc_option_changed_gain_loss_account_widget_cb),
 +                        NULL);
 +            gtk_grid_attach (GTK_GRID(book_currency_data->gain_loss_account_table),
 +                                      book_currency_data->default_gain_loss_account_widget, 0, 1, 2, 1);
 +
 +        }
 +    }
 +}
 +
 +void
 +gnc_option_changed_book_currency_widget_cb(GtkWidget *widget)
 +{
 +    /* Once the book currency widget is set, need to set the
 +       default_gain_loss_account_widget and/or del-button or text*/
 +    if (gtk_combo_box_get_active (GTK_COMBO_BOX(book_currency_data->book_currency_widget)) != -1)
 +    {
 +        gnc_commodity *commodity = gnc_currency_edit_get_currency(
 +                                GNC_CURRENCY_EDIT(
 +                                    book_currency_data->book_currency_widget));
 +
 +        gnc_set_default_gain_loss_account_widget(commodity);
 +    }
 +    gtk_widget_show_all(book_currency_data->book_currency_vbox);
 +    gnc_option_changed_widget_cb(widget, book_currency_data->option);
 +}
 +
 +void
 +gnc_option_changed_gain_loss_account_widget_cb (GtkTreeSelection *selection,
 +                                                    gpointer data)
 +{
 +    Account *account = NULL;
 +    gboolean new_eq_prior_acct = FALSE;
 +
 +    g_return_if_fail (book_currency_data->default_gain_loss_account_widget);
 +    account = gnc_tree_view_account_get_selected_account (
 +                    GNC_TREE_VIEW_ACCOUNT (
 +                        book_currency_data->default_gain_loss_account_widget));
 +    if (account && book_currency_data->prior_gain_loss_account)
 +        new_eq_prior_acct = xaccAccountEqual(account,
 +                                book_currency_data->prior_gain_loss_account,
 +                                TRUE);
 +    if (account && (!new_eq_prior_acct))
 +    { /* a new account has been selected */
 +        if (!xaccAccountGetPlaceholder(account))
 +        {
 +            GtkWidget *option_widget =
 +                        gnc_option_get_gtk_widget (book_currency_data->option);
 +            book_currency_data->prior_gain_loss_account = account;
 +            gtk_widget_set_sensitive(
 +                    book_currency_data->gain_loss_account_del_button, TRUE);
 +            gtk_widget_show_all(book_currency_data->book_currency_vbox);
 +            gnc_option_changed_option_cb(option_widget, book_currency_data->option);
 +        }
 +        else /*  new account, but placeholder */
 +        {
 +            const char *message = _("You have selected a placeholder " \
 +                        "account, which is shown so that child accounts " \
 +                        "are displayed, but is invalid. Please select " \
 +                        "another account. (You can expand the tree below " \
 +                        "the placeholder account by clicking on the arrow " \
 +                        "to the left.)");
 +
 +            gnc_error_dialog(NULL, "%s", message);
 +            if (book_currency_data->prior_gain_loss_account)
 +            {
 +                (gnc_tree_view_account_set_selected_account
 +                    (GNC_TREE_VIEW_ACCOUNT(
 +                          book_currency_data->default_gain_loss_account_widget),
 +                        book_currency_data->prior_gain_loss_account));
 +            }
 +            else
 +            {
 +                gtk_tree_selection_unselect_all (selection);
 +            }
 +        }
 +    }
 +    else /* a new account has not been selected */
 +    {
 +        if (book_currency_data->prior_gain_loss_account == NULL)
 +        {
 +            gtk_tree_selection_unselect_all (selection);
 +            if (book_currency_data->gain_loss_account_del_button)
 +            {
 +                gtk_widget_set_sensitive(
 +                    book_currency_data->gain_loss_account_del_button, FALSE);
 +            }
 +        }
 +    }
 +}
 +
 +void
 +gnc_option_changed_gain_loss_account_del_button_widget_cb (GtkButton *button, gpointer data)
 +{
 +    GtkTreeSelection *selection = NULL;
 +    GtkWidget *option_widget =
 +                        gnc_option_get_gtk_widget (book_currency_data->option);
 +
 +    g_return_if_fail (book_currency_data->default_gain_loss_account_widget);
 +    g_return_if_fail (book_currency_data->gain_loss_account_del_button);
 +
 +    selection = gtk_tree_view_get_selection (
 +                    GTK_TREE_VIEW (
 +                        book_currency_data->default_gain_loss_account_widget));
 +    gtk_tree_selection_unselect_all (selection);
 +    book_currency_data->prior_gain_loss_account = NULL;
 +    gtk_widget_set_sensitive(
 +                    book_currency_data->gain_loss_account_del_button, FALSE);
 +    gnc_option_changed_option_cb(option_widget, book_currency_data->option);
 +}
 +
 +static void
 +gnc_option_currency_accounting_non_book_cb(GtkWidget *widget, gpointer data)
 +{
 +    gnc_currency_edit_clear_display (GNC_CURRENCY_EDIT(
 +                                     book_currency_data->book_currency_widget));
 +    gnc_combott_set_active(GNC_COMBOTT(
 +                                book_currency_data->default_cost_policy_widget),
 +                                -1);
 +    gnc_set_default_gain_loss_account_widget(NULL);
 +    gtk_widget_show_all(book_currency_data->book_currency_vbox);
 +    gtk_widget_set_sensitive(book_currency_data->book_currency_vbox, FALSE);
 +    gnc_option_radiobutton_cb(widget, (gpointer) book_currency_data->option);
 +}
 +
 +static void
 +gnc_option_currency_accounting_book_cb(GtkWidget *widget, gpointer data)
 +{
 +    SCM list_symbol =
 +            gnc_currency_accounting_option_get_default_policy(
 +                                                    book_currency_data->option);
 +    SCM curr_scm = gnc_currency_accounting_option_get_default_currency(
 +                                                    book_currency_data->option);
 +    gnc_commodity *commodity = gnc_scm_to_commodity (curr_scm);
 +
 +    if (book_currency_data->retrieved_book_currency)
 +    {
 +        gnc_currency_edit_set_currency
 +                (GNC_CURRENCY_EDIT(book_currency_data->book_currency_widget),
 +                    book_currency_data->retrieved_book_currency);
 +    }
 +    else if (commodity)
 +    {
 +        gnc_currency_edit_set_currency
 +                (GNC_CURRENCY_EDIT(book_currency_data->book_currency_widget),
 +                    commodity);
 +    }
 +    else
 +    {
 +        gnc_currency_edit_set_currency
 +                (GNC_CURRENCY_EDIT(book_currency_data->book_currency_widget),
 +                    gnc_default_currency());
 +    }
 +    if (book_currency_data->retrieved_policy_scm)
 +    {
 +        gnc_set_default_cost_policy_widget(
 +                                      book_currency_data->retrieved_policy_scm);
 +    }
 +    else
 +    {
 +        gnc_set_default_cost_policy_widget(list_symbol);
 +    }
 +    gtk_widget_show_all(book_currency_data->book_currency_vbox);
 +    gtk_widget_set_sensitive(book_currency_data->book_currency_vbox, TRUE);
 +    gnc_option_radiobutton_cb(widget, (gpointer) book_currency_data->option);
 +}
 +
 +static GtkWidget *
 +gnc_option_create_date_widget (GNCOption *option)
 +{
 +    GtkWidget * box = NULL;
 +    GtkWidget *rel_button = NULL, *ab_button = NULL;
 +    GtkWidget *rel_widget = NULL, *ab_widget = NULL;
 +    GtkWidget *entry;
 +    gboolean show_time, use24;
 +    char *type;
 +    int num_values;
 +
 +    type = gnc_option_date_option_get_subtype(option);
 +    show_time = gnc_option_show_time(option);
 +    use24 = gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_CLOCK_24H);
 +
 +    if (g_strcmp0(type, "relative") != 0)
 +    {
 +        ab_widget = gnc_date_edit_new(time(NULL), show_time, use24);
 +        entry = GNC_DATE_EDIT(ab_widget)->date_entry;
 +        g_signal_connect(G_OBJECT(entry), "changed",
 +                         G_CALLBACK(gnc_option_changed_option_cb), option);
 +        if (show_time)
 +        {
 +            entry = GNC_DATE_EDIT(ab_widget)->time_entry;
 +            g_signal_connect(G_OBJECT(entry), "changed",
 +                             G_CALLBACK(gnc_option_changed_option_cb), option);
 +        }
 +    }
 +
 +    if (g_strcmp0(type, "absolute") != 0)
 +    {
 +        int i;
 +        num_values = gnc_option_num_permissible_values(option);
 +
 +        g_return_val_if_fail(num_values >= 0, NULL);
 +
 +        {
 +            /* GtkComboBox still does not support per-item tooltips, so have
 +               created a basic one called Combott implemented in gnc-combott.
 +               Have highlighted changes in this file with comments for when
 +               the feature of per-item tooltips is implemented in gtk,
 +               see http://bugzilla.gnome.org/show_bug.cgi?id=303717 */
 +
 +            GtkListStore *store;
 +            GtkTreeIter  iter;
 +
 +            char *itemstring;
 +            char *description;
 +            store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
 +            /* Add values to the list store, entry and tooltip */
 +            for (i = 0; i < num_values; i++)
 +            {
 +                itemstring = gnc_option_permissible_value_name(option, i);
 +                description = gnc_option_permissible_value_description(option, i);
 +                gtk_list_store_append (store, &iter);
 +                gtk_list_store_set (store, &iter, 0, itemstring, 1, description, -1);
 +                if (itemstring)
 +                    g_free(itemstring);
 +                if (description)
 +                    g_free(description);
 +            }
 +            /* Create the new Combo with tooltip and add the store */
 +            rel_widget = GTK_WIDGET(gnc_combott_new());
 +            g_object_set( G_OBJECT(rel_widget), "model", GTK_TREE_MODEL(store), NULL );
 +            g_object_unref(store);
 +
 +            g_signal_connect(G_OBJECT(rel_widget), "changed",
 +                             G_CALLBACK(gnc_option_multichoice_cb), option);
 +        }
 +    }
 +
 +    if (g_strcmp0(type, "absolute") == 0)
 +    {
 +        free(type);
 +        gnc_option_set_widget (option, ab_widget);
 +        return ab_widget;
 +    }
 +    else if (g_strcmp0(type, "relative") == 0)
 +    {
 +        gnc_option_set_widget (option, rel_widget);
 +        free(type);
 +
 +        return rel_widget;
 +    }
 +    else if (g_strcmp0(type, "both") == 0)
 +    {
 +        box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +        gtk_box_set_homogeneous (GTK_BOX (box), FALSE);
 +
 +        ab_button = gtk_radio_button_new(NULL);
 +        g_signal_connect(G_OBJECT(ab_button), "toggled",
 +                         G_CALLBACK(gnc_rd_option_ab_set_cb), option);
 +
 +        rel_button = gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(ab_button));
 +        g_signal_connect(G_OBJECT(rel_button), "toggled",
 +                         G_CALLBACK(gnc_rd_option_rel_set_cb), option);
 +
 +        gtk_box_pack_start(GTK_BOX(box), ab_button, FALSE, FALSE, 0);
 +        gtk_box_pack_start(GTK_BOX(box), ab_widget, FALSE, FALSE, 0);
 +        gtk_box_pack_start(GTK_BOX(box), rel_button, FALSE, FALSE, 0);
 +        gtk_box_pack_start(GTK_BOX(box), rel_widget, FALSE, FALSE, 0);
 +
 +        free(type);
 +
 +        gnc_option_set_widget (option, box);
 +
 +        return box;
 +    }
 +    else /* can't happen */
 +    {
 +        return NULL;
 +    }
 +}
 +
 +static GtkWidget *
 +gnc_option_create_budget_widget(GNCOption *option)
 +{
 +    GtkTreeModel *tm;
 +    GtkComboBox *cb;
 +    GtkCellRenderer *cr;
 +
 +    tm = gnc_tree_model_budget_new(gnc_get_current_book());
 +    cb = GTK_COMBO_BOX(gtk_combo_box_new_with_model(tm));
 +    g_object_unref(tm);
 +    cr = gtk_cell_renderer_text_new();
 +    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(cb), cr, TRUE);
 +
 +    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cb), cr, "text",
 +                                   BUDGET_NAME_COLUMN, NULL);
 +    return GTK_WIDGET(cb);
 +}
 +
 +static GtkWidget *
 +gnc_option_create_multichoice_widget(GNCOption *option)
 +{
 +    GtkWidget *widget;
 +    int num_values;
 +    int i;
 +
 +    num_values = gnc_option_num_permissible_values(option);
 +
 +    g_return_val_if_fail(num_values >= 0, NULL);
 +
 +    {
 +        /* GtkComboBox still does not support per-item tooltips, so have
 +           created a basic one called Combott implemented in gnc-combott.
 +           Have highlighted changes in this file with comments for when
 +           the feature of per-item tooltips is implemented in gtk,
 +           see http://bugzilla.gnome.org/show_bug.cgi?id=303717 */
 +        GtkListStore *store;
 +        GtkTreeIter  iter;
 +
 +        char *itemstring;
 +        char *description;
 +        store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
 +        /* Add values to the list store, entry and tooltip */
 +        for (i = 0; i < num_values; i++)
 +        {
 +            itemstring = gnc_option_permissible_value_name(option, i);
 +            description = gnc_option_permissible_value_description(option, i);
 +            gtk_list_store_append (store, &iter);
 +            gtk_list_store_set (store, &iter, 0,
 +                                (itemstring && *itemstring) ? _(itemstring) : "", 1,
 +                                (description && *description) ? _(description) : "", -1);
 +            if (itemstring)
 +                g_free(itemstring);
 +            if (description)
 +                g_free(description);
 +        }
 +        /* Create the new Combo with tooltip and add the store */
 +        widget = GTK_WIDGET(gnc_combott_new());
 +        g_object_set( G_OBJECT( widget ), "model", GTK_TREE_MODEL(store), NULL );
 +        g_object_unref(store);
 +
 +        g_signal_connect(G_OBJECT(widget), "changed",
 +                         G_CALLBACK(gnc_option_multichoice_cb), option);
 +    }
 +
 +    return widget;
 +}
 +
 +static GtkWidget *
 +gnc_option_create_radiobutton_widget(char *name, GNCOption *option)
 +{
 +    GtkWidget *frame, *box;
 +    GtkWidget *widget = NULL;
 +    int num_values;
 +    char *label;
 +    char *tip;
 +    int i;
 +
 +    num_values = gnc_option_num_permissible_values(option);
 +
 +    g_return_val_if_fail(num_values >= 0, NULL);
 +
 +    /* Create our button frame */
 +    frame = gtk_frame_new (name);
 +
 +    /* Create the button box */
 +    box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (box), FALSE);
 +    gtk_container_add (GTK_CONTAINER (frame), box);
 +
 +    /* Iterate over the options and create a radio button for each one */
 +    for (i = 0; i < num_values; i++)
 +    {
 +        label = gnc_option_permissible_value_name(option, i);
 +        tip = gnc_option_permissible_value_description(option, i);
 +
 +        widget =
 +            gtk_radio_button_new_with_label_from_widget (widget ?
 +                    GTK_RADIO_BUTTON (widget) :
 +                    NULL,
 +                    label && *label ? _(label) : "");
 +        g_object_set_data (G_OBJECT (widget), "gnc_radiobutton_index",
 +                           GINT_TO_POINTER (i));
 +        gtk_widget_set_tooltip_text(widget, tip && *tip ? _(tip) : "");
 +        g_signal_connect(G_OBJECT(widget), "toggled",
 +                         G_CALLBACK(gnc_option_radiobutton_cb), option);
 +        gtk_box_pack_start (GTK_BOX (box), widget, FALSE, FALSE, 0);
 +
 +        if (label)
 +            free (label);
 +        if (tip)
 +            free (tip);
 +    }
 +
 +    return frame;
 +}
 +
 +static GtkWidget *
 +gnc_option_create_currency_accounting_widget (char *name, GNCOption *option)
 +{
 +    GtkWidget *frame = NULL,
 +              *widget = NULL,
 +              *vbox = NULL;
 +    int i;
 +    int num_values = gnc_option_num_permissible_values(option);
 +
 +    g_return_val_if_fail(num_values == 3, NULL);
 +    book_currency_data = g_new0 (currency_accounting_data, 1);
 +    book_currency_data->option = option;
 +
 +    /* Create the button frame */
 +    frame = gtk_frame_new (name);
 +    gtk_widget_set_halign (GTK_WIDGET(frame), GTK_ALIGN_FILL);
 +    gtk_widget_set_hexpand (GTK_WIDGET(frame), TRUE);
 +
 +    /* Create the verticle button box */
 +    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE);
 +    gtk_container_add (GTK_CONTAINER (frame), vbox);
 +    gtk_widget_set_halign (GTK_WIDGET(vbox), GTK_ALIGN_FILL);
 +    gtk_widget_set_hexpand (GTK_WIDGET(vbox), TRUE);
 +
 +#if GTK_CHECK_VERSION(3,12,0)
 +    gtk_widget_set_margin_end (GTK_WIDGET(vbox), 12);
 +#else
 +    gtk_widget_set_margin_right (GTK_WIDGET(vbox), 12);
 +#endif
 +    gtk_widget_set_margin_bottom (GTK_WIDGET(vbox), 12);
 +
 +    /* Iterate over the three options and create a radio button for each one */
 +    for (i = 0; i < num_values; i++)
 +    {
 +        char *label;
 +        char *tip;
 +        GtkWidget *table = NULL;
 +
 +        label = gnc_option_permissible_value_name(option, i);
 +        tip = gnc_option_permissible_value_description(option, i);
 +
 +        widget =
 +            gtk_radio_button_new_with_label_from_widget (widget ?
 +                    GTK_RADIO_BUTTON (widget) :
 +                    NULL,
 +                    label && *label ? _(label) : "");
 +        g_object_set_data (G_OBJECT (widget), "gnc_radiobutton_index",
 +                           GINT_TO_POINTER (i));
 +        switch (i)
 +        {
 +        case 0:
 +            book_currency_data->gnc_currency_radiobutton_0 = widget;
 +            break;
 +
 +        case 1:
 +            book_currency_data->gnc_currency_radiobutton_1 = widget;
 +            break;
 +
 +        case 2:
 +            book_currency_data->gnc_currency_radiobutton_2 = widget;
 +            break;
 +
 +        default:
 +            break;
 +        }
 +        gtk_widget_set_tooltip_text(widget, tip && *tip ? _(tip) : "");
 +        if (g_strcmp0(gnc_option_permissible_value_name(option, i),
 +                                                    "Use a Book Currency") == 0)
 +        {
 +            GtkWidget *widget_label,
 +                      *policy_table = gtk_grid_new();
 +
 +            book_currency_data->book_currency_widget = gnc_currency_edit_new();
 +            book_currency_data->default_cost_policy_widget =
 +                                    gnc_cost_policy_select_new();
 +            book_currency_data->default_gain_loss_account_widget = NULL;
 +            book_currency_data->gain_loss_account_del_button = NULL;
 +            book_currency_data->default_gain_loss_account_text = NULL;
 +            book_currency_data->prior_gain_loss_account = NULL;
 +
 +            book_currency_data->book_currency_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
 +            gtk_box_set_homogeneous (GTK_BOX (book_currency_data->book_currency_vbox), FALSE);
 +
 +            table = gtk_grid_new ();
 +            gtk_grid_attach (GTK_GRID(table), widget, 0, 0, 2, 1);
 +            g_signal_connect(G_OBJECT(widget), "toggled",
 +                         G_CALLBACK(gnc_option_currency_accounting_book_cb),
 +                         book_currency_data);
 +
 +            book_currency_data->book_currency_table = gtk_grid_new ();
 +            gtk_grid_set_row_spacing (GTK_GRID (book_currency_data->book_currency_table), 6);
 +            gtk_grid_set_column_spacing (GTK_GRID (book_currency_data->book_currency_table), 6);
 +
 +            tip = gnc_currency_accounting_option_currency_documentation(option);
 +            widget_label = gtk_label_new( _("Book currency:") );
 +            gtk_widget_set_tooltip_text(book_currency_data->book_currency_table,
 +                        tip && *tip ? _(tip) : "");
 +
 +            gtk_widget_set_halign (GTK_WIDGET(widget_label), GTK_ALIGN_START);
 +            gtk_widget_set_hexpand (GTK_WIDGET(widget_label), TRUE);
 +
 +            gtk_grid_attach (GTK_GRID(book_currency_data->book_currency_table), widget_label, 0, 0, 1, 1);
 +
 +            g_signal_connect(G_OBJECT(book_currency_data->book_currency_widget),
 +                             "changed",
 +                             G_CALLBACK(gnc_option_changed_book_currency_widget_cb),
 +                             NULL);
 +
 +            gtk_grid_attach (GTK_GRID(book_currency_data->book_currency_table),
 +                                      book_currency_data->book_currency_widget, 1, 0, 1, 1);
 +
 +            gtk_box_pack_start (GTK_BOX (book_currency_data->book_currency_vbox),
 +                                         book_currency_data->book_currency_table,
 +                                         TRUE, TRUE, 0);
 +#if GTK_CHECK_VERSION(3,12,0)
 +            gtk_widget_set_margin_start (GTK_WIDGET(book_currency_data->book_currency_table), 12);
 +#else
 +            gtk_widget_set_margin_left (GTK_WIDGET(book_currency_data->book_currency_table), 12);
 +#endif
 +            gtk_grid_set_row_spacing (GTK_GRID (policy_table), 6);
 +            gtk_grid_set_column_spacing (GTK_GRID (policy_table), 6);
 +
 +            tip = gnc_currency_accounting_option_policy_documentation(option);
 +            widget_label = gtk_label_new( _("Default lot tracking policy:") );
 +            gtk_widget_set_tooltip_text(policy_table, tip && *tip ? _(tip) : "");
 +
 +            gtk_widget_set_halign (GTK_WIDGET(widget_label), GTK_ALIGN_START);
 +            gtk_widget_set_hexpand (GTK_WIDGET(widget_label), TRUE);
 +
 +            gtk_grid_attach (GTK_GRID(policy_table), widget_label, 0, 1, 1, 1);
 +
 +            g_signal_connect(G_OBJECT(
 +                             book_currency_data->default_cost_policy_widget),
 +                             "changed",
 +                             G_CALLBACK(gnc_option_multichoice_cb), option);
 +
 +            gtk_grid_attach (GTK_GRID(policy_table),
 +                             book_currency_data->default_cost_policy_widget, 1, 1, 1, 1);
 +
 +            gtk_box_pack_start (GTK_BOX (book_currency_data->book_currency_vbox),
 +                                         policy_table, TRUE, TRUE, 0);
 +#if GTK_CHECK_VERSION(3,12,0)
 +            gtk_widget_set_margin_start (GTK_WIDGET(policy_table), 12);
 +#else
 +            gtk_widget_set_margin_left (GTK_WIDGET(policy_table), 12);
 +#endif
 +            book_currency_data->gain_loss_account_table = gtk_grid_new ();
 +            gtk_grid_set_row_spacing (GTK_GRID (book_currency_data->gain_loss_account_table), 6);
 +            gtk_grid_set_column_spacing (GTK_GRID (book_currency_data->gain_loss_account_table), 6);
 +
 +            tip = gnc_currency_accounting_option_gain_loss_account_documentation(option);
 +            widget_label = gtk_label_new( _("Default gain/loss account:") );
 +            gnc_label_set_alignment (GTK_WIDGET(widget_label), 0.0, 0.5);
 +
 +            gtk_widget_set_tooltip_text(book_currency_data->gain_loss_account_table,
 +                                        tip && *tip ? _(tip) : "");
 +
 +            gtk_grid_attach (GTK_GRID(book_currency_data->gain_loss_account_table), widget_label, 0, 0, 1, 1);
 +
 +            widget_label = NULL;
 +            gtk_box_pack_start (GTK_BOX (book_currency_data->book_currency_vbox),
 +                                book_currency_data->gain_loss_account_table,
 +                                TRUE, TRUE, 0);
 +#if GTK_CHECK_VERSION(3,12,0)
 +            gtk_widget_set_margin_start (GTK_WIDGET(book_currency_data->gain_loss_account_table), 12);
 +#else
 +            gtk_widget_set_margin_left (GTK_WIDGET(book_currency_data->gain_loss_account_table), 12);
 +#endif
 +            gtk_grid_attach (GTK_GRID(table), book_currency_data->book_currency_vbox, 1, 2, 1, 1);
 +        }
 +        else /* trading or neither */
 +        {
 +            table = gtk_grid_new ();
 +            gtk_grid_attach (GTK_GRID(table), widget, 0, 1, 1, 1);
 +
 +            g_signal_connect(G_OBJECT(widget), "toggled",
 +                             G_CALLBACK(gnc_option_currency_accounting_non_book_cb),
 +                             book_currency_data);
 +        }
 +        gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
 +
 +        if (label)
 +            free (label);
 +        if (tip)
 +            free (tip);
 +    }
 +    return frame;
 +}
 +
 +static void
 +gnc_option_account_cb(GtkTreeSelection *selection, gpointer data)
 +{
 +    GNCOption *option = data;
 +    GtkTreeView *tree_view;
 +
 +    tree_view = gtk_tree_selection_get_tree_view(selection);
 +
 +    gnc_option_changed_widget_cb(GTK_WIDGET(tree_view), option);
 +}
 +
 +static void
 +gnc_option_account_select_all_cb(GtkWidget *widget, gpointer data)
 +{
 +    GNCOption *option = data;
 +    GncTreeViewAccount *tree_view;
 +    GtkTreeSelection *selection;
 +
 +    tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option));
 +    gtk_tree_view_expand_all(GTK_TREE_VIEW(tree_view));
 +    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
 +    gtk_tree_selection_select_all(selection);
 +    gnc_option_changed_widget_cb(widget, option);
 +}
 +
 +static void
 +gnc_option_account_clear_all_cb(GtkWidget *widget, gpointer data)
 +{
 +    GNCOption *option = data;
 +    GncTreeViewAccount *tree_view;
 +    GtkTreeSelection *selection;
 +
 +    tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option));
 +    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
 +    gtk_tree_selection_unselect_all(selection);
 +    gnc_option_changed_widget_cb(widget, option);
 +}
 +
 +static void
 +gnc_option_account_select_children_cb(GtkWidget *widget, gpointer data)
 +{
 +    GNCOption *option = data;
 +    GncTreeViewAccount *tree_view;
 +    GList *acct_list = NULL, *acct_iter = NULL;
 +
 +    tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option));
 +    acct_list = gnc_tree_view_account_get_selected_accounts (tree_view);
 +
 +    for (acct_iter = acct_list; acct_iter; acct_iter = acct_iter->next)
 +        gnc_tree_view_account_select_subaccounts (tree_view, acct_iter->data);
 +
 +    g_list_free (acct_list);
 +}
 +
 +static GtkWidget *
 +gnc_option_create_account_widget(GNCOption *option, char *name)
 +{
 +    gboolean multiple_selection;
 +    GtkWidget *scroll_win;
 +    GtkWidget *button;
 +    GtkWidget *frame;
 +    GtkWidget *tree;
 +    GtkWidget *vbox;
 +    GtkWidget *bbox;
 +    GList *acct_type_list;
 +    GtkTreeSelection *selection;
 +
 +    multiple_selection = gnc_option_multiple_selection(option);
 +    acct_type_list = gnc_option_get_account_type_list(option);
 +
 +    frame = gtk_frame_new(name);
 +
 +    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
 +    gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE);
 +
 +    gtk_container_add(GTK_CONTAINER(frame), vbox);
 +
 +    tree = GTK_WIDGET(gnc_tree_view_account_new (FALSE));
 +    gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(tree), FALSE);
 +    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree));
 +    if (multiple_selection)
 +        gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
 +    else
 +        gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
 +
 +    if (acct_type_list)
 +    {
 +        GList *node;
 +        AccountViewInfo avi;
 +        int i;
 +
 +        gnc_tree_view_account_get_view_info (GNC_TREE_VIEW_ACCOUNT (tree), &avi);
 +
 +        for (i = 0; i < NUM_ACCOUNT_TYPES; i++)
 +            avi.include_type[i] = FALSE;
 +        avi.show_hidden = FALSE;
 +
 +        for (node = acct_type_list; node; node = node->next)
 +        {
 +            GNCAccountType type = GPOINTER_TO_INT (node->data);
 +            avi.include_type[type] = TRUE;
 +        }
 +
 +        gnc_tree_view_account_set_view_info (GNC_TREE_VIEW_ACCOUNT (tree), &avi);
 +        g_list_free (acct_type_list);
 +    }
 +    else
 +    {
 +        AccountViewInfo avi;
 +        int i;
 +
 +        gnc_tree_view_account_get_view_info (GNC_TREE_VIEW_ACCOUNT (tree), &avi);
 +
 +        for (i = 0; i < NUM_ACCOUNT_TYPES; i++)
 +            avi.include_type[i] = TRUE;
 +        avi.show_hidden = FALSE;
 +        gnc_tree_view_account_set_view_info (GNC_TREE_VIEW_ACCOUNT (tree), &avi);
 +    }
 +
 +    scroll_win = gtk_scrolled_window_new(NULL, NULL);
 +    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win),
 +                                   GTK_POLICY_AUTOMATIC,
 +                                   GTK_POLICY_AUTOMATIC);
 +
 +    gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0);
 +    gtk_container_set_border_width(GTK_CONTAINER(scroll_win), 5);
 +    gtk_container_add(GTK_CONTAINER(scroll_win), tree);
 +
 +    bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
 +    gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
 +    gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 10);
 +
 +    if (multiple_selection)
 +    {
 +        button = gtk_button_new_with_label(_("Select All"));
 +        gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
 +        gtk_widget_set_tooltip_text(button, _("Select all accounts."));
 +
 +        g_signal_connect(G_OBJECT(button), "clicked",
 +                         G_CALLBACK(gnc_option_account_select_all_cb), option);
 +
 +        button = gtk_button_new_with_label(_("Clear All"));
 +        gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
 +        gtk_widget_set_tooltip_text(button, _("Clear the selection and unselect all accounts."));
 +
 +        g_signal_connect(G_OBJECT(button), "clicked",
 +                         G_CALLBACK(gnc_option_account_clear_all_cb), option);
 +
 +        button = gtk_button_new_with_label(_("Select Children"));
 +        gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
 +        gtk_widget_set_tooltip_text(button, _("Select all descendents of selected account."));
 +
 +        g_signal_connect(G_OBJECT(button), "clicked",
 +                         G_CALLBACK(gnc_option_account_select_children_cb), option);
 +    }
 +
 +    button = gtk_button_new_with_label(_("Select Default"));
 +    gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
 +    gtk_widget_set_tooltip_text(button, _("Select the default account selection."));
 +
 +    g_signal_connect(G_OBJECT(button), "clicked",
 +                     G_CALLBACK(gnc_option_default_cb), option);
 +
 +    if (multiple_selection)
 +    {
 +        /* Put the "Show hidden" checkbox on a separate line since the 4 buttons make
 +           the dialog too wide. */
 +        bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
 +        gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_START);
 +        gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
 +    }
 +
 +    button = gtk_check_button_new_with_label(_("Show Hidden Accounts"));
 +    gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
 +    gtk_widget_set_tooltip_text(button, _("Show accounts that have been marked hidden."));
 +    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
 +    g_signal_connect(G_OBJECT(button), "toggled",
 +                     G_CALLBACK(gnc_option_show_hidden_toggled_cb), option);
 +
 +    gnc_option_set_widget (option, tree);
 +
 +    return frame;
 +}
 +
 +static void
 +gnc_option_list_changed_cb(GtkTreeSelection *selection,
 +                           GNCOption *option)
 +{
 +    GtkTreeView *view;
 +
 +    view = gtk_tree_selection_get_tree_view(selection);
 +    gnc_option_changed_widget_cb(GTK_WIDGET(view), option);
 +}
 +
 +static void
 +gnc_option_list_select_all_cb(GtkWidget *widget, gpointer data)
 +{
 +    GNCOption *option = data;
 +    GtkTreeView *view;
 +    GtkTreeSelection *selection;
 +
 +    view = GTK_TREE_VIEW(gnc_option_get_gtk_widget (option));
 +    selection = gtk_tree_view_get_selection(view);
 +    gtk_tree_selection_select_all(selection);
 +    gnc_option_changed_widget_cb(GTK_WIDGET(view), option);
 +}
 +
 +static void
 +gnc_option_list_clear_all_cb(GtkWidget *widget, gpointer data)
 +{
 +    GNCOption *option = data;
 +    GtkTreeView *view;
 +    GtkTreeSelection *selection;
 +
 +    view = GTK_TREE_VIEW(gnc_option_get_gtk_widget (option));
 +    selection = gtk_tree_view_get_selection(view);
 +    gtk_tree_selection_unselect_all(selection);
 +    gnc_option_changed_widget_cb(GTK_WIDGET(view), option);
 +}
 +
 +static GtkWidget *
 +gnc_option_create_list_widget(GNCOption *option, char *name)
 +{
 +    GtkListStore *store;
 +    GtkTreeView *view;
 +    GtkTreeIter iter;
 +    GtkTreeViewColumn *column;
 +    GtkCellRenderer *renderer;
 +    GtkTreeSelection *selection;
 +
 +    GtkWidget *button;
 +    GtkWidget *frame;
 +    GtkWidget *hbox;
 +    GtkWidget *bbox;
 +    gint num_values;
 +    gint i;
 +
 +    frame = gtk_frame_new(name);
 +    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
 +    gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
 +    gtk_container_add(GTK_CONTAINER(frame), hbox);
 +
 +    store = gtk_list_store_new(1, G_TYPE_STRING);
 +    view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)));
 +    g_object_unref(store);
 +    renderer = gtk_cell_renderer_text_new();
 +    column = gtk_tree_view_column_new_with_attributes("", renderer,
 +             "text", 0,
 +             NULL);
 +    gtk_tree_view_append_column(view, column);
 +    gtk_tree_view_set_headers_visible(view, FALSE);
 +
 +    num_values = gnc_option_num_permissible_values(option);
 +    for (i = 0; i < num_values; i++)
 +    {
 +        gchar *raw_string, *string;
 +
 +        raw_string = gnc_option_permissible_value_name(option, i);
 +        string = (raw_string && *raw_string) ? _(raw_string) : "";
 +        gtk_list_store_append(store, &iter);
 +        gtk_list_store_set(store, &iter,
 +                           0, string ? string : "",
 +                           -1);
 +        g_free(raw_string);
 +    }
 +
 +    gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(view), FALSE, FALSE, 0);
 +
 +    selection = gtk_tree_view_get_selection(view);
 +    gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
 +    g_signal_connect(selection, "changed",
 +                     G_CALLBACK(gnc_option_list_changed_cb), option);
 +
 +    bbox = gtk_button_box_new (GTK_ORIENTATION_VERTICAL);
 +    gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
 +    gtk_box_pack_start(GTK_BOX(hbox), bbox, FALSE, FALSE, 10);
 +
 +    button = gtk_button_new_with_label(_("Select All"));
 +    gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
 +    gtk_widget_set_tooltip_text(button, _("Select all entries."));
 +
 +    g_signal_connect(G_OBJECT(button), "clicked",
 +                     G_CALLBACK(gnc_option_list_select_all_cb), option);
 +
 +    button = gtk_button_new_with_label(_("Clear All"));
 +    gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
 +    gtk_widget_set_tooltip_text(button, _("Clear the selection and unselect all entries."));
 +
 +    g_signal_connect(G_OBJECT(button), "clicked",
 +                     G_CALLBACK(gnc_option_list_clear_all_cb), option);
 +
 +    button = gtk_button_new_with_label(_("Select Default"));
 +    gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
 +    gtk_widget_set_tooltip_text(button, _("Select the default selection."));
 +
 +    g_signal_connect(G_OBJECT(button), "clicked",
 +                     G_CALLBACK(gnc_option_default_cb), option);
 +
 +    gnc_option_set_widget (option, GTK_WIDGET(view));
 +
 +    return frame;
 +}
 +
 +static void
 +gnc_option_color_changed_cb(GtkColorButton *color_button, GNCOption *option)
 +{
 +    gnc_option_changed_widget_cb(GTK_WIDGET(color_button), option);
 +}
 +
 +static void
 +gnc_option_font_changed_cb(GtkFontButton *font_button, GNCOption *option)
 +{
 +    gnc_option_changed_widget_cb(GTK_WIDGET(font_button), option);
 +}
 +
 +static void
 +gnc_option_set_ui_widget(GNCOption *option,
 +                         GtkBox *page_box)
 +{
 +    GtkWidget *enclosing = NULL;
 +    GtkWidget *value = NULL;
 +    gboolean packed = FALSE;
 +    char *raw_name, *raw_documentation;
 +    char *name, *documentation;
 +    char *type;
 +    GNCOptionDef_t *option_def;
 +
 +    ENTER("option %p(%s), box %p",
 +          option, gnc_option_name(option), page_box);
 +    type = gnc_option_type(option);
 +    if (type == NULL)
 +    {
 +        LEAVE("bad type");
 +        return;
 +    }
++    else if (g_strcmp0 (type, "internal") == 0)
++    {
++        LEAVE("internal type");
++        return;
++    }
 +
 +    raw_name = gnc_option_name(option);
 +    if (raw_name && *raw_name)
 +        name = _(raw_name);
 +    else
 +        name = NULL;
 +
 +    raw_documentation = gnc_option_documentation(option);
 +    if (raw_documentation && *raw_documentation)
 +        documentation = _(raw_documentation);
 +    else
 +        documentation = NULL;
 +
 +    option_def = gnc_options_ui_get_option (type);
 +    if (option_def && option_def->set_widget)
 +    {
 +        value = option_def->set_widget (option, page_box,
 +                                        name, documentation,
 +                                        /* Return values */
 +                                        &enclosing, &packed);
 +    }
 +    else
 +    {
 +        PERR("Unknown option type. Ignoring option \"%s\".\n", name);
 +    }
 +
 +    if (!packed && (enclosing != NULL))
 +    {
 +        /* Pack option widget into an extra eventbox because otherwise the
 +           "documentation" tooltip is not displayed. */
 +        GtkWidget *eventbox = gtk_event_box_new();
 +
 +        gtk_container_add (GTK_CONTAINER (eventbox), enclosing);
 +        gtk_box_pack_start (page_box, eventbox, FALSE, FALSE, 0);
 +
 +        gtk_widget_set_tooltip_text (eventbox, documentation);
 +    }
 +
 +    if (value != NULL)
 +        gtk_widget_set_tooltip_text(value, documentation);
 +
 +    if (raw_name != NULL)
 +        free(raw_name);
 +    if (raw_documentation != NULL)
 +        free(raw_documentation);
 +    free(type);
 +    LEAVE(" ");
 +}
 +
 +static void
 +gnc_options_dialog_add_option(GtkWidget *page,
 +                              GNCOption *option)
 +{
 +    gnc_option_set_ui_widget(option, GTK_BOX(page));
 +}
 +
 +static gint
 +gnc_options_dialog_append_page(GNCOptionWin * propertybox,
 +                               GNCOptionSection *section)
 +{
 +    GNCOption *option;
 +    GtkWidget *page_label;
 +    GtkWidget *options_box;
 +    GtkWidget *page_content_box;
 +    GtkWidget* notebook_page;
 +    GtkWidget *reset_button;
 +    GtkWidget *listitem = NULL;
 +    GtkWidget *buttonbox;
 +    GtkWidget *options_scrolled_win;
 +    GtkTreeView *view;
 +    GtkListStore *list;
 +    GtkTreeIter iter;
 +    gint num_options;
 +    const char *name;
 +    gint i, page_count, name_offset;
 +    gboolean advanced;
 +
 +    name = gnc_option_section_name(section);
 +    if (!name)
 +        return -1;
 +
 +    if (strncmp(name, "__", 2) == 0)
 +        return -1;
 +    advanced = (strncmp(name, "_+", 2) == 0);
 +    name_offset = (advanced) ? 2 : 0;
 +    page_label = gtk_label_new(_(name + name_offset));
 +    PINFO("Page_label is %s", _(name + name_offset));
 +    gtk_widget_show(page_label);
 +
 +    /* Build this options page */
 +    page_content_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
 +    gtk_box_set_homogeneous (GTK_BOX (page_content_box), FALSE);
 +
 +    gtk_container_set_border_width(GTK_CONTAINER(page_content_box), 12);
 +
 +    options_scrolled_win = gtk_scrolled_window_new(NULL, NULL);
 +    gtk_box_pack_start(GTK_BOX(page_content_box), options_scrolled_win, TRUE, TRUE, 0);
 +
 +    /* Build space for the content - the options box */
 +    options_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (options_box), FALSE);
 +
 +    gtk_container_set_border_width(GTK_CONTAINER(options_box), 0);
 +    gtk_container_add (GTK_CONTAINER(options_scrolled_win), GTK_WIDGET(options_box));
 +    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(options_scrolled_win), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
 +
 +    /* Create all the options */
 +    num_options = gnc_option_section_num_options(section);
 +    for (i = 0; i < num_options; i++)
 +    {
 +        option = gnc_get_option_section_option(section, i);
 +        gnc_options_dialog_add_option(options_box, option);
 +    }
 +
 +    /* Add a button box at the bottom of the page */
 +    buttonbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
 +    gtk_button_box_set_layout (GTK_BUTTON_BOX (buttonbox),
 +                               GTK_BUTTONBOX_EDGE);
 +    gtk_container_set_border_width(GTK_CONTAINER (buttonbox), 5);
 +    gtk_box_pack_end(GTK_BOX(page_content_box), buttonbox, FALSE, FALSE, 0);
 +
 +    /* The reset button on each option page */
 +    reset_button = gtk_button_new_with_label (_("Reset defaults"));
 +    gtk_widget_set_tooltip_text(reset_button,
 +                                _("Reset all values to their defaults."));
 +
 +    g_signal_connect(G_OBJECT(reset_button), "clicked",
 +                     G_CALLBACK(gnc_options_dialog_reset_cb), propertybox);
 +    g_object_set_data(G_OBJECT(reset_button), "section", section);
 +    gtk_box_pack_end(GTK_BOX(buttonbox), reset_button, FALSE, FALSE, 0);
 +    gtk_widget_show_all(page_content_box);
 +    gtk_notebook_append_page(GTK_NOTEBOOK(propertybox->notebook),
 +                             page_content_box, page_label);
 +
 +    /* Switch to selection from a list if the page count threshold is reached */
 +    page_count = gtk_notebook_page_num(GTK_NOTEBOOK(propertybox->notebook),
 +                                       page_content_box);
 +
 +    if (propertybox->page_list_view)
 +    {
 +        /* Build the matching list item for selecting from large page sets */
 +        view = GTK_TREE_VIEW(propertybox->page_list_view);
 +        list = GTK_LIST_STORE(gtk_tree_view_get_model(view));
 +
 +        PINFO("Page name is %s and page_count is %d", name, page_count);
 +        gtk_list_store_append(list, &iter);
 +        gtk_list_store_set(list, &iter,
 +                           PAGE_NAME, _(name),
 +                           PAGE_INDEX, page_count,
 +                           -1);
 +
 +        if (page_count > MAX_TAB_COUNT - 1)   /* Convert 1-based -> 0-based */
 +        {
 +            gtk_widget_show(propertybox->page_list);
 +            gtk_notebook_set_show_tabs(GTK_NOTEBOOK(propertybox->notebook), FALSE);
 +            gtk_notebook_set_show_border(GTK_NOTEBOOK(propertybox->notebook), FALSE);
 +        }
 +        else
 +            gtk_widget_hide(propertybox->page_list);
 +
 +        /* Tweak "advanced" pages for later handling. */
 +        if (advanced)
 +        {
 +            notebook_page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(propertybox->notebook),
 +                            page_count);
 +
 +            g_object_set_data(G_OBJECT(notebook_page), "listitem", listitem);
 +            g_object_set_data(G_OBJECT(notebook_page), "advanced",
 +                              GINT_TO_POINTER(advanced));
 +        }
 +    }
 +    return(page_count);
 +}
 +
 +/********************************************************************\
 + * gnc_options_dialog_build_contents                                *
 + *   builds an options dialog given a property box and an options   *
 + *   database and make the dialog visible                           *
 + *                                                                  *
 + * Args: propertybox - gnome property box to use                    *
 + *       odb         - option database to use                       *
 + * Return: nothing                                                  *
 +\********************************************************************/
 +void
 +gnc_options_dialog_build_contents (GNCOptionWin *propertybox,
 +                                   GNCOptionDB  *odb)
 +{
 +    gnc_options_dialog_build_contents_full (propertybox, odb, TRUE);
 +}
 +
 +/********************************************************************\
 + * gnc_options_dialog_build_contents_full                                *
 + *   builds an options dialog given a property box and an options   *
 + *   database and make the dialog visible depending on the          *
 + *   show_dialog flag                                               *
 + *                                                                  *
 + * Args: propertybox - gnome property box to use                    *
 + *       odb         - option database to use                       *
 + *       show_dialog - should dialog be made visible or not         *
 + * Return: nothing                                                  *
 +\********************************************************************/
 +void
 +gnc_options_dialog_build_contents_full (GNCOptionWin *propertybox,
 +                                        GNCOptionDB  *odb, gboolean show_dialog)
 +{
 +    GNCOptionSection *section;
 +    gchar *default_section_name;
 +    gint default_page = -1;
 +    gint num_sections;
 +    gint page;
 +    gint i;
 +    guint j;
 +
 +    g_return_if_fail (propertybox != NULL);
 +    g_return_if_fail (odb != NULL);
 +
 +    gnc_option_db_set_ui_callbacks (odb,
 +                                    gnc_option_get_ui_value_internal,
 +                                    gnc_option_set_ui_value_internal,
 +                                    gnc_option_set_selectable_internal);
 +
 +    propertybox->option_db = odb;
 +
 +    num_sections = gnc_option_db_num_sections(odb);
 +    default_section_name = gnc_option_db_get_default_section(odb);
 +
 +    PINFO("Default Section name is %s", default_section_name);
 +
 +    for (i = 0; i < num_sections; i++)
 +    {
 +        const char *section_name;
 +
 +        section = gnc_option_db_get_section(odb, i);
 +        page = gnc_options_dialog_append_page(propertybox, section);
 +
 +        section_name = gnc_option_section_name(section);
 +        if (g_strcmp0(section_name, default_section_name) == 0)
 +            default_page = page;
 +    }
 +
 +    if (default_section_name != NULL)
 +        free(default_section_name);
 +
 +    /* call each option widget changed callbacks once at this point,
 +     * now that all options widgets exist.
 +     */
 +    for (i = 0; i < num_sections; i++)
 +    {
 +        section = gnc_option_db_get_section(odb, i);
 +
 +        for (j = 0; j < gnc_option_section_num_options(section); j++)
 +        {
 +            gnc_option_call_option_widget_changed_proc(
 +                gnc_get_option_section_option(section, j) );
 +        }
 +    }
 +
 +    gtk_notebook_popup_enable(GTK_NOTEBOOK(propertybox->notebook));
 +    if (default_page >= 0)
 +    {
 +        /* Find the page list and set the selection to the default page */
 +        GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(propertybox->page_list_view));
 +        GtkTreeIter iter;
 +        GtkTreeModel *model;
 +
 +        model = gtk_tree_view_get_model(GTK_TREE_VIEW(propertybox->page_list_view));
 +        gtk_tree_model_iter_nth_child(model, &iter, NULL, default_page);
 +        gtk_tree_selection_select_iter (selection, &iter);
 +        gtk_notebook_set_current_page(GTK_NOTEBOOK(propertybox->notebook), default_page);
 +    }
 +    gnc_options_dialog_changed_internal(propertybox->dialog, FALSE);
 +    if (show_dialog)
 +        gtk_widget_show(propertybox->dialog);
 +}
 +
 +GtkWidget *
 +gnc_options_dialog_widget(GNCOptionWin * win)
 +{
 +    return win->dialog;
 +}
 +
 +GtkWidget *
 +gnc_options_page_list(GNCOptionWin * win)
 +{
 +    return win->page_list;
 +}
 +
 +GtkWidget *
 +gnc_options_dialog_notebook(GNCOptionWin * win)
 +{
 +    return win->notebook;
 +}
 +
 +void
 +gnc_options_dialog_response_cb(GtkDialog *dialog, gint response, GNCOptionWin *window)
 +{
 +    GNCOptionWinCallback close_cb;
 +
 +    switch (response)
 +    {
 +    case GTK_RESPONSE_HELP:
 +        if (window->help_cb)
 +            (window->help_cb)(window, window->help_cb_data);
 +        break;
 +
 +    case GTK_RESPONSE_OK:
 +    case GTK_RESPONSE_APPLY:
 +        close_cb = window->close_cb;
 +        window->close_cb = NULL;
 +        if (window->apply_cb)
 +            window->apply_cb (window, window->apply_cb_data);
 +        window->close_cb = close_cb;
 +        if (response == GTK_RESPONSE_APPLY)
 +        {
 +            gnc_options_dialog_changed_internal (window->dialog, FALSE);
 +            break;
 +        }
 +        /* fall through */
 +
 +    default:
 +        if (window->close_cb)
 +        {
 +            (window->close_cb)(window, window->close_cb_data);
 +        }
 +        else
 +        {
 +            gtk_widget_hide(window->dialog);
 +        }
 +        break;
 +    }
 +}
 +
 +static void
 +gnc_options_dialog_reset_cb(GtkWidget * w, gpointer data)
 +{
 +    GNCOptionWin *win = data;
 +    GNCOptionSection *section;
 +    gpointer val;
 +
 +    val = g_object_get_data(G_OBJECT(w), "section");
 +    g_return_if_fail (val);
 +    g_return_if_fail (win);
 +
 +    section = (GNCOptionSection*)val;
 +    gnc_option_db_section_reset_widgets (section);
 +    gnc_options_dialog_changed_internal (win->dialog, TRUE);
 +}
 +
 +void
 +gnc_options_dialog_list_select_cb (GtkTreeSelection *selection,
 +                                   gpointer data)
 +{
 +    GNCOptionWin * win = data;
 +    GtkTreeModel *list;
 +    GtkTreeIter iter;
 +    gint index = 0;
 +
 +    if (!gtk_tree_selection_get_selected(selection, &list, &iter))
 +        return;
 +    gtk_tree_model_get(list, &iter,
 +                       PAGE_INDEX, &index,
 +                       -1);
 +    PINFO("Index is %d", index);
 +    gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), index);
 +}
 +
 +void
 +gnc_options_register_stocks (void)
 +{
 +#if 0
 +    static gboolean done = FALSE;
 +
 +    GtkStockItem items[] =
 +    {
 +        { GTK_STOCK_APPLY		, "gnc_option_apply_button",	0, 0, NULL },
 +        { GTK_STOCK_HELP		, "gnc_options_dialog_help",	0, 0, NULL },
 +        { GTK_STOCK_OK			, "gnc_options_dialog_ok",	0, 0, NULL },
 +        { GTK_STOCK_CANCEL		, "gnc_options_dialog_cancel",	0, 0, NULL },
 +    };
 +
 +    if (done)
 +    {
 +        return;
 +    }
 +    done = TRUE;
 +
 +    gtk_stock_add (items, G_N_ELEMENTS (items));
 +#endif
 +}
 +
 +static void
 +component_close_handler (gpointer data)
 +{
 +    GNCOptionWin *window = data;
 +    gtk_dialog_response(GTK_DIALOG(window->dialog), GTK_RESPONSE_CANCEL);
 +}
 +
 +static void
 +refresh_handler (GHashTable *changes, gpointer user_data)
 +{
 +    gnc_commodity *commodity = NULL;
 +    GtkTreeIter iter;
 +
 +    /* The default_gain_loss_account_widget needs to be refreshed if any
 +       changes have been made via account maintenance, if it exists and
 +       if the book currency widget has a selection */
 +/*    if (book_currency_data->default_gain_loss_account_widget &&
 +        gtk_combo_box_get_active_iter(
 +            GTK_COMBO_BOX(book_currency_data->book_currency_widget), &iter))
 +    {
 +        commodity = gnc_currency_edit_get_currency(
 +                                GNC_CURRENCY_EDIT(
 +                                    book_currency_data->book_currency_widget));
 +        gnc_set_default_gain_loss_account_widget(commodity);
 +        gtk_widget_show_all(book_currency_data->book_currency_vbox);
 +    } */
 +}
 +
 +/* gnc_options_dialog_new:
 + *
 + *   - Opens the dialog-options glade file
 + *   - Connects signals specified in the builder file
 + *   - Sets the window's title
 + *   - Initializes a new GtkNotebook, and adds it to the window
 + *
 + */
 +GNCOptionWin *
 +gnc_options_dialog_new(gchar *title)
 +{
 +    return gnc_options_dialog_new_modal(FALSE, title, NULL);
 +}
 +
 +/* gnc_options_dialog_new_modal:
 + *
 + *   - Opens the dialog-options glade file
 + *   - Connects signals specified in the builder file
 + *   - Sets the window's title
 + *   - Initializes a new GtkNotebook, and adds it to the window
 + *   - If modal TRUE, hides 'apply' button
 + *   - If component_class is provided, it is used, otherwise,
 + *     DIALOG_OPTIONS_CM_CLASS is used; this is used to distinguish the
 + *     book-option dialog from report dialogs. The book-option dialog is a
 + *     singleton, so if a dialog already exists it will be raised to the top of
 + *     the window stack instead of creating a new dialog.
 + */
 +GNCOptionWin *
 +gnc_options_dialog_new_modal(gboolean modal, gchar *title,
 +                                                    const char *component_class)
 +{
 +    GNCOptionWin *retval;
 +    GtkBuilder   *builder;
 +    GtkWidget    *hbox;
 +    gint component_id;
 +
 +    retval = g_new0(GNCOptionWin, 1);
 +    builder = gtk_builder_new();
 +    gnc_builder_add_from_file (builder, "dialog-options.glade", "gnucash_options_dialog");
 +    retval->dialog = GTK_WIDGET(gtk_builder_get_object (builder, "gnucash_options_dialog"));
 +    retval->page_list = GTK_WIDGET(gtk_builder_get_object (builder, "page_list_scroll"));
 +
 +    // Set the style context for this dialog so it can be easily manipulated with css
 +    gnc_widget_set_style_context (GTK_WIDGET(retval->dialog), "GncOptionsDialog");
 +
 +    /* Page List */
 +    {
 +        GtkTreeView *view;
 +        GtkListStore *store;
 +        GtkTreeSelection *selection;
 +        GtkCellRenderer *renderer;
 +        GtkTreeViewColumn *column;
 +
 +        retval->page_list_view = GTK_WIDGET(gtk_builder_get_object (builder, "page_list_treeview"));
 +
 +        view = GTK_TREE_VIEW(retval->page_list_view);
 +
 +        store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, G_TYPE_STRING);
 +        gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
 +        g_object_unref(store);
 +
 +        renderer = gtk_cell_renderer_text_new();
 +        column = gtk_tree_view_column_new_with_attributes(_("Page"), renderer,
 +                 "text", PAGE_NAME, NULL);
 +        gtk_tree_view_append_column(view, column);
 +
 +        gtk_tree_view_column_set_alignment(column, 0.5);
 +
 +        selection = gtk_tree_view_get_selection(view);
 +        gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
 +        g_signal_connect (selection, "changed",
 +                          G_CALLBACK (gnc_options_dialog_list_select_cb), retval);
 +
 +    }
 +
 +    gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, retval);
 +
 +    if (title)
 +        gtk_window_set_title(GTK_WINDOW(retval->dialog), title);
 +
 +    /* modal */
 +    if (modal == TRUE)
 +    {
 +        GtkWidget *apply_button;
 +
 +        apply_button = GTK_WIDGET(gtk_builder_get_object (builder, "applybutton"));
 +        gtk_widget_hide (apply_button);
 +    }
 +
 +    /* glade doesn't support a notebook with zero pages */
 +    hbox = GTK_WIDGET(gtk_builder_get_object (builder, "notebook_placeholder"));
 +    retval->notebook = gtk_notebook_new();
 +
 +    gtk_widget_set_vexpand (retval->notebook, TRUE);
 +
 +    gtk_widget_show(retval->notebook);
 +    gtk_box_pack_start(GTK_BOX(hbox), retval->notebook, TRUE, TRUE, 5);
 +
 +    retval->component_class =
 +                (component_class ? component_class : DIALOG_OPTIONS_CM_CLASS);
 +    component_id = gnc_register_gui_component (retval->component_class,
 +                    refresh_handler, component_close_handler,
 +                    retval);
 +    gnc_gui_component_set_session (component_id, gnc_get_current_session());
 +
 +    /* Watch account maintenance events only if book option dialog */
 +    if (g_strcmp0(retval->component_class, DIALOG_BOOK_OPTIONS_CM_CLASS) == 0)
 +    {
 +        gnc_gui_component_watch_entity_type (component_id,
 +                                         GNC_ID_ACCOUNT,
 +                                         QOF_EVENT_MODIFY | QOF_EVENT_DESTROY);
 +    }
 +    g_object_unref(G_OBJECT(builder));
 +
 +    return retval;
 +}
 +
 +/* Creates a new GNCOptionWin structure, but assumes you have your own
 +   dialog widget you want to plugin */
 +GNCOptionWin *
 +gnc_options_dialog_new_w_dialog(gchar *title, GtkWidget *dialog)
 +{
 +    GNCOptionWin * retval;
 +
 +    retval = g_new0(GNCOptionWin, 1);
 +    retval->dialog = dialog;
 +    return retval;
 +}
 +
 +void
 +gnc_options_dialog_set_apply_cb(GNCOptionWin * win, GNCOptionWinCallback cb,
 +                                gpointer data)
 +{
 +    win->apply_cb = cb;
 +    win->apply_cb_data = data;
 +}
 +
 +void
 +gnc_options_dialog_set_help_cb(GNCOptionWin * win, GNCOptionWinCallback cb,
 +                               gpointer data)
 +{
 +    win->help_cb = cb;
 +    win->help_cb_data = data;
 +}
 +
 +void
 +gnc_options_dialog_set_close_cb(GNCOptionWin * win, GNCOptionWinCallback cb,
 +                                gpointer data)
 +{
 +    win->close_cb = cb;
 +    win->close_cb_data = data;
 +}
 +
 +void
 +gnc_options_dialog_set_global_help_cb(GNCOptionWinCallback thunk,
 +                                      gpointer cb_data)
 +{
 +    global_help_cb = thunk;
 +    global_help_cb_data = cb_data;
 +}
 +
 +/* This is for global program preferences. */
 +void
 +gnc_options_dialog_destroy(GNCOptionWin * win)
 +{
 +    if (!win) return;
 +
 +    gnc_unregister_gui_component_by_data(win->component_class, win);
 +
 +    gtk_widget_destroy(win->dialog);
 +
 +    win->dialog = NULL;
 +    win->notebook = NULL;
 +    win->apply_cb = NULL;
 +    win->help_cb = NULL;
 +    win->component_class = NULL;
 +
 +    g_free(win);
 +}
 +
 +/*****************************************************************/
 +/* Option Registration                                           */
 +
 +/*************************
 + *       SET WIDGET      *
 + *************************
 + *
 + * gnc_option_set_ui_widget_<type>():
 + *
 + * You should create the widget representation for the option type,
 + * and set the top-level container widget for your control in
 + * *enclosing.  If you want to pack the widget into the page yourself,
 + * then you may -- just set *packed to TRUE.  Otherwise, the widget
 + * you return in *enclosing will be packed for you.  (*packed is
 + * initialized to FALSE, so if you're not setting it to TRUE, you
 + * don't have to touch it at all.)
 + *
 + * If you need to initialize the state of your control or to connect
 + * any signals to you widgets, then you should do so in this function.
 + * If you want to create a label for the widget you should use 'name'
 + * for the label text.
 + *
 + * Somewhere in this function, you should also call
 + * gnc_option_set_widget(option, value); where 'value' is the
 + * GtkWidget you will actually store the value in.
 + *
 + * Also call gnc_option_set_ui_value(option, FALSE);
 + *
 + * You probably want to end with something like:
 + *   gtk_widget_show_all(*enclosing);
 + *
 + * If you can can detect state changes for your widget's value, you should also
 + * gnc_option_changed_widget_cb() upon changes.
 + *
 + * The widget you return from this function should be the widget in
 + * which you're storing the option value.
 + */
 +static GtkWidget *
 +gnc_option_set_ui_widget_boolean (GNCOption *option, GtkBox *page_box,
 +                                  char *name, char *documentation,
 +                                  /* Return values */
 +                                  GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +    value = gtk_check_button_new_with_label(name);
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    g_signal_connect(G_OBJECT(value), "toggled",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_string (GNCOption *option, GtkBox *page_box,
 +                                 char *name, char *documentation,
 +                                 /* Return values */
 +                                 GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +    value = gtk_entry_new();
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    g_signal_connect(G_OBJECT(value), "changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, TRUE, TRUE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_text (GNCOption *option, GtkBox *page_box,
 +                               char *name, char *documentation,
 +                               /* Return values */
 +                               GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *frame;
 +    GtkWidget *scroll;
 +    GtkTextBuffer* text_buffer;
 +
 +    frame = gtk_frame_new(name);
 +
 +    scroll = gtk_scrolled_window_new(NULL, NULL);
 +    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
 +                                   GTK_POLICY_NEVER,
 +                                   GTK_POLICY_AUTOMATIC);
 +    gtk_container_set_border_width(GTK_CONTAINER(scroll), 2);
 +
 +    gtk_container_add(GTK_CONTAINER(frame), scroll);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +    value = gtk_text_view_new();
 +    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(value), GTK_WRAP_WORD);
 +    gtk_text_view_set_editable(GTK_TEXT_VIEW(value), TRUE);
 +    gtk_container_add (GTK_CONTAINER (scroll), value);
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(value));
 +    g_signal_connect(G_OBJECT(text_buffer), "changed",
 +                     G_CALLBACK(gnc_option_changed_option_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), frame, TRUE, TRUE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_currency (GNCOption *option, GtkBox *page_box,
 +                                   char *name, char *documentation,
 +                                   /* Return values */
 +                                   GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +    value = gnc_currency_edit_new();
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    g_signal_connect(G_OBJECT(value), "changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_commodity (GNCOption *option, GtkBox *page_box,
 +                                    char *name, char *documentation,
 +                                    /* Return values */
 +                                    GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +    value = gnc_general_select_new(GNC_GENERAL_SELECT_TYPE_SELECT,
 +                                   gnc_commodity_edit_get_string,
 +                                   gnc_commodity_edit_new_select,
 +                                   NULL);
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    if (documentation != NULL)
 +        gtk_widget_set_tooltip_text(GNC_GENERAL_SELECT(value)->entry,
 +                                    documentation);
 +
 +    g_signal_connect(G_OBJECT(GNC_GENERAL_SELECT(value)->entry), "changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_multichoice (GNCOption *option, GtkBox *page_box,
 +                                      char *name, char *documentation,
 +                                      /* Return values */
 +                                      GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    value = gnc_option_create_multichoice_widget(option);
 +    gnc_option_set_widget (option, value);
 +
 +    gnc_option_set_ui_value(option, FALSE);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_date (GNCOption *option, GtkBox *page_box,
 +                               char *name, char *documentation,
 +                               /* Return values */
 +                               GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +    GtkWidget *eventbox;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    value = gnc_option_create_date_widget(option);
 +
 +    gnc_option_set_widget (option, value);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +
 +    /* Pack option widget into an extra eventbox because otherwise the
 +       "documentation" tooltip is not displayed. */
 +    eventbox = gtk_event_box_new();
 +    gtk_container_add (GTK_CONTAINER (eventbox), *enclosing);
 +    gtk_box_pack_start(page_box, eventbox, FALSE, FALSE, 5);
 +    *packed = TRUE;
 +
 +    gtk_widget_set_tooltip_text (eventbox, documentation);
 +
 +    gnc_option_set_ui_value(option, FALSE);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_account_list (GNCOption *option, GtkBox *page_box,
 +                                       char *name, char *documentation,
 +                                       /* Return values */
 +                                       GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkTreeSelection *selection;
 +
 +    *enclosing = gnc_option_create_account_widget(option, name);
 +    value = gnc_option_get_gtk_widget (option);
 +
 +    gtk_widget_set_tooltip_text(*enclosing, documentation);
 +
 +    gtk_box_pack_start(page_box, *enclosing, TRUE, TRUE, 5);
 +    *packed = TRUE;
 +
 +    //gtk_widget_realize(value);
 +
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(value));
 +    g_signal_connect(G_OBJECT(selection), "changed",
 +                     G_CALLBACK(gnc_option_account_cb), option);
 +
 +    //  gtk_clist_set_row_height(GTK_CLIST(value), 0);
 +    //  gtk_widget_set_size_request(value, -1, GTK_CLIST(value)->row_height * 10);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_account_sel (GNCOption *option, GtkBox *page_box,
 +                                      char *name, char *documentation,
 +                                      /* Return values */
 +                                      GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    GList *acct_type_list;
 +    gchar *colon_name;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    acct_type_list = gnc_option_get_account_type_list(option);
 +    value = gnc_account_sel_new();
 +    gnc_account_sel_set_acct_filters(GNC_ACCOUNT_SEL(value), acct_type_list, NULL);
 +
 +    g_signal_connect(value, "account_sel_changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    gnc_option_set_widget (option, value);
 +    /* DOCUMENT ME: Why is the only option type that sets use_default to
 +       TRUE? */
 +    gnc_option_set_ui_value(option, TRUE);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_list (GNCOption *option, GtkBox *page_box,
 +                               char *name, char *documentation,
 +                               /* Return values */
 +                               GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *eventbox;
 +
 +    *enclosing = gnc_option_create_list_widget(option, name);
 +    value = gnc_option_get_gtk_widget (option);
 +
 +    /* Pack option widget into an extra eventbox because otherwise the
 +       "documentation" tooltip is not displayed. */
 +    eventbox = gtk_event_box_new();
 +    gtk_container_add (GTK_CONTAINER (eventbox), *enclosing);
 +    gtk_box_pack_start(page_box, eventbox, FALSE, FALSE, 5);
 +    *packed = TRUE;
 +
 +    gtk_widget_set_tooltip_text(eventbox, documentation);
 +
 +    gnc_option_set_ui_value(option, FALSE);
 +    gtk_widget_show(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_number_range (GNCOption *option, GtkBox *page_box,
 +                                       char *name, char *documentation,
 +                                       /* Return values */
 +                                       GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +    GtkAdjustment *adj;
 +    gdouble lower_bound = G_MINDOUBLE;
 +    gdouble upper_bound = G_MAXDOUBLE;
 +    gdouble step_size = 1.0;
 +    int num_decimals = 0;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    gnc_option_get_range_info(option, &lower_bound, &upper_bound,
 +                              &num_decimals, &step_size);
 +    adj = GTK_ADJUSTMENT(gtk_adjustment_new(lower_bound, lower_bound,
 +                                            upper_bound, step_size,
 +                                            step_size * 5.0,
 +                                            0));
 +    value = gtk_spin_button_new(adj, step_size, num_decimals);
 +    gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(value), TRUE);
 +
 +    {
 +        gdouble biggest;
 +        gint num_digits;
 +
 +        biggest = ABS(lower_bound);
 +        biggest = MAX(biggest, ABS(upper_bound));
 +
 +        num_digits = 0;
 +        while (biggest >= 1)
 +        {
 +            num_digits++;
 +            biggest = biggest / 10;
 +        }
 +
 +        if (num_digits == 0)
 +            num_digits = 1;
 +
 +        num_digits += num_decimals;
 +
 +        gtk_entry_set_width_chars(GTK_ENTRY(value), num_digits);
 +    }
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    g_signal_connect(G_OBJECT(value), "changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_color (GNCOption *option, GtkBox *page_box,
 +                                char *name, char *documentation,
 +                                /* Return values */
 +                                GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +    gboolean use_alpha;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    use_alpha = gnc_option_use_alpha(option);
 +
 +    value = gtk_color_button_new();
 +    gtk_color_button_set_title(GTK_COLOR_BUTTON(value), name);
 +    gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(value), use_alpha);
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    g_signal_connect(G_OBJECT(value), "color-set",
 +                     G_CALLBACK(gnc_option_color_changed_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_font (GNCOption *option, GtkBox *page_box,
 +                               char *name, char *documentation,
 +                               /* Return values */
 +                               GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +    value = gtk_font_button_new();
 +    g_object_set(G_OBJECT(value),
 +                 "use-font", TRUE,
 +                 "show-style", TRUE,
 +                 "show-size", TRUE,
 +                 (char *)NULL);
 +
 +    gnc_option_set_widget (option, value);
 +
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    g_signal_connect(G_OBJECT(value), "font-set",
 +                     G_CALLBACK(gnc_option_font_changed_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_pixmap (GNCOption *option, GtkBox *page_box,
 +                                 char *name, char *documentation,
 +                                 /* Return values */
 +                                 GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    GtkWidget *button;
 +    gchar *colon_name;
 +
 +    ENTER("option %p(%s), name %s", option, gnc_option_name(option), name);
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    button = gtk_button_new_with_label(_("Clear"));
 +    gtk_widget_set_tooltip_text(button, _("Clear any selected image file."));
 +
 +    value = gtk_file_chooser_button_new(_("Select image"),
 +                                        GTK_FILE_CHOOSER_ACTION_OPEN);
 +    gtk_widget_set_tooltip_text(value, _("Select an image file."));
 +    g_object_set(G_OBJECT(value),
 +                 "width-chars", 30,
 +                 "preview-widget", gtk_image_new(),
 +                 (char *)NULL);
 +    g_signal_connect(G_OBJECT (value), "selection-changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +    g_signal_connect(G_OBJECT (value), "selection-changed",
 +                     G_CALLBACK(gnc_image_option_selection_changed_cb), option);
 +    g_signal_connect(G_OBJECT (value), "update-preview",
 +                     G_CALLBACK(gnc_image_option_update_preview_cb), option);
 +    g_signal_connect_swapped(G_OBJECT (button), "clicked",
 +                             G_CALLBACK(gtk_file_chooser_unselect_all), value);
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_end(GTK_BOX(*enclosing), button, FALSE, FALSE, 0);
 +    gtk_box_pack_end(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +
 +    gtk_widget_show(value);
 +    gtk_widget_show(label);
 +    gtk_widget_show(*enclosing);
 +    LEAVE("new widget = %p", value);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_radiobutton (GNCOption *option, GtkBox *page_box,
 +                                      char *name, char *documentation,
 +                                      /* Return values */
 +                                      GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    value = gnc_option_create_radiobutton_widget(name, option);
 +    gnc_option_set_widget (option, value);
 +
 +    gnc_option_set_ui_value(option, FALSE);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_dateformat (GNCOption *option, GtkBox *page_box,
 +                                     char *name, char *documentation,
 +                                     /* Return values */
 +                                     GtkWidget **enclosing, gboolean *packed)
 +{
 +    *enclosing = gnc_date_format_new_with_label(name);
 +    gnc_option_set_widget (option, *enclosing);
 +
 +    gnc_option_set_ui_value(option, FALSE);
 +    g_signal_connect(G_OBJECT(*enclosing), "format_changed",
 +                     G_CALLBACK(gnc_option_changed_option_cb), option);
 +    gtk_widget_show_all(*enclosing);
 +    return *enclosing;
 +}
 +
 +static void
 +gnc_plot_size_option_set_select_method(GNCOption *option, gboolean set_buttons)
 +{
 +    GList* widget_list;
 +    GtkWidget *px_widget, *p_widget;
 +    GtkWidget *widget;
 +
 +    widget = gnc_option_get_gtk_widget (option);
 +
 +    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
 +    // px_button item 0
 +    px_widget = g_list_nth_data(widget_list, 1);
 +    // p_button item 2
 +    p_widget = g_list_nth_data(widget_list, 3);
 +    g_list_free(widget_list);
 +
 +    if (set_buttons)
 +    {
 +        gtk_widget_set_sensitive(px_widget, TRUE);
 +        gtk_widget_set_sensitive(p_widget, FALSE);
 +    }
 +    else
 +    {
 +        gtk_widget_set_sensitive(p_widget, TRUE);
 +        gtk_widget_set_sensitive(px_widget, FALSE);
 +    }
 +}
 +
 +static void
 +gnc_rd_option_px_set_cb(GtkWidget *widget, gpointer *raw_option)
 +{
 +    GNCOption *option = (GNCOption *) raw_option;
 +    gnc_plot_size_option_set_select_method(option, TRUE);
 +    gnc_option_changed_option_cb(widget, option);
 +}
 +
 +static void
 +gnc_rd_option_p_set_cb(GtkWidget *widget, gpointer *raw_option)
 +{
 +    GNCOption *option = (GNCOption *) raw_option;
 +    gnc_plot_size_option_set_select_method(option, FALSE);
 +    gnc_option_changed_option_cb(widget, option);
 +    return;
 +}
 +
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_plot_size (GNCOption *option, GtkBox *page_box,
 +                                     char *name, char *documentation,
 +                                     /* Return values */
 +                                     GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value_px, *value_percent;
 +    GtkWidget *label;
 +    GtkWidget *px_butt, *p_butt;
 +    GtkWidget *hbox;
 +    gchar *colon_name;
 +    GtkAdjustment *adj_px, *adj_percent;
 +    gdouble lower_bound = G_MINDOUBLE;
 +    gdouble upper_bound = G_MAXDOUBLE;
 +    gdouble step_size = 1.0;
 +    int num_decimals = 0;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), hbox, FALSE, FALSE, 0);
 +
 +    gnc_option_get_range_info(option, &lower_bound, &upper_bound,
 +                              &num_decimals, &step_size);
 +    adj_px = GTK_ADJUSTMENT(gtk_adjustment_new(lower_bound, lower_bound,
 +                                            upper_bound, step_size,
 +                                            step_size * 5.0,
 +                                            0));
 +
 +    value_px = gtk_spin_button_new(adj_px, step_size, num_decimals);
 +    gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(value_px), TRUE);
 +
 +    {
 +        gdouble biggest;
 +        gint num_digits;
 +
 +        biggest = ABS(lower_bound);
 +        biggest = MAX(biggest, ABS(upper_bound));
 +
 +        num_digits = 0;
 +        while (biggest >= 1)
 +        {
 +            num_digits++;
 +            biggest = biggest / 10;
 +        }
 +
 +        if (num_digits == 0)
 +            num_digits = 1;
 +
 +        num_digits += num_decimals;
 +
 +        gtk_entry_set_width_chars(GTK_ENTRY(value_px), num_digits);
 +    }
 +    gtk_spin_button_set_value(GTK_SPIN_BUTTON(value_px), (upper_bound / 2)); //default
 +    g_signal_connect(G_OBJECT(value_px), "changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    adj_percent = GTK_ADJUSTMENT(gtk_adjustment_new(1, 10, 100, 1, 5.0, 0));
 +    value_percent = gtk_spin_button_new(adj_percent, 1, 0);
 +    gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(value_percent), TRUE);
 +    gtk_spin_button_set_value(GTK_SPIN_BUTTON(value_percent), 100); //default
 +    gtk_entry_set_width_chars(GTK_ENTRY(value_percent), 3);
 +    gtk_widget_set_sensitive(value_percent, FALSE);
 +
 +    g_signal_connect(G_OBJECT(value_percent), "changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    px_butt = gtk_radio_button_new_with_label(NULL, _("Pixels"));
 +    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(px_butt), TRUE);
 +
 +    g_signal_connect(G_OBJECT(px_butt), "toggled",
 +                         G_CALLBACK(gnc_rd_option_px_set_cb), option);
 +
 +    p_butt = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(px_butt), _("Percent"));
 +    g_signal_connect(G_OBJECT(p_butt), "toggled",
 +                         G_CALLBACK(gnc_rd_option_p_set_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(hbox), px_butt, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(hbox), value_px, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(hbox), p_butt, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(hbox), value_percent, FALSE, FALSE, 0);
 +
 +    gnc_option_set_widget (option, hbox);
 +    gnc_option_set_ui_value (option, FALSE);
 +
 +    gtk_widget_show_all(*enclosing);
 +    return hbox;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_budget (GNCOption *option, GtkBox *page_box,
 +                                 char *name, char *documentation,
 +                                 /* Return values */
 +                                 GtkWidget **enclosing, gboolean *packed)
 +{
 +    GtkWidget *value;
 +    GtkWidget *label;
 +    gchar *colon_name;
 +
 +    colon_name = g_strconcat(name, ":", NULL);
 +    label = gtk_label_new(colon_name);
 +    gnc_label_set_alignment(label, 1.0, 0.5);
 +    g_free(colon_name);
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    value = gnc_option_create_budget_widget(option);
 +
 +    gnc_option_set_widget (option, value);
 +    gnc_option_set_ui_value(option, FALSE);
 +
 +    /* Maybe connect destroy handler for tree model here? */
 +    g_signal_connect(G_OBJECT(value), "changed",
 +                     G_CALLBACK(gnc_option_changed_widget_cb), option);
 +
 +    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +static GtkWidget *
 +gnc_option_set_ui_widget_currency_accounting (GNCOption *option,
 +                                              GtkBox *page_box,
 +                                              char *name, char *documentation,
 +                                              /* Return values */
 +                                              GtkWidget **enclosing,
 +                                              gboolean *packed)
 +{
 +    GtkWidget *value;
 +
 +    *enclosing = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
 +    gtk_box_set_homogeneous (GTK_BOX (*enclosing), FALSE);
 +
 +    value = gnc_option_create_currency_accounting_widget(name, option);
 +    gnc_option_set_widget (option, value);
 +
 +    gnc_option_set_ui_value(option, FALSE);
 +    gtk_box_pack_start(GTK_BOX(*enclosing), value, TRUE, TRUE, 0);
 +    gtk_widget_show_all(*enclosing);
 +    return value;
 +}
 +
 +/*************************
 + *       SET VALUE       *
 + *************************
 + *
 + * gnc_option_set_ui_value_<type>():
 + *
 + *   In this function you should set the state of the gui widget to
 + * correspond to the value provided in 'value'.  You should return
 + * TRUE if there was an error, FALSE otherwise.
 + *
 + *
 + */
 +static gboolean
 +gnc_option_set_ui_value_boolean (GNCOption *option, gboolean use_default,
 +                                 GtkWidget *widget, SCM value)
 +{
 +    if (scm_is_bool(value))
 +    {
 +        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
 +                                     scm_is_true(value));
 +        return FALSE;
 +    }
 +    else
 +        return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_string (GNCOption *option, gboolean use_default,
 +                                GtkWidget *widget, SCM value)
 +{
 +    if (scm_is_string(value))
 +    {
 +        const gchar *string;
 +
 +        string = gnc_scm_to_utf8_string (value);
 +        gtk_entry_set_text(GTK_ENTRY(widget), string);
 +        g_free ((gpointer *) string);
 +        return FALSE;
 +    }
 +    else
 +        return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_text (GNCOption *option, gboolean use_default,
 +                              GObject *object, SCM value)
 +{
 +    GtkTextBuffer *buffer;
 +
 +    if (GTK_IS_TEXT_BUFFER(object))
 +        buffer = GTK_TEXT_BUFFER(object);
 +    else
 +        buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(object));
 +
 +    if (scm_is_string(value))
 +    {
 +        const gchar *string;
 +
 +        string = gnc_scm_to_utf8_string (value);
 +        gtk_text_buffer_set_text (buffer, string, scm_c_string_length(value));
 +        g_free ((gpointer *) string);
 +        return FALSE;
 +    }
 +    else
 +        return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_currency (GNCOption *option, gboolean use_default,
 +                                  GtkWidget *widget, SCM value)
 +{
 +    gnc_commodity *commodity;
 +
 +    commodity = gnc_scm_to_commodity (value);
 +    if (commodity)
 +    {
 +        gnc_currency_edit_set_currency(GNC_CURRENCY_EDIT(widget), commodity);
 +        return FALSE;
 +    }
 +    else
 +        return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_commodity (GNCOption *option, gboolean use_default,
 +                                   GtkWidget *widget, SCM value)
 +{
 +    gnc_commodity *commodity;
 +
 +    commodity = gnc_scm_to_commodity (value);
 +    if (commodity)
 +    {
 +        gnc_general_select_set_selected(GNC_GENERAL_SELECT (widget), commodity);
 +        return FALSE;
 +    }
 +    else
 +        return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_multichoice (GNCOption *option, gboolean use_default,
 +                                     GtkWidget *widget, SCM value)
 +{
 +    int index;
 +
 +    index = gnc_option_permissible_value_index(option, value);
 +    if (index < 0)
 +        return TRUE;
 +    else
 +    {
 +        /* GtkComboBox per-item tooltip changes needed below */
 +        gnc_combott_set_active(GNC_COMBOTT(widget), index);
 +        return FALSE;
 +    }
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_date (GNCOption *option, gboolean use_default,
 +                              GtkWidget *widget, SCM value)
 +{
 +    int index;
 +    char *date_option_type;
 +    char *symbol_str;
 +    gboolean bad_value = FALSE;
 +
 +    date_option_type = gnc_option_date_option_get_subtype(option);
 +
 +    if (scm_is_pair(value))
 +    {
 +        symbol_str = gnc_date_option_value_get_type (value);
 +        if (symbol_str)
 +        {
 +            if (g_strcmp0(symbol_str, "relative") == 0)
 +            {
 +                SCM relative = gnc_date_option_value_get_relative (value);
 +
 +                index = gnc_option_permissible_value_index(option, relative);
 +                if (g_strcmp0(date_option_type, "relative") == 0)
 +                {
 +                    /* GtkComboBox per-item tooltip changes needed below */
 +                    gnc_combott_set_active(GNC_COMBOTT(widget), index);
 +                }
 +                else if (g_strcmp0(date_option_type, "both") == 0)
 +                {
 +                    GList *widget_list;
 +                    GtkWidget *rel_date_widget;
 +
 +                    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
 +                    rel_date_widget = g_list_nth_data(widget_list,
 +                                                      GNC_RD_WID_REL_WIDGET_POS);
 +                    g_list_free(widget_list);
 +                    gnc_date_option_set_select_method(option, FALSE, TRUE);
 +                    /* GtkComboBox per-item tooltip changes needed below */
 +                    gnc_combott_set_active(GNC_COMBOTT(rel_date_widget), index);
 +                }
 +                else
 +                {
 +                    bad_value = TRUE;
 +                }
 +            }
 +            else if (g_strcmp0(symbol_str, "absolute") == 0)
 +            {
 +                Timespec ts;
 +
 +                ts = gnc_date_option_value_get_absolute (value);
 +
 +                if (g_strcmp0(date_option_type, "absolute") == 0)
 +                {
 +                    gnc_date_edit_set_time(GNC_DATE_EDIT(widget), ts.tv_sec);
 +                }
 +                else if (g_strcmp0(date_option_type, "both") == 0)
 +                {
 +                    GList *widget_list;
 +                    GtkWidget *ab_widget;
 +
 +                    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
 +                    ab_widget = g_list_nth_data(widget_list,
 +                                                GNC_RD_WID_AB_WIDGET_POS);
 +                    g_list_free(widget_list);
 +                    gnc_date_option_set_select_method(option, TRUE, TRUE);
 +                    gnc_date_edit_set_time(GNC_DATE_EDIT(ab_widget), ts.tv_sec);
 +                }
 +                else
 +                {
 +                    bad_value = TRUE;
 +                }
 +            }
 +            else
 +            {
 +                bad_value = TRUE;
 +            }
 +
 +            if (symbol_str)
 +                free(symbol_str);
 +        }
 +    }
 +    else
 +    {
 +        bad_value = TRUE;
 +    }
 +
 +    if (date_option_type)
 +        free(date_option_type);
 +
 +    return bad_value;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_account_list (GNCOption *option, gboolean use_default,
 +                                      GtkWidget *widget, SCM value)
 +{
 +    GList *list;
 +
 +    list = gnc_scm_list_to_glist(value);
 +
 +    gnc_tree_view_account_set_selected_accounts (GNC_TREE_VIEW_ACCOUNT(widget),
 +            list, TRUE);
 +
 +    g_list_free(list);
 +    return FALSE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_account_sel (GNCOption *option, gboolean use_default,
 +                                     GtkWidget *widget, SCM value)
 +{
 +    Account *acc = NULL;
 +
 +    if (value != SCM_BOOL_F)
 +    {
 +        if (!SWIG_IsPointer(value))
 +            scm_misc_error("gnc_option_set_ui_value_account_sel",
 +                           "Option Value not a wcp.", value);
 +
 +        acc = SWIG_MustGetPtr(value, SWIG_TypeQuery("_p_Account"), 4, 0);
 +    }
 +
 +    //doesn't default because this function is called to set a specific account
 +    gnc_account_sel_set_account (GNC_ACCOUNT_SEL(widget), acc, FALSE);
 +
 +    return FALSE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_list (GNCOption *option, gboolean use_default,
 +                              GtkWidget *widget, SCM value)
 +{
 +    GtkTreeSelection *selection;
 +    GtkTreePath *path;
 +    gint row;
 +
 +    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
 +    gtk_tree_selection_unselect_all(selection);
 +
 +    while (scm_is_list(value) && !scm_is_null(value))
 +    {
 +        SCM item;
 +
 +        item = SCM_CAR(value);
 +        value = SCM_CDR(value);
 +
 +        row = gnc_option_permissible_value_index(option, item);
 +        if (row < 0)
 +        {
 +            return TRUE;
 +        }
 +
 +        path = gtk_tree_path_new_from_indices(row, -1);
 +        gtk_tree_selection_select_path(selection, path);
 +        gtk_tree_path_free(path);
 +    }
 +
 +    if (!scm_is_list(value) || !scm_is_null(value))
 +        return TRUE;
 +
 +    return FALSE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_number_range (GNCOption *option, gboolean use_default,
 +                                      GtkWidget *widget, SCM value)
 +{
 +    GtkSpinButton *spinner;
 +    gdouble d_value;;
 +
 +    spinner = GTK_SPIN_BUTTON(widget);
 +
 +    if (scm_is_number(value))
 +    {
 +        d_value = scm_to_double(value);
 +        gtk_spin_button_set_value(spinner, d_value);
 +        return FALSE;
 +    }
 +    else
 +        return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_color (GNCOption *option, gboolean use_default,
 +                               GtkWidget *widget, SCM value)
 +{
 +
 +    GdkRGBA color;
 +    if (gnc_option_get_color_info(option, use_default,
 +                                  &color.red, &color.green,
 +                                  &color.blue, &color.alpha))
 +    {
 +        GtkColorChooser *color_button;
 +
 +        DEBUG("red %f, green %f, blue %f, alpha %f",
 +              color.red, color.green, color.blue, color.alpha);
 +        color_button = GTK_COLOR_CHOOSER(widget);
 +
 +        gtk_color_chooser_set_rgba(color_button, &color);
 +        return FALSE;
 +    }
 +
 +    LEAVE("TRUE");
 +    return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_font (GNCOption *option, gboolean use_default,
 +                              GtkWidget *widget, SCM value)
 +{
 +    if (scm_is_string(value))
 +    {
 +        const gchar *string;
 +
 +        string = gnc_scm_to_utf8_string (value);
 +        if ((string != NULL) && (*string != '\0'))
 +        {
 +            GtkFontButton *font_button = GTK_FONT_BUTTON(widget);
 +            gtk_font_button_set_font_name(font_button, string);
 +        }
 +        g_free ((gpointer *) string);
 +        return FALSE;
 +    }
 +    else
 +        return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_pixmap (GNCOption *option, gboolean use_default,
 +                                GtkWidget *widget, SCM value)
 +{
 +    ENTER("option %p(%s)", option, gnc_option_name(option));
 +    if (scm_is_string(value))
 +    {
 +        const gchar *string;
 +
 +        string = gnc_scm_to_locale_string (value);
 +        if (string && *string)
 +        {
 +            gchar *test;
 +            DEBUG("string = %s", string);
 +            gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(widget), string);
 +            test = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
 +            g_object_set_data_full(G_OBJECT(widget), LAST_SELECTION,
 +                                   g_strdup(string), g_free);
 +            DEBUG("Set %s, retrieved %s", string, test ? test : "(null)");
 +            gnc_image_option_update_preview_cb(GTK_FILE_CHOOSER(widget), option);
 +        }
 +        LEAVE("FALSE");
 +        g_free ((gpointer *) string);
 +        return FALSE;
 +    }
 +
 +    LEAVE("TRUE");
 +    return TRUE;
 +}
 +
 +static gboolean gnc_option_set_ui_value_budget(
 +    GNCOption *option, gboolean use_default, GtkWidget *widget, SCM value)
 +{
 +    GncBudget *bgt;
 +
 +//    if (!scm_is_null(value)) {
 +    if (value != SCM_BOOL_F)
 +    {
 +        if (!SWIG_IsPointer(value))
 +            scm_misc_error("gnc_option_set_ui_value_budget",
 +                           "Option Value not a wcp.", value);
 +
 +        bgt = SWIG_MustGetPtr(value, SWIG_TypeQuery("GncBudget *"), 4, 0);
 +        if (bgt)
 +        {
 +            GtkComboBox *cb = GTK_COMBO_BOX(widget);
 +            GtkTreeModel *tm = gtk_combo_box_get_model(cb);
 +            GtkTreeIter iter;
 +            if (gnc_tree_model_budget_get_iter_for_budget(tm, &iter, bgt))
 +                gtk_combo_box_set_active_iter(cb, &iter);
 +        }
 +    }
 +
 +
 +    //FIXME: Unimplemented.
 +    return FALSE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_radiobutton (GNCOption *option, gboolean use_default,
 +                                     GtkWidget *widget, SCM value)
 +{
 +    int index;
 +
 +    index = gnc_option_permissible_value_index(option, value);
 +    if (index < 0)
 +        return TRUE;
 +    else
 +    {
 +        GtkWidget *box, *button;
 +        GList *list;
 +        int i;
 +        gpointer val;
 +
 +        list = gtk_container_get_children (GTK_CONTAINER (widget));
 +        box = list->data;
 +        g_list_free(list);
 +
 +        list = gtk_container_get_children (GTK_CONTAINER (box));
 +        for (i = 0; i < index && list; i++)
 +            list = list->next;
 +        g_return_val_if_fail (list, TRUE);
 +
 +        button = list->data;
 +        g_list_free(list);
 +        val = g_object_get_data (G_OBJECT (button), "gnc_radiobutton_index");
 +        g_return_val_if_fail (GPOINTER_TO_INT (val) == index, TRUE);
 +
 +        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
 +        //    g_object_set_data(G_OBJECT(widget), "gnc_radiobutton_index",
 +        //			GINT_TO_POINTER(index));
 +        return FALSE;
 +    }
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_dateformat (GNCOption *option, gboolean use_default,
 +                                    GtkWidget *widget, SCM value)
 +{
 +    GNCDateFormat * gdf = GNC_DATE_FORMAT(widget);
 +    QofDateFormat format;
 +    GNCDateMonthFormat months;
 +    gboolean years;
 +    char *custom;
 +
 +    if (gnc_dateformat_option_value_parse(value, &format, &months, &years, &custom))
 +        return TRUE;
 +
 +    gnc_date_format_set_format(gdf, format);
 +    gnc_date_format_set_months(gdf, months);
 +    gnc_date_format_set_years(gdf, years);
 +    gnc_date_format_set_custom(gdf, custom);
 +    gnc_date_format_refresh(gdf);
 +
 +    if (custom)
 +        free(custom);
 +
 +    return FALSE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_plot_size (GNCOption *option, gboolean use_default,
 +                                    GtkWidget *widget, SCM value)
 +{
 +    GList* widget_list;
 +    GtkWidget *px_button, *p_button, *px_widget, *p_widget;
 +    char *symbol_str;
 +    gdouble d_value;
 +
 +    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
 +    px_button = g_list_nth_data(widget_list, 0);
 +    px_widget = g_list_nth_data(widget_list, 1);
 +    p_button = g_list_nth_data(widget_list, 2);
 +    p_widget = g_list_nth_data(widget_list, 3);
 +    g_list_free(widget_list);
 +
 +    if (scm_is_pair(value))
 +    {
 +        symbol_str = gnc_plot_size_option_value_get_type(value);
 +        d_value = gnc_plot_size_option_value_get_value(value);
 +
 +        if (symbol_str)
 +        {
 +            if (g_strcmp0(symbol_str, "pixels") == 0) // pixel values
 +            {
 +                gtk_spin_button_set_value(GTK_SPIN_BUTTON(px_widget), d_value);
 +                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(px_button), TRUE);
 +            }
 +            else // percent values
 +            {
 +                gtk_spin_button_set_value(GTK_SPIN_BUTTON(p_widget), (d_value));
 +                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(p_button), TRUE);
 +            }
 +            return FALSE;
 +        }
 +    }
 +    return TRUE;
 +}
 +
 +static gboolean
 +gnc_option_set_ui_value_currency_accounting (GNCOption *option,
 +                                             gboolean use_default,
 +                                             GtkWidget *widget, SCM value)
 +{
 +    if (scm_is_pair(value))
 +    {
 +        SCM rb_symbol;
 +
 +        rb_symbol = gnc_currency_accounting_option_value_get_method (value);
 +
 +        if (rb_symbol)
 +        {
 +            int index;
 +
 +            index = gnc_option_permissible_value_index(option, rb_symbol);
 +            if (index < 0)
 +                return TRUE;
 +            else
 +            {
 +                GtkWidget *button = NULL;
 +                gpointer val;
 +
 +                switch (index)
 +                {
 +                    case 0:
 +                        button = book_currency_data->gnc_currency_radiobutton_0;
 +                        break;
 +                    case 1:
 +                        button = book_currency_data->gnc_currency_radiobutton_1;
 +                        break;
 +                    case 2:
 +                        button = book_currency_data->gnc_currency_radiobutton_2;
 +                        break;
 +                    default:
 +                        return TRUE;
 +                }
 +
 +                val = g_object_get_data (G_OBJECT (button),
 +                                            "gnc_radiobutton_index");
 +                g_return_val_if_fail (GPOINTER_TO_INT (val) == index, TRUE);
 +
 +                if (g_strcmp0(gnc_option_permissible_value_name(option,
 +                                                                 index),
 +                                "Use a Book Currency") == 0)
 +                {
 +                    gnc_commodity *commodity = NULL;
 +                    SCM curr_scm =
 +                        gnc_currency_accounting_option_value_get_book_currency
 +                            (value);
 +                    SCM list_symbol =
 +                        gnc_currency_accounting_option_value_get_default_policy
 +                            (value);
 +                    SCM acct_guid_scm =
 +                        gnc_currency_accounting_option_value_get_default_account
 +                            (value);
 +
 +                    commodity = gnc_scm_to_commodity (curr_scm);
 +                    if (commodity)
 +                    {
 +                        book_currency_data->retrieved_book_currency = commodity;
 +                    }
 +                    else
 +                    {
 +                        book_currency_data->retrieved_book_currency = NULL;
 +                    }
 +                    if (list_symbol)
 +                    {
 +                        book_currency_data->retrieved_policy_scm = list_symbol;
 +                    }
 +                    else
 +                    {
 +                        book_currency_data->retrieved_policy_scm = NULL;
 +                    }
 +                    if (acct_guid_scm)
 +                    {
 +                        book_currency_data->retrieved_gain_loss_acct_guid_scm =
 +                                                                acct_guid_scm;
 +                    }
 +                    else
 +                    {
 +                        book_currency_data->retrieved_gain_loss_acct_guid_scm =
 +                                                                        NULL;
 +                    }
 +                }
 +                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
 +                /* when an unselected button in a group is clicked the clicked
 +                   button receives the “toggled” signal, as does the
 +                   previously selected button; however, if the first button
 +                   is active when the currency-accounting dialog is created,
 +                   that is, it's read from the option, the "toggled" handler
 +                   is not called while it is if any other button is active.
 +                   To get desired result, that is, to set sensitivity to
 +                   FALSE, explicitly call the handler here if first button */
 +                if (index == 0)
 +                {
 +                    gnc_option_currency_accounting_non_book_cb(button,
 +                        (gpointer) book_currency_data);
 +                }
 +                return FALSE;
 +            }
 +        }
 +        return TRUE;
 +    }
 +    return TRUE;
 +}
 +
 +/*************************
 + *       GET VALUE       *
 + *************************
 + *
 + * gnc_option_get_ui_value_<type>():
 + *
 + * 'widget' will be the widget returned from the
 + * gnc_option_set_ui_widget_<type>() function.
 + *
 + * You should return a SCM value corresponding to the current state of the
 + * gui widget.
 + *
 + */
 +static SCM
 +gnc_option_get_ui_value_boolean (GNCOption *option, GtkWidget *widget)
 +{
 +    gboolean active;
 +
 +    active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 +    return SCM_BOOL(active);
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_string (GNCOption *option, GtkWidget *widget)
 +{
 +    char * string;
 +    SCM result;
 +
 +    string = gtk_editable_get_chars(GTK_EDITABLE(widget), 0, -1);
 +    result = scm_from_utf8_string(string ? string : "");
 +    g_free(string);
 +    return result;
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_text (GNCOption *option, GtkWidget *widget)
 +{
 +    char * string;
 +    SCM result;
 +
 +    string = xxxgtk_textview_get_text (GTK_TEXT_VIEW(widget));
 +    result = scm_from_utf8_string(string ? string : "");
 +    g_free(string);
 +    return result;
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_currency (GNCOption *option, GtkWidget *widget)
 +{
 +    gnc_commodity *commodity;
 +
 +    commodity =
 +        gnc_currency_edit_get_currency(GNC_CURRENCY_EDIT(widget));
 +
 +    return (gnc_commodity_to_scm (commodity));
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_commodity (GNCOption *option, GtkWidget *widget)
 +{
 +    gnc_commodity *commodity;
 +
 +    commodity =
 +        gnc_general_select_get_selected(GNC_GENERAL_SELECT(widget));
 +
 +    return (gnc_commodity_to_scm(commodity));
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_multichoice (GNCOption *option, GtkWidget *widget)
 +{
 +    int index;
 +
 +    /* GtkComboBox per-item tooltip changes needed below */
 +    index = gnc_combott_get_active(GNC_COMBOTT(widget));
 +    return (gnc_option_permissible_value(option, index));
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_date (GNCOption *option, GtkWidget *widget)
 +{
 +    int index;
 +    SCM type, val, result = SCM_UNDEFINED;
 +    char *subtype = gnc_option_date_option_get_subtype(option);
 +
 +    if (g_strcmp0(subtype, "relative") == 0)
 +    {
 +        /* GtkComboBox per-item tooltip changes needed below */
 +        index = gnc_combott_get_active(GNC_COMBOTT(widget));
 +
 +        type = scm_from_locale_symbol ("relative");
 +        val = gnc_option_permissible_value(option, index);
 +        result = scm_cons(type, val);
 +    }
 +    else if (g_strcmp0(subtype, "absolute") == 0)
 +    {
 +        Timespec ts;
 +
 +        ts.tv_sec  = gnc_date_edit_get_date(GNC_DATE_EDIT(widget));
 +        ts.tv_nsec = 0;
 +
 +        result = scm_cons(scm_from_locale_symbol ("absolute"), gnc_timespec2timepair(ts));
 +    }
 +    else if (g_strcmp0(subtype, "both") == 0)
 +    {
 +        Timespec ts;
 +        int index;
 +        SCM val;
 +        GList *widget_list;
 +        GtkWidget *ab_button, *rel_widget, *ab_widget;
 +
 +        widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
 +        ab_button = g_list_nth_data(widget_list,  GNC_RD_WID_AB_BUTTON_POS);
 +        ab_widget = g_list_nth_data(widget_list,  GNC_RD_WID_AB_WIDGET_POS);
 +        rel_widget = g_list_nth_data(widget_list, GNC_RD_WID_REL_WIDGET_POS);
 +        g_list_free(widget_list);
 +
 +        /* if it's an absolute date */
 +        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ab_button)))
 +        {
 +            ts.tv_sec = gnc_date_edit_get_date(GNC_DATE_EDIT(ab_widget));
 +            ts.tv_nsec = 0;
 +            result = scm_cons(scm_from_locale_symbol ("absolute"), gnc_timespec2timepair(ts));
 +        }
 +        else
 +        {
 +            /* GtkComboBox per-item tooltip changes needed below */
 +            index = gnc_combott_get_active(GNC_COMBOTT(rel_widget));
 +
 +            val = gnc_option_permissible_value(option, index);
 +            result = scm_cons(scm_from_locale_symbol ("relative"), val);
 +        }
 +    }
 +    g_free(subtype);
 +    return result;
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_account_list (GNCOption *option, GtkWidget *widget)
 +{
 +    GncTreeViewAccount *tree;
 +    GList *list;
 +    SCM result;
 +
 +    tree = GNC_TREE_VIEW_ACCOUNT(widget);
 +    list = gnc_tree_view_account_get_selected_accounts (tree);
 +
 +    /* handover list */
 +    result = gnc_glist_to_scm_list(list, "_p_Account");
 +    g_list_free(list);
 +    return result;
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_account_sel (GNCOption *option, GtkWidget *widget)
 +{
 +    GNCAccountSel *gas;
 +    Account* acc;
 +
 +    gas = GNC_ACCOUNT_SEL(widget);
 +    acc = gnc_account_sel_get_account (gas);
 +
 +    if (!acc)
 +        return SCM_BOOL_F;
 +
 +    return SWIG_NewPointerObj(acc, SWIG_TypeQuery("_p_Account"), 0);
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_budget(GNCOption *option, GtkWidget *widget)
 +{
 +    GncBudget *bgt;
 +    GtkComboBox *cb;
 +    GtkTreeModel *tm;
 +    GtkTreeIter iter;
 +
 +    cb = GTK_COMBO_BOX(widget);
 +    gtk_combo_box_get_active_iter(cb, &iter);
 +    tm = gtk_combo_box_get_model(cb);
 +    bgt = gnc_tree_model_budget_get_budget(tm, &iter);
 +
 +    if (!bgt)
 +        return SCM_BOOL_F;
 +
 +    return SWIG_NewPointerObj(bgt, SWIG_TypeQuery("_p_budget_s"), 0);
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_list (GNCOption *option, GtkWidget *widget)
 +{
 +    GtkTreeSelection *selection;
 +    GtkTreePath *path;
 +    SCM result;
 +    gboolean selected;
 +    gint num_rows;
 +    gint row;
 +
 +    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
 +    num_rows = gnc_option_num_permissible_values(option);
 +    result = scm_c_eval_string("'()");
 +
 +    for (row = 0; row < num_rows; row++)
 +    {
 +        path = gtk_tree_path_new_from_indices(row, -1);
 +        selected = gtk_tree_selection_path_is_selected(selection, path);
 +        gtk_tree_path_free(path);
 +        if (selected)
 +            result = scm_cons(gnc_option_permissible_value(option, row), result);
 +    }
 +
 +    return (scm_reverse(result));
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_number_range (GNCOption *option, GtkWidget *widget)
 +{
 +    GtkSpinButton *spinner;
 +    gdouble value;
 +
 +    spinner = GTK_SPIN_BUTTON(widget);
 +
 +    value = gtk_spin_button_get_value(spinner);
 +
 +    return (scm_from_double (value));
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_color (GNCOption *option, GtkWidget *widget)
 +{
 +    SCM result;
 +    GtkColorChooser *color_button;
 +    GdkRGBA color;
 +    gdouble scale;
 +
 +    ENTER("option %p(%s), widget %p",
 +          option, gnc_option_name(option), widget);
 +
 +    color_button = GTK_COLOR_CHOOSER(widget);
 +    gtk_color_chooser_get_rgba(color_button, &color);
 +
 +    scale = gnc_option_color_range(option);
 +
 +    result = SCM_EOL;
 +    result = scm_cons(scm_from_double (color.alpha * scale), result);
 +    result = scm_cons(scm_from_double (color.blue * scale), result);
 +    result = scm_cons(scm_from_double (color.green * scale), result);
 +    result = scm_cons(scm_from_double (color.red * scale), result);
 +    return result;
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_font (GNCOption *option, GtkWidget *widget)
 +{
 +    GtkFontButton *font_button = GTK_FONT_BUTTON(widget);
 +    const gchar * string;
 +
 +    string = gtk_font_button_get_font_name(font_button);
 +    return (string ? scm_from_utf8_string(string) : SCM_BOOL_F);
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_pixmap (GNCOption *option, GtkWidget *widget)
 +{
 +    gchar *string;
 +    SCM result;
 +
 +    string = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
 +    DEBUG("filename %s", string ? string : "(null)");
 +    result = scm_from_utf8_string(string ? string : "");
 +    g_free(string);
 +    return result;
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_radiobutton (GNCOption *option, GtkWidget *widget)
 +{
 +    gpointer _index;
 +    int index;
 +
 +    _index = g_object_get_data(G_OBJECT(widget), "gnc_radiobutton_index");
 +    index = GPOINTER_TO_INT(_index);
 +
 +    return (gnc_option_permissible_value(option, index));
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_dateformat (GNCOption *option, GtkWidget *widget)
 +{
 +    GNCDateFormat *gdf = GNC_DATE_FORMAT(widget);
 +    QofDateFormat format;
 +    GNCDateMonthFormat months;
 +    gboolean years;
 +    const char* custom;
 +
 +    format = gnc_date_format_get_format(gdf);
 +    months = gnc_date_format_get_months(gdf);
 +    years = gnc_date_format_get_years(gdf);
 +    custom = gnc_date_format_get_custom(gdf);
 +
 +    return (gnc_dateformat_option_set_value(format, months, years, custom));
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_plot_size (GNCOption *option, GtkWidget *widget)
 +{
 +    GList* widget_list;
 +    GtkWidget *px_button, *px_widget, *p_widget;
 +    gdouble d_value;
 +    SCM type, val;
 +
 +    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
 +    px_button = g_list_nth_data(widget_list, 0);
 +    px_widget = g_list_nth_data(widget_list, 1);
 +    // p_button item 2
 +    p_widget = g_list_nth_data(widget_list, 3);
 +    g_list_free(widget_list);
 +
 +    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(px_button)))
 +    {
 +        type = scm_from_locale_symbol("pixels");
 +        d_value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(px_widget));
 +    }
 +    else
 +    {
 +        type = scm_from_locale_symbol("percent");
 +        d_value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(p_widget));
 +    }
 +    val = scm_from_double(d_value);
 +    return scm_cons(type, val);
 +}
 +
 +static SCM
 +gnc_option_get_ui_value_currency_accounting (
 +                                        GNCOption *option, GtkWidget *widget)
 +{
 +    gpointer _index;
 +    int index;
 +    SCM value = SCM_EOL;
 +
 +    _index = g_object_get_data(G_OBJECT(widget), "gnc_radiobutton_index");
 +    index = GPOINTER_TO_INT(_index);
 +
 +    /* build the return list in reverse order */
 +    if (g_strcmp0(gnc_option_permissible_value_name(option, index),
 +                  "Use a Book Currency") == 0)
 +    {
 +        gnc_commodity *commodity = NULL;
 +        int policy_index;
 +        SCM val;
 +        GList *list_of_policies = NULL;
 +        const char *str = NULL;
 +
 +        if (book_currency_data->default_gain_loss_account_widget)
 +        {
 +            /* get account from widget, if one selected */
 +            Account *gain_loss_account = NULL;
 +
 +            gain_loss_account =
 +                gnc_tree_view_account_get_selected_account
 +                    (GNC_TREE_VIEW_ACCOUNT (
 +                        book_currency_data->default_gain_loss_account_widget));
 +
 +            if (gain_loss_account == NULL)
 +            {
 +                val = SCM_BOOL_F;
 +            }
 +            else
 +            {
 +                gchar *gain_loss_account_guid = guid_to_string (
 +                                        xaccAccountGetGUID (gain_loss_account));
 +
 +                val = scm_from_utf8_string (gain_loss_account_guid);
 +                g_free (gain_loss_account_guid);
 +            }
 +        }
 +        else
 +        {
 +            val = SCM_BOOL_F;
 +        }
 +        value = scm_cons(val, value);
 +
 +        list_of_policies = gnc_get_valid_policy_list();
 +        if (list_of_policies && book_currency_data->default_cost_policy_widget)
 +        {
 +            GList *l = NULL;
 +            gint i = 0;
 +            /* GtkComboBox per-item tooltip changes needed below */
 +            policy_index =
 +                gnc_combott_get_active(GNC_COMBOTT(
 +                            book_currency_data->default_cost_policy_widget));
 +            for (l = list_of_policies; l != NULL; l = l->next)
 +            {
 +                GNCPolicy *pcy = l->data;
 +                if(i == policy_index)
 +                    str = PolicyGetName (pcy);
 +                i++;
 +            }
 +            g_list_free(list_of_policies);
 +        }
 +        if (str)
 +        {
 +            val = scm_from_locale_symbol(str);
 +        }
 +        else
 +        {
 +            val = SCM_BOOL_F;
 +        }
 +        value = scm_cons(val, value);
 +
 +        if (gtk_combo_box_get_active (GTK_COMBO_BOX(book_currency_data->book_currency_widget)) != -1)
 +        {
 +            commodity =
 +                gnc_currency_edit_get_currency(
 +                    GNC_CURRENCY_EDIT(
 +                        book_currency_data->book_currency_widget));
 +            if (commodity)
 +            {
 +                val = gnc_commodity_to_scm(commodity);
 +            }
 +            else
 +            {
 +                val = SCM_BOOL_F;
 +            }
 +        }
 +        else
 +        {
 +            val = SCM_BOOL_F;
 +        }
 +        value = scm_cons(val, value);
 +    }
 +
 +    return (scm_cons (gnc_option_permissible_value(option, index), value));
 +}
 +
 +/************************************/
 +/*          INITIALIZATION          */
 +/************************************/
 +static void gnc_options_initialize_options (void)
 +{
 +    static GNCOptionDef_t options[] =
 +    {
 +        {
 +            "boolean", gnc_option_set_ui_widget_boolean,
 +            gnc_option_set_ui_value_boolean, gnc_option_get_ui_value_boolean
 +        },
 +        {
 +            "string", gnc_option_set_ui_widget_string,
 +            gnc_option_set_ui_value_string, gnc_option_get_ui_value_string
 +        },
 +        {
 +            "text", gnc_option_set_ui_widget_text,
 +            (GNCOptionUISetValue)gnc_option_set_ui_value_text,
 +            gnc_option_get_ui_value_text
 +        },
 +        {
 +            "currency", gnc_option_set_ui_widget_currency,
 +            gnc_option_set_ui_value_currency, gnc_option_get_ui_value_currency
 +        },
 +        {
 +            "commodity", gnc_option_set_ui_widget_commodity,
 +            gnc_option_set_ui_value_commodity, gnc_option_get_ui_value_commodity
 +        },
 +        {
 +            "multichoice", gnc_option_set_ui_widget_multichoice,
 +            gnc_option_set_ui_value_multichoice, gnc_option_get_ui_value_multichoice
 +        },
 +        {
 +            "date", gnc_option_set_ui_widget_date,
 +            gnc_option_set_ui_value_date, gnc_option_get_ui_value_date
 +        },
 +        {
 +            "account-list", gnc_option_set_ui_widget_account_list,
 +            gnc_option_set_ui_value_account_list, gnc_option_get_ui_value_account_list
 +        },
 +        {
 +            "account-sel", gnc_option_set_ui_widget_account_sel,
 +            gnc_option_set_ui_value_account_sel, gnc_option_get_ui_value_account_sel
 +        },
 +        {
 +            "list", gnc_option_set_ui_widget_list,
 +            gnc_option_set_ui_value_list, gnc_option_get_ui_value_list
 +        },
 +        {
 +            "number-range", gnc_option_set_ui_widget_number_range,
 +            gnc_option_set_ui_value_number_range, gnc_option_get_ui_value_number_range
 +        },
 +        {
 +            "color", gnc_option_set_ui_widget_color,
 +            gnc_option_set_ui_value_color, gnc_option_get_ui_value_color
 +        },
 +        {
 +            "font", gnc_option_set_ui_widget_font,
 +            gnc_option_set_ui_value_font, gnc_option_get_ui_value_font
 +        },
 +        {
 +            "pixmap", gnc_option_set_ui_widget_pixmap,
 +            gnc_option_set_ui_value_pixmap, gnc_option_get_ui_value_pixmap
 +        },
 +        {
 +            "radiobutton", gnc_option_set_ui_widget_radiobutton,
 +            gnc_option_set_ui_value_radiobutton, gnc_option_get_ui_value_radiobutton
 +        },
 +        {
 +            "dateformat", gnc_option_set_ui_widget_dateformat,
 +            gnc_option_set_ui_value_dateformat, gnc_option_get_ui_value_dateformat
 +        },
 +        {
 +            "plot-size", gnc_option_set_ui_widget_plot_size,
 +            gnc_option_set_ui_value_plot_size, gnc_option_get_ui_value_plot_size
 +        },
 +        {
 +            "budget", gnc_option_set_ui_widget_budget,
 +            gnc_option_set_ui_value_budget, gnc_option_get_ui_value_budget
 +        },
 +        {
 +            "currency-accounting",
 +            gnc_option_set_ui_widget_currency_accounting,
 +            gnc_option_set_ui_value_currency_accounting,
 +            gnc_option_get_ui_value_currency_accounting
 +        },
 +        { NULL, NULL, NULL, NULL }
 +    };
 +    int i;
 +
 +    for (i = 0; options[i].option_name; i++)
 +        gnc_options_ui_register_option (&(options[i]));
 +}
 +
 +/* Register a new option type in the UI */
 +void gnc_options_ui_register_option (GNCOptionDef_t *option)
 +{
 +    g_return_if_fail (optionTable);
 +    g_return_if_fail (option);
 +
 +    /* FIXME: should protect against repeat insertion. */
 +    g_hash_table_insert (optionTable, (gpointer)(option->option_name), option);
 +}
 +
 +GNCOptionDef_t * gnc_options_ui_get_option (const char *option_name)
 +{
 +    GNCOptionDef_t *retval;
 +    g_return_val_if_fail (optionTable, NULL);
 +    g_return_val_if_fail (option_name, NULL);
 +
 +    retval = g_hash_table_lookup (optionTable, option_name);
 +    if (!retval)
 +    {
 +        PERR("Option lookup for type '%s' failed!", option_name);
 +    }
 +    return retval;
 +}
 +
 +void gnc_options_ui_initialize (void)
 +{
 +    SWIG_GetModule(NULL); /* Work-around for SWIG bug. */
 +    //  gnc_options_register_stocks ();
 +    g_return_if_fail (optionTable == NULL);
 +    optionTable = g_hash_table_new (g_str_hash, g_str_equal);
 +
 +    /* add known types */
 +    gnc_options_initialize_options ();
 +}
 +
 +struct scm_cb
 +{
 +    SCM	apply_cb;
 +    SCM	close_cb;
 +};
 +
 +static void
 +scm_apply_cb (GNCOptionWin *win, gpointer data)
 +{
 +    struct scm_cb *cbdata = data;
 +
 +    if (gnc_option_db_get_changed (win->option_db))
 +    {
 +        GList *results = NULL, *iter;
 +        results = gnc_option_db_commit (win->option_db);
 +        for (iter = results; iter; iter = iter->next)
 +        {
 +            GtkWidget *dialog = gtk_message_dialog_new(NULL,
 +                                                       0,
 +                                                       GTK_MESSAGE_ERROR,
 +                                                       GTK_BUTTONS_OK,
 +                                                       "%s",
 +                                                       (char*)iter->data);
 +            gtk_dialog_run(GTK_DIALOG(dialog));
 +            gtk_widget_destroy(dialog);
 +            g_free (iter->data);
 +        }
 +        g_list_free (results);
 +
 +        if (cbdata->apply_cb != SCM_BOOL_F)
 +        {
 +            scm_call_0 (cbdata->apply_cb);
 +        }
 +    }
 +}
 +
 +static void
 +scm_close_cb (GNCOptionWin *win, gpointer data)
 +{
 +    struct scm_cb *cbdata = data;
 +
 +    if (cbdata->close_cb != SCM_BOOL_F)
 +    {
 +        scm_call_0 (cbdata->close_cb);
 +        scm_gc_unprotect_object (cbdata->close_cb);
 +    }
 +
 +    if (cbdata->apply_cb != SCM_BOOL_F)
 +        scm_gc_unprotect_object (cbdata->apply_cb);
 +
 +    g_free (cbdata);
 +}
 +
 +/* Both apply_cb and close_cb should be scheme functions with 0 arguments.
 + * References to these functions will be held until the close_cb is called
 + */
 +void
 +gnc_options_dialog_set_scm_callbacks (GNCOptionWin *win, SCM apply_cb,
 +                                      SCM close_cb)
 +{
 +    struct scm_cb *cbdata;
 +
 +    cbdata = g_new0 (struct scm_cb, 1);
 +    cbdata->apply_cb = apply_cb;
 +    cbdata->close_cb = close_cb;
 +
 +    if (apply_cb != SCM_BOOL_F)
 +        scm_gc_protect_object (cbdata->apply_cb);
 +
 +    if (close_cb != SCM_BOOL_F)
 +        scm_gc_protect_object (cbdata->close_cb);
 +
 +    gnc_options_dialog_set_apply_cb (win, scm_apply_cb, cbdata);
 +    gnc_options_dialog_set_close_cb (win, scm_close_cb, cbdata);
 +}

commit 0b85bbc1bf8db418314d83aa8664957c9367482a
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Sep 21 14:24:02 2017 +0200

    Add income-gst-statement.scm to POTFILES.in

diff --git a/po/POTFILES.in b/po/POTFILES.in
index 9cba02a..eaf0f39 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -470,6 +470,7 @@ gnucash/report/standard-reports/daily-reports.scm
 gnucash/report/standard-reports/equity-statement.scm
 gnucash/report/standard-reports/general-journal.scm
 gnucash/report/standard-reports/general-ledger.scm
+gnucash/report/standard-reports/income-gst-statement.scm
 gnucash/report/standard-reports/income-statement.scm
 gnucash/report/standard-reports/net-barchart.scm
 gnucash/report/standard-reports/net-linechart.scm

commit 5b99835cb1f2a5623d3153673783aa0efecd5d38
Author: christopherlam <christopher.lck at gmail.com>
Date:   Thu Sep 21 19:51:03 2017 +0800

    Fix some (gnc:make-gnc-monetary) errors
    
    These errors didn't appear in the tracefile. They only appeared on Linux terminal.

diff --git a/gnucash/report/standard-reports/income-gst-statement.scm b/gnucash/report/standard-reports/income-gst-statement.scm
index 36a2ae8..a74092f 100644
--- a/gnucash/report/standard-reports/income-gst-statement.scm
+++ b/gnucash/report/standard-reports/income-gst-statement.scm
@@ -524,9 +524,10 @@ accounts must be of type ASSET for taxes paid on expenses, and type LIABILITY fo
              (let* ((calculator (vector-ref cell 1))
                     (reverse-column? (vector-ref cell 2))
                     (calculated (calculator split)))
-               (if (and sign-reverses? reverse-column? calculated)
-                   (converted (gnc-numeric-neg calculated))
-                   (converted calculated))))
+               (cond
+                 ((and sign-reverses? reverse-column? calculated) (converted (gnc-numeric-neg calculated)))
+                 (calculated  (converted calculated))
+                 (else #f))))
            cell-calculators))
 
     (if (used-date column-vector)
@@ -622,7 +623,7 @@ accounts must be of type ASSET for taxes paid on expenses, and type LIABILITY fo
                              "number-cell"
                              (gnc:html-transaction-anchor
                               parent
-                              (gnc:make-gnc-monetary report-currency cell))))
+                              cell)))
                     (addto! row-contents (gnc:html-make-empty-cell))))
               cells)
 
@@ -1800,4 +1801,4 @@ for taxes paid on expenses, and type LIABILITY for taxes collected on sales.")
  'name reportname
  'report-guid "5bf27f249a0d11e7abc4cec278b6b50a"
  'options-generator trep-options-generator
- 'renderer trep-renderer)
\ No newline at end of file
+ 'renderer trep-renderer)

commit 678794c8002a9240077958a6f360f5c7c6bd8d15
Author: christopherlam <christopher.lck at gmail.com>
Date:   Sun Sep 17 16:47:38 2017 +0800

    Restore "sign reverses" option
    This was removed during development.

diff --git a/gnucash/report/standard-reports/income-gst-statement.scm b/gnucash/report/standard-reports/income-gst-statement.scm
index 2b2cea6..36a2ae8 100644
--- a/gnucash/report/standard-reports/income-gst-statement.scm
+++ b/gnucash/report/standard-reports/income-gst-statement.scm
@@ -483,11 +483,11 @@ accounts must be of type ASSET for taxes paid on expenses, and type LIABILITY fo
     (if (used-amount-double-negative column-vector)
         (addto! heading-list (_ "Credit")))
 
-    (for-each (lambda (arg)
+    (for-each (lambda (cell)
                 (addto! heading-list
                         (gnc:make-html-table-cell/markup
                          "column-heading-right"
-                         (car arg))))
+                         (vector-ref cell 0))))
               calculated-cells)
 
     (reverse heading-list)))
@@ -511,6 +511,7 @@ accounts must be of type ASSET for taxes paid on expenses, and type LIABILITY fo
          (report-currency (if (opt-val gnc:pagename-general optname-common-currency)
                               (opt-val gnc:pagename-general optname-currency)
                               currency))
+         (sign-reverses? (opt-val gnc:pagename-display (N_ "Sign Reverses")))
          (trans-date (gnc-transaction-get-date-posted parent))
          (converted (lambda (num)
                       (gnc:exchange-by-pricedb-nearest
@@ -520,7 +521,12 @@ accounts must be of type ASSET for taxes paid on expenses, and type LIABILITY fo
 
     (define cells
       (map (lambda (cell)
-             (converted ((cdr cell) split)))
+             (let* ((calculator (vector-ref cell 1))
+                    (reverse-column? (vector-ref cell 2))
+                    (calculated (calculator split)))
+               (if (and sign-reverses? reverse-column? calculated)
+                   (converted (gnc-numeric-neg calculated))
+                   (converted calculated))))
            cell-calculators))
 
     (if (used-date column-vector)
@@ -1038,13 +1044,14 @@ for taxes paid on expenses, and type LIABILITY for taxes collected on sales.")
     ;(list (N_ "Shares")                       "k"  (N_ "Display the number of shares?") #f)
     ;(list (N_ "Price")                        "l"  (N_ "Display the shares price?") #f)
     ;; note the "Amount" multichoice option in between here
-    (list (N_ "Totals")                       "o"  (N_ "Display the totals?") #t)
+    (list (N_ "Totals")                       "o" (N_ "Display the totals?") #t)
     (list (N_ "Individual income columns")    "p" (N_ "Display individual income columns rather than their sum") #f)
     (list (N_ "Individual expense columns")   "q" (N_ "Display individual expense columns rather than their sum") #f)
-    (list (N_ "Individual tax columns")       "r"  (N_ "Display individual tax columns rather than their sum") #f)
-    (list (N_ "Remittance amount")            "s"  (N_ "Display the remittance amount (total sales - total purchases)") #f)
-    (list (N_ "Net Income")                   "t"  (N_ "Display the net income (sales without tax - purchases without tax)") #f)
-    (list (N_ "Tax payable")                  "t"  (N_ "Display the tax payable (tax on sales - tax on purchases)") #f)
+    (list (N_ "Individual tax columns")       "r" (N_ "Display individual tax columns rather than their sum") #f)
+    (list (N_ "Remittance amount")            "s" (N_ "Display the remittance amount (total sales - total purchases)") #f)
+    (list (N_ "Net Income")                   "t" (N_ "Display the net income (sales without tax - purchases without tax)") #f)
+    (list (N_ "Tax payable")                  "u" (N_ "Display the tax payable (tax on sales - tax on purchases)") #f)
+    (list (N_ "Sign Reverses")                "z" (N_ "Reverse amount display for income-related columns.") #t)
     ))
 
   (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
@@ -1101,18 +1108,6 @@ for taxes paid on expenses, and type LIABILITY for taxes collected on sales.")
   ;   (vector 'double (N_ "Double") (N_ "Two Column Display."))
   ;   )))
 
-  ;(gnc:register-trep-option
-  ; (gnc:make-multichoice-option
-  ;  gnc:pagename-display (N_ "Sign Reverses")
-  ;  "p" (N_ "Reverse amount display for certain account types.")
-  ;  'none
-  ;  (list
-  ;   (vector 'none (N_ "None") (N_ "Don't change any displayed amounts."))
-  ;   (vector 'income-expense (N_ "Income and Expense")
-  ;           (N_ "Reverse amount display for Income and Expense Accounts."))
-  ;   (vector 'credit-accounts (N_ "Credit Accounts")
-  ;           (N_ "Reverse amount display for Liability, Payable, Equity, Credit Card, and Income accounts.")))))
-
   (gnc:options-set-default-section gnc:*transaction-report-options*
                                    gnc:pagename-general)
 
@@ -1210,47 +1205,35 @@ for taxes paid on expenses, and type LIABILITY for taxes collected on sales.")
            (net-income (lambda (s) (myneg (myadd (sales-without-tax s) (purchases-without-tax s)))))
            (tax-payable (lambda (s) (myneg (myadd (tax-on-purchases s) (tax-on-sales s))))))
         (append
-         (list (cons "Total Sales" total-sales))
+         ; each column will be a vector
+         ; (vector heading calculator-function reverse-column?)
+         (list (vector "Total Sales" total-sales #t))
          (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Individual income columns")))
-             (map (lambda (acc) (cons (xaccAccountGetName acc) (account-adder acc)))
+             (map (lambda (acc) (vector (xaccAccountGetName acc) (account-adder acc) #t))
                   accounts-sales)
-             (list (cons "Net Sales" sales-without-tax)))
+             (list (vector "Net Sales" sales-without-tax #t)))
          (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Individual tax columns")))
-             (map (lambda (acc) (cons (xaccAccountGetName acc) (account-adder acc)))
+             (map (lambda (acc) (vector (xaccAccountGetName acc) (account-adder acc) #t))
                   accounts-tax-collected)
-             (list (cons "Tax on Sales" tax-on-sales)))
-         (list (cons "Total Purchases" total-purchases))
+             (list (vector "Tax on Sales" tax-on-sales #t)))
+         (list (vector "Total Purchases" total-purchases #f))
          (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Individual expense columns")))
-             (map (lambda (acc) (cons (xaccAccountGetName acc) (account-adder acc)))
+             (map (lambda (acc) (vector (xaccAccountGetName acc) (account-adder acc) #f))
                   accounts-purchases)
-             (list (cons "Net Purchases" purchases-without-tax)))
+             (list (vector "Net Purchases" purchases-without-tax #f)))
          (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Individual tax columns")))
-             (map (lambda (acc) (cons (xaccAccountGetName acc) (account-adder acc)))
+             (map (lambda (acc) (vector (xaccAccountGetName acc) (account-adder acc) #f))
                   accounts-tax-paid)
-             (list (cons "Tax on Purchases" tax-on-purchases)))
+             (list (vector "Tax on Purchases" tax-on-purchases #f)))
          (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Remittance amount")))
-             (list (cons "Remittance" bank-remittance))
+             (list (vector "Remittance" bank-remittance #f))
              '())
          (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Net Income")))
-             (list (cons "Net Income" net-income))
+             (list (vector "Net Income" net-income #f))
              '())
          (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Tax payable")))
-             (list (cons "Tax Payable" tax-payable))
-             '())
-         )))
-
-
-    ;(define (get-account-types-to-reverse options)
-    ;  (cdr (assq (gnc:option-value
-    ;              (gnc:lookup-option options
-    ;                                 gnc:pagename-display
-    ;                                 (N_ "Sign Reverses")))
-    ;             account-types-to-reverse-assoc-list)))
-
-    ;(define (transaction-report-multi-rows-p options)
-    ;  (eq? (gnc:option-value
-    ;        (gnc:lookup-option options gnc:pagename-general (N_ "Style")))
-    ;       'multi-line))
+             (list (vector "Tax Payable" tax-payable #f))
+             '()))))
 
     (define (transaction-report-export-p options)
       (gnc:option-value
@@ -1413,7 +1396,7 @@ for taxes paid on expenses, and type LIABILITY for taxes collected on sales.")
            (width (num-columns-required used-columns))
            (multi-rows? #f) ;disable. (transaction-report-multi-rows-p options))
            (export?  (transaction-report-export-p options))
-           (account-types-to-reverse '())) ;disabled.            (get-account-types-to-reverse '()))options)))
+           (account-types-to-reverse '()))
 
       (gnc:html-table-set-col-headers!
        table
@@ -1440,11 +1423,7 @@ for taxes paid on expenses, and type LIABILITY for taxes collected on sales.")
                                     secondary-subtotal-renderer
                                     (map (lambda (x) (gnc:make-commodity-collector)) calculated-cells)
                                     (map (lambda (x) (gnc:make-commodity-collector)) calculated-cells)
-                                    (map (lambda (x) (gnc:make-commodity-collector)) calculated-cells)
-                                    ;(gnc:make-commodity-collector)
-                                    ;(gnc:make-commodity-collector)
-                                    ;(gnc:make-commodity-collector)
-                                    )))
+                                    (map (lambda (x) (gnc:make-commodity-collector)) calculated-cells))))
       table)))
 
 ;; ;;;;;;;;;;;;;;;;;;;;

commit ff32ddc9069aff1f6ab286e9ec61ee13fe829024
Author: christopherlam <christopher.lck at gmail.com>
Date:   Sun Sep 17 01:04:57 2017 +0100

    Initial commit income-gst-statement.scm

diff --git a/gnucash/report/standard-reports/income-gst-statement.scm b/gnucash/report/standard-reports/income-gst-statement.scm
index 859cfde..2b2cea6 100644
--- a/gnucash/report/standard-reports/income-gst-statement.scm
+++ b/gnucash/report/standard-reports/income-gst-statement.scm
@@ -1,7 +1,8 @@
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; transaction-report.scm : Report on all transactions in account(s)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Income-GST-Statement.scm : Produce report suitable for
+;; annual income tax returns and periodic VAT/GST reporting.
 ;;
-;; Original report by Robert Merkel <rgmerk at mira.net>
+;; Original transaction.scm report by Robert Merkel <rgmerk at mira.net>
 ;; Contributions by Bryan Larsen <blarsen at ada-works.com>
 ;; More contributions for new report generation code by Robert Merkel
 ;; More contributions by Christian Stimming <stimming at tuhh.de>
@@ -9,17 +10,19 @@
 ;; Michael T. Garrison Stuber
 ;; Modified account names display by Tomas Pospisek
 ;; <tpo_deb at sourcepole.ch> with a lot of help from "warlord"
+;; Heavily amended by Christopher Lam to add calculations
+;; appropriate for GST/VAT, building on efforts by Doug Doughty.
+;;
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2 of
+;; the License, or (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
 ;;
-;; This program is free software; you can redistribute it and/or    
-;; modify it under the terms of the GNU General Public License as   
-;; published by the Free Software Foundation; either version 2 of   
-;; the License, or (at your option) any later version.              
-;;                                                                  
-;; This program is distributed in the hope that it will be useful,  
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of   
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    
-;; GNU General Public License for more details.                     
-;;                                                                  
 ;; You should have received a copy of the GNU General Public License
 ;; along with this program; if not, contact:
 ;;
@@ -29,16 +32,14 @@
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define-module (gnucash report standard-reports transaction))
+(define-module (gnucash report standard-reports income-gst-statement))
 
 (use-modules (gnucash main)) ;; FIXME: delete after we finish modularizing.
 (use-modules (srfi srfi-1))
 (use-modules (srfi srfi-13))
 (use-modules (gnucash gnc-module))
 (use-modules (gnucash gettext))
-
 (use-modules (gnucash printf))
-
 (gnc:module-load "gnucash/report/report-system" 0)
 
 (define-macro (addto! alist element)
@@ -46,8 +47,7 @@
 
 ;; Define the strings here to avoid typos and make changes easier.
 
-(define reportname (N_ "Transaction Report"))
-(define optname-detail-level (N_ "Detail Level"))
+(define reportname (N_ "Income & GST Statement"))
 (define pagename-sorting (N_ "Sorting"))
 (define optname-prime-sortkey (N_ "Primary Key"))
 (define optname-prime-subtotal (N_ "Primary Subtotal"))
@@ -62,6 +62,10 @@
 (define optname-void-transactions (N_ "Void Transactions"))
 (define optname-table-export (N_ "Table for Exporting"))
 (define optname-common-currency (N_ "Common Currency"))
+(define TAX-SETUP-DESC "From the Report Options, you will need to select the accounts which will \
+hold the GST/VAT taxes collected or paid. These accounts must contain splits which document the \
+monies which are wholly sent or claimed from tax authorities during periodic GST/VAT returns. These \
+accounts must be of type ASSET for taxes paid on expenses, and type LIABILITY for taxes collected on sales.")
 (define optname-currency (N_ "Report's currency"))
 (define def:grand-total-style "grand-total")
 (define def:normal-row-style "normal-row")
@@ -71,7 +75,7 @@
 ;; The option-values of the sorting key multichoice option, for
 ;; which a subtotal should be enabled.
 (define subtotal-enabled '(account-name
-                           account-code 
+                           account-code
                            corresponding-acc-name
                            corresponding-acc-code))
 
@@ -92,12 +96,12 @@
      (gnc:timepair-get-year tp-b)))
 
 (define (timepair-same-quarter tp-a tp-b)
-  (and (timepair-same-year tp-a tp-b) 
+  (and (timepair-same-year tp-a tp-b)
        (= (gnc:timepair-get-quarter tp-a)
           (gnc:timepair-get-quarter tp-b))))
 
 (define (timepair-same-month tp-a tp-b)
-  (and (timepair-same-year tp-a tp-b) 
+  (and (timepair-same-year tp-a tp-b)
        (= (gnc:timepair-get-month tp-a)
           (gnc:timepair-get-month tp-b))))
 
@@ -127,8 +131,8 @@
     (timepair-same-year tp-a tp-b)))
 
 (define (set-last-row-style! table tag . rest)
-  (let ((arg-list 
-         (cons table 
+  (let ((arg-list
+         (cons table
                (cons (- (gnc:html-table-num-rows table) 1)
                      (cons tag rest)))))
     (apply gnc:html-table-set-row-style! arg-list)))
@@ -146,7 +150,7 @@
   ;;# on multi-line splits we can get an empty ('()) account
   (if (null? account)
       (_ "Split Transaction")
-      (string-append 
+      (string-append
        ;; display account code?
        (if show-account-code
            (string-append (xaccAccountGetCode account) " ")
@@ -172,7 +176,7 @@
                                               (used-sort-account-full-name column-vector))))
                         table width subheading-style)))
 
-(define (render-corresponding-account-subheading 
+(define (render-corresponding-account-subheading
          split table width subheading-style column-vector)
   (let ((account (xaccSplitGetAccount (xaccSplitGetOtherSplit split))))
     (add-subheading-row (gnc:make-html-text
@@ -195,62 +199,76 @@
 
 (define (render-month-subheading split table width subheading-style column-vector)
   (add-subheading-row (gnc:date-get-month-year-string
-                       (gnc:timepair->date 
+                       (gnc:timepair->date
                         (gnc-transaction-get-date-posted
                          (xaccSplitGetParent split))))
                       table width subheading-style))
 
 (define (render-quarter-subheading split table width subheading-style column-vector)
-  (add-subheading-row (gnc:date-get-quarter-year-string 
-                       (gnc:timepair->date 
+  (add-subheading-row (gnc:date-get-quarter-year-string
+                       (gnc:timepair->date
                         (gnc-transaction-get-date-posted
                          (xaccSplitGetParent split))))
                       table width subheading-style))
 
 (define (render-year-subheading split table width subheading-style column-vector)
-  (add-subheading-row (gnc:date-get-year-string 
-                       (gnc:timepair->date 
+  (add-subheading-row (gnc:date-get-year-string
+                       (gnc:timepair->date
                         (gnc-transaction-get-date-posted
                          (xaccSplitGetParent split))))
                       table width subheading-style))
 
 
-(define (add-subtotal-row table width subtotal-string subtotal-collector 
+(define (add-subtotal-row table width subtotal-string subtotal-collectors
                           subtotal-style export?)
-  (let ((currency-totals (subtotal-collector
-                          'format gnc:make-gnc-monetary #f))
-        (blanks (gnc:make-html-table-cell/size 1 (- width 1) #f)))
-    (gnc:html-table-append-row/markup!
-     table
-     subtotal-style 
-     (if export?
-         (append! (cons (gnc:make-html-table-cell/markup "total-label-cell" subtotal-string)
-                        (gnc:html-make-empty-cells (- width 2)))
-                  (list (gnc:make-html-table-cell/markup 
-                         "total-number-cell"
-                         (car currency-totals))))
-         (list (gnc:make-html-table-cell/size/markup 1 (- width 1) "total-label-cell"
-                                                     subtotal-string)
-               (gnc:make-html-table-cell/markup 
-                "total-number-cell"
-                (car currency-totals)))))
-    (for-each (lambda (currency)
-                (gnc:html-table-append-row/markup! 
-                 table
-                 subtotal-style
-                 (append!
-                  (if export?
-                      (gnc:html-make-empty-cells (- width 1))
-                      (list blanks))
-                  (list (gnc:make-html-table-cell/markup
-                         "total-number-cell" currency)))))
-              (cdr currency-totals))))
+  (let* ((row-contents '())
+         (columns (map (lambda (coll) (coll 'format gnc:make-gnc-monetary #f)) subtotal-collectors))
+         (list-of-commodities (delete-duplicates (map gnc:gnc-monetary-commodity (apply append columns)))))
+
+    (define (retrieve-commodity list-of-monetary commodity)
+      (if (null? list-of-monetary)
+          #f
+          (if (gnc-commodity-equal (gnc:gnc-monetary-commodity (car list-of-monetary)) commodity)
+              (car list-of-monetary)
+              (retrieve-commodity (cdr list-of-monetary) commodity))))
+
+    (define (add-first-column string)
+      (if export?
+          (begin
+            (addto! row-contents (gnc:make-html-table-cell/markup "total-label-cell" string))
+            (for-each (lambda (cell) (addto! row-contents cell))
+                      (gnc:html-make-empty-cells (- width 1))))
+          (addto! row-contents (gnc:make-html-table-cell/size/markup 1 width "total-label-cell" string))))
+
+    (define (add-columns commodity)
+      (for-each (lambda (column)
+                  (addto! row-contents
+                          (gnc:make-html-table-cell/markup
+                           "total-number-cell"
+                           (retrieve-commodity column commodity))))
+                columns))
+
+    ;first row
+    (add-first-column subtotal-string)
+    (add-columns (if (pair? list-of-commodities)
+                     (car list-of-commodities)
+                     #f)) ;to account for empty-row subtotals
+    (gnc:html-table-append-row/markup! table subtotal-style (reverse row-contents))
+
+    ;subsequent rows
+    (if (pair? list-of-commodities)
+        (for-each (lambda (commodity)
+                    (set! row-contents '())
+                    (add-first-column "")
+                    (add-columns commodity)
+                    (gnc:html-table-append-row/markup! table subtotal-style (reverse row-contents)))
+                  (cdr list-of-commodities)))))
 
 (define (total-string str) (string-append (_ "Total For ") str))
 
-(define (render-account-subtotal 
+(define (render-account-subtotal
          table width split total-collector subtotal-style column-vector export?)
-  (add-subtotal-row table width 
+  (add-subtotal-row table width
                     (total-string (account-namestring (xaccSplitGetAccount split)
                                                       (used-sort-account-code      column-vector)
                                                       #t
@@ -279,7 +297,7 @@
          table width split total-collector subtotal-style column-vector export?)
   (let ((tm (gnc:timepair->date (gnc-transaction-get-date-posted
                                  (xaccSplitGetParent split)))))
-    (add-subtotal-row table width 
+    (add-subtotal-row table width
                       (total-string (gnc:date-get-month-year-string tm))
                       total-collector subtotal-style export?)))
 
@@ -288,7 +306,7 @@
          table width split total-collector subtotal-style column-vector export?)
   (let ((tm (gnc:timepair->date (gnc-transaction-get-date-posted
                                  (xaccSplitGetParent split)))))
-    (add-subtotal-row table width 
+    (add-subtotal-row table width
                       (total-string (gnc:date-get-quarter-year-string tm))
                       total-collector subtotal-style export?)))
 
@@ -296,7 +314,7 @@
          table width split total-collector subtotal-style column-vector export?)
   (let ((tm (gnc:timepair->date (gnc-transaction-get-date-posted
                                  (xaccSplitGetParent split)))))
-    (add-subtotal-row table width 
+    (add-subtotal-row table width
                       (total-string (strftime "%Y" tm))
                       total-collector subtotal-style export?)))
 
@@ -326,19 +344,17 @@
 (define (used-account-name columns-used)
   (vector-ref columns-used 4))
 (define (used-other-account-name columns-used)
-  (vector-ref columns-used 5))	
+  (vector-ref columns-used 5))
 (define (used-shares columns-used)
-  (vector-ref columns-used 6))	
+  (vector-ref columns-used 6))
 (define (used-price columns-used)
-  (vector-ref columns-used 7))	
+  (vector-ref columns-used 7))
 (define (used-amount-single columns-used)
-  (vector-ref columns-used 8))	
+  (vector-ref columns-used 8))
 (define (used-amount-double-positive columns-used)
-  (vector-ref columns-used 9))	
+  (vector-ref columns-used 9))
 (define (used-amount-double-negative columns-used)
-  (vector-ref columns-used 10))	
-(define (used-running-balance columns-used)
-  (vector-ref columns-used 11))
+  (vector-ref columns-used 10))
 (define (used-account-full-name columns-used)
   (vector-ref columns-used 12))
 (define (used-memo columns-used)
@@ -358,9 +374,9 @@
 
 (define columns-used-size 20)
 
-(define (num-columns-required columns-used)  
-  (do ((i 0 (+ i 1)) 
-       (col-req 0 col-req)) 
+(define (num-columns-required columns-used)
+  (do ((i 0 (+ i 1))
+       (col-req 0 col-req))
     ((>= i columns-used-size) col-req)
     ; If column toggle is true, increase column count. But attention:
     ; some toggles only change the meaning of another toggle. Don't count these modifier toggles
@@ -378,12 +394,11 @@
             (and (= i 15) (vector-ref columns-used 15) (vector-ref columns-used 5))) ; Other Account Code and Name
         (set! col-req (- col-req 1)))))
 
-(define (build-column-used options)   
+(define (build-column-used options)
   (define (opt-val section name)
-    (gnc:option-value 
+    (gnc:option-value
      (gnc:lookup-option options section name)))
-  (let ((column-list (make-vector columns-used-size #f))
-        (is-single? (eq? (opt-val gnc:pagename-display optname-detail-level) 'single)))
+  (let ((column-list (make-vector columns-used-size #f)))
     (if (opt-val gnc:pagename-display (N_ "Date"))
         (vector-set! column-list 0 #t))
     (if (opt-val gnc:pagename-display (N_ "Reconciled Date"))
@@ -396,29 +411,28 @@
         (vector-set! column-list 3 #t))
     (if (opt-val gnc:pagename-display (N_ "Account Name"))
         (vector-set! column-list 4 #t))
-    (if (and is-single? (opt-val gnc:pagename-display (N_ "Other Account Name")))
+    (if (opt-val gnc:pagename-display (N_ "Other Account Name"))
         (vector-set! column-list 5 #t))
-    (if (opt-val gnc:pagename-display (N_ "Shares"))
-        (vector-set! column-list 6 #t))
-    (if (opt-val gnc:pagename-display (N_ "Price"))
-        (vector-set! column-list 7 #t))
-    (let ((amount-setting (opt-val gnc:pagename-display (N_ "Amount"))))
-      (if (eq? amount-setting 'single)
-          (vector-set! column-list 8 #t))
-      (if (eq? amount-setting 'double)
-          (begin (vector-set! column-list 9 #t)
-                 (vector-set! column-list 10 #t))))
-    (if (opt-val gnc:pagename-display (N_ "Running Balance"))
-        (vector-set! column-list 11 #t))
+    ;(if (opt-val gnc:pagename-display (N_ "Shares"))
+    ;    (vector-set! column-list 6 #t))
+    ;(if (opt-val gnc:pagename-display (N_ "Price"))
+    ;    (vector-set! column-list 7 #t))
+    ;(let ((amount-setting (opt-val gnc:pagename-display (N_ "Amount"))))
+    ;  (if (eq? amount-setting 'single)
+    ;      (vector-set! column-list 8 #t))
+    ;  (if (eq? amount-setting 'double)
+    ;      (begin (vector-set! column-list 9 #t)
+    ;             (vector-set! column-list 10 #t))))
+
     (if (opt-val gnc:pagename-display  (N_ "Use Full Account Name"))
         (vector-set! column-list 12 #t))
     (if (opt-val gnc:pagename-display (N_ "Memo"))
         (vector-set! column-list 13 #t))
     (if (opt-val gnc:pagename-display (N_ "Account Code"))
         (vector-set! column-list 14 #t))
-    (if (and is-single? (opt-val gnc:pagename-display (N_ "Other Account Code")))
+    (if (opt-val gnc:pagename-display (N_ "Other Account Code"))
         (vector-set! column-list 15 #t))
-    (if (and is-single? (opt-val gnc:pagename-display (N_ "Use Full Other Account Name")))
+    (if (opt-val gnc:pagename-display (N_ "Use Full Other Account Name"))
         (vector-set! column-list 16 #t))
     (if (opt-val pagename-sorting (N_ "Show Account Code"))
         (vector-set! column-list 17 #t))
@@ -428,7 +442,7 @@
         (vector-set! column-list 19 #t))
     column-list))
 
-(define (make-heading-list column-vector options)
+(define (make-heading-list column-vector calculated-cells options)
   (let ((heading-list '()))
     (if (used-date column-vector)
         (addto! heading-list (_ "Date")))
@@ -440,7 +454,7 @@
                                       (if (gnc:lookup-option options
                                                              gnc:pagename-display
                                                              (N_ "Trans Number"))
-                                          (gnc:option-value 
+                                          (gnc:option-value
                                            (gnc:lookup-option options
                                                               gnc:pagename-display
                                                               (N_ "Trans Number")))
@@ -457,55 +471,58 @@
         (addto! heading-list (_ "Account")))
     (if (or (used-other-account-name column-vector) (used-other-account-code column-vector))
         (addto! heading-list (_ "Transfer from/to")))
-    (if (used-shares column-vector)
-        (addto! heading-list (_ "Shares")))
-    (if (used-price column-vector)
-        (addto! heading-list (_ "Price")))
-    (if (used-amount-single column-vector)
-        (addto! heading-list (_ "Amount")))
+    ;(if (used-shares column-vector)
+    ;    (addto! heading-list (_ "Shares")))
+    ;(if (used-price column-vector)
+    ;    (addto! heading-list (_ "Price")))
+    ;(if (used-amount-single column-vector)
+    ;    (addto! heading-list (_ "Amount")))
     ;; FIXME: Proper labels: what?
     (if (used-amount-double-positive column-vector)
         (addto! heading-list (_ "Debit")))
     (if (used-amount-double-negative column-vector)
         (addto! heading-list (_ "Credit")))
-    (if (used-running-balance column-vector)
-        (addto! heading-list (_ "Balance")))
+
+    (for-each (lambda (arg)
+                (addto! heading-list
+                        (gnc:make-html-table-cell/markup
+                         "column-heading-right"
+                         (car arg))))
+              calculated-cells)
+
     (reverse heading-list)))
 
-(define (add-split-row table split column-vector options
+(define (add-split-row table split column-vector cell-calculators options
                        row-style account-types-to-reverse transaction-row?)
-  
   (define (opt-val section name)
-    (gnc:option-value 
+    (gnc:option-value
      (gnc:lookup-option options section name)))
-  
+
   (let* ((row-contents '())
          (dummy  (gnc:debug "split is originally" split))
          (parent (xaccSplitGetParent split))
          (account (xaccSplitGetAccount split))
          (account-type (xaccAccountGetType account))
-         (currency (if (not (null? account))
-                       (xaccAccountGetCommodity account)
-                       (gnc-default-currency)))
+         (currency (xaccTransGetCurrency parent))
+         ;the following cannot be used, because we're using each split's tax currency
+         ;(if (not (null? account))
+         ;             (xaccAccountGetCommodity account)
+         ;             (gnc-default-currency)))
          (report-currency (if (opt-val gnc:pagename-general optname-common-currency)
                               (opt-val gnc:pagename-general optname-currency)
                               currency))
-         (damount (if (gnc:split-voided? split)
-                      (xaccSplitVoidFormerAmount split)
-                      (xaccSplitGetAmount split)))
          (trans-date (gnc-transaction-get-date-posted parent))
-         (split-value (gnc:exchange-by-pricedb-nearest
-                       (gnc:make-gnc-monetary 
-                        currency
-                        (if (member account-type account-types-to-reverse) 
-                            (gnc-numeric-neg damount)
-                            damount))
+         (converted (lambda (num)
+                      (gnc:exchange-by-pricedb-nearest
+                       (gnc:make-gnc-monetary currency num)
                        report-currency
-                       ;; Use midday as the transaction time so it matches a price
-                       ;; on the same day.  Otherwise it uses midnight which will
-                       ;; likely match a price on the previous day
-                       (timespecCanonicalDayTime trans-date))))
-    
+                       (timespecCanonicalDayTime trans-date)))))
+
+    (define cells
+      (map (lambda (cell)
+             (converted ((cdr cell) split)))
+           cell-calculators))
+
     (if (used-date column-vector)
         (addto! row-contents
                 (if transaction-row?
@@ -541,84 +558,97 @@
                         (gnc:make-html-table-cell/markup "text-cell"
                                                          (gnc-get-num-action parent split)))
                     " ")))
-    
+
     (if (used-description column-vector)
         (addto! row-contents
                 (if transaction-row?
                     (gnc:make-html-table-cell/markup "text-cell"
                                                      (xaccTransGetDescription parent))
                     " ")))
-    
+
     (if (used-memo column-vector)
         (let ((memo (xaccSplitGetMemo split)))
           (if (and (equal? memo "") (used-notes column-vector))
               (addto! row-contents (xaccTransGetNotes parent))
               (addto! row-contents memo))))
-    
+
     (if (or (used-account-name column-vector) (used-account-code column-vector))
         (addto! row-contents (account-namestring account
                                                  (used-account-code      column-vector)
                                                  (used-account-name      column-vector)
                                                  (used-account-full-name column-vector))))
-    
+
     (if (or (used-other-account-name column-vector) (used-other-account-code column-vector))
         (addto! row-contents (account-namestring (xaccSplitGetAccount
                                                   (xaccSplitGetOtherSplit split))
                                                  (used-other-account-code      column-vector)
                                                  (used-other-account-name      column-vector)
                                                  (used-other-account-full-name column-vector))))
-    
-    (if (used-shares column-vector)
-        (addto! row-contents (xaccSplitGetAmount split)))
-    (if (used-price column-vector)
-        (addto! 
-         row-contents 
-         (gnc:make-gnc-monetary (xaccTransGetCurrency parent)
-                                (xaccSplitGetSharePrice split))))
-    (if (used-amount-single column-vector)
-        (addto! row-contents
-                (gnc:make-html-table-cell/markup "number-cell"
-                                                 (gnc:html-transaction-anchor parent split-value))))
-    (if (used-amount-double-positive column-vector)
-        (if (gnc-numeric-positive-p (gnc:gnc-monetary-amount split-value))
-            (addto! row-contents
-                    (gnc:make-html-table-cell/markup "number-cell"
-                                                     (gnc:html-transaction-anchor parent split-value)))
-            (addto! row-contents " ")))
-    (if (used-amount-double-negative column-vector)
-        (if (gnc-numeric-negative-p (gnc:gnc-monetary-amount split-value))
-            (addto! row-contents
-                    (gnc:make-html-table-cell/markup
-                     "number-cell" (gnc:html-transaction-anchor parent (gnc:monetary-neg split-value))))
-            (addto! row-contents " ")))
-    (if (used-running-balance column-vector)
-        (begin
-          (gnc:debug "split is " split)
-          (gnc:debug "split get balance:" (xaccSplitGetBalance split))
-          (addto! row-contents
-                  (gnc:make-html-table-cell/markup
-                   "number-cell"
-                   (gnc:make-gnc-monetary currency
-                                          (xaccSplitGetBalance split))))))
+
+    ;(if (used-shares column-vector)
+    ;    (addto! row-contents (xaccSplitGetAmount split)))
+    ;(if (used-price column-vector)
+    ;    (addto!
+    ;     row-contents
+    ;     (gnc:make-gnc-monetary (xaccTransGetCurrency parent)
+    ;                            (xaccSplitGetSharePrice split))))
+    ;(if (used-amount-single column-vector)
+    ;    (addto! row-contents
+    ;            (gnc:make-html-table-cell/markup "number-cell"
+    ;                                             (gnc:html-transaction-anchor parent split-value))))
+    ;(if (used-amount-double-positive column-vector)
+    ;    (if (gnc-numeric-positive-p (gnc:gnc-monetary-amount split-value))
+    ;        (addto! row-contents
+    ;                (gnc:make-html-table-cell/markup "number-cell"
+    ;                                                 (gnc:html-transaction-anchor parent split-value)))
+    ;        (addto! row-contents " ")))
+    ;(if (used-amount-double-negative column-vector)
+    ;    (if (gnc-numeric-negative-p (gnc:gnc-monetary-amount split-value))
+    ;        (addto! row-contents
+    ;                (gnc:make-html-table-cell/markup
+    ;                 "number-cell" (gnc:html-transaction-anchor parent (gnc:monetary-neg split-value))))
+    ;        (addto! row-contents " ")))
+
+    (for-each (lambda (cell)
+                (if cell
+                    (addto! row-contents
+                            (gnc:make-html-table-cell/markup
+                             "number-cell"
+                             (gnc:html-transaction-anchor
+                              parent
+                              (gnc:make-gnc-monetary report-currency cell))))
+                    (addto! row-contents (gnc:html-make-empty-cell))))
+              cells)
+
     (gnc:html-table-append-row/markup! table row-style
                                        (reverse row-contents))
-    split-value))
+    cells))
 
-
-(define date-sorting-types (list 'date 'exact-time 'register-order))
+(define date-sorting-types (list 'date 'register-order))
 
 (define (trep-options-generator)
   (define gnc:*transaction-report-options* (gnc:new-options))
   (define (gnc:register-trep-option new-option)
     (gnc:register-option gnc:*transaction-report-options* new-option))
-  
+
   ;; General options
-  
+
   (gnc:options-add-date-interval!
    gnc:*transaction-report-options*
    gnc:pagename-general (N_ "Start Date") (N_ "End Date") "a")
-  
-  
+
+  ;(gnc:register-trep-option
+  ; (gnc:make-multichoice-option
+  ;  gnc:pagename-general (N_ "Style")
+  ;  "d" (N_ "Report style.")
+  ;  'single
+  ;  (list (vector 'multi-line
+  ;                (N_ "Multi-Line")
+  ;                (N_ "Display N lines."))
+  ;        (vector 'single
+  ;                (N_ "Single")
+  ;                (N_ "Display 1 line.")))))
+
   (gnc:register-trep-option
    (gnc:make-complex-boolean-option
     gnc:pagename-general optname-common-currency
@@ -628,24 +658,24 @@
                  gnc:*transaction-report-options*
                  gnc:pagename-general
                  optname-currency
-                 x))
-    ))
-  
+                 x))))
+
   (gnc:options-add-currency!
    gnc:*transaction-report-options* gnc:pagename-general optname-currency "f")
-  
+
   (gnc:register-trep-option
    (gnc:make-simple-boolean-option
     gnc:pagename-general optname-table-export
-    "g" (N_ "Formats the table suitable for cut & paste exporting with extra cells.") #f))  
-  
+    "g" (N_ "Formats the table suitable for cut & paste exporting with extra cells.") #f))
+
   ;; Accounts options
-  
+
   ;; account to do report on
+
   (gnc:register-trep-option
-   (gnc:make-account-list-option
+   (gnc:make-account-list-limited-option
     gnc:pagename-accounts (N_ "Accounts")
-    "a" (N_ "Report on these accounts.")
+    "b1" (N_ "Report on these accounts.")
     ;; select, by default, no accounts! Selecting all accounts will
     ;; always imply an insanely long waiting time upon opening, and it
     ;; is almost never useful. So we instead display the normal error
@@ -653,20 +683,33 @@
     ;; continue.
     (lambda ()
       '())
-    #f #t))
-  
+    #f #t
+    (list ACCT-TYPE-INCOME ACCT-TYPE-EXPENSE ACCT-TYPE-PAYABLE ACCT-TYPE-RECEIVABLE)))
+
   (gnc:register-trep-option
    (gnc:make-string-option
     gnc:pagename-accounts (N_ "Account Substring")
-    "a5" (N_ "Match only above accounts whose fullname contains substring e.g. ':Travel' will \
+    "b15" (N_ "Match only above accounts whose fullname contains substring e.g. ':Travel' will \
 match Expenses:Travel:Holiday and Expenses:Business:Travel. Can be left blank, which will \
 disable the substring filter. This filter is case-sensitive.")
     ""))
-  
+
+  (gnc:register-trep-option
+   (gnc:make-account-list-limited-option
+    gnc:pagename-accounts (N_ "Tax Accounts")
+    "b17" (N_ "Please find and select the accounts which will hold the tax collected or paid. \
+These accounts must contain splits which document the monies which are wholly sent or claimed \
+from tax authorities during periodic GST/VAT returns. These accounts must be of type ASSET \
+for taxes paid on expenses, and type LIABILITY for taxes collected on sales.")
+    (lambda ()
+      '())
+    #f #t
+    (list ACCT-TYPE-ASSET ACCT-TYPE-LIABILITY)))
+
   (gnc:register-trep-option
    (gnc:make-account-list-option
     gnc:pagename-accounts (N_ "Filter By...")
-    "b" (N_ "Filter on these accounts.")
+    "b2" (N_ "Filter on these accounts.")
     (lambda ()
       ;; FIXME : gnc:get-current-accounts disappeared.
       (let* ((current-accounts '())
@@ -678,7 +721,7 @@ disable the substring filter. This filter is case-sensitive.")
               ((> num-accounts 0) (list first-account))
               (else '()))))
     #f #t))
-  
+
   (gnc:register-trep-option
    (gnc:make-multichoice-option
     gnc:pagename-accounts (N_ "Filter Type")
@@ -694,9 +737,9 @@ disable the substring filter. This filter is case-sensitive.")
                   (N_ "Exclude Transactions to/from Filter Accounts")
                   (N_ "Exclude transactions to/from all filter accounts."))
           )))
-  
+
   ;;
-  
+
   (gnc:register-trep-option
    (gnc:make-multichoice-option
     gnc:pagename-accounts optname-void-transactions
@@ -710,125 +753,117 @@ disable the substring filter. This filter is case-sensitive.")
            'void-only
            (N_ "Void only")
            (N_ "Show only voided transactions."))
-          (vector 
+          (vector
            'both
            (N_ "Both")
            (N_ "Show both (and include void transactions in totals).")))))
-  
+
   ;; Sorting options
-  
+
   (let ((options gnc:*transaction-report-options*)
-        
-        (key-choice-list 
+
+        (key-choice-list
          (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
              (list (vector 'none
                            (N_ "None")
                            (N_ "Do not sort."))
-                   
+
                    (vector 'account-name
                            (N_ "Account Name")
                            (N_ "Sort & subtotal by account name."))
-                   
+
                    (vector 'account-code
                            (N_ "Account Code")
                            (N_ "Sort & subtotal by account code."))
-                   
+
                    (vector 'date
                            (N_ "Date")
                            (N_ "Sort by date."))
-                   
-                   (vector 'exact-time
-                           (N_ "Exact Time")
-                           (N_ "Sort by exact time."))
-                   
+
                    (vector 'reconciled-date
                            (N_ "Reconciled Date")
                            (N_ "Sort by the Reconciled Date."))
-                   
+
                    (vector 'register-order
                            (N_ "Register Order")
                            (N_ "Sort as in the register."))
-                   
-                   (vector 'corresponding-acc-name 
+
+                   (vector 'corresponding-acc-name
                            (N_ "Other Account Name")
                            (N_ "Sort by account transferred from/to's name."))
-                   
+
                    (vector 'corresponding-acc-code
                            (N_ "Other Account Code")
                            (N_ "Sort by account transferred from/to's code."))
-                   
+
                    (vector 'amount
                            (N_ "Amount")
                            (N_ "Sort by amount."))
-                   
+
                    (vector 'description
                            (N_ "Description")
                            (N_ "Sort by description."))
-                   
+
                    (vector 'number
                            (N_ "Number/Action")
                            (N_ "Sort by check number/action."))
-                   
+
                    (vector 't-number
                            (N_ "Transaction Number")
                            (N_ "Sort by transaction number."))
-                   
+
                    (vector 'memo
                            (N_ "Memo")
                            (N_ "Sort by memo.")))
              (list (vector 'none
                            (N_ "None")
                            (N_ "Do not sort."))
-                   
+
                    (vector 'account-name
                            (N_ "Account Name")
                            (N_ "Sort & subtotal by account name."))
-                   
+
                    (vector 'account-code
                            (N_ "Account Code")
                            (N_ "Sort & subtotal by account code."))
-                   
+
                    (vector 'date
                            (N_ "Date")
                            (N_ "Sort by date."))
-                   
-                   (vector 'exact-time
-                           (N_ "Exact Time")
-                           (N_ "Sort by exact time."))
-                   
+
                    (vector 'reconciled-date
                            (N_ "Reconciled Date")
                            (N_ "Sort by the Reconciled Date."))
-                   
+
                    (vector 'register-order
                            (N_ "Register Order")
                            (N_ "Sort as in the register."))
-                   
-                   (vector 'corresponding-acc-name 
+
+                   (vector 'corresponding-acc-name
                            (N_ "Other Account Name")
                            (N_ "Sort by account transferred from/to's name."))
-                   
+
                    (vector 'corresponding-acc-code
                            (N_ "Other Account Code")
                            (N_ "Sort by account transferred from/to's code."))
-                   
+
                    (vector 'amount
                            (N_ "Amount")
                            (N_ "Sort by amount."))
-                   
+
                    (vector 'description
                            (N_ "Description")
                            (N_ "Sort by description."))
-                   
+
                    (vector 'number
                            (N_ "Number")
                            (N_ "Sort by check/transaction number."))
-                   
+
                    (vector 'memo
                            (N_ "Memo")
                            (N_ "Sort by memo.")))))
-        
-        (ascending-choice-list 
+
+        (ascending-choice-list
          (list
           (vector 'ascend
                   (N_ "Ascending")
@@ -836,7 +871,7 @@ disable the substring filter. This filter is case-sensitive.")
           (vector 'descend
                   (N_ "Descending")
                   (N_ "Largest to smallest, latest to earliest."))))
-        
+
         (subtotal-choice-list
          (list
           (vector 'none (N_ "None") (N_ "None."))
@@ -844,12 +879,12 @@ disable the substring filter. This filter is case-sensitive.")
           (vector 'monthly (N_ "Monthly") (N_ "Monthly."))
           (vector 'quarterly (N_ "Quarterly") (N_ "Quarterly."))
           (vector 'yearly (N_ "Yearly") (N_ "Yearly."))))
-        
+
         (prime-sortkey 'account-name)
         (prime-sortkey-subtotal-true #t)
         (sec-sortkey 'register-order)
         (sec-sortkey-subtotal-true #f))
-    
+
     (define (apply-selectable-by-name-sorting-options)
       (let* ((prime-sortkey-enabled (not (eq? prime-sortkey 'none)))
              (prime-sortkey-subtotal-enabled (member prime-sortkey subtotal-enabled))
@@ -857,41 +892,41 @@ disable the substring filter. This filter is case-sensitive.")
              (sec-sortkey-enabled (not (eq? sec-sortkey 'none)))
              (sec-sortkey-subtotal-enabled (member sec-sortkey subtotal-enabled))
              (sec-date-sortingtype-enabled (member sec-sortkey date-sorting-types)))
-        
+
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-prime-subtotal
          prime-sortkey-subtotal-enabled)
-        
+
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-prime-sortorder
          prime-sortkey-enabled)
-        
+
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-sec-subtotal
          sec-sortkey-subtotal-enabled)
-        
+
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-sec-sortorder
          sec-sortkey-enabled)
-        
+
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-full-account-name
          (or (and prime-sortkey-subtotal-enabled prime-sortkey-subtotal-true)
              (and sec-sortkey-subtotal-enabled sec-sortkey-subtotal-true)))
-        
+
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-show-account-code
          (or (and prime-sortkey-subtotal-enabled prime-sortkey-subtotal-true)
              (and sec-sortkey-subtotal-enabled sec-sortkey-subtotal-true)))
-        
+
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-prime-date-subtotal
          prime-date-sortingtype-enabled)
-        
+
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-sec-date-subtotal
          sec-date-sortingtype-enabled)))
-    
+
     ;; primary sorting criterion
     (gnc:register-trep-option
      (gnc:make-multichoice-callback-option
@@ -902,21 +937,21 @@ disable the substring filter. This filter is case-sensitive.")
       (lambda (x)
         (set! prime-sortkey x)
         (apply-selectable-by-name-sorting-options))))
-    
+
     (gnc:register-trep-option
      (gnc:make-simple-boolean-option
       pagename-sorting optname-full-account-name
       "j1"
       (N_ "Show the full account name for subtotals and subtitles?")
       #f))
-    
+
     (gnc:register-trep-option
      (gnc:make-simple-boolean-option
       pagename-sorting optname-show-account-code
       "j2"
       (N_ "Show the account code for subtotals and subtitles?")
       #f))
-    
+
     (gnc:register-trep-option
      (gnc:make-complex-boolean-option
       pagename-sorting optname-prime-subtotal
@@ -926,21 +961,21 @@ disable the substring filter. This filter is case-sensitive.")
       (lambda (x)
         (set! prime-sortkey-subtotal-true x)
         (apply-selectable-by-name-sorting-options))))
-    
+
     (gnc:register-trep-option
      (gnc:make-multichoice-option
       pagename-sorting optname-prime-date-subtotal
       "e2" (N_ "Do a date subtotal.")
       'monthly
       subtotal-choice-list))
-    
+
     (gnc:register-trep-option
      (gnc:make-multichoice-option
       pagename-sorting optname-prime-sortorder
       "e" (N_ "Order of primary sorting.")
       'ascend
       ascending-choice-list))
-    
+
     ;; Secondary sorting criterion
     (gnc:register-trep-option
      (gnc:make-multichoice-callback-option
@@ -952,7 +987,7 @@ disable the substring filter. This filter is case-sensitive.")
       (lambda (x)
         (set! sec-sortkey x)
         (apply-selectable-by-name-sorting-options))))
-    
+
     (gnc:register-trep-option
      (gnc:make-complex-boolean-option
       pagename-sorting optname-sec-subtotal
@@ -962,157 +997,125 @@ disable the substring filter. This filter is case-sensitive.")
       (lambda (x)
         (set! sec-sortkey-subtotal-true x)
         (apply-selectable-by-name-sorting-options))))
-    
+
     (gnc:register-trep-option
      (gnc:make-multichoice-option
       pagename-sorting optname-sec-date-subtotal
       "i2" (N_ "Do a date subtotal.")
-      'monthly
+      'none
       subtotal-choice-list))
-    
+
     (gnc:register-trep-option
      (gnc:make-multichoice-option
       pagename-sorting optname-sec-sortorder
       "i" (N_ "Order of Secondary sorting.")
       'ascend
       ascending-choice-list)))
-  
+
   ;; Display options
-  
-  (let ((options gnc:*transaction-report-options*)
-        (disp-memo? #t)
-        (disp-accname? #t)
-        (disp-other-accname? #f)
-        (is-single? #t))
-    
-    (define (apply-selectable-by-name-display-options)
-      (gnc-option-db-set-option-selectable-by-name
-       options gnc:pagename-display (N_ "Use Full Account Name")
-       disp-accname?)
-      
-      (gnc-option-db-set-option-selectable-by-name
-       options gnc:pagename-display (N_ "Other Account Name")
-       is-single?)
-      
-      (gnc-option-db-set-option-selectable-by-name
-       options gnc:pagename-display (N_ "Use Full Other Account Name")
-       (and disp-other-accname? is-single?))
-      
-      (gnc-option-db-set-option-selectable-by-name
-       options gnc:pagename-display (N_ "Other Account Code")
-       is-single?)
-      
-      (gnc-option-db-set-option-selectable-by-name
-       options gnc:pagename-display (N_ "Notes")
-       disp-memo?))
-    
-    (for-each
-     (lambda (l)
-       (gnc:register-trep-option
-        (gnc:make-simple-boolean-option
-         gnc:pagename-display (car l) (cadr l) (caddr l) (cadddr l))))
-     ;; One list per option here with: option-name, sort-tag,
-     ;; help-string, default-value
-     (list
-      (list (N_ "Date")                         "a"  (N_ "Display the date?") #t)
-      (list (N_ "Reconciled Date")              "a2" (N_ "Display the reconciled date?") #f)
-      (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
-          (list (N_ "Num/Action")               "b"  (N_ "Display the check number?") #t)
-          (list (N_ "Num")                      "b"  (N_ "Display the check number?") #t))
-      (list (N_ "Description")                  "c"  (N_ "Display the description?") #t)
-      (list (N_ "Notes")                        "d2" (N_ "Display the notes if the memo is unavailable?") #t)
-      ;; account name option appears here
-      (list (N_ "Use Full Account Name")        "f"  (N_ "Display the full account name?") #t)
-      (list (N_ "Account Code")                 "g"  (N_ "Display the account code?") #f)
-      ;; other account name option appears here
-      (list (N_ "Use Full Other Account Name")  "i"  (N_ "Display the full account name?") #f)
-      (list (N_ "Other Account Code")           "j"  (N_ "Display the other account code?") #f)
-      (list (N_ "Shares")                       "k"  (N_ "Display the number of shares?") #f)
-      (list (N_ "Price")                        "l"  (N_ "Display the shares price?") #f)
-      ;; note the "Amount" multichoice option in between here
-      (list (N_ "Running Balance")              "n"  (N_ "Display a running balance?") #f)
-      (list (N_ "Totals")                       "o"  (N_ "Display the totals?") #t)))
-    
+
+  (for-each
+   (lambda (l)
+     (gnc:register-trep-option
+      (gnc:make-simple-boolean-option
+       gnc:pagename-display (car l) (cadr l) (caddr l) (cadddr l))))
+   ;; One list per option here with: option-name, sort-tag,
+   ;; help-string, default-value
+   (list
+    (list (N_ "Date")                         "a"  (N_ "Display the date?") #t)
+    (list (N_ "Reconciled Date")              "a2" (N_ "Display the reconciled date?") #f)
     (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
-        (gnc:register-trep-option
-         (gnc:make-simple-boolean-option
-          gnc:pagename-display (N_ "Trans Number")
-          "b2" (N_ "Display the trans number?") #f)))
-    
-    ;; Add an option to display the memo, and disable the notes option
-    ;; when memos are not included.
-    (gnc:register-trep-option
-     (gnc:make-complex-boolean-option
-      gnc:pagename-display (N_ "Memo")
-      "d"  (N_ "Display the memo?") #t
-      #f
-      (lambda (x)
-        (set! disp-memo? x)
-        (apply-selectable-by-name-display-options))))
-    
-    ;; Ditto for Account Name #t -> Use Full Account Name is selectable
-    (gnc:register-trep-option
-     (gnc:make-complex-boolean-option
-      gnc:pagename-display (N_ "Account Name")
-      "e"  (N_ "Display the account name?") #t
-      #f
-      (lambda (x)
-        (set! disp-accname? x)
-        (apply-selectable-by-name-display-options))))
-    
-    ;; Ditto for Other Account Name #t -> Use Full Other Account Name is selectable
-    (gnc:register-trep-option
-     (gnc:make-complex-boolean-option
-      gnc:pagename-display (N_ "Other Account Name")
-      "h5"  (N_ "Display the other account name? (if this is a split transaction, this parameter is guessed).") #f
-      #f
-      (lambda (x)
-        (set! disp-other-accname? x)
-        (apply-selectable-by-name-display-options))))
-    
-    (gnc:register-trep-option
-     (gnc:make-multichoice-callback-option
-      gnc:pagename-display optname-detail-level
-      "h" (N_ "Amount of detail to display per transaction.")
-      'single
-      (list (vector 'multi-line
-                    (N_ "Multi-Line")
-                    (N_ "Display all splits in a transaction on a separate line."))
-            (vector 'single
-                    (N_ "Single")
-                    (N_ "Display one line per transaction, merging multiple splits where required.")))
-      #f
-      (lambda (x)
-        (set! is-single? (eq? x 'single))
-        (apply-selectable-by-name-display-options))))
-    
-    (gnc:register-trep-option
-     (gnc:make-multichoice-option
-      gnc:pagename-display (N_ "Amount")
-      "m" (N_ "Display the amount?")  
-      'single
-      (list
-       (vector 'none (N_ "None") (N_ "No amount display."))
-       (vector 'single (N_ "Single") (N_ "Single Column Display."))
-       (vector 'double (N_ "Double") (N_ "Two Column Display.")))))
-    
-    (gnc:register-trep-option
-     (gnc:make-multichoice-option
-      gnc:pagename-display (N_ "Sign Reverses")
-      "p" (N_ "Reverse amount display for certain account types.")
-      'credit-accounts
-      (list 
-       (vector 'none (N_ "None") (N_ "Don't change any displayed amounts."))
-       (vector 'income-expense (N_ "Income and Expense")
-               (N_ "Reverse amount display for Income and Expense Accounts."))
-       (vector 'credit-accounts (N_ "Credit Accounts")
-               (N_ "Reverse amount display for Liability, Payable, Equity, \
-Credit Card, and Income accounts."))))))
-  
-  
+        (list (N_ "Num/Action")               "b"  (N_ "Display the check number?") #t)
+        (list (N_ "Num")                      "b"  (N_ "Display the check number?") #t))
+    (list (N_ "Description")                  "c"  (N_ "Display the description?") #t)
+    (list (N_ "Notes")                        "d2" (N_ "Display the notes if the memo is unavailable?") #t)
+    ;; account name option appears here
+    (list (N_ "Use Full Account Name")        "f"  (N_ "Display the full account name?") #t)
+    (list (N_ "Account Code")                 "g"  (N_ "Display the account code?") #f)
+    ;; other account name option appears here
+    (list (N_ "Use Full Other Account Name")  "i"  (N_ "Display the full account name?") #f)
+    (list (N_ "Other Account Code")           "j"  (N_ "Display the other account code?") #f)
+    ;(list (N_ "Shares")                       "k"  (N_ "Display the number of shares?") #f)
+    ;(list (N_ "Price")                        "l"  (N_ "Display the shares price?") #f)
+    ;; note the "Amount" multichoice option in between here
+    (list (N_ "Totals")                       "o"  (N_ "Display the totals?") #t)
+    (list (N_ "Individual income columns")    "p" (N_ "Display individual income columns rather than their sum") #f)
+    (list (N_ "Individual expense columns")   "q" (N_ "Display individual expense columns rather than their sum") #f)
+    (list (N_ "Individual tax columns")       "r"  (N_ "Display individual tax columns rather than their sum") #f)
+    (list (N_ "Remittance amount")            "s"  (N_ "Display the remittance amount (total sales - total purchases)") #f)
+    (list (N_ "Net Income")                   "t"  (N_ "Display the net income (sales without tax - purchases without tax)") #f)
+    (list (N_ "Tax payable")                  "t"  (N_ "Display the tax payable (tax on sales - tax on purchases)") #f)
+    ))
+
+  (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
+      (gnc:register-trep-option
+       (gnc:make-simple-boolean-option
+        gnc:pagename-display (N_ "Trans Number")
+        "b2" (N_ "Display the trans number?") #f)))
+
+  ;; Add an option to display the memo, and disable the notes option
+  ;; when memos are not included.
+  (gnc:register-trep-option
+   (gnc:make-complex-boolean-option
+    gnc:pagename-display (N_ "Memo")
+    "d"  (N_ "Display the memo?") #t
+    #f
+    (lambda (x) (gnc-option-db-set-option-selectable-by-name
+                 gnc:*transaction-report-options*
+                 gnc:pagename-display
+                 (N_ "Notes")
+                 x))))
+
+  ;; Ditto for Account Name #t -> Use Full Account Name is selectable
+  (gnc:register-trep-option
+   (gnc:make-complex-boolean-option
+    gnc:pagename-display (N_ "Account Name")
+    "e"  (N_ "Display the account name?") #t
+    #f
+    (lambda (x) (gnc-option-db-set-option-selectable-by-name
+                 gnc:*transaction-report-options*
+                 gnc:pagename-display
+                 (N_ "Use Full Account Name")
+                 x))))
+
+  ;; Ditto for Other Account Name #t -> Use Full Other Account Name is selectable
+  (gnc:register-trep-option
+   (gnc:make-complex-boolean-option
+    gnc:pagename-display (N_ "Other Account Name")
+    "h5"  (N_ "Display the other account name? (if this is a split transaction, this parameter is guessed).") #f
+    #f
+    (lambda (x) (gnc-option-db-set-option-selectable-by-name
+                 gnc:*transaction-report-options*
+                 gnc:pagename-display
+                 (N_ "Use Full Other Account Name")
+                 x))))
+
+  ;(gnc:register-trep-option
+  ; (gnc:make-multichoice-option
+  ;  gnc:pagename-display (N_ "Amount")
+  ;  "m" (N_ "Display the amount?")
+  ;  'single
+  ;  (list
+  ;   (vector 'none (N_ "None") (N_ "No amount display."))
+  ;   (vector 'single (N_ "Single") (N_ "Single Column Display."))
+  ;   (vector 'double (N_ "Double") (N_ "Two Column Display."))
+  ;   )))
+
+  ;(gnc:register-trep-option
+  ; (gnc:make-multichoice-option
+  ;  gnc:pagename-display (N_ "Sign Reverses")
+  ;  "p" (N_ "Reverse amount display for certain account types.")
+  ;  'none
+  ;  (list
+  ;   (vector 'none (N_ "None") (N_ "Don't change any displayed amounts."))
+  ;   (vector 'income-expense (N_ "Income and Expense")
+  ;           (N_ "Reverse amount display for Income and Expense Accounts."))
+  ;   (vector 'credit-accounts (N_ "Credit Accounts")
+  ;           (N_ "Reverse amount display for Liability, Payable, Equity, Credit Card, and Income accounts.")))))
+
   (gnc:options-set-default-section gnc:*transaction-report-options*
                                    gnc:pagename-general)
-  
+
   gnc:*transaction-report-options*)
 
 
@@ -1122,7 +1125,7 @@ Credit Card, and Income accounts."))))))
     (sprintf #f (_ "From %s To %s") begin-string end-string)))
 
 (define (get-primary-subtotal-style options)
-  (let ((bgcolor (gnc:lookup-option options 
+  (let ((bgcolor (gnc:lookup-option options
                                     (N_ "Colors")
                                     (N_ "Primary Subtotals/headings"))))
     (list 'attribute (list "bgcolor" (gnc:color-option->html bgcolor)))))
@@ -1155,34 +1158,105 @@ Credit Card, and Income accounts."))))))
 ;; ;;;;;;;;;;;;;;;;;;;;
 ;; Here comes the big function that builds the whole table.
 (define (make-split-table splits options
+                          accounts-tax-paid
+                          accounts-tax-collected
+                          accounts-sales
+                          accounts-purchases
                           primary-subtotal-pred
                           secondary-subtotal-pred
                           primary-subheading-renderer
                           secondary-subheading-renderer
                           primary-subtotal-renderer
                           secondary-subtotal-renderer)
-  
+
   (let ((work-to-do (length splits))
         (work-done 0)
         (used-columns (build-column-used options)))
-    (define (get-account-types-to-reverse options)
-      (cdr (assq (gnc:option-value 
-                  (gnc:lookup-option options
-                                     gnc:pagename-display
-                                     (N_ "Sign Reverses")))
-                 account-types-to-reverse-assoc-list)))
-    
-    
-    (define (transaction-report-multi-rows-p options)
-      (eq? (gnc:option-value
-            (gnc:lookup-option options gnc:pagename-display optname-detail-level))
-           'multi-line))
-    
+
+    (define calculated-cells
+      (letrec
+          ((myadd (lambda (X Y) (if X (if Y (gnc-numeric-add X Y GNC-DENOM-AUTO GNC-RND-ROUND) X) Y)))
+           (myneg (lambda (X) (if X (gnc-numeric-neg X) #f)))
+           (split-adder (lambda (split accountlist typefilter)
+                          (let* ((transaction (xaccSplitGetParent split))
+                                 (splits-in-transaction (xaccTransGetSplitList transaction))
+                                 (sum #f))
+                            (for-each (lambda (s)
+                                        (let* ((splitAcc (xaccSplitGetAccount s))
+                                               (splitVal (if (xaccTransGetVoidStatus transaction)
+                                                             (xaccSplitVoidFormerValue s)
+                                                             (xaccSplitGetValue s)))
+                                               (splitCommodity (xaccAccountGetCommodity splitAcc))
+                                               (splitAccType (xaccAccountGetType splitAcc))
+                                               (splitAccName (xaccAccountGetName splitAcc)))
+                                          (if accountlist
+                                              (if (member splitAcc accountlist)
+                                                  (set! sum (myadd sum splitVal))))
+                                          (if typefilter
+                                              (if (eq? typefilter splitAccType)
+                                                  (set! sum (myadd sum splitVal))))))
+                                      splits-in-transaction)
+                            sum)))
+           ;(sales-without-tax (lambda (s) (split-adder s #f ACCT-TYPE-INCOME)))
+           ;(purchases-without-tax (lambda (s) (split-adder s #f ACCT-TYPE-EXPENSE)))
+           (tax-on-sales (lambda (s) (split-adder s accounts-tax-collected #f)))
+           (tax-on-purchases (lambda (s) (split-adder s accounts-tax-paid #f)))
+           (sales-without-tax (lambda (s) (split-adder s accounts-sales #f)))
+           (purchases-without-tax (lambda (s) (split-adder s accounts-purchases #f)))
+           (account-adder (lambda (acc) (lambda (s) (split-adder s (list acc) #f))))
+           (total-sales (lambda (s) (myadd (tax-on-sales s) (sales-without-tax s))))
+           (total-purchases (lambda (s) (myadd (tax-on-purchases s) (purchases-without-tax s))))
+           (bank-remittance (lambda (s) (myneg (myadd (total-sales s) (total-purchases s)))))
+           (net-income (lambda (s) (myneg (myadd (sales-without-tax s) (purchases-without-tax s)))))
+           (tax-payable (lambda (s) (myneg (myadd (tax-on-purchases s) (tax-on-sales s))))))
+        (append
+         (list (cons "Total Sales" total-sales))
+         (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Individual income columns")))
+             (map (lambda (acc) (cons (xaccAccountGetName acc) (account-adder acc)))
+                  accounts-sales)
+             (list (cons "Net Sales" sales-without-tax)))
+         (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Individual tax columns")))
+             (map (lambda (acc) (cons (xaccAccountGetName acc) (account-adder acc)))
+                  accounts-tax-collected)
+             (list (cons "Tax on Sales" tax-on-sales)))
+         (list (cons "Total Purchases" total-purchases))
+         (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Individual expense columns")))
+             (map (lambda (acc) (cons (xaccAccountGetName acc) (account-adder acc)))
+                  accounts-purchases)
+             (list (cons "Net Purchases" purchases-without-tax)))
+         (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Individual tax columns")))
+             (map (lambda (acc) (cons (xaccAccountGetName acc) (account-adder acc)))
+                  accounts-tax-paid)
+             (list (cons "Tax on Purchases" tax-on-purchases)))
+         (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Remittance amount")))
+             (list (cons "Remittance" bank-remittance))
+             '())
+         (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Net Income")))
+             (list (cons "Net Income" net-income))
+             '())
+         (if (gnc:option-value (gnc:lookup-option options gnc:pagename-display (N_ "Tax payable")))
+             (list (cons "Tax Payable" tax-payable))
+             '())
+         )))
+
+
+    ;(define (get-account-types-to-reverse options)
+    ;  (cdr (assq (gnc:option-value
+    ;              (gnc:lookup-option options
+    ;                                 gnc:pagename-display
+    ;                                 (N_ "Sign Reverses")))
+    ;             account-types-to-reverse-assoc-list)))
+
+    ;(define (transaction-report-multi-rows-p options)
+    ;  (eq? (gnc:option-value
+    ;        (gnc:lookup-option options gnc:pagename-general (N_ "Style")))
+    ;       'multi-line))
+
     (define (transaction-report-export-p options)
       (gnc:option-value
        (gnc:lookup-option options gnc:pagename-general
                           optname-table-export)))
-    
+
     (define (add-other-split-rows split table used-columns
                                   row-style account-types-to-reverse)
       (define (other-rows-driver split parent table used-columns i)
@@ -1191,16 +1265,16 @@ Credit Card, and Income accounts."))))))
                 ((equal? current split)
                  (other-rows-driver split parent table used-columns (+ i 1)))
                 (else (begin
-                        (add-split-row table current used-columns options
+                        (add-split-row table current used-columns calculated-cells options
                                        row-style account-types-to-reverse #f)
                         (other-rows-driver split parent table used-columns
                                            (+ i 1)))))))
-      
+
       (other-rows-driver split (xaccSplitGetParent split)
                          table used-columns 0))
-    
-    (define (do-rows-with-subtotals splits 
-                                    table 
+
+    (define (do-rows-with-subtotals splits
+                                    table
                                     used-columns
                                     width
                                     multi-rows?
@@ -1208,15 +1282,15 @@ Credit Card, and Income accounts."))))))
                                     export?
                                     account-types-to-reverse
                                     primary-subtotal-pred
-                                    secondary-subtotal-pred 
+                                    secondary-subtotal-pred
                                     primary-subheading-renderer
                                     secondary-subheading-renderer
                                     primary-subtotal-renderer
                                     secondary-subtotal-renderer
-                                    primary-subtotal-collector 
-                                    secondary-subtotal-collector 
-                                    total-collector)
-      
+                                    primary-subtotal-collectors
+                                    secondary-subtotal-collectors
+                                    total-collectors)
+
       (gnc:report-percent-done (* 100 (/ work-done work-to-do)))
       (set! work-done (+ 1 work-done))
       (if (null? splits)
@@ -1228,74 +1302,79 @@ Credit Card, and Income accounts."))))))
               (gnc:make-html-table-cell/size
                1 width (gnc:make-html-text (gnc:html-markup-hr)))))
             (if (gnc:option-value (gnc:lookup-option options "Display" "Totals"))
-                (render-grand-total table width total-collector export?)))
-          
+                (render-grand-total table width total-collectors export?)))
+
           (let* ((current (car splits))
                  (current-row-style (if multi-rows? def:normal-row-style
-                                        (if odd-row? def:normal-row-style 
+                                        (if odd-row? def:normal-row-style
                                             def:alternate-row-style)))
                  (rest (cdr splits))
                  (next (if (null? rest) #f
                            (car rest)))
-                 (split-value (add-split-row 
-                               table 
-                               current 
-                               used-columns
-                               options
-                               current-row-style
-                               account-types-to-reverse
-                               #t)))
+                 (split-values (add-split-row
+                                table
+                                current
+                                used-columns
+                                calculated-cells
+                                options
+                                current-row-style
+                                account-types-to-reverse
+                                #t)))
             (if multi-rows?
                 (add-other-split-rows
                  current table used-columns def:alternate-row-style
                  account-types-to-reverse))
-            
-            (primary-subtotal-collector 'add 
-                                        (gnc:gnc-monetary-commodity
-                                         split-value) 
-                                        (gnc:gnc-monetary-amount
-                                         split-value))
-            (secondary-subtotal-collector 'add
-                                          (gnc:gnc-monetary-commodity
-                                           split-value)
-                                          (gnc:gnc-monetary-amount
-                                           split-value))
-            (total-collector 'add
-                             (gnc:gnc-monetary-commodity split-value)
-                             (gnc:gnc-monetary-amount split-value))
-            
+
+            (map (lambda (collector value)
+                   (if value
+                       (collector 'add (gnc:gnc-monetary-commodity value) (gnc:gnc-monetary-amount value))))
+                 primary-subtotal-collectors
+                 split-values)
+
+            (map (lambda (collector value)
+                   (if value
+                       (collector 'add (gnc:gnc-monetary-commodity value) (gnc:gnc-monetary-amount value))))
+                 secondary-subtotal-collectors
+                 split-values)
+
+            (map (lambda (collector value)
+                   (if value
+                       (collector 'add (gnc:gnc-monetary-commodity value) (gnc:gnc-monetary-amount value))))
+                 total-collectors
+                 split-values)
+
             (if (and primary-subtotal-pred
                      (or (not next)
                          (and next
                               (not (primary-subtotal-pred current next)))))
-                (begin 
+                (begin
                   (if secondary-subtotal-pred
-                      
                       (begin
                         (secondary-subtotal-renderer
                          table width current
-                         secondary-subtotal-collector
+                         secondary-subtotal-collectors
                          def:secondary-subtotal-style used-columns export?)
-                        (secondary-subtotal-collector 'reset #f #f)))
-                  
+                        (for-each (lambda (coll) (coll 'reset #f #f))
+                                  secondary-subtotal-collectors)))
+
                   (primary-subtotal-renderer table width current
-                                             primary-subtotal-collector
+                                             primary-subtotal-collectors
                                              def:primary-subtotal-style used-columns
                                              export?)
-                  
-                  (primary-subtotal-collector 'reset #f #f)
-                  
+
+                  (for-each (lambda (coll) (coll 'reset #f #f))
+                            primary-subtotal-collectors)
+
                   (if next
-                      (begin 
+                      (begin
                         (primary-subheading-renderer
                          next table width def:primary-subtotal-style used-columns)
-                        
                         (if secondary-subtotal-pred
                             (secondary-subheading-renderer
-                             next 
-                             table 
+                             next
+                             table
                              width def:secondary-subtotal-style used-columns)))))
-                
+
                 (if (and secondary-subtotal-pred
                          (or (not next)
                              (and next
@@ -1303,52 +1382,52 @@ Credit Card, and Income accounts."))))))
                                         current next)))))
                     (begin (secondary-subtotal-renderer
                             table width current
-                            secondary-subtotal-collector
+                            secondary-subtotal-collectors
                             def:secondary-subtotal-style used-columns export?)
-                           (secondary-subtotal-collector 'reset #f #f)
+                           (for-each (lambda (coll) (coll 'reset #f #f))
+                                     secondary-subtotal-collectors)
                            (if next
                                (secondary-subheading-renderer
                                 next table width
                                 def:secondary-subtotal-style used-columns)))))
-            
-            (do-rows-with-subtotals rest 
-                                    table 
+
+            (do-rows-with-subtotals rest
+                                    table
                                     used-columns
-                                    width 
+                                    width
                                     multi-rows?
                                     (not odd-row?)
                                     export?
                                     account-types-to-reverse
-                                    primary-subtotal-pred 
+                                    primary-subtotal-pred
                                     secondary-subtotal-pred
-                                    primary-subheading-renderer 
+                                    primary-subheading-renderer
                                     secondary-subheading-renderer
                                     primary-subtotal-renderer
                                     secondary-subtotal-renderer
-                                    primary-subtotal-collector 
-                                    secondary-subtotal-collector 
-                                    total-collector))))
-    
+                                    primary-subtotal-collectors
+                                    secondary-subtotal-collectors
+                                    total-collectors))))
+
     (let* ((table (gnc:make-html-table))
            (width (num-columns-required used-columns))
-           (multi-rows? (transaction-report-multi-rows-p options))
-           (export? (transaction-report-export-p options))
-           (account-types-to-reverse
-            (get-account-types-to-reverse options)))
-      
+           (multi-rows? #f) ;disable. (transaction-report-multi-rows-p options))
+           (export?  (transaction-report-export-p options))
+           (account-types-to-reverse '())) ;disabled.            (get-account-types-to-reverse '()))options)))
+
       (gnc:html-table-set-col-headers!
        table
-       (make-heading-list used-columns options))
-      ;;     (gnc:warn "Splits:" splits)
+       (make-heading-list used-columns calculated-cells options))
+
       (if (not (null? splits))
           (begin
-            (if primary-subheading-renderer 
+            (if primary-subheading-renderer
                 (primary-subheading-renderer
                  (car splits) table width def:primary-subtotal-style used-columns))
             (if secondary-subheading-renderer
                 (secondary-subheading-renderer
                  (car splits) table width def:secondary-subtotal-style used-columns))
-            
+
             (do-rows-with-subtotals splits table used-columns width
                                     multi-rows? #t
                                     export?
@@ -1359,22 +1438,22 @@ Credit Card, and Income accounts."))))))
                                     secondary-subheading-renderer
                                     primary-subtotal-renderer
                                     secondary-subtotal-renderer
-                                    (gnc:make-commodity-collector)
-                                    (gnc:make-commodity-collector)
-                                    (gnc:make-commodity-collector))))
-      
+                                    (map (lambda (x) (gnc:make-commodity-collector)) calculated-cells)
+                                    (map (lambda (x) (gnc:make-commodity-collector)) calculated-cells)
+                                    (map (lambda (x) (gnc:make-commodity-collector)) calculated-cells)
+                                    ;(gnc:make-commodity-collector)
+                                    ;(gnc:make-commodity-collector)
+                                    ;(gnc:make-commodity-collector)
+                                    )))
       table)))
 
 ;; ;;;;;;;;;;;;;;;;;;;;
 ;; Here comes the renderer function for this report.
 (define (trep-renderer report-obj)
-  
   (define options (gnc:report-options report-obj))
-  
   (define (opt-val section name)
     (gnc:option-value
      (gnc:lookup-option options section name)))
-  
   (define comp-funcs-assoc-list
     ;; Defines the different sorting keys, together with the
     ;; subtotal functions. Each entry: (cons
@@ -1382,19 +1461,16 @@ Credit Card, and Income accounts."))))))
     ;; subtotal-function subtotal-renderer))
     ;;  (let* ((used-columns (build-column-used options))) ;; tpo: gives unbound variable options?
     (let* ((used-columns (build-column-used (gnc:report-options report-obj))))
-      (list (cons 'account-name  (vector 
+      (list (cons 'account-name  (vector
                                   (list SPLIT-ACCT-FULLNAME)
-                                  split-account-full-name-same-p 
+                                  split-account-full-name-same-p
                                   render-account-subheading
                                   render-account-subtotal))
-            (cons 'account-code  (vector 
+            (cons 'account-code  (vector
                                   (list SPLIT-ACCOUNT ACCOUNT-CODE-)
                                   split-account-code-same-p
                                   render-account-subheading
                                   render-account-subtotal))
-            (cons 'exact-time    (vector
-                                  (list SPLIT-TRANS TRANS-DATE-POSTED)
-                                  #f #f #f))
             (cons 'date          (vector
                                   (list SPLIT-TRANS TRANS-DATE-POSTED)
                                   #f #f #f))
@@ -1407,13 +1483,13 @@ Credit Card, and Income accounts."))))))
             (cons 'corresponding-acc-name
                   (vector
                    (list SPLIT-CORR-ACCT-NAME)
-                   split-same-corr-account-full-name-p 
+                   split-same-corr-account-full-name-p
                    render-corresponding-account-subheading
                    render-corresponding-account-subtotal))
             (cons 'corresponding-acc-code
                   (vector
                    (list SPLIT-CORR-ACCT-CODE)
-                   split-same-corr-account-code-p 
+                   split-same-corr-account-code-p
                    render-corresponding-account-subheading
                    render-corresponding-account-subtotal))
             (cons 'amount        (vector (list SPLIT-VALUE) #f #f #f))
@@ -1424,7 +1500,7 @@ Credit Card, and Income accounts."))))))
             (cons 't-number      (vector (list SPLIT-TRANS TRANS-NUM) #f #f #f))
             (cons 'memo          (vector (list SPLIT-MEMO) #f #f #f))
             (cons 'none          (vector '() #f #f #f)))))
-  
+
   (define date-comp-funcs-assoc-list
     ;; Extra list for date option. Each entry: (cons
     ;; 'date-subtotal-option-value (vector subtotal-function
@@ -1433,14 +1509,14 @@ Credit Card, and Income accounts."))))))
      (cons 'none (vector #f #f #f))
      (cons 'weekly (vector split-same-week-p render-week-subheading
                            render-week-subtotal))
-     (cons 'monthly (vector split-same-month-p render-month-subheading 
+     (cons 'monthly (vector split-same-month-p render-month-subheading
                             render-month-subtotal))
-     (cons 'quarterly (vector split-same-quarter-p render-quarter-subheading 
+     (cons 'quarterly (vector split-same-quarter-p render-quarter-subheading
                               render-quarter-subtotal))
      (cons 'yearly (vector split-same-year-p render-year-subheading
                            render-year-subtotal))))
-  
-  (define (get-subtotalstuff-helper 
+
+  (define (get-subtotalstuff-helper
            name-sortkey name-subtotal name-date-subtotal
            comp-index date-index)
     ;; The value of the sorting-key multichoice option.
@@ -1451,48 +1527,60 @@ Credit Card, and Income accounts."))))))
           ;; corresponding funcs in the assoc-list.
           (vector-ref
            (cdr (assq (opt-val pagename-sorting name-date-subtotal)
-                      date-comp-funcs-assoc-list)) 
+                      date-comp-funcs-assoc-list))
            date-index)
           ;; For everything else: 1. check whether sortkey has
           ;; subtotalling enabled at all, 2. check whether the
           ;; enable-subtotal boolean option is #t, 3. look up the
           ;; appropriate funcs in the assoc-list.
-          (and (member sortkey subtotal-enabled) 
+          (and (member sortkey subtotal-enabled)
                (and (opt-val pagename-sorting name-subtotal)
-                    (vector-ref 
-                     (cdr (assq sortkey comp-funcs-assoc-list)) 
+                    (vector-ref
+                     (cdr (assq sortkey comp-funcs-assoc-list))
                      comp-index))))))
-  
+
   (define (get-query-sortkey sort-option-value)
-    (vector-ref 
-     (cdr (assq sort-option-value comp-funcs-assoc-list)) 
+    (vector-ref
+     (cdr (assq sort-option-value comp-funcs-assoc-list))
      0))
-  
-  (define (get-subtotal-pred 
+
+  (define (get-subtotal-pred
            name-sortkey name-subtotal name-date-subtotal)
-    (get-subtotalstuff-helper 
+    (get-subtotalstuff-helper
      name-sortkey name-subtotal name-date-subtotal
      1 0))
-  
+
   (define (get-subheading-renderer
            name-sortkey name-subtotal name-date-subtotal)
-    (get-subtotalstuff-helper 
+    (get-subtotalstuff-helper
      name-sortkey name-subtotal name-date-subtotal
      2 1))
-  
+
   (define (get-subtotal-renderer
            name-sortkey name-subtotal name-date-subtotal)
     (get-subtotalstuff-helper
      name-sortkey name-subtotal name-date-subtotal
      3 2))
-  
+
   ;;(define (get-other-account-names account-list)
   ;;  ( map (lambda (acct)  (gnc-account-get-full-name acct)) account-list))
-  
+
+  (define (splits-filter-unique-transactions splits)
+    (let ((have-trans-hash (make-hash-table)))
+      (define (only-one-copy? split)
+        (let* ((parent (xaccSplitGetParent split))
+               (trans-guid (gncTransGetGUID parent)))
+          (if (hash-ref have-trans-hash trans-guid #f)
+              #f  ; already have a copy of this transaction
+              (begin
+                (hash-set! have-trans-hash trans-guid #t)
+                #t))))
+      (filter only-one-copy? splits)))
+
   (define (is-filter-member split account-list)
     (let* ((txn (xaccSplitGetParent split))
            (splitcount (xaccTransCountSplits txn)))
-      
+
       (cond
         ;; A 2-split transaction - test separately so it can be optimized
         ;; to significantly reduce the number of splits to traverse
@@ -1501,11 +1589,11 @@ Credit Card, and Income accounts."))))))
          (let* ((other      (xaccSplitGetOtherSplit split))
                 (other-acct (xaccSplitGetAccount other)))
            (member other-acct account-list)))
-        
+
         ;; A multi-split transaction - run over all splits
         ((> splitcount 2)
          (let ((splits (xaccTransGetSplitList txn)))
-           
+
            ;; Walk through the list of splits.
            ;; if we reach the end, return #f
            ;; if the 'this' != 'split' and the split->account is a member
@@ -1520,44 +1608,49 @@ Credit Card, and Income accounts."))))))
                             (member acct account-list))
                        #t
                        (is-member rest)))))
-           
+
            (is-member splits)))
-        
+
         ;; Single transaction splits
         (else #f))))
-  
-  
+
   (gnc:report-starting reportname)
-  (let ((document (gnc:make-html-document))
-        (c_account_1 (opt-val gnc:pagename-accounts "Accounts"))
-        (c_account_substring (opt-val gnc:pagename-accounts "Account Substring"))
-        (c_account_2 (opt-val gnc:pagename-accounts "Filter By..."))
-        (filter-mode (opt-val gnc:pagename-accounts "Filter Type"))
-        (begindate (gnc:timepair-start-day-time
-                    (gnc:date-option-absolute-time
-                     (opt-val gnc:pagename-general "Start Date"))))
-        (enddate (gnc:timepair-end-day-time
-                  (gnc:date-option-absolute-time
-                   (opt-val gnc:pagename-general "End Date"))))
-        (report-title (opt-val 
-                       gnc:pagename-general
-                       gnc:optname-reportname))
-        (primary-key (opt-val pagename-sorting optname-prime-sortkey))
-        (primary-order (opt-val pagename-sorting "Primary Sort Order"))
-        (secondary-key (opt-val pagename-sorting optname-sec-sortkey))
-        (secondary-order (opt-val pagename-sorting "Secondary Sort Order"))
-        (void-status (opt-val gnc:pagename-accounts optname-void-transactions))
-        (splits '())
-        (query (qof-query-create-for-splits)))
-    
-    ;;(gnc:warn "accts in trep-renderer:" c_account_1)
-    ;;(gnc:warn "Report Account names:" (get-other-account-names c_account_1))
-    
-    (set! c_account_1
-          (filter (lambda (acc)
-                    (string-contains (gnc-account-get-full-name acc) c_account_substring))
-                  c_account_1))
-    
+
+  (let* ((document (gnc:make-html-document))
+         (c_account_0 (opt-val gnc:pagename-accounts "Accounts"))
+         (c_account_substring (opt-val gnc:pagename-accounts "Account Substring"))
+         (c_account_1 (filter
+                       (lambda (acc)
+                         (string-contains (gnc-account-get-full-name acc) c_account_substring))
+                       c_account_0))
+         (c_account_2 (opt-val gnc:pagename-accounts "Filter By..."))
+         (tax-accounts (opt-val gnc:pagename-accounts "Tax Accounts"))
+         (accounts-tax-collected (filter (lambda (acc) (eq? (xaccAccountGetType acc) ACCT-TYPE-LIABILITY)) tax-accounts))
+         (accounts-tax-paid (filter (lambda (acc) (eq? (xaccAccountGetType acc) ACCT-TYPE-ASSET)) tax-accounts))
+         (accounts-sales (filter (lambda (acc) (eq? (xaccAccountGetType acc) ACCT-TYPE-INCOME)) c_account_1))
+         (accounts-purchases (filter (lambda (acc) (eq? (xaccAccountGetType acc) ACCT-TYPE-EXPENSE)) c_account_1))
+         (filter-mode (opt-val gnc:pagename-accounts "Filter Type"))
+         (begindate (gnc:timepair-start-day-time
+                     (gnc:date-option-absolute-time
+                      (opt-val gnc:pagename-general "Start Date"))))
+         (enddate (gnc:timepair-end-day-time
+                   (gnc:date-option-absolute-time
+                    (opt-val gnc:pagename-general "End Date"))))
+         (report-title (opt-val
+                        gnc:pagename-general
+                        gnc:optname-reportname))
+         (primary-key (opt-val pagename-sorting optname-prime-sortkey))
+         (primary-order (opt-val pagename-sorting "Primary Sort Order"))
+         (secondary-key (opt-val pagename-sorting optname-sec-sortkey))
+         (secondary-order (opt-val pagename-sorting "Secondary Sort Order"))
+         (void-status (opt-val gnc:pagename-accounts optname-void-transactions))
+         (splits '())
+         (query (qof-query-create-for-splits)))
+
+    ;(gnc:warn "c1 is " c_account_1)
+    ;(gnc:warn "c2 is " c_account_2)
+    ;(gnc:warn "first c1 is " (xaccAccountGetName (car c_account_1)))
+
     (if (not (or (null? c_account_1) (and-map not c_account_1)))
         (begin
           (qof-query-set-book query (gnc-get-current-book))
@@ -1571,60 +1664,74 @@ Credit Card, and Income accounts."))))))
                                     (get-query-sortkey primary-key)
                                     (get-query-sortkey secondary-key)
                                     '())
-          
+
           (qof-query-set-sort-increasing query
                                          (eq? primary-order 'ascend)
                                          (eq? secondary-order 'ascend)
                                          #t)
-          
+
           (case void-status
-            ((non-void-only) 
+            ((non-void-only)
              (gnc:query-set-match-non-voids-only! query (gnc-get-current-book)))
             ((void-only)
              (gnc:query-set-match-voids-only! query (gnc-get-current-book)))
             (else #f))
-          
+
           (set! splits (qof-query-run query))
-          
+
           ;;(gnc:warn "Splits in trep-renderer:" splits)
-          
+
           ;;(gnc:warn "Filter account names:" (get-other-account-names c_account_2))
-          
+
           ;;This should probably a cond or a case to allow for different filter types.
           ;;(gnc:warn "Filter Mode: " filter-mode)
           (if (eq? filter-mode 'include)
               (begin
                 ;;(gnc:warn "Including Filter Accounts")
-                (set! splits (filter (lambda (split) 
+                (set! splits (filter (lambda (split)
                                        (is-filter-member split c_account_2))
-                                     splits))
-                )
-              )
-          
+                                     splits))))
+
           (if (eq? filter-mode 'exclude)
               (begin
                 ;;(gnc:warn "Excluding Filter Accounts")
-                (set! splits (filter (lambda (split) 
+                (set! splits (filter (lambda (split)
                                        (not (is-filter-member split c_account_2)))
-                                     splits))
-                )
-              )
-          
+                                     splits))))
+
+          ; We have to remove duplicates because the report will *sum* amounts in a transaction
+          ; otherwise it will double count where transaction contains 2 splits in same account
+          (set! splits (splits-filter-unique-transactions splits))
+
+          ; For each split, we will only keep those which contain useful data
+          ; e.g. show invoices & regular transactions. We will also disallow closing txns.
+          (set! splits (filter
+                        (lambda (split)
+                          (let* ((trans (xaccSplitGetParent split))
+                                 (txn-type (xaccTransGetTxnType trans)))
+                            (and (member txn-type (list TXN-TYPE-NONE TXN-TYPE-INVOICE))
+                                 (not (xaccTransGetIsClosingTxn trans)))))
+                        splits))
+
           (if (not (null? splits))
-              (let ((table 
-                     (make-split-table 
-                      splits 
+              (let ((table
+                     (make-split-table
+                      splits
                       options
-                      (get-subtotal-pred optname-prime-sortkey 
+                      accounts-tax-paid
+                      accounts-tax-collected
+                      accounts-sales
+                      accounts-purchases
+                      (get-subtotal-pred optname-prime-sortkey
                                          optname-prime-subtotal
                                          optname-prime-date-subtotal)
-                      (get-subtotal-pred optname-sec-sortkey 
+                      (get-subtotal-pred optname-sec-sortkey
                                          optname-sec-subtotal
                                          optname-sec-date-subtotal)
-                      (get-subheading-renderer optname-prime-sortkey 
+                      (get-subheading-renderer optname-prime-sortkey
                                                optname-prime-subtotal
                                                optname-prime-date-subtotal)
-                      (get-subheading-renderer optname-sec-sortkey 
+                      (get-subheading-renderer optname-sec-sortkey
                                                optname-sec-subtotal
                                                optname-sec-date-subtotal)
                       (get-subtotal-renderer   optname-prime-sortkey
@@ -1633,48 +1740,85 @@ Credit Card, and Income accounts."))))))
                       (get-subtotal-renderer   optname-sec-sortkey
                                                optname-sec-subtotal
                                                optname-sec-date-subtotal))))
-                
+
                 (gnc:html-document-set-title! document
                                               report-title)
-                (gnc:html-document-add-object! 
+                (gnc:html-document-add-object!
                  document
                  (gnc:make-html-text
-                  (gnc:html-markup-h3 
+                  (gnc:html-markup-h3
                    (display-date-interval begindate enddate))))
+
                 (gnc:html-document-add-object!
-                 document 
+                 document
+                 (gnc:make-html-text
+                  (gnc:html-markup-p
+                   "Input Tax accounts: "
+                   (string-join (map gnc-account-get-full-name accounts-tax-paid) ", "))))
+
+                (gnc:html-document-add-object!
+                 document
+                 (gnc:make-html-text
+                  (gnc:html-markup-p
+                   "Output Tax accounts: "
+                   (string-join (map gnc-account-get-full-name accounts-tax-collected) ", "))))
+
+                (if (null? (append accounts-tax-collected accounts-tax-paid))
+                    (gnc:html-document-add-object!
+                     document
+                     (gnc:make-html-text
+                      (gnc:html-markup-p
+                       "There are no input/output tax accounts set up. This is probably not what"
+                       " you want. "
+                       TAX-SETUP-DESC))))
+
+                (gnc:html-document-add-object!
+                 document
                  table)
                 (qof-query-destroy query))
               ;; error condition: no splits found
               (let ((p (gnc:make-html-text)))
-                (gnc:html-text-append! 
-                 p 
-                 (gnc:html-markup-h2 
+                (gnc:html-text-append!
+                 p
+                 (gnc:html-markup-h2
                   (_ "No matching transactions found"))
                  (gnc:html-markup-p
-                  (_ "No transactions were found that \
-match the time interval and account selection specified \
-in the Options panel.")))
+                  (_ "No transactions were found that match the time interval and account selection specified in the Options panel.")))
                 (gnc:html-document-add-object! document p))))
-        
+
         ;; error condition: no accounts specified
-        
-        (gnc:html-document-add-object!
-         document 
-         (gnc:html-make-no-account-warning 
-          report-title (gnc:report-id report-obj))))
-    
+
+        (begin
+          (gnc:html-document-add-object!
+           document
+           (gnc:html-make-no-account-warning
+            report-title (gnc:report-id report-obj)))
+
+          (gnc:html-document-add-object!
+           document
+           (gnc:make-html-text
+            (gnc:html-markup-p
+             "This report is useful to calculate periodic business tax payable/receivable from"
+             " authorities. From <i>Edit report options</i> above, choose your Business Income and Business Expense accounts."
+             " Each transaction may contain, in addition to the accounts payable/receivable or bank accounts,"
+             " a split to a tax account, e.g. Income:Sales -$1000, Liability:GST on Sales -$100, Asset:Bank $1100.")
+            (gnc:html-markup-p
+             " These tax accounts can either be populated using the standard register, or from Business Invoices and Bills "
+             " which will require Business > Sales Tax Tables to be set up correctly. Please see the documentation.")))
+
+          (gnc:html-document-add-object!
+           document
+           (gnc:make-html-text
+            (gnc:html-markup-p TAX-SETUP-DESC)))))
+
     (gnc:report-finished)
     document))
 
 ;; Define the report.
 (gnc:define-report
- 
  'version 1
- 
+ 'menu-path (list gnc:menuname-income-expense)
  'name reportname
- 'report-guid "2fe3b9833af044abb929a88d5a59620f"
- 
+ 'report-guid "5bf27f249a0d11e7abc4cec278b6b50a"
  'options-generator trep-options-generator
- 
- 'renderer trep-renderer)
+ 'renderer trep-renderer)
\ No newline at end of file

commit 40006a3f04ba70496a87f8f9db97b1f486ad2448
Author: christopherlam <christopher.lck at gmail.com>
Date:   Sun Sep 17 00:58:42 2017 +0100

    Reindent from transaction.scm

diff --git a/gnucash/report/standard-reports/income-gst-statement.scm b/gnucash/report/standard-reports/income-gst-statement.scm
index 4fbab7d..859cfde 100644
--- a/gnucash/report/standard-reports/income-gst-statement.scm
+++ b/gnucash/report/standard-reports/income-gst-statement.scm
@@ -104,11 +104,11 @@
 (define (timepair-same-week tp-a tp-b)
   (and (timepair-same-year tp-a tp-b)
        (= (gnc:timepair-get-week tp-a)
-	  (gnc:timepair-get-week tp-b))))
+          (gnc:timepair-get-week tp-b))))
 
 (define (split-same-week-p a b)
   (let ((tp-a (gnc-transaction-get-date-posted (xaccSplitGetParent a)))
-	(tp-b (gnc-transaction-get-date-posted (xaccSplitGetParent b))))
+        (tp-b (gnc-transaction-get-date-posted (xaccSplitGetParent b))))
     (timepair-same-week tp-a tp-b)))
 
 (define (split-same-month-p a b)
@@ -145,19 +145,19 @@
 (define (account-namestring account show-account-code show-account-name show-account-full-name)
   ;;# on multi-line splits we can get an empty ('()) account
   (if (null? account)
-        (_ "Split Transaction")
-        (string-append 
-           ;; display account code?
-           (if show-account-code
-                 (string-append (xaccAccountGetCode account) " ")
-                 "")
-           ;; display account name?
-           (if show-account-name
-                 ;; display full account name?
-                 (if show-account-full-name
-                      (gnc-account-get-full-name account)
-                      (xaccAccountGetName account))
-                 ""))))
+      (_ "Split Transaction")
+      (string-append 
+       ;; display account code?
+       (if show-account-code
+           (string-append (xaccAccountGetCode account) " ")
+           "")
+       ;; display account name?
+       (if show-account-name
+           ;; display full account name?
+           (if show-account-full-name
+               (gnc-account-get-full-name account)
+               (xaccAccountGetName account))
+           ""))))
 
 ;; render an account subheading - column-vector determines what is displayed
 (define (render-account-subheading
@@ -165,11 +165,11 @@
   (let ((account (xaccSplitGetAccount split)))
     (add-subheading-row (gnc:make-html-text
                          (gnc:html-markup-anchor
-                           (gnc:account-anchor-text account)
-                           (account-namestring account
-                                               (used-sort-account-code      column-vector)
-                                               #t
-                                               (used-sort-account-full-name column-vector))))
+                          (gnc:account-anchor-text account)
+                          (account-namestring account
+                                              (used-sort-account-code      column-vector)
+                                              #t
+                                              (used-sort-account-full-name column-vector))))
                         table width subheading-style)))
 
 (define (render-corresponding-account-subheading 
@@ -178,40 +178,40 @@
     (add-subheading-row (gnc:make-html-text
                          (gnc:html-markup-anchor
                           (if (not (null? account))
-                           (gnc:account-anchor-text account)
-                           "")
-                           (account-namestring account
-                                               (used-sort-account-code      column-vector)
-                                               #t
-                                               (used-sort-account-full-name column-vector))))
+                              (gnc:account-anchor-text account)
+                              "")
+                          (account-namestring account
+                                              (used-sort-account-code      column-vector)
+                                              #t
+                                              (used-sort-account-full-name column-vector))))
                         table width subheading-style)))
 
 (define (render-week-subheading split table width subheading-style column-vector)
   (add-subheading-row (gnc:date-get-week-year-string
-		       (gnc:timepair->date
-			(gnc-transaction-get-date-posted
-			 (xaccSplitGetParent split))))
-		      table width subheading-style))
+                       (gnc:timepair->date
+                        (gnc-transaction-get-date-posted
+                         (xaccSplitGetParent split))))
+                      table width subheading-style))
 
 (define (render-month-subheading split table width subheading-style column-vector)
   (add-subheading-row (gnc:date-get-month-year-string
-                      (gnc:timepair->date 
-                       (gnc-transaction-get-date-posted
-                        (xaccSplitGetParent split))))
-                     table width subheading-style))
+                       (gnc:timepair->date 
+                        (gnc-transaction-get-date-posted
+                         (xaccSplitGetParent split))))
+                      table width subheading-style))
 
 (define (render-quarter-subheading split table width subheading-style column-vector)
   (add-subheading-row (gnc:date-get-quarter-year-string 
-                      (gnc:timepair->date 
-                       (gnc-transaction-get-date-posted
-                        (xaccSplitGetParent split))))
-                     table width subheading-style))
+                       (gnc:timepair->date 
+                        (gnc-transaction-get-date-posted
+                         (xaccSplitGetParent split))))
+                      table width subheading-style))
 
 (define (render-year-subheading split table width subheading-style column-vector)
   (add-subheading-row (gnc:date-get-year-string 
-                      (gnc:timepair->date 
-                       (gnc-transaction-get-date-posted
-                        (xaccSplitGetParent split))))
+                       (gnc:timepair->date 
+                        (gnc-transaction-get-date-posted
+                         (xaccSplitGetParent split))))
                       table width subheading-style))
 
 
@@ -224,56 +224,56 @@
      table
      subtotal-style 
      (if export?
-      (append! (cons (gnc:make-html-table-cell/markup "total-label-cell" subtotal-string)
-                     (gnc:html-make-empty-cells (- width 2)))
-               (list (gnc:make-html-table-cell/markup 
-                      "total-number-cell"
-                      (car currency-totals))))
-     (list (gnc:make-html-table-cell/size/markup 1 (- width 1) "total-label-cell"
-                                          subtotal-string)
-           (gnc:make-html-table-cell/markup 
-            "total-number-cell"
-             (car currency-totals)))))
+         (append! (cons (gnc:make-html-table-cell/markup "total-label-cell" subtotal-string)
+                        (gnc:html-make-empty-cells (- width 2)))
+                  (list (gnc:make-html-table-cell/markup 
+                         "total-number-cell"
+                         (car currency-totals))))
+         (list (gnc:make-html-table-cell/size/markup 1 (- width 1) "total-label-cell"
+                                                     subtotal-string)
+               (gnc:make-html-table-cell/markup 
+                "total-number-cell"
+                (car currency-totals)))))
     (for-each (lambda (currency)
                 (gnc:html-table-append-row/markup! 
                  table
                  subtotal-style
                  (append!
                   (if export?
-                   (gnc:html-make-empty-cells (- width 1))
-                   (list blanks))
-                         (list (gnc:make-html-table-cell/markup
-                                "total-number-cell" currency)))))
+                      (gnc:html-make-empty-cells (- width 1))
+                      (list blanks))
+                  (list (gnc:make-html-table-cell/markup
+                         "total-number-cell" currency)))))
               (cdr currency-totals))))
 
 (define (total-string str) (string-append (_ "Total For ") str))
 
 (define (render-account-subtotal 
          table width split total-collector subtotal-style column-vector export?)
-    (add-subtotal-row table width 
-                      (total-string (account-namestring (xaccSplitGetAccount split)
-                                                        (used-sort-account-code      column-vector)
-                                                        #t
-                                                        (used-sort-account-full-name column-vector)))
-                      total-collector subtotal-style export?))
+  (add-subtotal-row table width 
+                    (total-string (account-namestring (xaccSplitGetAccount split)
+                                                      (used-sort-account-code      column-vector)
+                                                      #t
+                                                      (used-sort-account-full-name column-vector)))
+                    total-collector subtotal-style export?))
 
 (define (render-corresponding-account-subtotal
          table width split total-collector subtotal-style column-vector export?)
-    (add-subtotal-row table width
-                      (total-string (account-namestring (xaccSplitGetAccount
-                                                          (xaccSplitGetOtherSplit split))
-                                                        (used-sort-account-code      column-vector)
-                                                        #t
-                                                        (used-sort-account-full-name column-vector)))
+  (add-subtotal-row table width
+                    (total-string (account-namestring (xaccSplitGetAccount
+                                                       (xaccSplitGetOtherSplit split))
+                                                      (used-sort-account-code      column-vector)
+                                                      #t
+                                                      (used-sort-account-full-name column-vector)))
                     total-collector subtotal-style export?))
 
 (define (render-week-subtotal
-	 table width split total-collector subtotal-style column-vector export?)
+         table width split total-collector subtotal-style column-vector export?)
   (let ((tm (gnc:timepair->date (gnc-transaction-get-date-posted
-				 (xaccSplitGetParent split)))))
+                                 (xaccSplitGetParent split)))))
     (add-subtotal-row table width
-		      (total-string (gnc:date-get-week-year-string tm))
-		      total-collector subtotal-style export?)))
+                      (total-string (gnc:date-get-week-year-string tm))
+                      total-collector subtotal-style export?)))
 
 (define (render-month-subtotal
          table width split total-collector subtotal-style column-vector export?)
@@ -290,7 +290,7 @@
                                  (xaccSplitGetParent split)))))
     (add-subtotal-row table width 
                       (total-string (gnc:date-get-quarter-year-string tm))
-                     total-collector subtotal-style export?)))
+                      total-collector subtotal-style export?)))
 
 (define (render-year-subtotal
          table width split total-collector subtotal-style column-vector export?)
@@ -361,7 +361,7 @@
 (define (num-columns-required columns-used)  
   (do ((i 0 (+ i 1)) 
        (col-req 0 col-req)) 
-      ((>= i columns-used-size) col-req)
+    ((>= i columns-used-size) col-req)
     ; If column toggle is true, increase column count. But attention:
     ; some toggles only change the meaning of another toggle. Don't count these modifier toggles
     (if (and (not (= i 12)) ; Skip Account Full Name toggle - modifies Account Name column
@@ -370,13 +370,13 @@
              (not (= i 18)) ; Skip Sort Account Full Name - modifies Account Name subheading
              (not (= i 19)) ; Skip Note toggle - modifies Memo column
              (vector-ref columns-used i))
-      (set! col-req (+ col-req 1)))
+        (set! col-req (+ col-req 1)))
     ; Account Code and Account Name share one column so if both were ticked the
     ; the check above would have set up one column too much. The check below
     ; will compensate these again.
     (if (or (and (= i 14) (vector-ref columns-used 14) (vector-ref columns-used 4)) ; Account Code and Name
             (and (= i 15) (vector-ref columns-used 15) (vector-ref columns-used 5))) ; Other Account Code and Name
-      (set! col-req (- col-req 1)))))
+        (set! col-req (- col-req 1)))))
 
 (define (build-column-used options)   
   (define (opt-val section name)
@@ -436,14 +436,14 @@
         (addto! heading-list (_ "Reconciled Date")))
     (if (used-num column-vector)
         (addto! heading-list (if (and (qof-book-use-split-action-for-num-field
-                                                        (gnc-get-current-book))
+                                       (gnc-get-current-book))
                                       (if (gnc:lookup-option options
-                                                    gnc:pagename-display
-                                                    (N_ "Trans Number"))
+                                                             gnc:pagename-display
+                                                             (N_ "Trans Number"))
                                           (gnc:option-value 
-                                            (gnc:lookup-option options
-                                                    gnc:pagename-display
-                                                    (N_ "Trans Number")))
+                                           (gnc:lookup-option options
+                                                              gnc:pagename-display
+                                                              (N_ "Trans Number")))
                                           #f))
                                  (_ "Num/T-Num")
                                  (_ "Num"))))
@@ -474,11 +474,11 @@
 
 (define (add-split-row table split column-vector options
                        row-style account-types-to-reverse transaction-row?)
-
+  
   (define (opt-val section name)
     (gnc:option-value 
      (gnc:lookup-option options section name)))
-
+  
   (let* ((row-contents '())
          (dummy  (gnc:debug "split is originally" split))
          (parent (xaccSplitGetParent split))
@@ -487,66 +487,66 @@
          (currency (if (not (null? account))
                        (xaccAccountGetCommodity account)
                        (gnc-default-currency)))
-	 (report-currency (if (opt-val gnc:pagename-general optname-common-currency)
-			       (opt-val gnc:pagename-general optname-currency)
-			       currency))
+         (report-currency (if (opt-val gnc:pagename-general optname-common-currency)
+                              (opt-val gnc:pagename-general optname-currency)
+                              currency))
          (damount (if (gnc:split-voided? split)
-					 (xaccSplitVoidFormerAmount split)
-					 (xaccSplitGetAmount split)))
-	 (trans-date (gnc-transaction-get-date-posted parent))
-	 (split-value (gnc:exchange-by-pricedb-nearest
-		       (gnc:make-gnc-monetary 
-			currency
-			(if (member account-type account-types-to-reverse) 
-			    (gnc-numeric-neg damount)
-			    damount))
-		       report-currency
-		       ;; Use midday as the transaction time so it matches a price
-		       ;; on the same day.  Otherwise it uses midnight which will
-		       ;; likely match a price on the previous day
-		       (timespecCanonicalDayTime trans-date))))
+                      (xaccSplitVoidFormerAmount split)
+                      (xaccSplitGetAmount split)))
+         (trans-date (gnc-transaction-get-date-posted parent))
+         (split-value (gnc:exchange-by-pricedb-nearest
+                       (gnc:make-gnc-monetary 
+                        currency
+                        (if (member account-type account-types-to-reverse) 
+                            (gnc-numeric-neg damount)
+                            damount))
+                       report-currency
+                       ;; Use midday as the transaction time so it matches a price
+                       ;; on the same day.  Otherwise it uses midnight which will
+                       ;; likely match a price on the previous day
+                       (timespecCanonicalDayTime trans-date))))
     
     (if (used-date column-vector)
         (addto! row-contents
                 (if transaction-row?
                     (gnc:make-html-table-cell/markup "date-cell"
-                        (gnc-print-date (gnc-transaction-get-date-posted parent)))
+                                                     (gnc-print-date (gnc-transaction-get-date-posted parent)))
                     " ")))
     (if (used-reconciled-date column-vector)
         (addto! row-contents
                 (gnc:make-html-table-cell/markup "date-cell"
-		    (let ((date (gnc-split-get-date-reconciled split)))
-		      (if (equal? date (cons 0 0))
-		          " "
-		          (gnc-print-date date))))))
+                                                 (let ((date (gnc-split-get-date-reconciled split)))
+                                                   (if (equal? date (cons 0 0))
+                                                       " "
+                                                       (gnc-print-date date))))))
     (if (used-num column-vector)
         (addto! row-contents
                 (if transaction-row?
                     (if (qof-book-use-split-action-for-num-field
-                                                        (gnc-get-current-book))
+                         (gnc-get-current-book))
                         (let* ((num (gnc-get-num-action parent split))
                                (t-num (if (if (gnc:lookup-option options
-                                                    gnc:pagename-display
-                                                    (N_ "Trans Number"))
+                                                                 gnc:pagename-display
+                                                                 (N_ "Trans Number"))
                                               (opt-val gnc:pagename-display
-                                                    (N_ "Trans Number"))
+                                                       (N_ "Trans Number"))
                                               #f)
                                           (gnc-get-num-action parent #f)
                                           ""))
                                (num-string (if (equal? t-num "")
                                                num
                                                (string-append num "/" t-num))))
-                              (gnc:make-html-table-cell/markup "text-cell"
-                                   num-string))
+                          (gnc:make-html-table-cell/markup "text-cell"
+                                                           num-string))
                         (gnc:make-html-table-cell/markup "text-cell"
-                            (gnc-get-num-action parent split)))
+                                                         (gnc-get-num-action parent split)))
                     " ")))
-
+    
     (if (used-description column-vector)
         (addto! row-contents
                 (if transaction-row?
                     (gnc:make-html-table-cell/markup "text-cell"
-                        (xaccTransGetDescription parent))
+                                                     (xaccTransGetDescription parent))
                     " ")))
     
     (if (used-memo column-vector)
@@ -556,17 +556,17 @@
               (addto! row-contents memo))))
     
     (if (or (used-account-name column-vector) (used-account-code column-vector))
-       (addto! row-contents (account-namestring account
-                                                (used-account-code      column-vector)
-                                                (used-account-name      column-vector)
-                                                (used-account-full-name column-vector))))
+        (addto! row-contents (account-namestring account
+                                                 (used-account-code      column-vector)
+                                                 (used-account-name      column-vector)
+                                                 (used-account-full-name column-vector))))
     
     (if (or (used-other-account-name column-vector) (used-other-account-code column-vector))
-       (addto! row-contents (account-namestring (xaccSplitGetAccount
-                                                   (xaccSplitGetOtherSplit split))
-                                                (used-other-account-code      column-vector)
-                                                (used-other-account-name      column-vector)
-                                                (used-other-account-full-name column-vector))))
+        (addto! row-contents (account-namestring (xaccSplitGetAccount
+                                                  (xaccSplitGetOtherSplit split))
+                                                 (used-other-account-code      column-vector)
+                                                 (used-other-account-name      column-vector)
+                                                 (used-other-account-full-name column-vector))))
     
     (if (used-shares column-vector)
         (addto! row-contents (xaccSplitGetAmount split)))
@@ -592,15 +592,15 @@
                      "number-cell" (gnc:html-transaction-anchor parent (gnc:monetary-neg split-value))))
             (addto! row-contents " ")))
     (if (used-running-balance column-vector)
-	(begin
-	  (gnc:debug "split is " split)
-	  (gnc:debug "split get balance:" (xaccSplitGetBalance split))
-	  (addto! row-contents
-		  (gnc:make-html-table-cell/markup
-		   "number-cell"
-		   (gnc:make-gnc-monetary currency
-					  (xaccSplitGetBalance split))))))
-	(gnc:html-table-append-row/markup! table row-style
+        (begin
+          (gnc:debug "split is " split)
+          (gnc:debug "split get balance:" (xaccSplitGetBalance split))
+          (addto! row-contents
+                  (gnc:make-html-table-cell/markup
+                   "number-cell"
+                   (gnc:make-gnc-monetary currency
+                                          (xaccSplitGetBalance split))))))
+    (gnc:html-table-append-row/markup! table row-style
                                        (reverse row-contents))
     split-value))
 
@@ -625,15 +625,15 @@
     "e" (N_ "Convert all transactions into a common currency.") #f
     #f
     (lambda (x) (gnc-option-db-set-option-selectable-by-name
-		 gnc:*transaction-report-options*
-		 gnc:pagename-general
-		 optname-currency
-		 x))
+                 gnc:*transaction-report-options*
+                 gnc:pagename-general
+                 optname-currency
+                 x))
     ))
-
+  
   (gnc:options-add-currency!
    gnc:*transaction-report-options* gnc:pagename-general optname-currency "f")
-
+  
   (gnc:register-trep-option
    (gnc:make-simple-boolean-option
     gnc:pagename-general optname-table-export
@@ -654,7 +654,7 @@
     (lambda ()
       '())
     #f #t))
-
+  
   (gnc:register-trep-option
    (gnc:make-string-option
     gnc:pagename-accounts (N_ "Account Substring")
@@ -662,7 +662,7 @@
 match Expenses:Travel:Holiday and Expenses:Business:Travel. Can be left blank, which will \
 disable the substring filter. This filter is case-sensitive.")
     ""))
-
+  
   (gnc:register-trep-option
    (gnc:make-account-list-option
     gnc:pagename-accounts (N_ "Filter By...")
@@ -670,164 +670,164 @@ disable the substring filter. This filter is case-sensitive.")
     (lambda ()
       ;; FIXME : gnc:get-current-accounts disappeared.
       (let* ((current-accounts '())
-	     (root (gnc-get-current-root-account))
-	     (num-accounts (gnc-account-n-children root))
-	     (first-account (gnc-account-nth-child root 0)))
-	(cond ((not (null? current-accounts))
-	       (list (car current-accounts)))
-	      ((> num-accounts 0) (list first-account))
-	      (else '()))))
+             (root (gnc-get-current-root-account))
+             (num-accounts (gnc-account-n-children root))
+             (first-account (gnc-account-nth-child root 0)))
+        (cond ((not (null? current-accounts))
+               (list (car current-accounts)))
+              ((> num-accounts 0) (list first-account))
+              (else '()))))
     #f #t))
-
+  
   (gnc:register-trep-option
    (gnc:make-multichoice-option
     gnc:pagename-accounts (N_ "Filter Type")
     "c" (N_ "Filter account.")
     'none
     (list (vector 'none
-		  (N_ "None")
-		  (N_ "Do not do any filtering."))
-	  (vector 'include
-		  (N_ "Include Transactions to/from Filter Accounts")
-		  (N_ "Include transactions to/from filter accounts only."))
-	  (vector 'exclude
-		  (N_ "Exclude Transactions to/from Filter Accounts")
-		  (N_ "Exclude transactions to/from all filter accounts."))
-	  )))
-
+                  (N_ "None")
+                  (N_ "Do not do any filtering."))
+          (vector 'include
+                  (N_ "Include Transactions to/from Filter Accounts")
+                  (N_ "Include transactions to/from filter accounts only."))
+          (vector 'exclude
+                  (N_ "Exclude Transactions to/from Filter Accounts")
+                  (N_ "Exclude transactions to/from all filter accounts."))
+          )))
+  
   ;;
-
+  
   (gnc:register-trep-option
    (gnc:make-multichoice-option
     gnc:pagename-accounts optname-void-transactions
     "d" (N_ "How to handle void transactions.")
     'non-void-only
     (list (vector
-	   'non-void-only
-	   (N_ "Non-void only")
-	   (N_ "Show only non-voided transactions."))
-	  (vector
-	   'void-only
-	   (N_ "Void only")
-	   (N_ "Show only voided transactions."))
-	  (vector 
-	   'both
-	   (N_ "Both")
-	   (N_ "Show both (and include void transactions in totals).")))))
-
+           'non-void-only
+           (N_ "Non-void only")
+           (N_ "Show only non-voided transactions."))
+          (vector
+           'void-only
+           (N_ "Void only")
+           (N_ "Show only voided transactions."))
+          (vector 
+           'both
+           (N_ "Both")
+           (N_ "Show both (and include void transactions in totals).")))))
+  
   ;; Sorting options
-      
+  
   (let ((options gnc:*transaction-report-options*)
-
+        
         (key-choice-list 
          (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
              (list (vector 'none
                            (N_ "None")
                            (N_ "Do not sort."))
-
+                   
                    (vector 'account-name
                            (N_ "Account Name")
                            (N_ "Sort & subtotal by account name."))
-
+                   
                    (vector 'account-code
                            (N_ "Account Code")
                            (N_ "Sort & subtotal by account code."))
-
+                   
                    (vector 'date
                            (N_ "Date")
                            (N_ "Sort by date."))
-
+                   
                    (vector 'exact-time
                            (N_ "Exact Time")
                            (N_ "Sort by exact time."))
-
+                   
                    (vector 'reconciled-date
                            (N_ "Reconciled Date")
                            (N_ "Sort by the Reconciled Date."))
-
+                   
                    (vector 'register-order
                            (N_ "Register Order")
                            (N_ "Sort as in the register."))
-
+                   
                    (vector 'corresponding-acc-name 
                            (N_ "Other Account Name")
                            (N_ "Sort by account transferred from/to's name."))
-
+                   
                    (vector 'corresponding-acc-code
                            (N_ "Other Account Code")
                            (N_ "Sort by account transferred from/to's code."))
-               
+                   
                    (vector 'amount
                            (N_ "Amount")
                            (N_ "Sort by amount."))
-               
+                   
                    (vector 'description
                            (N_ "Description")
                            (N_ "Sort by description."))
-               
+                   
                    (vector 'number
                            (N_ "Number/Action")
                            (N_ "Sort by check number/action."))
-
+                   
                    (vector 't-number
                            (N_ "Transaction Number")
                            (N_ "Sort by transaction number."))
-               
+                   
                    (vector 'memo
                            (N_ "Memo")
                            (N_ "Sort by memo.")))
              (list (vector 'none
                            (N_ "None")
                            (N_ "Do not sort."))
-
+                   
                    (vector 'account-name
                            (N_ "Account Name")
                            (N_ "Sort & subtotal by account name."))
-
+                   
                    (vector 'account-code
                            (N_ "Account Code")
                            (N_ "Sort & subtotal by account code."))
-
+                   
                    (vector 'date
                            (N_ "Date")
                            (N_ "Sort by date."))
-
+                   
                    (vector 'exact-time
                            (N_ "Exact Time")
                            (N_ "Sort by exact time."))
-
+                   
                    (vector 'reconciled-date
                            (N_ "Reconciled Date")
                            (N_ "Sort by the Reconciled Date."))
-
+                   
                    (vector 'register-order
                            (N_ "Register Order")
                            (N_ "Sort as in the register."))
-
+                   
                    (vector 'corresponding-acc-name 
                            (N_ "Other Account Name")
                            (N_ "Sort by account transferred from/to's name."))
-
+                   
                    (vector 'corresponding-acc-code
                            (N_ "Other Account Code")
                            (N_ "Sort by account transferred from/to's code."))
-               
+                   
                    (vector 'amount
                            (N_ "Amount")
                            (N_ "Sort by amount."))
-               
+                   
                    (vector 'description
                            (N_ "Description")
                            (N_ "Sort by description."))
-               
+                   
                    (vector 'number
                            (N_ "Number")
                            (N_ "Sort by check/transaction number."))
-
+                   
                    (vector 'memo
                            (N_ "Memo")
                            (N_ "Sort by memo.")))))
-
+        
         (ascending-choice-list 
          (list
           (vector 'ascend
@@ -836,7 +836,7 @@ disable the substring filter. This filter is case-sensitive.")
           (vector 'descend
                   (N_ "Descending")
                   (N_ "Largest to smallest, latest to earliest."))))
-
+        
         (subtotal-choice-list
          (list
           (vector 'none (N_ "None") (N_ "None."))
@@ -844,12 +844,12 @@ disable the substring filter. This filter is case-sensitive.")
           (vector 'monthly (N_ "Monthly") (N_ "Monthly."))
           (vector 'quarterly (N_ "Quarterly") (N_ "Quarterly."))
           (vector 'yearly (N_ "Yearly") (N_ "Yearly."))))
-
+        
         (prime-sortkey 'account-name)
         (prime-sortkey-subtotal-true #t)
         (sec-sortkey 'register-order)
         (sec-sortkey-subtotal-true #f))
-
+    
     (define (apply-selectable-by-name-sorting-options)
       (let* ((prime-sortkey-enabled (not (eq? prime-sortkey 'none)))
              (prime-sortkey-subtotal-enabled (member prime-sortkey subtotal-enabled))
@@ -857,41 +857,41 @@ disable the substring filter. This filter is case-sensitive.")
              (sec-sortkey-enabled (not (eq? sec-sortkey 'none)))
              (sec-sortkey-subtotal-enabled (member sec-sortkey subtotal-enabled))
              (sec-date-sortingtype-enabled (member sec-sortkey date-sorting-types)))
-
+        
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-prime-subtotal
          prime-sortkey-subtotal-enabled)
-
+        
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-prime-sortorder
          prime-sortkey-enabled)
-
+        
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-sec-subtotal
          sec-sortkey-subtotal-enabled)
-
+        
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-sec-sortorder
          sec-sortkey-enabled)
-
+        
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-full-account-name
          (or (and prime-sortkey-subtotal-enabled prime-sortkey-subtotal-true)
              (and sec-sortkey-subtotal-enabled sec-sortkey-subtotal-true)))
-
+        
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-show-account-code
          (or (and prime-sortkey-subtotal-enabled prime-sortkey-subtotal-true)
              (and sec-sortkey-subtotal-enabled sec-sortkey-subtotal-true)))
-
+        
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-prime-date-subtotal
          prime-date-sortingtype-enabled)
-
+        
         (gnc-option-db-set-option-selectable-by-name
          options pagename-sorting optname-sec-date-subtotal
          sec-date-sortingtype-enabled)))
-
+    
     ;; primary sorting criterion
     (gnc:register-trep-option
      (gnc:make-multichoice-callback-option
@@ -926,7 +926,7 @@ disable the substring filter. This filter is case-sensitive.")
       (lambda (x)
         (set! prime-sortkey-subtotal-true x)
         (apply-selectable-by-name-sorting-options))))
-
+    
     (gnc:register-trep-option
      (gnc:make-multichoice-option
       pagename-sorting optname-prime-date-subtotal
@@ -952,7 +952,7 @@ disable the substring filter. This filter is case-sensitive.")
       (lambda (x)
         (set! sec-sortkey x)
         (apply-selectable-by-name-sorting-options))))
-
+    
     (gnc:register-trep-option
      (gnc:make-complex-boolean-option
       pagename-sorting optname-sec-subtotal
@@ -962,7 +962,7 @@ disable the substring filter. This filter is case-sensitive.")
       (lambda (x)
         (set! sec-sortkey-subtotal-true x)
         (apply-selectable-by-name-sorting-options))))
-
+    
     (gnc:register-trep-option
      (gnc:make-multichoice-option
       pagename-sorting optname-sec-date-subtotal
@@ -979,140 +979,140 @@ disable the substring filter. This filter is case-sensitive.")
   
   ;; Display options
   
-    (let ((options gnc:*transaction-report-options*)
-          (disp-memo? #t)
-          (disp-accname? #t)
-          (disp-other-accname? #f)
-          (is-single? #t))
-
-      (define (apply-selectable-by-name-display-options)
-        (gnc-option-db-set-option-selectable-by-name
-         options gnc:pagename-display (N_ "Use Full Account Name")
-         disp-accname?)
-
-        (gnc-option-db-set-option-selectable-by-name
-         options gnc:pagename-display (N_ "Other Account Name")
-         is-single?)
-
-        (gnc-option-db-set-option-selectable-by-name
-         options gnc:pagename-display (N_ "Use Full Other Account Name")
-         (and disp-other-accname? is-single?))
-
-        (gnc-option-db-set-option-selectable-by-name
-         options gnc:pagename-display (N_ "Other Account Code")
-         is-single?)
-
-        (gnc-option-db-set-option-selectable-by-name
-         options gnc:pagename-display (N_ "Notes")
-         disp-memo?))
-
-  (for-each
-   (lambda (l)
-     (gnc:register-trep-option
-      (gnc:make-simple-boolean-option
-       gnc:pagename-display (car l) (cadr l) (caddr l) (cadddr l))))
-   ;; One list per option here with: option-name, sort-tag,
-   ;; help-string, default-value
-   (list
-    (list (N_ "Date")                         "a"  (N_ "Display the date?") #t)
-    (list (N_ "Reconciled Date")              "a2" (N_ "Display the reconciled date?") #f)
+  (let ((options gnc:*transaction-report-options*)
+        (disp-memo? #t)
+        (disp-accname? #t)
+        (disp-other-accname? #f)
+        (is-single? #t))
+    
+    (define (apply-selectable-by-name-display-options)
+      (gnc-option-db-set-option-selectable-by-name
+       options gnc:pagename-display (N_ "Use Full Account Name")
+       disp-accname?)
+      
+      (gnc-option-db-set-option-selectable-by-name
+       options gnc:pagename-display (N_ "Other Account Name")
+       is-single?)
+      
+      (gnc-option-db-set-option-selectable-by-name
+       options gnc:pagename-display (N_ "Use Full Other Account Name")
+       (and disp-other-accname? is-single?))
+      
+      (gnc-option-db-set-option-selectable-by-name
+       options gnc:pagename-display (N_ "Other Account Code")
+       is-single?)
+      
+      (gnc-option-db-set-option-selectable-by-name
+       options gnc:pagename-display (N_ "Notes")
+       disp-memo?))
+    
+    (for-each
+     (lambda (l)
+       (gnc:register-trep-option
+        (gnc:make-simple-boolean-option
+         gnc:pagename-display (car l) (cadr l) (caddr l) (cadddr l))))
+     ;; One list per option here with: option-name, sort-tag,
+     ;; help-string, default-value
+     (list
+      (list (N_ "Date")                         "a"  (N_ "Display the date?") #t)
+      (list (N_ "Reconciled Date")              "a2" (N_ "Display the reconciled date?") #f)
+      (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
+          (list (N_ "Num/Action")               "b"  (N_ "Display the check number?") #t)
+          (list (N_ "Num")                      "b"  (N_ "Display the check number?") #t))
+      (list (N_ "Description")                  "c"  (N_ "Display the description?") #t)
+      (list (N_ "Notes")                        "d2" (N_ "Display the notes if the memo is unavailable?") #t)
+      ;; account name option appears here
+      (list (N_ "Use Full Account Name")        "f"  (N_ "Display the full account name?") #t)
+      (list (N_ "Account Code")                 "g"  (N_ "Display the account code?") #f)
+      ;; other account name option appears here
+      (list (N_ "Use Full Other Account Name")  "i"  (N_ "Display the full account name?") #f)
+      (list (N_ "Other Account Code")           "j"  (N_ "Display the other account code?") #f)
+      (list (N_ "Shares")                       "k"  (N_ "Display the number of shares?") #f)
+      (list (N_ "Price")                        "l"  (N_ "Display the shares price?") #f)
+      ;; note the "Amount" multichoice option in between here
+      (list (N_ "Running Balance")              "n"  (N_ "Display a running balance?") #f)
+      (list (N_ "Totals")                       "o"  (N_ "Display the totals?") #t)))
+    
     (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
-        (list (N_ "Num/Action")               "b"  (N_ "Display the check number?") #t)
-        (list (N_ "Num")                      "b"  (N_ "Display the check number?") #t))
-    (list (N_ "Description")                  "c"  (N_ "Display the description?") #t)
-    (list (N_ "Notes")                        "d2" (N_ "Display the notes if the memo is unavailable?") #t)
-    ;; account name option appears here
-    (list (N_ "Use Full Account Name")        "f"  (N_ "Display the full account name?") #t)
-    (list (N_ "Account Code")                 "g"  (N_ "Display the account code?") #f)
-    ;; other account name option appears here
-    (list (N_ "Use Full Other Account Name")  "i"  (N_ "Display the full account name?") #f)
-    (list (N_ "Other Account Code")           "j"  (N_ "Display the other account code?") #f)
-    (list (N_ "Shares")                       "k"  (N_ "Display the number of shares?") #f)
-    (list (N_ "Price")                        "l"  (N_ "Display the shares price?") #f)
-    ;; note the "Amount" multichoice option in between here
-    (list (N_ "Running Balance")              "n"  (N_ "Display a running balance?") #f)
-    (list (N_ "Totals")                       "o"  (N_ "Display the totals?") #t)))
-
-  (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
-      (gnc:register-trep-option
-       (gnc:make-simple-boolean-option
-        gnc:pagename-display (N_ "Trans Number")
-                                    "b2" (N_ "Display the trans number?") #f)))
-
-  ;; Add an option to display the memo, and disable the notes option
-  ;; when memos are not included.
-  (gnc:register-trep-option
-   (gnc:make-complex-boolean-option
-    gnc:pagename-display (N_ "Memo")
-    "d"  (N_ "Display the memo?") #t
-    #f
-    (lambda (x)
+        (gnc:register-trep-option
+         (gnc:make-simple-boolean-option
+          gnc:pagename-display (N_ "Trans Number")
+          "b2" (N_ "Display the trans number?") #f)))
+    
+    ;; Add an option to display the memo, and disable the notes option
+    ;; when memos are not included.
+    (gnc:register-trep-option
+     (gnc:make-complex-boolean-option
+      gnc:pagename-display (N_ "Memo")
+      "d"  (N_ "Display the memo?") #t
+      #f
+      (lambda (x)
         (set! disp-memo? x)
         (apply-selectable-by-name-display-options))))
-
-  ;; Ditto for Account Name #t -> Use Full Account Name is selectable
-  (gnc:register-trep-option
-   (gnc:make-complex-boolean-option
-    gnc:pagename-display (N_ "Account Name")
-    "e"  (N_ "Display the account name?") #t
-    #f
-    (lambda (x)
+    
+    ;; Ditto for Account Name #t -> Use Full Account Name is selectable
+    (gnc:register-trep-option
+     (gnc:make-complex-boolean-option
+      gnc:pagename-display (N_ "Account Name")
+      "e"  (N_ "Display the account name?") #t
+      #f
+      (lambda (x)
         (set! disp-accname? x)
         (apply-selectable-by-name-display-options))))
-
-  ;; Ditto for Other Account Name #t -> Use Full Other Account Name is selectable
-  (gnc:register-trep-option
-   (gnc:make-complex-boolean-option
-    gnc:pagename-display (N_ "Other Account Name")
-    "h5"  (N_ "Display the other account name? (if this is a split transaction, this parameter is guessed).") #f
-    #f
-    (lambda (x)
+    
+    ;; Ditto for Other Account Name #t -> Use Full Other Account Name is selectable
+    (gnc:register-trep-option
+     (gnc:make-complex-boolean-option
+      gnc:pagename-display (N_ "Other Account Name")
+      "h5"  (N_ "Display the other account name? (if this is a split transaction, this parameter is guessed).") #f
+      #f
+      (lambda (x)
         (set! disp-other-accname? x)
         (apply-selectable-by-name-display-options))))
-
-  (gnc:register-trep-option
-   (gnc:make-multichoice-callback-option
-    gnc:pagename-display optname-detail-level
-    "h" (N_ "Amount of detail to display per transaction.")
-    'single
-    (list (vector 'multi-line
-                  (N_ "Multi-Line")
-                  (N_ "Display all splits in a transaction on a separate line."))
-          (vector 'single
-                  (N_ "Single")
-                  (N_ "Display one line per transaction, merging multiple splits where required.")))
-    #f
-    (lambda (x)
+    
+    (gnc:register-trep-option
+     (gnc:make-multichoice-callback-option
+      gnc:pagename-display optname-detail-level
+      "h" (N_ "Amount of detail to display per transaction.")
+      'single
+      (list (vector 'multi-line
+                    (N_ "Multi-Line")
+                    (N_ "Display all splits in a transaction on a separate line."))
+            (vector 'single
+                    (N_ "Single")
+                    (N_ "Display one line per transaction, merging multiple splits where required.")))
+      #f
+      (lambda (x)
         (set! is-single? (eq? x 'single))
         (apply-selectable-by-name-display-options))))
-
-  (gnc:register-trep-option
-   (gnc:make-multichoice-option
-    gnc:pagename-display (N_ "Amount")
-    "m" (N_ "Display the amount?")  
-    'single
-    (list
-     (vector 'none (N_ "None") (N_ "No amount display."))
-     (vector 'single (N_ "Single") (N_ "Single Column Display."))
-     (vector 'double (N_ "Double") (N_ "Two Column Display.")))))
-  
-  (gnc:register-trep-option
-   (gnc:make-multichoice-option
-    gnc:pagename-display (N_ "Sign Reverses")
-    "p" (N_ "Reverse amount display for certain account types.")
-    'credit-accounts
-    (list 
-     (vector 'none (N_ "None") (N_ "Don't change any displayed amounts."))
-     (vector 'income-expense (N_ "Income and Expense")
-             (N_ "Reverse amount display for Income and Expense Accounts."))
-     (vector 'credit-accounts (N_ "Credit Accounts")
-             (N_ "Reverse amount display for Liability, Payable, Equity, \
+    
+    (gnc:register-trep-option
+     (gnc:make-multichoice-option
+      gnc:pagename-display (N_ "Amount")
+      "m" (N_ "Display the amount?")  
+      'single
+      (list
+       (vector 'none (N_ "None") (N_ "No amount display."))
+       (vector 'single (N_ "Single") (N_ "Single Column Display."))
+       (vector 'double (N_ "Double") (N_ "Two Column Display.")))))
+    
+    (gnc:register-trep-option
+     (gnc:make-multichoice-option
+      gnc:pagename-display (N_ "Sign Reverses")
+      "p" (N_ "Reverse amount display for certain account types.")
+      'credit-accounts
+      (list 
+       (vector 'none (N_ "None") (N_ "Don't change any displayed amounts."))
+       (vector 'income-expense (N_ "Income and Expense")
+               (N_ "Reverse amount display for Income and Expense Accounts."))
+       (vector 'credit-accounts (N_ "Credit Accounts")
+               (N_ "Reverse amount display for Liability, Payable, Equity, \
 Credit Card, and Income accounts."))))))
-
-
+  
+  
   (gnc:options-set-default-section gnc:*transaction-report-options*
                                    gnc:pagename-general)
-
+  
   gnc:*transaction-report-options*)
 
 
@@ -1162,225 +1162,225 @@ Credit Card, and Income accounts."))))))
                           primary-subtotal-renderer
                           secondary-subtotal-renderer)
   
- (let ((work-to-do (length splits))
-       (work-done 0)
-       (used-columns (build-column-used options)))
-  (define (get-account-types-to-reverse options)
-    (cdr (assq (gnc:option-value 
-                (gnc:lookup-option options
-                                   gnc:pagename-display
-                                   (N_ "Sign Reverses")))
-               account-types-to-reverse-assoc-list)))
-  
-
-  (define (transaction-report-multi-rows-p options)
-    (eq? (gnc:option-value
-          (gnc:lookup-option options gnc:pagename-display optname-detail-level))
-         'multi-line))
-
-  (define (transaction-report-export-p options)
-    (gnc:option-value
-     (gnc:lookup-option options gnc:pagename-general
-       optname-table-export)))
-
-  (define (add-other-split-rows split table used-columns
-                                row-style account-types-to-reverse)
-    (define (other-rows-driver split parent table used-columns i)
-      (let ((current (xaccTransGetSplit parent i)))
-        (cond ((null? current) #f)
-              ((equal? current split)
-               (other-rows-driver split parent table used-columns (+ i 1)))
-              (else (begin
-                      (add-split-row table current used-columns options
-                                     row-style account-types-to-reverse #f)
-                      (other-rows-driver split parent table used-columns
-                                         (+ i 1)))))))
-
-    (other-rows-driver split (xaccSplitGetParent split)
-                       table used-columns 0))
-
-  (define (do-rows-with-subtotals splits 
-                                  table 
-                                  used-columns
-                                  width
-                                  multi-rows?
-                                  odd-row?
-                                  export?
-                                  account-types-to-reverse
-                                  primary-subtotal-pred
-                                  secondary-subtotal-pred 
-                                  primary-subheading-renderer
-                                  secondary-subheading-renderer
-                                  primary-subtotal-renderer
-                                  secondary-subtotal-renderer
-                                  primary-subtotal-collector 
-                                  secondary-subtotal-collector 
-                                  total-collector)
-
-    (gnc:report-percent-done (* 100 (/ work-done work-to-do)))
-    (set! work-done (+ 1 work-done))
-    (if (null? splits)
-        (begin
-          (gnc:html-table-append-row/markup!
-           table
-           def:grand-total-style
-           (list
-            (gnc:make-html-table-cell/size
-             1 width (gnc:make-html-text (gnc:html-markup-hr)))))
-	  (if (gnc:option-value (gnc:lookup-option options "Display" "Totals"))
-	      (render-grand-total table width total-collector export?)))
-	
-        (let* ((current (car splits))
-               (current-row-style (if multi-rows? def:normal-row-style
-                                      (if odd-row? def:normal-row-style 
-                                          def:alternate-row-style)))
-               (rest (cdr splits))
-               (next (if (null? rest) #f
-                         (car rest)))
-               (split-value (add-split-row 
-                             table 
-                             current 
-                             used-columns
-			     options
-                             current-row-style
-                             account-types-to-reverse
-                             #t)))
-          (if multi-rows?
-              (add-other-split-rows
-               current table used-columns def:alternate-row-style
-               account-types-to-reverse))
-
-          (primary-subtotal-collector 'add 
-                                      (gnc:gnc-monetary-commodity
-                                       split-value) 
-                                      (gnc:gnc-monetary-amount
-                                       split-value))
-          (secondary-subtotal-collector 'add
+  (let ((work-to-do (length splits))
+        (work-done 0)
+        (used-columns (build-column-used options)))
+    (define (get-account-types-to-reverse options)
+      (cdr (assq (gnc:option-value 
+                  (gnc:lookup-option options
+                                     gnc:pagename-display
+                                     (N_ "Sign Reverses")))
+                 account-types-to-reverse-assoc-list)))
+    
+    
+    (define (transaction-report-multi-rows-p options)
+      (eq? (gnc:option-value
+            (gnc:lookup-option options gnc:pagename-display optname-detail-level))
+           'multi-line))
+    
+    (define (transaction-report-export-p options)
+      (gnc:option-value
+       (gnc:lookup-option options gnc:pagename-general
+                          optname-table-export)))
+    
+    (define (add-other-split-rows split table used-columns
+                                  row-style account-types-to-reverse)
+      (define (other-rows-driver split parent table used-columns i)
+        (let ((current (xaccTransGetSplit parent i)))
+          (cond ((null? current) #f)
+                ((equal? current split)
+                 (other-rows-driver split parent table used-columns (+ i 1)))
+                (else (begin
+                        (add-split-row table current used-columns options
+                                       row-style account-types-to-reverse #f)
+                        (other-rows-driver split parent table used-columns
+                                           (+ i 1)))))))
+      
+      (other-rows-driver split (xaccSplitGetParent split)
+                         table used-columns 0))
+    
+    (define (do-rows-with-subtotals splits 
+                                    table 
+                                    used-columns
+                                    width
+                                    multi-rows?
+                                    odd-row?
+                                    export?
+                                    account-types-to-reverse
+                                    primary-subtotal-pred
+                                    secondary-subtotal-pred 
+                                    primary-subheading-renderer
+                                    secondary-subheading-renderer
+                                    primary-subtotal-renderer
+                                    secondary-subtotal-renderer
+                                    primary-subtotal-collector 
+                                    secondary-subtotal-collector 
+                                    total-collector)
+      
+      (gnc:report-percent-done (* 100 (/ work-done work-to-do)))
+      (set! work-done (+ 1 work-done))
+      (if (null? splits)
+          (begin
+            (gnc:html-table-append-row/markup!
+             table
+             def:grand-total-style
+             (list
+              (gnc:make-html-table-cell/size
+               1 width (gnc:make-html-text (gnc:html-markup-hr)))))
+            (if (gnc:option-value (gnc:lookup-option options "Display" "Totals"))
+                (render-grand-total table width total-collector export?)))
+          
+          (let* ((current (car splits))
+                 (current-row-style (if multi-rows? def:normal-row-style
+                                        (if odd-row? def:normal-row-style 
+                                            def:alternate-row-style)))
+                 (rest (cdr splits))
+                 (next (if (null? rest) #f
+                           (car rest)))
+                 (split-value (add-split-row 
+                               table 
+                               current 
+                               used-columns
+                               options
+                               current-row-style
+                               account-types-to-reverse
+                               #t)))
+            (if multi-rows?
+                (add-other-split-rows
+                 current table used-columns def:alternate-row-style
+                 account-types-to-reverse))
+            
+            (primary-subtotal-collector 'add 
                                         (gnc:gnc-monetary-commodity
-                                         split-value)
+                                         split-value) 
                                         (gnc:gnc-monetary-amount
                                          split-value))
-          (total-collector 'add
-                           (gnc:gnc-monetary-commodity split-value)
-                           (gnc:gnc-monetary-amount split-value))
-
-          (if (and primary-subtotal-pred
-                   (or (not next)
-                       (and next
-                            (not (primary-subtotal-pred current next)))))
-              (begin 
-                (if secondary-subtotal-pred
-
-                    (begin
-                      (secondary-subtotal-renderer
-                       table width current
-                       secondary-subtotal-collector
-                       def:secondary-subtotal-style used-columns export?)
-                      (secondary-subtotal-collector 'reset #f #f)))
-
-                (primary-subtotal-renderer table width current
-                                           primary-subtotal-collector
-                                           def:primary-subtotal-style used-columns
-                                           export?)
-
-                (primary-subtotal-collector 'reset #f #f)
-
-                (if next
-                    (begin 
-                      (primary-subheading-renderer
-                       next table width def:primary-subtotal-style used-columns)
-
-                      (if secondary-subtotal-pred
-                          (secondary-subheading-renderer
-                           next 
-                           table 
-                           width def:secondary-subtotal-style used-columns)))))
-
-              (if (and secondary-subtotal-pred
-                       (or (not next)
-                           (and next
-                                (not (secondary-subtotal-pred
-                                      current next)))))
-                  (begin (secondary-subtotal-renderer
-                          table width current
-                          secondary-subtotal-collector
-                          def:secondary-subtotal-style used-columns export?)
-                         (secondary-subtotal-collector 'reset #f #f)
-                         (if next
-                             (secondary-subheading-renderer
-                              next table width
-                              def:secondary-subtotal-style used-columns)))))
-
-          (do-rows-with-subtotals rest 
-                                  table 
-                                  used-columns
-                                  width 
-                                  multi-rows?
-                                  (not odd-row?)
-                                  export?
-                                  account-types-to-reverse
-                                  primary-subtotal-pred 
-                                  secondary-subtotal-pred
-                                  primary-subheading-renderer 
-                                  secondary-subheading-renderer
-                                  primary-subtotal-renderer
-                                  secondary-subtotal-renderer
-                                  primary-subtotal-collector 
-                                  secondary-subtotal-collector 
-                                  total-collector))))
-
-  (let* ((table (gnc:make-html-table))
-         (width (num-columns-required used-columns))
-         (multi-rows? (transaction-report-multi-rows-p options))
-	 (export? (transaction-report-export-p options))
-         (account-types-to-reverse
-          (get-account-types-to-reverse options)))
-
-    (gnc:html-table-set-col-headers!
-     table
-     (make-heading-list used-columns options))
-    ;;     (gnc:warn "Splits:" splits)
-    (if (not (null? splits))
-        (begin
-          (if primary-subheading-renderer 
-              (primary-subheading-renderer
-               (car splits) table width def:primary-subtotal-style used-columns))
-          (if secondary-subheading-renderer
-              (secondary-subheading-renderer
-               (car splits) table width def:secondary-subtotal-style used-columns))
-
-          (do-rows-with-subtotals splits table used-columns width
-                                  multi-rows? #t
-                                  export?
-                                  account-types-to-reverse
-                                  primary-subtotal-pred
-                                  secondary-subtotal-pred
-                                  primary-subheading-renderer
-                                  secondary-subheading-renderer
-                                  primary-subtotal-renderer
-                                  secondary-subtotal-renderer
-                                  (gnc:make-commodity-collector)
-                                  (gnc:make-commodity-collector)
-                                  (gnc:make-commodity-collector))))
+            (secondary-subtotal-collector 'add
+                                          (gnc:gnc-monetary-commodity
+                                           split-value)
+                                          (gnc:gnc-monetary-amount
+                                           split-value))
+            (total-collector 'add
+                             (gnc:gnc-monetary-commodity split-value)
+                             (gnc:gnc-monetary-amount split-value))
+            
+            (if (and primary-subtotal-pred
+                     (or (not next)
+                         (and next
+                              (not (primary-subtotal-pred current next)))))
+                (begin 
+                  (if secondary-subtotal-pred
+                      
+                      (begin
+                        (secondary-subtotal-renderer
+                         table width current
+                         secondary-subtotal-collector
+                         def:secondary-subtotal-style used-columns export?)
+                        (secondary-subtotal-collector 'reset #f #f)))
+                  
+                  (primary-subtotal-renderer table width current
+                                             primary-subtotal-collector
+                                             def:primary-subtotal-style used-columns
+                                             export?)
+                  
+                  (primary-subtotal-collector 'reset #f #f)
+                  
+                  (if next
+                      (begin 
+                        (primary-subheading-renderer
+                         next table width def:primary-subtotal-style used-columns)
+                        
+                        (if secondary-subtotal-pred
+                            (secondary-subheading-renderer
+                             next 
+                             table 
+                             width def:secondary-subtotal-style used-columns)))))
+                
+                (if (and secondary-subtotal-pred
+                         (or (not next)
+                             (and next
+                                  (not (secondary-subtotal-pred
+                                        current next)))))
+                    (begin (secondary-subtotal-renderer
+                            table width current
+                            secondary-subtotal-collector
+                            def:secondary-subtotal-style used-columns export?)
+                           (secondary-subtotal-collector 'reset #f #f)
+                           (if next
+                               (secondary-subheading-renderer
+                                next table width
+                                def:secondary-subtotal-style used-columns)))))
+            
+            (do-rows-with-subtotals rest 
+                                    table 
+                                    used-columns
+                                    width 
+                                    multi-rows?
+                                    (not odd-row?)
+                                    export?
+                                    account-types-to-reverse
+                                    primary-subtotal-pred 
+                                    secondary-subtotal-pred
+                                    primary-subheading-renderer 
+                                    secondary-subheading-renderer
+                                    primary-subtotal-renderer
+                                    secondary-subtotal-renderer
+                                    primary-subtotal-collector 
+                                    secondary-subtotal-collector 
+                                    total-collector))))
     
-    table)))
+    (let* ((table (gnc:make-html-table))
+           (width (num-columns-required used-columns))
+           (multi-rows? (transaction-report-multi-rows-p options))
+           (export? (transaction-report-export-p options))
+           (account-types-to-reverse
+            (get-account-types-to-reverse options)))
+      
+      (gnc:html-table-set-col-headers!
+       table
+       (make-heading-list used-columns options))
+      ;;     (gnc:warn "Splits:" splits)
+      (if (not (null? splits))
+          (begin
+            (if primary-subheading-renderer 
+                (primary-subheading-renderer
+                 (car splits) table width def:primary-subtotal-style used-columns))
+            (if secondary-subheading-renderer
+                (secondary-subheading-renderer
+                 (car splits) table width def:secondary-subtotal-style used-columns))
+            
+            (do-rows-with-subtotals splits table used-columns width
+                                    multi-rows? #t
+                                    export?
+                                    account-types-to-reverse
+                                    primary-subtotal-pred
+                                    secondary-subtotal-pred
+                                    primary-subheading-renderer
+                                    secondary-subheading-renderer
+                                    primary-subtotal-renderer
+                                    secondary-subtotal-renderer
+                                    (gnc:make-commodity-collector)
+                                    (gnc:make-commodity-collector)
+                                    (gnc:make-commodity-collector))))
+      
+      table)))
 
 ;; ;;;;;;;;;;;;;;;;;;;;
 ;; Here comes the renderer function for this report.
 (define (trep-renderer report-obj)
-
+  
   (define options (gnc:report-options report-obj))
-
+  
   (define (opt-val section name)
     (gnc:option-value
      (gnc:lookup-option options section name)))
-
+  
   (define comp-funcs-assoc-list
     ;; Defines the different sorting keys, together with the
     ;; subtotal functions. Each entry: (cons
     ;; 'sorting-key-option-value (vector 'query-sorting-key
     ;; subtotal-function subtotal-renderer))
-;;  (let* ((used-columns (build-column-used options))) ;; tpo: gives unbound variable options?
+    ;;  (let* ((used-columns (build-column-used options))) ;; tpo: gives unbound variable options?
     (let* ((used-columns (build-column-used (gnc:report-options report-obj))))
       (list (cons 'account-name  (vector 
                                   (list SPLIT-ACCT-FULLNAME)
@@ -1399,23 +1399,23 @@ Credit Card, and Income accounts."))))))
                                   (list SPLIT-TRANS TRANS-DATE-POSTED)
                                   #f #f #f))
             (cons 'reconciled-date (vector
-                                  (list SPLIT-DATE-RECONCILED)
-                                  #f #f #f))
+                                    (list SPLIT-DATE-RECONCILED)
+                                    #f #f #f))
             (cons 'register-order (vector
-                                  (list QUERY-DEFAULT-SORT)
-                                  #f #f #f))
+                                   (list QUERY-DEFAULT-SORT)
+                                   #f #f #f))
             (cons 'corresponding-acc-name
-                                 (vector
-                                  (list SPLIT-CORR-ACCT-NAME)
-                                  split-same-corr-account-full-name-p 
-                                  render-corresponding-account-subheading
-                                  render-corresponding-account-subtotal))
+                  (vector
+                   (list SPLIT-CORR-ACCT-NAME)
+                   split-same-corr-account-full-name-p 
+                   render-corresponding-account-subheading
+                   render-corresponding-account-subtotal))
             (cons 'corresponding-acc-code
-                                 (vector
-                                  (list SPLIT-CORR-ACCT-CODE)
-                                  split-same-corr-account-code-p 
-                                  render-corresponding-account-subheading
-                                  render-corresponding-account-subtotal))
+                  (vector
+                   (list SPLIT-CORR-ACCT-CODE)
+                   split-same-corr-account-code-p 
+                   render-corresponding-account-subheading
+                   render-corresponding-account-subtotal))
             (cons 'amount        (vector (list SPLIT-VALUE) #f #f #f))
             (cons 'description   (vector (list SPLIT-TRANS TRANS-DESCRIPTION) #f #f #f))
             (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
@@ -1424,7 +1424,7 @@ Credit Card, and Income accounts."))))))
             (cons 't-number      (vector (list SPLIT-TRANS TRANS-NUM) #f #f #f))
             (cons 'memo          (vector (list SPLIT-MEMO) #f #f #f))
             (cons 'none          (vector '() #f #f #f)))))
-
+  
   (define date-comp-funcs-assoc-list
     ;; Extra list for date option. Each entry: (cons
     ;; 'date-subtotal-option-value (vector subtotal-function
@@ -1432,14 +1432,14 @@ Credit Card, and Income accounts."))))))
     (list
      (cons 'none (vector #f #f #f))
      (cons 'weekly (vector split-same-week-p render-week-subheading
-			   render-week-subtotal))
+                           render-week-subtotal))
      (cons 'monthly (vector split-same-month-p render-month-subheading 
                             render-month-subtotal))
      (cons 'quarterly (vector split-same-quarter-p render-quarter-subheading 
-                            render-quarter-subtotal))
+                              render-quarter-subtotal))
      (cons 'yearly (vector split-same-year-p render-year-subheading
                            render-year-subtotal))))
-
+  
   (define (get-subtotalstuff-helper 
            name-sortkey name-subtotal name-date-subtotal
            comp-index date-index)
@@ -1467,32 +1467,32 @@ Credit Card, and Income accounts."))))))
     (vector-ref 
      (cdr (assq sort-option-value comp-funcs-assoc-list)) 
      0))
-
+  
   (define (get-subtotal-pred 
            name-sortkey name-subtotal name-date-subtotal)
     (get-subtotalstuff-helper 
      name-sortkey name-subtotal name-date-subtotal
      1 0))
-
+  
   (define (get-subheading-renderer
            name-sortkey name-subtotal name-date-subtotal)
     (get-subtotalstuff-helper 
      name-sortkey name-subtotal name-date-subtotal
      2 1))
-
+  
   (define (get-subtotal-renderer
            name-sortkey name-subtotal name-date-subtotal)
     (get-subtotalstuff-helper
      name-sortkey name-subtotal name-date-subtotal
      3 2))
-
+  
   ;;(define (get-other-account-names account-list)
   ;;  ( map (lambda (acct)  (gnc-account-get-full-name acct)) account-list))
-
+  
   (define (is-filter-member split account-list)
     (let* ((txn (xaccSplitGetParent split))
            (splitcount (xaccTransCountSplits txn)))
-
+      
       (cond
         ;; A 2-split transaction - test separately so it can be optimized
         ;; to significantly reduce the number of splits to traverse
@@ -1500,39 +1500,39 @@ Credit Card, and Income accounts."))))))
         ((= splitcount 2)
          (let* ((other      (xaccSplitGetOtherSplit split))
                 (other-acct (xaccSplitGetAccount other)))
-               (member other-acct account-list)))
-
+           (member other-acct account-list)))
+        
         ;; A multi-split transaction - run over all splits
         ((> splitcount 2)
          (let ((splits (xaccTransGetSplitList txn)))
-
-                ;; Walk through the list of splits.
-                ;; if we reach the end, return #f
-                ;; if the 'this' != 'split' and the split->account is a member
-                ;; of the account-list, then return #t, else recurse
-                (define (is-member splits)
-                  (if (null? splits)
-                      #f
-                      (let* ((this (car splits))
-                             (rest (cdr splits))
-                             (acct (xaccSplitGetAccount this)))
-                        (if (and (not (eq? this split))
-                                 (member acct account-list))
-                            #t
-                            (is-member rest)))))
-
-                (is-member splits)))
-
+           
+           ;; Walk through the list of splits.
+           ;; if we reach the end, return #f
+           ;; if the 'this' != 'split' and the split->account is a member
+           ;; of the account-list, then return #t, else recurse
+           (define (is-member splits)
+             (if (null? splits)
+                 #f
+                 (let* ((this (car splits))
+                        (rest (cdr splits))
+                        (acct (xaccSplitGetAccount this)))
+                   (if (and (not (eq? this split))
+                            (member acct account-list))
+                       #t
+                       (is-member rest)))))
+           
+           (is-member splits)))
+        
         ;; Single transaction splits
         (else #f))))
-
-
+  
+  
   (gnc:report-starting reportname)
   (let ((document (gnc:make-html-document))
-	(c_account_1 (opt-val gnc:pagename-accounts "Accounts"))
-	(c_account_substring (opt-val gnc:pagename-accounts "Account Substring"))
-	(c_account_2 (opt-val gnc:pagename-accounts "Filter By..."))
-	(filter-mode (opt-val gnc:pagename-accounts "Filter Type"))
+        (c_account_1 (opt-val gnc:pagename-accounts "Accounts"))
+        (c_account_substring (opt-val gnc:pagename-accounts "Account Substring"))
+        (c_account_2 (opt-val gnc:pagename-accounts "Filter By..."))
+        (filter-mode (opt-val gnc:pagename-accounts "Filter Type"))
         (begindate (gnc:timepair-start-day-time
                     (gnc:date-option-absolute-time
                      (opt-val gnc:pagename-general "Start Date"))))
@@ -1546,13 +1546,13 @@ Credit Card, and Income accounts."))))))
         (primary-order (opt-val pagename-sorting "Primary Sort Order"))
         (secondary-key (opt-val pagename-sorting optname-sec-sortkey))
         (secondary-order (opt-val pagename-sorting "Secondary Sort Order"))
-	(void-status (opt-val gnc:pagename-accounts optname-void-transactions))
+        (void-status (opt-val gnc:pagename-accounts optname-void-transactions))
         (splits '())
         (query (qof-query-create-for-splits)))
-
+    
     ;;(gnc:warn "accts in trep-renderer:" c_account_1)
     ;;(gnc:warn "Report Account names:" (get-other-account-names c_account_1))
-
+    
     (set! c_account_1
           (filter (lambda (acc)
                     (string-contains (gnc-account-get-full-name acc) c_account_substring))
@@ -1561,55 +1561,55 @@ Credit Card, and Income accounts."))))))
     (if (not (or (null? c_account_1) (and-map not c_account_1)))
         (begin
           (qof-query-set-book query (gnc-get-current-book))
-	      ;;(gnc:warn "query is:" query)
+          ;;(gnc:warn "query is:" query)
           (xaccQueryAddAccountMatch query
-                                       c_account_1
-                                       QOF-GUID-MATCH-ANY QOF-QUERY-AND)
+                                    c_account_1
+                                    QOF-GUID-MATCH-ANY QOF-QUERY-AND)
           (xaccQueryAddDateMatchTS
            query #t begindate #t enddate QOF-QUERY-AND)
           (qof-query-set-sort-order query
-				    (get-query-sortkey primary-key)
-				    (get-query-sortkey secondary-key)
-				    '())
-
+                                    (get-query-sortkey primary-key)
+                                    (get-query-sortkey secondary-key)
+                                    '())
+          
           (qof-query-set-sort-increasing query
                                          (eq? primary-order 'ascend)
                                          (eq? secondary-order 'ascend)
                                          #t)
-
-	  (case void-status
-	   ((non-void-only) 
-	    (gnc:query-set-match-non-voids-only! query (gnc-get-current-book)))
-	   ((void-only)
-	    (gnc:query-set-match-voids-only! query (gnc-get-current-book)))
-	   (else #f))
-
+          
+          (case void-status
+            ((non-void-only) 
+             (gnc:query-set-match-non-voids-only! query (gnc-get-current-book)))
+            ((void-only)
+             (gnc:query-set-match-voids-only! query (gnc-get-current-book)))
+            (else #f))
+          
           (set! splits (qof-query-run query))
-
+          
           ;;(gnc:warn "Splits in trep-renderer:" splits)
-
-	  ;;(gnc:warn "Filter account names:" (get-other-account-names c_account_2))
-
-	  ;;This should probably a cond or a case to allow for different filter types.
-	  ;;(gnc:warn "Filter Mode: " filter-mode)
-	  (if (eq? filter-mode 'include)
-	      (begin
-		;;(gnc:warn "Including Filter Accounts")
-		(set! splits (filter (lambda (split) 
-				       (is-filter-member split c_account_2))
-				     splits))
-		)
-	      )
-
-	  (if (eq? filter-mode 'exclude)
-	      (begin
-		;;(gnc:warn "Excluding Filter Accounts")
-		(set! splits (filter (lambda (split) 
-				       (not (is-filter-member split c_account_2)))
-				     splits))
-		)
-	      )
-	
+          
+          ;;(gnc:warn "Filter account names:" (get-other-account-names c_account_2))
+          
+          ;;This should probably a cond or a case to allow for different filter types.
+          ;;(gnc:warn "Filter Mode: " filter-mode)
+          (if (eq? filter-mode 'include)
+              (begin
+                ;;(gnc:warn "Including Filter Accounts")
+                (set! splits (filter (lambda (split) 
+                                       (is-filter-member split c_account_2))
+                                     splits))
+                )
+              )
+          
+          (if (eq? filter-mode 'exclude)
+              (begin
+                ;;(gnc:warn "Excluding Filter Accounts")
+                (set! splits (filter (lambda (split) 
+                                       (not (is-filter-member split c_account_2)))
+                                     splits))
+                )
+              )
+          
           (if (not (null? splits))
               (let ((table 
                      (make-split-table 
@@ -1633,7 +1633,7 @@ Credit Card, and Income accounts."))))))
                       (get-subtotal-renderer   optname-sec-sortkey
                                                optname-sec-subtotal
                                                optname-sec-date-subtotal))))
-
+                
                 (gnc:html-document-set-title! document
                                               report-title)
                 (gnc:html-document-add-object! 
@@ -1656,14 +1656,14 @@ Credit Card, and Income accounts."))))))
 match the time interval and account selection specified \
 in the Options panel.")))
                 (gnc:html-document-add-object! document p))))
-
+        
         ;; error condition: no accounts specified
         
         (gnc:html-document-add-object!
          document 
-	 (gnc:html-make-no-account-warning 
-	  report-title (gnc:report-id report-obj))))
-
+         (gnc:html-make-no-account-warning 
+          report-title (gnc:report-id report-obj))))
+    
     (gnc:report-finished)
     document))
 

commit 62824e003606fd26191553af3818202ecdf7d951
Author: christopherlam <christopher.lck at gmail.com>
Date:   Sun Sep 17 00:53:39 2017 +0100

    cp transaction.scm income-gst-statement.scm

diff --git a/gnucash/report/standard-reports/CMakeLists.txt b/gnucash/report/standard-reports/CMakeLists.txt
index a2ddcc7..35c53c2 100644
--- a/gnucash/report/standard-reports/CMakeLists.txt
+++ b/gnucash/report/standard-reports/CMakeLists.txt
@@ -20,6 +20,7 @@ SET (standard_reports_SCHEME_2
     equity-statement.scm
     general-journal.scm
     general-ledger.scm
+    income-gst-statement.scm
     income-statement.scm
     net-barchart.scm
     net-linechart.scm
diff --git a/gnucash/report/standard-reports/Makefile.am b/gnucash/report/standard-reports/Makefile.am
index 5d0bf60..e95f369 100644
--- a/gnucash/report/standard-reports/Makefile.am
+++ b/gnucash/report/standard-reports/Makefile.am
@@ -22,6 +22,7 @@ gncscmrpt_DATA = \
    equity-statement.scm \
    general-journal.scm \
    general-ledger.scm \
+   income-gst-statement.scm \
    income-statement.scm \
    net-barchart.scm \
    net-linechart.scm \
diff --git a/gnucash/report/standard-reports/income-gst-statement.scm b/gnucash/report/standard-reports/income-gst-statement.scm
new file mode 100644
index 0000000..4fbab7d
--- /dev/null
+++ b/gnucash/report/standard-reports/income-gst-statement.scm
@@ -0,0 +1,1680 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; transaction-report.scm : Report on all transactions in account(s)
+;;
+;; Original report by Robert Merkel <rgmerk at mira.net>
+;; Contributions by Bryan Larsen <blarsen at ada-works.com>
+;; More contributions for new report generation code by Robert Merkel
+;; More contributions by Christian Stimming <stimming at tuhh.de>
+;; Modified to support the intersection of two account lists by
+;; Michael T. Garrison Stuber
+;; Modified account names display by Tomas Pospisek
+;; <tpo_deb at sourcepole.ch> with a lot of help from "warlord"
+;;
+;; This program is free software; you can redistribute it and/or    
+;; modify it under the terms of the GNU General Public License as   
+;; published by the Free Software Foundation; either version 2 of   
+;; the License, or (at your option) any later version.              
+;;                                                                  
+;; This program is distributed in the hope that it will be useful,  
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of   
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    
+;; GNU General Public License for more details.                     
+;;                                                                  
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, contact:
+;;
+;; Free Software Foundation           Voice:  +1-617-542-5942
+;; 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652
+;; Boston, MA  02110-1301,  USA       gnu at gnu.org
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(define-module (gnucash report standard-reports transaction))
+
+(use-modules (gnucash main)) ;; FIXME: delete after we finish modularizing.
+(use-modules (srfi srfi-1))
+(use-modules (srfi srfi-13))
+(use-modules (gnucash gnc-module))
+(use-modules (gnucash gettext))
+
+(use-modules (gnucash printf))
+
+(gnc:module-load "gnucash/report/report-system" 0)
+
+(define-macro (addto! alist element)
+  `(set! ,alist (cons ,element ,alist)))
+
+;; Define the strings here to avoid typos and make changes easier.
+
+(define reportname (N_ "Transaction Report"))
+(define optname-detail-level (N_ "Detail Level"))
+(define pagename-sorting (N_ "Sorting"))
+(define optname-prime-sortkey (N_ "Primary Key"))
+(define optname-prime-subtotal (N_ "Primary Subtotal"))
+(define optname-prime-sortorder (N_ "Primary Sort Order"))
+(define optname-prime-date-subtotal (N_ "Primary Subtotal for Date Key"))
+(define optname-full-account-name (N_ "Show Full Account Name"))
+(define optname-show-account-code (N_ "Show Account Code"))
+(define optname-sec-sortkey (N_ "Secondary Key"))
+(define optname-sec-subtotal (N_ "Secondary Subtotal"))
+(define optname-sec-sortorder  (N_ "Secondary Sort Order"))
+(define optname-sec-date-subtotal (N_ "Secondary Subtotal for Date Key"))
+(define optname-void-transactions (N_ "Void Transactions"))
+(define optname-table-export (N_ "Table for Exporting"))
+(define optname-common-currency (N_ "Common Currency"))
+(define optname-currency (N_ "Report's currency"))
+(define def:grand-total-style "grand-total")
+(define def:normal-row-style "normal-row")
+(define def:alternate-row-style "alternate-row")
+(define def:primary-subtotal-style "primary-subheading")
+(define def:secondary-subtotal-style "secondary-subheading")
+;; The option-values of the sorting key multichoice option, for
+;; which a subtotal should be enabled.
+(define subtotal-enabled '(account-name
+                           account-code 
+                           corresponding-acc-name
+                           corresponding-acc-code))
+
+(define (split-account-full-name-same-p a b)
+  (= (xaccSplitCompareAccountFullNames a b) 0))
+
+(define (split-account-code-same-p a b)
+  (= (xaccSplitCompareAccountCodes a b) 0))
+
+(define (split-same-corr-account-full-name-p a b)
+  (= (xaccSplitCompareOtherAccountFullNames a b) 0))
+
+(define (split-same-corr-account-code-p a b)
+  (= (xaccSplitCompareOtherAccountCodes a b) 0))
+
+(define (timepair-same-year tp-a tp-b)
+  (= (gnc:timepair-get-year tp-a)
+     (gnc:timepair-get-year tp-b)))
+
+(define (timepair-same-quarter tp-a tp-b)
+  (and (timepair-same-year tp-a tp-b) 
+       (= (gnc:timepair-get-quarter tp-a)
+          (gnc:timepair-get-quarter tp-b))))
+
+(define (timepair-same-month tp-a tp-b)
+  (and (timepair-same-year tp-a tp-b) 
+       (= (gnc:timepair-get-month tp-a)
+          (gnc:timepair-get-month tp-b))))
+
+(define (timepair-same-week tp-a tp-b)
+  (and (timepair-same-year tp-a tp-b)
+       (= (gnc:timepair-get-week tp-a)
+	  (gnc:timepair-get-week tp-b))))
+
+(define (split-same-week-p a b)
+  (let ((tp-a (gnc-transaction-get-date-posted (xaccSplitGetParent a)))
+	(tp-b (gnc-transaction-get-date-posted (xaccSplitGetParent b))))
+    (timepair-same-week tp-a tp-b)))
+
+(define (split-same-month-p a b)
+  (let ((tp-a (gnc-transaction-get-date-posted (xaccSplitGetParent a)))
+        (tp-b (gnc-transaction-get-date-posted (xaccSplitGetParent b))))
+    (timepair-same-month tp-a tp-b)))
+
+(define (split-same-quarter-p a b)
+  (let ((tp-a (gnc-transaction-get-date-posted (xaccSplitGetParent a)))
+        (tp-b (gnc-transaction-get-date-posted (xaccSplitGetParent b))))
+    (timepair-same-quarter tp-a tp-b)))
+
+(define (split-same-year-p a b)
+  (let ((tp-a (gnc-transaction-get-date-posted (xaccSplitGetParent a)))
+        (tp-b (gnc-transaction-get-date-posted (xaccSplitGetParent b))))
+    (timepair-same-year tp-a tp-b)))
+
+(define (set-last-row-style! table tag . rest)
+  (let ((arg-list 
+         (cons table 
+               (cons (- (gnc:html-table-num-rows table) 1)
+                     (cons tag rest)))))
+    (apply gnc:html-table-set-row-style! arg-list)))
+
+(define (add-subheading-row data table width subheading-style)
+  (let ((heading-cell (gnc:make-html-table-cell data)))
+    (gnc:html-table-cell-set-colspan! heading-cell width)
+    (gnc:html-table-append-row/markup!
+     table
+     subheading-style
+     (list heading-cell))))
+
+;; display an account name depending on the options the user has set
+(define (account-namestring account show-account-code show-account-name show-account-full-name)
+  ;;# on multi-line splits we can get an empty ('()) account
+  (if (null? account)
+        (_ "Split Transaction")
+        (string-append 
+           ;; display account code?
+           (if show-account-code
+                 (string-append (xaccAccountGetCode account) " ")
+                 "")
+           ;; display account name?
+           (if show-account-name
+                 ;; display full account name?
+                 (if show-account-full-name
+                      (gnc-account-get-full-name account)
+                      (xaccAccountGetName account))
+                 ""))))
+
+;; render an account subheading - column-vector determines what is displayed
+(define (render-account-subheading
+         split table width subheading-style column-vector)
+  (let ((account (xaccSplitGetAccount split)))
+    (add-subheading-row (gnc:make-html-text
+                         (gnc:html-markup-anchor
+                           (gnc:account-anchor-text account)
+                           (account-namestring account
+                                               (used-sort-account-code      column-vector)
+                                               #t
+                                               (used-sort-account-full-name column-vector))))
+                        table width subheading-style)))
+
+(define (render-corresponding-account-subheading 
+         split table width subheading-style column-vector)
+  (let ((account (xaccSplitGetAccount (xaccSplitGetOtherSplit split))))
+    (add-subheading-row (gnc:make-html-text
+                         (gnc:html-markup-anchor
+                          (if (not (null? account))
+                           (gnc:account-anchor-text account)
+                           "")
+                           (account-namestring account
+                                               (used-sort-account-code      column-vector)
+                                               #t
+                                               (used-sort-account-full-name column-vector))))
+                        table width subheading-style)))
+
+(define (render-week-subheading split table width subheading-style column-vector)
+  (add-subheading-row (gnc:date-get-week-year-string
+		       (gnc:timepair->date
+			(gnc-transaction-get-date-posted
+			 (xaccSplitGetParent split))))
+		      table width subheading-style))
+
+(define (render-month-subheading split table width subheading-style column-vector)
+  (add-subheading-row (gnc:date-get-month-year-string
+                      (gnc:timepair->date 
+                       (gnc-transaction-get-date-posted
+                        (xaccSplitGetParent split))))
+                     table width subheading-style))
+
+(define (render-quarter-subheading split table width subheading-style column-vector)
+  (add-subheading-row (gnc:date-get-quarter-year-string 
+                      (gnc:timepair->date 
+                       (gnc-transaction-get-date-posted
+                        (xaccSplitGetParent split))))
+                     table width subheading-style))
+
+(define (render-year-subheading split table width subheading-style column-vector)
+  (add-subheading-row (gnc:date-get-year-string 
+                      (gnc:timepair->date 
+                       (gnc-transaction-get-date-posted
+                        (xaccSplitGetParent split))))
+                      table width subheading-style))
+
+
+(define (add-subtotal-row table width subtotal-string subtotal-collector 
+                          subtotal-style export?)
+  (let ((currency-totals (subtotal-collector
+                          'format gnc:make-gnc-monetary #f))
+        (blanks (gnc:make-html-table-cell/size 1 (- width 1) #f)))
+    (gnc:html-table-append-row/markup!
+     table
+     subtotal-style 
+     (if export?
+      (append! (cons (gnc:make-html-table-cell/markup "total-label-cell" subtotal-string)
+                     (gnc:html-make-empty-cells (- width 2)))
+               (list (gnc:make-html-table-cell/markup 
+                      "total-number-cell"
+                      (car currency-totals))))
+     (list (gnc:make-html-table-cell/size/markup 1 (- width 1) "total-label-cell"
+                                          subtotal-string)
+           (gnc:make-html-table-cell/markup 
+            "total-number-cell"
+             (car currency-totals)))))
+    (for-each (lambda (currency)
+                (gnc:html-table-append-row/markup! 
+                 table
+                 subtotal-style
+                 (append!
+                  (if export?
+                   (gnc:html-make-empty-cells (- width 1))
+                   (list blanks))
+                         (list (gnc:make-html-table-cell/markup
+                                "total-number-cell" currency)))))
+              (cdr currency-totals))))
+
+(define (total-string str) (string-append (_ "Total For ") str))
+
+(define (render-account-subtotal 
+         table width split total-collector subtotal-style column-vector export?)
+    (add-subtotal-row table width 
+                      (total-string (account-namestring (xaccSplitGetAccount split)
+                                                        (used-sort-account-code      column-vector)
+                                                        #t
+                                                        (used-sort-account-full-name column-vector)))
+                      total-collector subtotal-style export?))
+
+(define (render-corresponding-account-subtotal
+         table width split total-collector subtotal-style column-vector export?)
+    (add-subtotal-row table width
+                      (total-string (account-namestring (xaccSplitGetAccount
+                                                          (xaccSplitGetOtherSplit split))
+                                                        (used-sort-account-code      column-vector)
+                                                        #t
+                                                        (used-sort-account-full-name column-vector)))
+                    total-collector subtotal-style export?))
+
+(define (render-week-subtotal
+	 table width split total-collector subtotal-style column-vector export?)
+  (let ((tm (gnc:timepair->date (gnc-transaction-get-date-posted
+				 (xaccSplitGetParent split)))))
+    (add-subtotal-row table width
+		      (total-string (gnc:date-get-week-year-string tm))
+		      total-collector subtotal-style export?)))
+
+(define (render-month-subtotal
+         table width split total-collector subtotal-style column-vector export?)
+  (let ((tm (gnc:timepair->date (gnc-transaction-get-date-posted
+                                 (xaccSplitGetParent split)))))
+    (add-subtotal-row table width 
+                      (total-string (gnc:date-get-month-year-string tm))
+                      total-collector subtotal-style export?)))
+
+
+(define (render-quarter-subtotal
+         table width split total-collector subtotal-style column-vector export?)
+  (let ((tm (gnc:timepair->date (gnc-transaction-get-date-posted
+                                 (xaccSplitGetParent split)))))
+    (add-subtotal-row table width 
+                      (total-string (gnc:date-get-quarter-year-string tm))
+                     total-collector subtotal-style export?)))
+
+(define (render-year-subtotal
+         table width split total-collector subtotal-style column-vector export?)
+  (let ((tm (gnc:timepair->date (gnc-transaction-get-date-posted
+                                 (xaccSplitGetParent split)))))
+    (add-subtotal-row table width 
+                      (total-string (strftime "%Y" tm))
+                      total-collector subtotal-style export?)))
+
+
+(define (render-grand-total
+         table width total-collector export?)
+  (add-subtotal-row table width
+                    (_ "Grand Total")
+                    total-collector def:grand-total-style export?))
+
+(define account-types-to-reverse-assoc-list
+  (list (cons 'none '())
+        (cons 'income-expense
+              (list ACCT-TYPE-INCOME ACCT-TYPE-EXPENSE))
+        (cons 'credit-accounts
+              (list ACCT-TYPE-LIABILITY ACCT-TYPE-PAYABLE ACCT-TYPE-EQUITY
+                    ACCT-TYPE-CREDIT ACCT-TYPE-INCOME))))
+
+(define (used-date columns-used)
+  (vector-ref columns-used 0))
+(define (used-reconciled-date columns-used)
+  (vector-ref columns-used 1))
+(define (used-num columns-used)
+  (vector-ref columns-used 2))
+(define (used-description columns-used)
+  (vector-ref columns-used 3))
+(define (used-account-name columns-used)
+  (vector-ref columns-used 4))
+(define (used-other-account-name columns-used)
+  (vector-ref columns-used 5))	
+(define (used-shares columns-used)
+  (vector-ref columns-used 6))	
+(define (used-price columns-used)
+  (vector-ref columns-used 7))	
+(define (used-amount-single columns-used)
+  (vector-ref columns-used 8))	
+(define (used-amount-double-positive columns-used)
+  (vector-ref columns-used 9))	
+(define (used-amount-double-negative columns-used)
+  (vector-ref columns-used 10))	
+(define (used-running-balance columns-used)
+  (vector-ref columns-used 11))
+(define (used-account-full-name columns-used)
+  (vector-ref columns-used 12))
+(define (used-memo columns-used)
+  (vector-ref columns-used 13))
+(define (used-account-code columns-used)
+  (vector-ref columns-used 14))
+(define (used-other-account-code columns-used)
+  (vector-ref columns-used 15))
+(define (used-other-account-full-name columns-used)
+  (vector-ref columns-used 16))
+(define (used-sort-account-code columns-used)
+  (vector-ref columns-used 17))
+(define (used-sort-account-full-name columns-used)
+  (vector-ref columns-used 18))
+(define (used-notes columns-used)
+  (vector-ref columns-used 19))
+
+(define columns-used-size 20)
+
+(define (num-columns-required columns-used)  
+  (do ((i 0 (+ i 1)) 
+       (col-req 0 col-req)) 
+      ((>= i columns-used-size) col-req)
+    ; If column toggle is true, increase column count. But attention:
+    ; some toggles only change the meaning of another toggle. Don't count these modifier toggles
+    (if (and (not (= i 12)) ; Skip Account Full Name toggle - modifies Account Name column
+             (not (= i 16)) ; Skip Other Account Full Name toggle - modifies Other Account Name column
+             (not (= i 17)) ; Skip Sort Account Code - modifies Account Name subheading
+             (not (= i 18)) ; Skip Sort Account Full Name - modifies Account Name subheading
+             (not (= i 19)) ; Skip Note toggle - modifies Memo column
+             (vector-ref columns-used i))
+      (set! col-req (+ col-req 1)))
+    ; Account Code and Account Name share one column so if both were ticked the
+    ; the check above would have set up one column too much. The check below
+    ; will compensate these again.
+    (if (or (and (= i 14) (vector-ref columns-used 14) (vector-ref columns-used 4)) ; Account Code and Name
+            (and (= i 15) (vector-ref columns-used 15) (vector-ref columns-used 5))) ; Other Account Code and Name
+      (set! col-req (- col-req 1)))))
+
+(define (build-column-used options)   
+  (define (opt-val section name)
+    (gnc:option-value 
+     (gnc:lookup-option options section name)))
+  (let ((column-list (make-vector columns-used-size #f))
+        (is-single? (eq? (opt-val gnc:pagename-display optname-detail-level) 'single)))
+    (if (opt-val gnc:pagename-display (N_ "Date"))
+        (vector-set! column-list 0 #t))
+    (if (opt-val gnc:pagename-display (N_ "Reconciled Date"))
+        (vector-set! column-list 1 #t))
+    (if (if (gnc:lookup-option options gnc:pagename-display (N_ "Num"))
+            (opt-val gnc:pagename-display (N_ "Num"))
+            (opt-val gnc:pagename-display (N_ "Num/Action")))
+        (vector-set! column-list 2 #t))
+    (if (opt-val gnc:pagename-display (N_ "Description"))
+        (vector-set! column-list 3 #t))
+    (if (opt-val gnc:pagename-display (N_ "Account Name"))
+        (vector-set! column-list 4 #t))
+    (if (and is-single? (opt-val gnc:pagename-display (N_ "Other Account Name")))
+        (vector-set! column-list 5 #t))
+    (if (opt-val gnc:pagename-display (N_ "Shares"))
+        (vector-set! column-list 6 #t))
+    (if (opt-val gnc:pagename-display (N_ "Price"))
+        (vector-set! column-list 7 #t))
+    (let ((amount-setting (opt-val gnc:pagename-display (N_ "Amount"))))
+      (if (eq? amount-setting 'single)
+          (vector-set! column-list 8 #t))
+      (if (eq? amount-setting 'double)
+          (begin (vector-set! column-list 9 #t)
+                 (vector-set! column-list 10 #t))))
+    (if (opt-val gnc:pagename-display (N_ "Running Balance"))
+        (vector-set! column-list 11 #t))
+    (if (opt-val gnc:pagename-display  (N_ "Use Full Account Name"))
+        (vector-set! column-list 12 #t))
+    (if (opt-val gnc:pagename-display (N_ "Memo"))
+        (vector-set! column-list 13 #t))
+    (if (opt-val gnc:pagename-display (N_ "Account Code"))
+        (vector-set! column-list 14 #t))
+    (if (and is-single? (opt-val gnc:pagename-display (N_ "Other Account Code")))
+        (vector-set! column-list 15 #t))
+    (if (and is-single? (opt-val gnc:pagename-display (N_ "Use Full Other Account Name")))
+        (vector-set! column-list 16 #t))
+    (if (opt-val pagename-sorting (N_ "Show Account Code"))
+        (vector-set! column-list 17 #t))
+    (if (opt-val pagename-sorting (N_ "Show Full Account Name"))
+        (vector-set! column-list 18 #t))
+    (if (opt-val gnc:pagename-display (N_ "Notes"))
+        (vector-set! column-list 19 #t))
+    column-list))
+
+(define (make-heading-list column-vector options)
+  (let ((heading-list '()))
+    (if (used-date column-vector)
+        (addto! heading-list (_ "Date")))
+    (if (used-reconciled-date column-vector)
+        (addto! heading-list (_ "Reconciled Date")))
+    (if (used-num column-vector)
+        (addto! heading-list (if (and (qof-book-use-split-action-for-num-field
+                                                        (gnc-get-current-book))
+                                      (if (gnc:lookup-option options
+                                                    gnc:pagename-display
+                                                    (N_ "Trans Number"))
+                                          (gnc:option-value 
+                                            (gnc:lookup-option options
+                                                    gnc:pagename-display
+                                                    (N_ "Trans Number")))
+                                          #f))
+                                 (_ "Num/T-Num")
+                                 (_ "Num"))))
+    (if (used-description column-vector)
+        (addto! heading-list (_ "Description")))
+    (if (used-memo column-vector)
+        (if (used-notes column-vector)
+            (addto! heading-list (string-append (_ "Memo") "/" (_ "Notes")))
+            (addto! heading-list (_ "Memo"))))
+    (if (or (used-account-name column-vector) (used-account-code column-vector))
+        (addto! heading-list (_ "Account")))
+    (if (or (used-other-account-name column-vector) (used-other-account-code column-vector))
+        (addto! heading-list (_ "Transfer from/to")))
+    (if (used-shares column-vector)
+        (addto! heading-list (_ "Shares")))
+    (if (used-price column-vector)
+        (addto! heading-list (_ "Price")))
+    (if (used-amount-single column-vector)
+        (addto! heading-list (_ "Amount")))
+    ;; FIXME: Proper labels: what?
+    (if (used-amount-double-positive column-vector)
+        (addto! heading-list (_ "Debit")))
+    (if (used-amount-double-negative column-vector)
+        (addto! heading-list (_ "Credit")))
+    (if (used-running-balance column-vector)
+        (addto! heading-list (_ "Balance")))
+    (reverse heading-list)))
+
+(define (add-split-row table split column-vector options
+                       row-style account-types-to-reverse transaction-row?)
+
+  (define (opt-val section name)
+    (gnc:option-value 
+     (gnc:lookup-option options section name)))
+
+  (let* ((row-contents '())
+         (dummy  (gnc:debug "split is originally" split))
+         (parent (xaccSplitGetParent split))
+         (account (xaccSplitGetAccount split))
+         (account-type (xaccAccountGetType account))
+         (currency (if (not (null? account))
+                       (xaccAccountGetCommodity account)
+                       (gnc-default-currency)))
+	 (report-currency (if (opt-val gnc:pagename-general optname-common-currency)
+			       (opt-val gnc:pagename-general optname-currency)
+			       currency))
+         (damount (if (gnc:split-voided? split)
+					 (xaccSplitVoidFormerAmount split)
+					 (xaccSplitGetAmount split)))
+	 (trans-date (gnc-transaction-get-date-posted parent))
+	 (split-value (gnc:exchange-by-pricedb-nearest
+		       (gnc:make-gnc-monetary 
+			currency
+			(if (member account-type account-types-to-reverse) 
+			    (gnc-numeric-neg damount)
+			    damount))
+		       report-currency
+		       ;; Use midday as the transaction time so it matches a price
+		       ;; on the same day.  Otherwise it uses midnight which will
+		       ;; likely match a price on the previous day
+		       (timespecCanonicalDayTime trans-date))))
+    
+    (if (used-date column-vector)
+        (addto! row-contents
+                (if transaction-row?
+                    (gnc:make-html-table-cell/markup "date-cell"
+                        (gnc-print-date (gnc-transaction-get-date-posted parent)))
+                    " ")))
+    (if (used-reconciled-date column-vector)
+        (addto! row-contents
+                (gnc:make-html-table-cell/markup "date-cell"
+		    (let ((date (gnc-split-get-date-reconciled split)))
+		      (if (equal? date (cons 0 0))
+		          " "
+		          (gnc-print-date date))))))
+    (if (used-num column-vector)
+        (addto! row-contents
+                (if transaction-row?
+                    (if (qof-book-use-split-action-for-num-field
+                                                        (gnc-get-current-book))
+                        (let* ((num (gnc-get-num-action parent split))
+                               (t-num (if (if (gnc:lookup-option options
+                                                    gnc:pagename-display
+                                                    (N_ "Trans Number"))
+                                              (opt-val gnc:pagename-display
+                                                    (N_ "Trans Number"))
+                                              #f)
+                                          (gnc-get-num-action parent #f)
+                                          ""))
+                               (num-string (if (equal? t-num "")
+                                               num
+                                               (string-append num "/" t-num))))
+                              (gnc:make-html-table-cell/markup "text-cell"
+                                   num-string))
+                        (gnc:make-html-table-cell/markup "text-cell"
+                            (gnc-get-num-action parent split)))
+                    " ")))
+
+    (if (used-description column-vector)
+        (addto! row-contents
+                (if transaction-row?
+                    (gnc:make-html-table-cell/markup "text-cell"
+                        (xaccTransGetDescription parent))
+                    " ")))
+    
+    (if (used-memo column-vector)
+        (let ((memo (xaccSplitGetMemo split)))
+          (if (and (equal? memo "") (used-notes column-vector))
+              (addto! row-contents (xaccTransGetNotes parent))
+              (addto! row-contents memo))))
+    
+    (if (or (used-account-name column-vector) (used-account-code column-vector))
+       (addto! row-contents (account-namestring account
+                                                (used-account-code      column-vector)
+                                                (used-account-name      column-vector)
+                                                (used-account-full-name column-vector))))
+    
+    (if (or (used-other-account-name column-vector) (used-other-account-code column-vector))
+       (addto! row-contents (account-namestring (xaccSplitGetAccount
+                                                   (xaccSplitGetOtherSplit split))
+                                                (used-other-account-code      column-vector)
+                                                (used-other-account-name      column-vector)
+                                                (used-other-account-full-name column-vector))))
+    
+    (if (used-shares column-vector)
+        (addto! row-contents (xaccSplitGetAmount split)))
+    (if (used-price column-vector)
+        (addto! 
+         row-contents 
+         (gnc:make-gnc-monetary (xaccTransGetCurrency parent)
+                                (xaccSplitGetSharePrice split))))
+    (if (used-amount-single column-vector)
+        (addto! row-contents
+                (gnc:make-html-table-cell/markup "number-cell"
+                                                 (gnc:html-transaction-anchor parent split-value))))
+    (if (used-amount-double-positive column-vector)
+        (if (gnc-numeric-positive-p (gnc:gnc-monetary-amount split-value))
+            (addto! row-contents
+                    (gnc:make-html-table-cell/markup "number-cell"
+                                                     (gnc:html-transaction-anchor parent split-value)))
+            (addto! row-contents " ")))
+    (if (used-amount-double-negative column-vector)
+        (if (gnc-numeric-negative-p (gnc:gnc-monetary-amount split-value))
+            (addto! row-contents
+                    (gnc:make-html-table-cell/markup
+                     "number-cell" (gnc:html-transaction-anchor parent (gnc:monetary-neg split-value))))
+            (addto! row-contents " ")))
+    (if (used-running-balance column-vector)
+	(begin
+	  (gnc:debug "split is " split)
+	  (gnc:debug "split get balance:" (xaccSplitGetBalance split))
+	  (addto! row-contents
+		  (gnc:make-html-table-cell/markup
+		   "number-cell"
+		   (gnc:make-gnc-monetary currency
+					  (xaccSplitGetBalance split))))))
+	(gnc:html-table-append-row/markup! table row-style
+                                       (reverse row-contents))
+    split-value))
+
+
+(define date-sorting-types (list 'date 'exact-time 'register-order))
+
+(define (trep-options-generator)
+  (define gnc:*transaction-report-options* (gnc:new-options))
+  (define (gnc:register-trep-option new-option)
+    (gnc:register-option gnc:*transaction-report-options* new-option))
+  
+  ;; General options
+  
+  (gnc:options-add-date-interval!
+   gnc:*transaction-report-options*
+   gnc:pagename-general (N_ "Start Date") (N_ "End Date") "a")
+  
+  
+  (gnc:register-trep-option
+   (gnc:make-complex-boolean-option
+    gnc:pagename-general optname-common-currency
+    "e" (N_ "Convert all transactions into a common currency.") #f
+    #f
+    (lambda (x) (gnc-option-db-set-option-selectable-by-name
+		 gnc:*transaction-report-options*
+		 gnc:pagename-general
+		 optname-currency
+		 x))
+    ))
+
+  (gnc:options-add-currency!
+   gnc:*transaction-report-options* gnc:pagename-general optname-currency "f")
+
+  (gnc:register-trep-option
+   (gnc:make-simple-boolean-option
+    gnc:pagename-general optname-table-export
+    "g" (N_ "Formats the table suitable for cut & paste exporting with extra cells.") #f))  
+  
+  ;; Accounts options
+  
+  ;; account to do report on
+  (gnc:register-trep-option
+   (gnc:make-account-list-option
+    gnc:pagename-accounts (N_ "Accounts")
+    "a" (N_ "Report on these accounts.")
+    ;; select, by default, no accounts! Selecting all accounts will
+    ;; always imply an insanely long waiting time upon opening, and it
+    ;; is almost never useful. So we instead display the normal error
+    ;; message saying "Click here", and the user knows how to
+    ;; continue.
+    (lambda ()
+      '())
+    #f #t))
+
+  (gnc:register-trep-option
+   (gnc:make-string-option
+    gnc:pagename-accounts (N_ "Account Substring")
+    "a5" (N_ "Match only above accounts whose fullname contains substring e.g. ':Travel' will \
+match Expenses:Travel:Holiday and Expenses:Business:Travel. Can be left blank, which will \
+disable the substring filter. This filter is case-sensitive.")
+    ""))
+
+  (gnc:register-trep-option
+   (gnc:make-account-list-option
+    gnc:pagename-accounts (N_ "Filter By...")
+    "b" (N_ "Filter on these accounts.")
+    (lambda ()
+      ;; FIXME : gnc:get-current-accounts disappeared.
+      (let* ((current-accounts '())
+	     (root (gnc-get-current-root-account))
+	     (num-accounts (gnc-account-n-children root))
+	     (first-account (gnc-account-nth-child root 0)))
+	(cond ((not (null? current-accounts))
+	       (list (car current-accounts)))
+	      ((> num-accounts 0) (list first-account))
+	      (else '()))))
+    #f #t))
+
+  (gnc:register-trep-option
+   (gnc:make-multichoice-option
+    gnc:pagename-accounts (N_ "Filter Type")
+    "c" (N_ "Filter account.")
+    'none
+    (list (vector 'none
+		  (N_ "None")
+		  (N_ "Do not do any filtering."))
+	  (vector 'include
+		  (N_ "Include Transactions to/from Filter Accounts")
+		  (N_ "Include transactions to/from filter accounts only."))
+	  (vector 'exclude
+		  (N_ "Exclude Transactions to/from Filter Accounts")
+		  (N_ "Exclude transactions to/from all filter accounts."))
+	  )))
+
+  ;;
+
+  (gnc:register-trep-option
+   (gnc:make-multichoice-option
+    gnc:pagename-accounts optname-void-transactions
+    "d" (N_ "How to handle void transactions.")
+    'non-void-only
+    (list (vector
+	   'non-void-only
+	   (N_ "Non-void only")
+	   (N_ "Show only non-voided transactions."))
+	  (vector
+	   'void-only
+	   (N_ "Void only")
+	   (N_ "Show only voided transactions."))
+	  (vector 
+	   'both
+	   (N_ "Both")
+	   (N_ "Show both (and include void transactions in totals).")))))
+
+  ;; Sorting options
+      
+  (let ((options gnc:*transaction-report-options*)
+
+        (key-choice-list 
+         (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
+             (list (vector 'none
+                           (N_ "None")
+                           (N_ "Do not sort."))
+
+                   (vector 'account-name
+                           (N_ "Account Name")
+                           (N_ "Sort & subtotal by account name."))
+
+                   (vector 'account-code
+                           (N_ "Account Code")
+                           (N_ "Sort & subtotal by account code."))
+
+                   (vector 'date
+                           (N_ "Date")
+                           (N_ "Sort by date."))
+
+                   (vector 'exact-time
+                           (N_ "Exact Time")
+                           (N_ "Sort by exact time."))
+
+                   (vector 'reconciled-date
+                           (N_ "Reconciled Date")
+                           (N_ "Sort by the Reconciled Date."))
+
+                   (vector 'register-order
+                           (N_ "Register Order")
+                           (N_ "Sort as in the register."))
+
+                   (vector 'corresponding-acc-name 
+                           (N_ "Other Account Name")
+                           (N_ "Sort by account transferred from/to's name."))
+
+                   (vector 'corresponding-acc-code
+                           (N_ "Other Account Code")
+                           (N_ "Sort by account transferred from/to's code."))
+               
+                   (vector 'amount
+                           (N_ "Amount")
+                           (N_ "Sort by amount."))
+               
+                   (vector 'description
+                           (N_ "Description")
+                           (N_ "Sort by description."))
+               
+                   (vector 'number
+                           (N_ "Number/Action")
+                           (N_ "Sort by check number/action."))
+
+                   (vector 't-number
+                           (N_ "Transaction Number")
+                           (N_ "Sort by transaction number."))
+               
+                   (vector 'memo
+                           (N_ "Memo")
+                           (N_ "Sort by memo.")))
+             (list (vector 'none
+                           (N_ "None")
+                           (N_ "Do not sort."))
+
+                   (vector 'account-name
+                           (N_ "Account Name")
+                           (N_ "Sort & subtotal by account name."))
+
+                   (vector 'account-code
+                           (N_ "Account Code")
+                           (N_ "Sort & subtotal by account code."))
+
+                   (vector 'date
+                           (N_ "Date")
+                           (N_ "Sort by date."))
+
+                   (vector 'exact-time
+                           (N_ "Exact Time")
+                           (N_ "Sort by exact time."))
+
+                   (vector 'reconciled-date
+                           (N_ "Reconciled Date")
+                           (N_ "Sort by the Reconciled Date."))
+
+                   (vector 'register-order
+                           (N_ "Register Order")
+                           (N_ "Sort as in the register."))
+
+                   (vector 'corresponding-acc-name 
+                           (N_ "Other Account Name")
+                           (N_ "Sort by account transferred from/to's name."))
+
+                   (vector 'corresponding-acc-code
+                           (N_ "Other Account Code")
+                           (N_ "Sort by account transferred from/to's code."))
+               
+                   (vector 'amount
+                           (N_ "Amount")
+                           (N_ "Sort by amount."))
+               
+                   (vector 'description
+                           (N_ "Description")
+                           (N_ "Sort by description."))
+               
+                   (vector 'number
+                           (N_ "Number")
+                           (N_ "Sort by check/transaction number."))
+
+                   (vector 'memo
+                           (N_ "Memo")
+                           (N_ "Sort by memo.")))))
+
+        (ascending-choice-list 
+         (list
+          (vector 'ascend
+                  (N_ "Ascending")
+                  (N_ "Smallest to largest, earliest to latest."))
+          (vector 'descend
+                  (N_ "Descending")
+                  (N_ "Largest to smallest, latest to earliest."))))
+
+        (subtotal-choice-list
+         (list
+          (vector 'none (N_ "None") (N_ "None."))
+          (vector 'weekly (N_ "Weekly") (N_ "Weekly."))
+          (vector 'monthly (N_ "Monthly") (N_ "Monthly."))
+          (vector 'quarterly (N_ "Quarterly") (N_ "Quarterly."))
+          (vector 'yearly (N_ "Yearly") (N_ "Yearly."))))
+
+        (prime-sortkey 'account-name)
+        (prime-sortkey-subtotal-true #t)
+        (sec-sortkey 'register-order)
+        (sec-sortkey-subtotal-true #f))
+
+    (define (apply-selectable-by-name-sorting-options)
+      (let* ((prime-sortkey-enabled (not (eq? prime-sortkey 'none)))
+             (prime-sortkey-subtotal-enabled (member prime-sortkey subtotal-enabled))
+             (prime-date-sortingtype-enabled (member prime-sortkey date-sorting-types))
+             (sec-sortkey-enabled (not (eq? sec-sortkey 'none)))
+             (sec-sortkey-subtotal-enabled (member sec-sortkey subtotal-enabled))
+             (sec-date-sortingtype-enabled (member sec-sortkey date-sorting-types)))
+
+        (gnc-option-db-set-option-selectable-by-name
+         options pagename-sorting optname-prime-subtotal
+         prime-sortkey-subtotal-enabled)
+
+        (gnc-option-db-set-option-selectable-by-name
+         options pagename-sorting optname-prime-sortorder
+         prime-sortkey-enabled)
+
+        (gnc-option-db-set-option-selectable-by-name
+         options pagename-sorting optname-sec-subtotal
+         sec-sortkey-subtotal-enabled)
+
+        (gnc-option-db-set-option-selectable-by-name
+         options pagename-sorting optname-sec-sortorder
+         sec-sortkey-enabled)
+
+        (gnc-option-db-set-option-selectable-by-name
+         options pagename-sorting optname-full-account-name
+         (or (and prime-sortkey-subtotal-enabled prime-sortkey-subtotal-true)
+             (and sec-sortkey-subtotal-enabled sec-sortkey-subtotal-true)))
+
+        (gnc-option-db-set-option-selectable-by-name
+         options pagename-sorting optname-show-account-code
+         (or (and prime-sortkey-subtotal-enabled prime-sortkey-subtotal-true)
+             (and sec-sortkey-subtotal-enabled sec-sortkey-subtotal-true)))
+
+        (gnc-option-db-set-option-selectable-by-name
+         options pagename-sorting optname-prime-date-subtotal
+         prime-date-sortingtype-enabled)
+
+        (gnc-option-db-set-option-selectable-by-name
+         options pagename-sorting optname-sec-date-subtotal
+         sec-date-sortingtype-enabled)))
+
+    ;; primary sorting criterion
+    (gnc:register-trep-option
+     (gnc:make-multichoice-callback-option
+      pagename-sorting optname-prime-sortkey
+      "a" (N_ "Sort by this criterion first.")
+      prime-sortkey
+      key-choice-list #f
+      (lambda (x)
+        (set! prime-sortkey x)
+        (apply-selectable-by-name-sorting-options))))
+    
+    (gnc:register-trep-option
+     (gnc:make-simple-boolean-option
+      pagename-sorting optname-full-account-name
+      "j1"
+      (N_ "Show the full account name for subtotals and subtitles?")
+      #f))
+    
+    (gnc:register-trep-option
+     (gnc:make-simple-boolean-option
+      pagename-sorting optname-show-account-code
+      "j2"
+      (N_ "Show the account code for subtotals and subtitles?")
+      #f))
+    
+    (gnc:register-trep-option
+     (gnc:make-complex-boolean-option
+      pagename-sorting optname-prime-subtotal
+      "e5"
+      (N_ "Subtotal according to the primary key?")
+      prime-sortkey-subtotal-true #f
+      (lambda (x)
+        (set! prime-sortkey-subtotal-true x)
+        (apply-selectable-by-name-sorting-options))))
+
+    (gnc:register-trep-option
+     (gnc:make-multichoice-option
+      pagename-sorting optname-prime-date-subtotal
+      "e2" (N_ "Do a date subtotal.")
+      'monthly
+      subtotal-choice-list))
+    
+    (gnc:register-trep-option
+     (gnc:make-multichoice-option
+      pagename-sorting optname-prime-sortorder
+      "e" (N_ "Order of primary sorting.")
+      'ascend
+      ascending-choice-list))
+    
+    ;; Secondary sorting criterion
+    (gnc:register-trep-option
+     (gnc:make-multichoice-callback-option
+      pagename-sorting optname-sec-sortkey
+      "f"
+      (N_ "Sort by this criterion second.")
+      sec-sortkey
+      key-choice-list #f
+      (lambda (x)
+        (set! sec-sortkey x)
+        (apply-selectable-by-name-sorting-options))))
+
+    (gnc:register-trep-option
+     (gnc:make-complex-boolean-option
+      pagename-sorting optname-sec-subtotal
+      "i5"
+      (N_ "Subtotal according to the secondary key?")
+      sec-sortkey-subtotal-true #f
+      (lambda (x)
+        (set! sec-sortkey-subtotal-true x)
+        (apply-selectable-by-name-sorting-options))))
+
+    (gnc:register-trep-option
+     (gnc:make-multichoice-option
+      pagename-sorting optname-sec-date-subtotal
+      "i2" (N_ "Do a date subtotal.")
+      'monthly
+      subtotal-choice-list))
+    
+    (gnc:register-trep-option
+     (gnc:make-multichoice-option
+      pagename-sorting optname-sec-sortorder
+      "i" (N_ "Order of Secondary sorting.")
+      'ascend
+      ascending-choice-list)))
+  
+  ;; Display options
+  
+    (let ((options gnc:*transaction-report-options*)
+          (disp-memo? #t)
+          (disp-accname? #t)
+          (disp-other-accname? #f)
+          (is-single? #t))
+
+      (define (apply-selectable-by-name-display-options)
+        (gnc-option-db-set-option-selectable-by-name
+         options gnc:pagename-display (N_ "Use Full Account Name")
+         disp-accname?)
+
+        (gnc-option-db-set-option-selectable-by-name
+         options gnc:pagename-display (N_ "Other Account Name")
+         is-single?)
+
+        (gnc-option-db-set-option-selectable-by-name
+         options gnc:pagename-display (N_ "Use Full Other Account Name")
+         (and disp-other-accname? is-single?))
+
+        (gnc-option-db-set-option-selectable-by-name
+         options gnc:pagename-display (N_ "Other Account Code")
+         is-single?)
+
+        (gnc-option-db-set-option-selectable-by-name
+         options gnc:pagename-display (N_ "Notes")
+         disp-memo?))
+
+  (for-each
+   (lambda (l)
+     (gnc:register-trep-option
+      (gnc:make-simple-boolean-option
+       gnc:pagename-display (car l) (cadr l) (caddr l) (cadddr l))))
+   ;; One list per option here with: option-name, sort-tag,
+   ;; help-string, default-value
+   (list
+    (list (N_ "Date")                         "a"  (N_ "Display the date?") #t)
+    (list (N_ "Reconciled Date")              "a2" (N_ "Display the reconciled date?") #f)
+    (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
+        (list (N_ "Num/Action")               "b"  (N_ "Display the check number?") #t)
+        (list (N_ "Num")                      "b"  (N_ "Display the check number?") #t))
+    (list (N_ "Description")                  "c"  (N_ "Display the description?") #t)
+    (list (N_ "Notes")                        "d2" (N_ "Display the notes if the memo is unavailable?") #t)
+    ;; account name option appears here
+    (list (N_ "Use Full Account Name")        "f"  (N_ "Display the full account name?") #t)
+    (list (N_ "Account Code")                 "g"  (N_ "Display the account code?") #f)
+    ;; other account name option appears here
+    (list (N_ "Use Full Other Account Name")  "i"  (N_ "Display the full account name?") #f)
+    (list (N_ "Other Account Code")           "j"  (N_ "Display the other account code?") #f)
+    (list (N_ "Shares")                       "k"  (N_ "Display the number of shares?") #f)
+    (list (N_ "Price")                        "l"  (N_ "Display the shares price?") #f)
+    ;; note the "Amount" multichoice option in between here
+    (list (N_ "Running Balance")              "n"  (N_ "Display a running balance?") #f)
+    (list (N_ "Totals")                       "o"  (N_ "Display the totals?") #t)))
+
+  (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
+      (gnc:register-trep-option
+       (gnc:make-simple-boolean-option
+        gnc:pagename-display (N_ "Trans Number")
+                                    "b2" (N_ "Display the trans number?") #f)))
+
+  ;; Add an option to display the memo, and disable the notes option
+  ;; when memos are not included.
+  (gnc:register-trep-option
+   (gnc:make-complex-boolean-option
+    gnc:pagename-display (N_ "Memo")
+    "d"  (N_ "Display the memo?") #t
+    #f
+    (lambda (x)
+        (set! disp-memo? x)
+        (apply-selectable-by-name-display-options))))
+
+  ;; Ditto for Account Name #t -> Use Full Account Name is selectable
+  (gnc:register-trep-option
+   (gnc:make-complex-boolean-option
+    gnc:pagename-display (N_ "Account Name")
+    "e"  (N_ "Display the account name?") #t
+    #f
+    (lambda (x)
+        (set! disp-accname? x)
+        (apply-selectable-by-name-display-options))))
+
+  ;; Ditto for Other Account Name #t -> Use Full Other Account Name is selectable
+  (gnc:register-trep-option
+   (gnc:make-complex-boolean-option
+    gnc:pagename-display (N_ "Other Account Name")
+    "h5"  (N_ "Display the other account name? (if this is a split transaction, this parameter is guessed).") #f
+    #f
+    (lambda (x)
+        (set! disp-other-accname? x)
+        (apply-selectable-by-name-display-options))))
+
+  (gnc:register-trep-option
+   (gnc:make-multichoice-callback-option
+    gnc:pagename-display optname-detail-level
+    "h" (N_ "Amount of detail to display per transaction.")
+    'single
+    (list (vector 'multi-line
+                  (N_ "Multi-Line")
+                  (N_ "Display all splits in a transaction on a separate line."))
+          (vector 'single
+                  (N_ "Single")
+                  (N_ "Display one line per transaction, merging multiple splits where required.")))
+    #f
+    (lambda (x)
+        (set! is-single? (eq? x 'single))
+        (apply-selectable-by-name-display-options))))
+
+  (gnc:register-trep-option
+   (gnc:make-multichoice-option
+    gnc:pagename-display (N_ "Amount")
+    "m" (N_ "Display the amount?")  
+    'single
+    (list
+     (vector 'none (N_ "None") (N_ "No amount display."))
+     (vector 'single (N_ "Single") (N_ "Single Column Display."))
+     (vector 'double (N_ "Double") (N_ "Two Column Display.")))))
+  
+  (gnc:register-trep-option
+   (gnc:make-multichoice-option
+    gnc:pagename-display (N_ "Sign Reverses")
+    "p" (N_ "Reverse amount display for certain account types.")
+    'credit-accounts
+    (list 
+     (vector 'none (N_ "None") (N_ "Don't change any displayed amounts."))
+     (vector 'income-expense (N_ "Income and Expense")
+             (N_ "Reverse amount display for Income and Expense Accounts."))
+     (vector 'credit-accounts (N_ "Credit Accounts")
+             (N_ "Reverse amount display for Liability, Payable, Equity, \
+Credit Card, and Income accounts."))))))
+
+
+  (gnc:options-set-default-section gnc:*transaction-report-options*
+                                   gnc:pagename-general)
+
+  gnc:*transaction-report-options*)
+
+
+(define (display-date-interval begin end)
+  (let ((begin-string (gnc-print-date begin))
+        (end-string (gnc-print-date end)))
+    (sprintf #f (_ "From %s To %s") begin-string end-string)))
+
+(define (get-primary-subtotal-style options)
+  (let ((bgcolor (gnc:lookup-option options 
+                                    (N_ "Colors")
+                                    (N_ "Primary Subtotals/headings"))))
+    (list 'attribute (list "bgcolor" (gnc:color-option->html bgcolor)))))
+
+(define (get-secondary-subtotal-style options)
+  (let ((bgcolor (gnc:lookup-option options
+                                    (N_ "Colors")
+                                    (N_ "Secondary Subtotals/headings"))))
+    (list 'attribute (list "bgcolor" (gnc:color-option->html bgcolor)))))
+
+(define (get-grand-total-style options)
+  (let ((bgcolor (gnc:lookup-option options
+                                    (N_ "Colors")
+                                    (N_ "Grand Total"))))
+    (list 'attribute (list "bgcolor" (gnc:color-option->html bgcolor)))))
+
+(define (get-odd-row-style options)
+  (let ((bgcolor (gnc:lookup-option options
+                                    (N_ "Colors")
+                                    (N_ "Split Odd"))))
+    (list 'attribute (list "bgcolor" (gnc:color-option->html bgcolor)))))
+
+(define (get-even-row-style options)
+  (let ((bgcolor (gnc:lookup-option options
+                                    (N_ "Colors")
+                                    (N_ "Split Even"))))
+    (list 'attribute (list "bgcolor" (gnc:color-option->html bgcolor)))))
+
+
+;; ;;;;;;;;;;;;;;;;;;;;
+;; Here comes the big function that builds the whole table.
+(define (make-split-table splits options
+                          primary-subtotal-pred
+                          secondary-subtotal-pred
+                          primary-subheading-renderer
+                          secondary-subheading-renderer
+                          primary-subtotal-renderer
+                          secondary-subtotal-renderer)
+  
+ (let ((work-to-do (length splits))
+       (work-done 0)
+       (used-columns (build-column-used options)))
+  (define (get-account-types-to-reverse options)
+    (cdr (assq (gnc:option-value 
+                (gnc:lookup-option options
+                                   gnc:pagename-display
+                                   (N_ "Sign Reverses")))
+               account-types-to-reverse-assoc-list)))
+  
+
+  (define (transaction-report-multi-rows-p options)
+    (eq? (gnc:option-value
+          (gnc:lookup-option options gnc:pagename-display optname-detail-level))
+         'multi-line))
+
+  (define (transaction-report-export-p options)
+    (gnc:option-value
+     (gnc:lookup-option options gnc:pagename-general
+       optname-table-export)))
+
+  (define (add-other-split-rows split table used-columns
+                                row-style account-types-to-reverse)
+    (define (other-rows-driver split parent table used-columns i)
+      (let ((current (xaccTransGetSplit parent i)))
+        (cond ((null? current) #f)
+              ((equal? current split)
+               (other-rows-driver split parent table used-columns (+ i 1)))
+              (else (begin
+                      (add-split-row table current used-columns options
+                                     row-style account-types-to-reverse #f)
+                      (other-rows-driver split parent table used-columns
+                                         (+ i 1)))))))
+
+    (other-rows-driver split (xaccSplitGetParent split)
+                       table used-columns 0))
+
+  (define (do-rows-with-subtotals splits 
+                                  table 
+                                  used-columns
+                                  width
+                                  multi-rows?
+                                  odd-row?
+                                  export?
+                                  account-types-to-reverse
+                                  primary-subtotal-pred
+                                  secondary-subtotal-pred 
+                                  primary-subheading-renderer
+                                  secondary-subheading-renderer
+                                  primary-subtotal-renderer
+                                  secondary-subtotal-renderer
+                                  primary-subtotal-collector 
+                                  secondary-subtotal-collector 
+                                  total-collector)
+
+    (gnc:report-percent-done (* 100 (/ work-done work-to-do)))
+    (set! work-done (+ 1 work-done))
+    (if (null? splits)
+        (begin
+          (gnc:html-table-append-row/markup!
+           table
+           def:grand-total-style
+           (list
+            (gnc:make-html-table-cell/size
+             1 width (gnc:make-html-text (gnc:html-markup-hr)))))
+	  (if (gnc:option-value (gnc:lookup-option options "Display" "Totals"))
+	      (render-grand-total table width total-collector export?)))
+	
+        (let* ((current (car splits))
+               (current-row-style (if multi-rows? def:normal-row-style
+                                      (if odd-row? def:normal-row-style 
+                                          def:alternate-row-style)))
+               (rest (cdr splits))
+               (next (if (null? rest) #f
+                         (car rest)))
+               (split-value (add-split-row 
+                             table 
+                             current 
+                             used-columns
+			     options
+                             current-row-style
+                             account-types-to-reverse
+                             #t)))
+          (if multi-rows?
+              (add-other-split-rows
+               current table used-columns def:alternate-row-style
+               account-types-to-reverse))
+
+          (primary-subtotal-collector 'add 
+                                      (gnc:gnc-monetary-commodity
+                                       split-value) 
+                                      (gnc:gnc-monetary-amount
+                                       split-value))
+          (secondary-subtotal-collector 'add
+                                        (gnc:gnc-monetary-commodity
+                                         split-value)
+                                        (gnc:gnc-monetary-amount
+                                         split-value))
+          (total-collector 'add
+                           (gnc:gnc-monetary-commodity split-value)
+                           (gnc:gnc-monetary-amount split-value))
+
+          (if (and primary-subtotal-pred
+                   (or (not next)
+                       (and next
+                            (not (primary-subtotal-pred current next)))))
+              (begin 
+                (if secondary-subtotal-pred
+
+                    (begin
+                      (secondary-subtotal-renderer
+                       table width current
+                       secondary-subtotal-collector
+                       def:secondary-subtotal-style used-columns export?)
+                      (secondary-subtotal-collector 'reset #f #f)))
+
+                (primary-subtotal-renderer table width current
+                                           primary-subtotal-collector
+                                           def:primary-subtotal-style used-columns
+                                           export?)
+
+                (primary-subtotal-collector 'reset #f #f)
+
+                (if next
+                    (begin 
+                      (primary-subheading-renderer
+                       next table width def:primary-subtotal-style used-columns)
+
+                      (if secondary-subtotal-pred
+                          (secondary-subheading-renderer
+                           next 
+                           table 
+                           width def:secondary-subtotal-style used-columns)))))
+
+              (if (and secondary-subtotal-pred
+                       (or (not next)
+                           (and next
+                                (not (secondary-subtotal-pred
+                                      current next)))))
+                  (begin (secondary-subtotal-renderer
+                          table width current
+                          secondary-subtotal-collector
+                          def:secondary-subtotal-style used-columns export?)
+                         (secondary-subtotal-collector 'reset #f #f)
+                         (if next
+                             (secondary-subheading-renderer
+                              next table width
+                              def:secondary-subtotal-style used-columns)))))
+
+          (do-rows-with-subtotals rest 
+                                  table 
+                                  used-columns
+                                  width 
+                                  multi-rows?
+                                  (not odd-row?)
+                                  export?
+                                  account-types-to-reverse
+                                  primary-subtotal-pred 
+                                  secondary-subtotal-pred
+                                  primary-subheading-renderer 
+                                  secondary-subheading-renderer
+                                  primary-subtotal-renderer
+                                  secondary-subtotal-renderer
+                                  primary-subtotal-collector 
+                                  secondary-subtotal-collector 
+                                  total-collector))))
+
+  (let* ((table (gnc:make-html-table))
+         (width (num-columns-required used-columns))
+         (multi-rows? (transaction-report-multi-rows-p options))
+	 (export? (transaction-report-export-p options))
+         (account-types-to-reverse
+          (get-account-types-to-reverse options)))
+
+    (gnc:html-table-set-col-headers!
+     table
+     (make-heading-list used-columns options))
+    ;;     (gnc:warn "Splits:" splits)
+    (if (not (null? splits))
+        (begin
+          (if primary-subheading-renderer 
+              (primary-subheading-renderer
+               (car splits) table width def:primary-subtotal-style used-columns))
+          (if secondary-subheading-renderer
+              (secondary-subheading-renderer
+               (car splits) table width def:secondary-subtotal-style used-columns))
+
+          (do-rows-with-subtotals splits table used-columns width
+                                  multi-rows? #t
+                                  export?
+                                  account-types-to-reverse
+                                  primary-subtotal-pred
+                                  secondary-subtotal-pred
+                                  primary-subheading-renderer
+                                  secondary-subheading-renderer
+                                  primary-subtotal-renderer
+                                  secondary-subtotal-renderer
+                                  (gnc:make-commodity-collector)
+                                  (gnc:make-commodity-collector)
+                                  (gnc:make-commodity-collector))))
+    
+    table)))
+
+;; ;;;;;;;;;;;;;;;;;;;;
+;; Here comes the renderer function for this report.
+(define (trep-renderer report-obj)
+
+  (define options (gnc:report-options report-obj))
+
+  (define (opt-val section name)
+    (gnc:option-value
+     (gnc:lookup-option options section name)))
+
+  (define comp-funcs-assoc-list
+    ;; Defines the different sorting keys, together with the
+    ;; subtotal functions. Each entry: (cons
+    ;; 'sorting-key-option-value (vector 'query-sorting-key
+    ;; subtotal-function subtotal-renderer))
+;;  (let* ((used-columns (build-column-used options))) ;; tpo: gives unbound variable options?
+    (let* ((used-columns (build-column-used (gnc:report-options report-obj))))
+      (list (cons 'account-name  (vector 
+                                  (list SPLIT-ACCT-FULLNAME)
+                                  split-account-full-name-same-p 
+                                  render-account-subheading
+                                  render-account-subtotal))
+            (cons 'account-code  (vector 
+                                  (list SPLIT-ACCOUNT ACCOUNT-CODE-)
+                                  split-account-code-same-p
+                                  render-account-subheading
+                                  render-account-subtotal))
+            (cons 'exact-time    (vector
+                                  (list SPLIT-TRANS TRANS-DATE-POSTED)
+                                  #f #f #f))
+            (cons 'date          (vector
+                                  (list SPLIT-TRANS TRANS-DATE-POSTED)
+                                  #f #f #f))
+            (cons 'reconciled-date (vector
+                                  (list SPLIT-DATE-RECONCILED)
+                                  #f #f #f))
+            (cons 'register-order (vector
+                                  (list QUERY-DEFAULT-SORT)
+                                  #f #f #f))
+            (cons 'corresponding-acc-name
+                                 (vector
+                                  (list SPLIT-CORR-ACCT-NAME)
+                                  split-same-corr-account-full-name-p 
+                                  render-corresponding-account-subheading
+                                  render-corresponding-account-subtotal))
+            (cons 'corresponding-acc-code
+                                 (vector
+                                  (list SPLIT-CORR-ACCT-CODE)
+                                  split-same-corr-account-code-p 
+                                  render-corresponding-account-subheading
+                                  render-corresponding-account-subtotal))
+            (cons 'amount        (vector (list SPLIT-VALUE) #f #f #f))
+            (cons 'description   (vector (list SPLIT-TRANS TRANS-DESCRIPTION) #f #f #f))
+            (if (qof-book-use-split-action-for-num-field (gnc-get-current-book))
+                (cons 'number    (vector (list SPLIT-ACTION) #f #f #f))
+                (cons 'number    (vector (list SPLIT-TRANS TRANS-NUM) #f #f #f)))
+            (cons 't-number      (vector (list SPLIT-TRANS TRANS-NUM) #f #f #f))
+            (cons 'memo          (vector (list SPLIT-MEMO) #f #f #f))
+            (cons 'none          (vector '() #f #f #f)))))
+
+  (define date-comp-funcs-assoc-list
+    ;; Extra list for date option. Each entry: (cons
+    ;; 'date-subtotal-option-value (vector subtotal-function
+    ;; subtotal-renderer))
+    (list
+     (cons 'none (vector #f #f #f))
+     (cons 'weekly (vector split-same-week-p render-week-subheading
+			   render-week-subtotal))
+     (cons 'monthly (vector split-same-month-p render-month-subheading 
+                            render-month-subtotal))
+     (cons 'quarterly (vector split-same-quarter-p render-quarter-subheading 
+                            render-quarter-subtotal))
+     (cons 'yearly (vector split-same-year-p render-year-subheading
+                           render-year-subtotal))))
+
+  (define (get-subtotalstuff-helper 
+           name-sortkey name-subtotal name-date-subtotal
+           comp-index date-index)
+    ;; The value of the sorting-key multichoice option.
+    (let ((sortkey (opt-val pagename-sorting name-sortkey)))
+      (if (member sortkey date-sorting-types)
+          ;; If sorting by date, look up the value of the
+          ;; date-subtotalling multichoice option and return the
+          ;; corresponding funcs in the assoc-list.
+          (vector-ref
+           (cdr (assq (opt-val pagename-sorting name-date-subtotal)
+                      date-comp-funcs-assoc-list)) 
+           date-index)
+          ;; For everything else: 1. check whether sortkey has
+          ;; subtotalling enabled at all, 2. check whether the
+          ;; enable-subtotal boolean option is #t, 3. look up the
+          ;; appropriate funcs in the assoc-list.
+          (and (member sortkey subtotal-enabled) 
+               (and (opt-val pagename-sorting name-subtotal)
+                    (vector-ref 
+                     (cdr (assq sortkey comp-funcs-assoc-list)) 
+                     comp-index))))))
+  
+  (define (get-query-sortkey sort-option-value)
+    (vector-ref 
+     (cdr (assq sort-option-value comp-funcs-assoc-list)) 
+     0))
+
+  (define (get-subtotal-pred 
+           name-sortkey name-subtotal name-date-subtotal)
+    (get-subtotalstuff-helper 
+     name-sortkey name-subtotal name-date-subtotal
+     1 0))
+
+  (define (get-subheading-renderer
+           name-sortkey name-subtotal name-date-subtotal)
+    (get-subtotalstuff-helper 
+     name-sortkey name-subtotal name-date-subtotal
+     2 1))
+
+  (define (get-subtotal-renderer
+           name-sortkey name-subtotal name-date-subtotal)
+    (get-subtotalstuff-helper
+     name-sortkey name-subtotal name-date-subtotal
+     3 2))
+
+  ;;(define (get-other-account-names account-list)
+  ;;  ( map (lambda (acct)  (gnc-account-get-full-name acct)) account-list))
+
+  (define (is-filter-member split account-list)
+    (let* ((txn (xaccSplitGetParent split))
+           (splitcount (xaccTransCountSplits txn)))
+
+      (cond
+        ;; A 2-split transaction - test separately so it can be optimized
+        ;; to significantly reduce the number of splits to traverse
+        ;; in guile code
+        ((= splitcount 2)
+         (let* ((other      (xaccSplitGetOtherSplit split))
+                (other-acct (xaccSplitGetAccount other)))
+               (member other-acct account-list)))
+
+        ;; A multi-split transaction - run over all splits
+        ((> splitcount 2)
+         (let ((splits (xaccTransGetSplitList txn)))
+
+                ;; Walk through the list of splits.
+                ;; if we reach the end, return #f
+                ;; if the 'this' != 'split' and the split->account is a member
+                ;; of the account-list, then return #t, else recurse
+                (define (is-member splits)
+                  (if (null? splits)
+                      #f
+                      (let* ((this (car splits))
+                             (rest (cdr splits))
+                             (acct (xaccSplitGetAccount this)))
+                        (if (and (not (eq? this split))
+                                 (member acct account-list))
+                            #t
+                            (is-member rest)))))
+
+                (is-member splits)))
+
+        ;; Single transaction splits
+        (else #f))))
+
+
+  (gnc:report-starting reportname)
+  (let ((document (gnc:make-html-document))
+	(c_account_1 (opt-val gnc:pagename-accounts "Accounts"))
+	(c_account_substring (opt-val gnc:pagename-accounts "Account Substring"))
+	(c_account_2 (opt-val gnc:pagename-accounts "Filter By..."))
+	(filter-mode (opt-val gnc:pagename-accounts "Filter Type"))
+        (begindate (gnc:timepair-start-day-time
+                    (gnc:date-option-absolute-time
+                     (opt-val gnc:pagename-general "Start Date"))))
+        (enddate (gnc:timepair-end-day-time
+                  (gnc:date-option-absolute-time
+                   (opt-val gnc:pagename-general "End Date"))))
+        (report-title (opt-val 
+                       gnc:pagename-general
+                       gnc:optname-reportname))
+        (primary-key (opt-val pagename-sorting optname-prime-sortkey))
+        (primary-order (opt-val pagename-sorting "Primary Sort Order"))
+        (secondary-key (opt-val pagename-sorting optname-sec-sortkey))
+        (secondary-order (opt-val pagename-sorting "Secondary Sort Order"))
+	(void-status (opt-val gnc:pagename-accounts optname-void-transactions))
+        (splits '())
+        (query (qof-query-create-for-splits)))
+
+    ;;(gnc:warn "accts in trep-renderer:" c_account_1)
+    ;;(gnc:warn "Report Account names:" (get-other-account-names c_account_1))
+
+    (set! c_account_1
+          (filter (lambda (acc)
+                    (string-contains (gnc-account-get-full-name acc) c_account_substring))
+                  c_account_1))
+    
+    (if (not (or (null? c_account_1) (and-map not c_account_1)))
+        (begin
+          (qof-query-set-book query (gnc-get-current-book))
+	      ;;(gnc:warn "query is:" query)
+          (xaccQueryAddAccountMatch query
+                                       c_account_1
+                                       QOF-GUID-MATCH-ANY QOF-QUERY-AND)
+          (xaccQueryAddDateMatchTS
+           query #t begindate #t enddate QOF-QUERY-AND)
+          (qof-query-set-sort-order query
+				    (get-query-sortkey primary-key)
+				    (get-query-sortkey secondary-key)
+				    '())
+
+          (qof-query-set-sort-increasing query
+                                         (eq? primary-order 'ascend)
+                                         (eq? secondary-order 'ascend)
+                                         #t)
+
+	  (case void-status
+	   ((non-void-only) 
+	    (gnc:query-set-match-non-voids-only! query (gnc-get-current-book)))
+	   ((void-only)
+	    (gnc:query-set-match-voids-only! query (gnc-get-current-book)))
+	   (else #f))
+
+          (set! splits (qof-query-run query))
+
+          ;;(gnc:warn "Splits in trep-renderer:" splits)
+
+	  ;;(gnc:warn "Filter account names:" (get-other-account-names c_account_2))
+
+	  ;;This should probably a cond or a case to allow for different filter types.
+	  ;;(gnc:warn "Filter Mode: " filter-mode)
+	  (if (eq? filter-mode 'include)
+	      (begin
+		;;(gnc:warn "Including Filter Accounts")
+		(set! splits (filter (lambda (split) 
+				       (is-filter-member split c_account_2))
+				     splits))
+		)
+	      )
+
+	  (if (eq? filter-mode 'exclude)
+	      (begin
+		;;(gnc:warn "Excluding Filter Accounts")
+		(set! splits (filter (lambda (split) 
+				       (not (is-filter-member split c_account_2)))
+				     splits))
+		)
+	      )
+	
+          (if (not (null? splits))
+              (let ((table 
+                     (make-split-table 
+                      splits 
+                      options
+                      (get-subtotal-pred optname-prime-sortkey 
+                                         optname-prime-subtotal
+                                         optname-prime-date-subtotal)
+                      (get-subtotal-pred optname-sec-sortkey 
+                                         optname-sec-subtotal
+                                         optname-sec-date-subtotal)
+                      (get-subheading-renderer optname-prime-sortkey 
+                                               optname-prime-subtotal
+                                               optname-prime-date-subtotal)
+                      (get-subheading-renderer optname-sec-sortkey 
+                                               optname-sec-subtotal
+                                               optname-sec-date-subtotal)
+                      (get-subtotal-renderer   optname-prime-sortkey
+                                               optname-prime-subtotal
+                                               optname-prime-date-subtotal)
+                      (get-subtotal-renderer   optname-sec-sortkey
+                                               optname-sec-subtotal
+                                               optname-sec-date-subtotal))))
+
+                (gnc:html-document-set-title! document
+                                              report-title)
+                (gnc:html-document-add-object! 
+                 document
+                 (gnc:make-html-text
+                  (gnc:html-markup-h3 
+                   (display-date-interval begindate enddate))))
+                (gnc:html-document-add-object!
+                 document 
+                 table)
+                (qof-query-destroy query))
+              ;; error condition: no splits found
+              (let ((p (gnc:make-html-text)))
+                (gnc:html-text-append! 
+                 p 
+                 (gnc:html-markup-h2 
+                  (_ "No matching transactions found"))
+                 (gnc:html-markup-p
+                  (_ "No transactions were found that \
+match the time interval and account selection specified \
+in the Options panel.")))
+                (gnc:html-document-add-object! document p))))
+
+        ;; error condition: no accounts specified
+        
+        (gnc:html-document-add-object!
+         document 
+	 (gnc:html-make-no-account-warning 
+	  report-title (gnc:report-id report-obj))))
+
+    (gnc:report-finished)
+    document))
+
+;; Define the report.
+(gnc:define-report
+ 
+ 'version 1
+ 
+ 'name reportname
+ 'report-guid "2fe3b9833af044abb929a88d5a59620f"
+ 
+ 'options-generator trep-options-generator
+ 
+ 'renderer trep-renderer)

commit c6f5118b9d0f7735917e2e509c8fc587da74c07b
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Sep 21 12:22:04 2017 +0200

    Fixup for Catalan account charts

diff --git a/configure.ac b/configure.ac
index a1c7085..0649065 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1414,6 +1414,7 @@ AC_CONFIG_FILES(
   Makefile
   accounts/Makefile
   accounts/C/Makefile
+  accounts/ca/Makefile
   accounts/cs/Makefile
   accounts/da/Makefile
   accounts/de_AT/Makefile

commit df7646263b0abc1a3d60e9e0b6546011daa3e5ff
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Thu Sep 21 11:18:35 2017 +0200

    Add boilerplate to get Catalan account charts installed and added to the distribution

diff --git a/accounts/CMakeLists.txt b/accounts/CMakeLists.txt
index 7b71b8e..d02aa52 100644
--- a/accounts/CMakeLists.txt
+++ b/accounts/CMakeLists.txt
@@ -1,5 +1,6 @@
 SET(accounts_SUBDIRS
   C
+  ca
   cs
   da
   de_AT
@@ -41,6 +42,7 @@ SET(ACCOUNTS_BUILD_DIR ${DATADIR_BUILD}/gnucash/accounts)
 
 
 ADD_SUBDIRECTORY(C)
+ADD_SUBDIRECTORY(ca)
 ADD_SUBDIRECTORY(cs)
 ADD_SUBDIRECTORY(da)
 ADD_SUBDIRECTORY(de_AT)
@@ -77,7 +79,7 @@ ADD_SUBDIRECTORY(zh_TW)
 
 SET_LOCAL_DIST(dist_list CMakeLists.txt Makefile.am)
 
-SET(accounts_DIST ${C_DIST} ${CS_DIST} ${DA_DIST} ${DE_AT_DIST} ${DE_CH_DIST} ${DE_DE_DIST} ${EL_GR_DIST}
+SET(accounts_DIST ${C_DIST} ${CA_DIST} ${CS_DIST} ${DA_DIST} ${DE_AT_DIST} ${DE_CH_DIST} ${DE_DE_DIST} ${EL_GR_DIST}
                   ${EN_GB_DIST} ${ES_ES_DIST} ${ES_MX_DIST} ${FI_FI_DIST} ${FR_CA_DIST} ${FR_CH_DIST}
                   ${FR_FR_DIST} ${HU_HU_DIST} ${IT_DIST} ${JA_DIST} ${KO_DIST} ${LT_DIST} ${LV_DIST}
                   ${NB_DIST} ${NL_DIST} ${PL_DIST} ${PT_BR_DIST} ${PT_PT_DIST} ${RU_DIST} ${SK_DIST}
diff --git a/accounts/Makefile.am b/accounts/Makefile.am
index b43c773..8a0b2fb 100644
--- a/accounts/Makefile.am
+++ b/accounts/Makefile.am
@@ -1,6 +1,7 @@
 
 SUBDIRS = \
 	C \
+	ca \
 	cs \
 	da \
 	de_AT \

commit daf1bf35a009aa4c4df5fc15502de31a5e85f229
Author: Josep-Maria Prat <jpftgn at gmail.com>
Date:   Thu Sep 21 10:10:34 2017 +0200

    Catalan accounts missing

diff --git a/accounts/ca/CMakeLists.txt b/accounts/ca/CMakeLists.txt
new file mode 100644
index 0000000..768fae4
--- /dev/null
+++ b/accounts/ca/CMakeLists.txt
@@ -0,0 +1,21 @@
+SET(account_DATA
+  acctchrt_brokerage.gnucash-xea
+  acctchrt_carloan.gnucash-xea
+  acctchrt_cdmoneymkt.gnucash-xea
+  acctchrt_childcare.gnucash-xea
+  acctchrt_common.gnucash-xea
+  acctchrt_currency.gnucash-xea
+  acctchrt_eduloan.gnucash-xea
+  acctchrt_fixedassets.gnucash-xea
+  acctchrt_homeloan.gnucash-xea
+  acctchrt_homeown.gnucash-xea
+  acctchrt_otherloan.gnucash-xea
+  acctchrt_renter.gnucash-xea
+  acctchrt_retiremt.gnucash-xea
+  acctchrt_spouseinc.gnucash-xea
+  acctchrt_spouseretire.gnucash-xea)
+
+SET_DIST_LIST(ca_DIST ${account_DATA} Makefile.am CMakeLists.txt)
+
+INSTALL(FILES ${account_DATA} DESTINATION ${ACCOUNTS_INSTALL_DIR}/ca)
+FILE(COPY ${account_DATA} DESTINATION ${ACCOUNTS_BUILD_DIR}/ca)
diff --git a/accounts/ca/Makefile.am b/accounts/ca/Makefile.am
new file mode 100644
index 0000000..5b2b814
--- /dev/null
+++ b/accounts/ca/Makefile.am
@@ -0,0 +1,24 @@
+
+accountdir = ${GNC_ACCOUNTS_DIR}/ca
+
+account_DATA = \
+  acctchrt_brokerage.gnucash-xea \
+  acctchrt_carloan.gnucash-xea \
+  acctchrt_cdmoneymkt.gnucash-xea \
+  acctchrt_childcare.gnucash-xea \
+  acctchrt_common.gnucash-xea \
+  acctchrt_currency.gnucash-xea \
+  acctchrt_eduloan.gnucash-xea \
+  acctchrt_fixedassets.gnucash-xea \
+  acctchrt_homeloan.gnucash-xea \
+  acctchrt_homeown.gnucash-xea \
+  acctchrt_otherloan.gnucash-xea \
+  acctchrt_renter.gnucash-xea \
+  acctchrt_retiremt.gnucash-xea \
+  acctchrt_spouseinc.gnucash-xea \
+  acctchrt_spouseretire.gnucash-xea
+
+EXTRA_DIST = \
+  ${account_DATA} \
+  CMakeLists.txt
+
diff --git a/accounts/ca/acctchrt_brokerage.gnucash-xea b/accounts/ca/acctchrt_brokerage.gnucash-xea
new file mode 100644
index 0000000..f7dd0f2
--- /dev/null
+++ b/accounts/ca/acctchrt_brokerage.gnucash-xea
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+     Compte d'Inversió
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Compte de corredor de borsa amb els comptes d'inversions associades
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu d'escollir aquest joc de comptes si teniu inversions (accions, bons, fons d'inversió, fons indexats, interessos, dividents).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu</act:name>
+  <act:id type="new">52b5942b5beaec856eaca5a75ee71592</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Inversions</act:name>
+  <act:id type="new">7ff59d92615cce4d8388d7e179ee3ff6</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Inversions</act:description>
+  <act:parent type="new">52b5942b5beaec856eaca5a75ee71592</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Compte d'inversió</act:name>
+  <act:id type="new">f15ec9568727f08a5ebd8f3e66483876</act:id>
+  <act:type>BANK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Compte d'inversió</act:description>
+  <act:parent type="new">7ff59d92615cce4d8388d7e179ee3ff6</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Bons</act:name>
+  <act:id type="new">8196bf0015c25f501338f07a87c512d8</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Bons</act:description>
+  <act:parent type="new">f15ec9568727f08a5ebd8f3e66483876</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Accions</act:name>
+  <act:id type="new">7d7db9bed07f21fc0b1f50674702aff0</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Accions</act:description>
+  <act:parent type="new">f15ec9568727f08a5ebd8f3e66483876</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Fons d'índex</act:name>
+  <act:id type="new">fe9db8a7eedf2990e9846f634a922143</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Fons d'índex</act:description>
+  <act:parent type="new">f15ec9568727f08a5ebd8f3e66483876</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Fons d'inversió</act:name>
+  <act:id type="new">9da28c1aa7789e84bdc8484ba8f527b3</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Fons d'inversió</act:description>
+  <act:parent type="new">f15ec9568727f08a5ebd8f3e66483876</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ingressos</act:name>
+  <act:id type="new">9da3c880bd04b9db49eb7f5b06403bda</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ingressos</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ingressos per dividents</act:name>
+  <act:id type="new">1af1f4894aeab96d840e66254d023b88</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ingressos per dividents</act:description>
+  <act:parent type="new">9da3c880bd04b9db49eb7f5b06403bda</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ingressos per interessos</act:name>
+  <act:id type="new">7943bc59ffbb9a7be4afcd2996147119</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ingressos per interessos</act:description>
+  <act:parent type="new">9da3c880bd04b9db49eb7f5b06403bda</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos de bons</act:name>
+  <act:id type="new">8ceb4752a11e2d342b9009b343fdba38</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos de bons</act:description>
+  <act:parent type="new">7943bc59ffbb9a7be4afcd2996147119</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">6de23244232785031501171abcc1d4aa</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Comissions</act:name>
+  <act:id type="new">77fdffddc79c662c93c482cefa5a4744</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Comissions</act:description>
+  <act:parent type="new">6de23244232785031501171abcc1d4aa</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_carloan.gnucash-xea b/accounts/ca/acctchrt_carloan.gnucash-xea
new file mode 100644
index 0000000..499b172
--- /dev/null
+++ b/accounts/ca/acctchrt_carloan.gnucash-xea
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Préstec d'automòbil
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Comptes per pagar a terminis l'automòbil i interessos associats
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu de seleccionar aquest joc de comptes si esteu pagant a terminis el vostre automòbil (terminis d'automòbil, interessos per terminis d'automòbil).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Passiu</act:name>
+  <act:id type="new">33a326fe16ae360f777a94b3f5bdfbdc</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Passiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Préstecs</act:name>
+  <act:id type="new">023e2343114b3d695feaeb96904e0da6</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Préstecs</act:description>
+  <act:parent type="new">33a326fe16ae360f777a94b3f5bdfbdc</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Vehicle a terminis</act:name>
+  <act:id type="new">3e5f44fd7bfaa9cae737a4113a749e36</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Vehicle a terminis</act:description>
+  <act:parent type="new">023e2343114b3d695feaeb96904e0da6</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">acacdcb998e45fb741766622e8542f0b</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos</act:name>
+  <act:id type="new">9e8495e80ebfb762089be917dff7ab72</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos</act:description>
+  <act:parent type="new">acacdcb998e45fb741766622e8542f0b</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos per pagament a terminis del vehicle</act:name>
+  <act:id type="new">e9bd8477e27361238d2f53c4fe7594ab</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos per pagament a terminis del vehicle</act:description>
+  <act:parent type="new">9e8495e80ebfb762089be917dff7ab72</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_cdmoneymkt.gnucash-xea b/accounts/ca/acctchrt_cdmoneymkt.gnucash-xea
new file mode 100644
index 0000000..c77b3c8
--- /dev/null
+++ b/accounts/ca/acctchrt_cdmoneymkt.gnucash-xea
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Pagarés i mercat monetari
+    </gnc-act:title>
+    <gnc-act:short-description>
+     Comptes per pagarés i inversions de mercat monetari
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu de seleccionar aquest joc de comptes si empreu pagarés o comptes de mercat monetari (pagarés, interessos de pagarés, mercat monetari, interessos de mercat monetari).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu</act:name>
+  <act:id type="new">7b1a39efc6234d1db148baa722c9471e</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu circulant</act:name>
+  <act:id type="new">1880e89ec9fe82622b8648df481dd2b7</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu circulant</act:description>
+  <act:parent type="new">7b1a39efc6234d1db148baa722c9471e</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Pagaré de banc</act:name>
+  <act:id type="new">c1620f9c3082e33d8fd559e17f90a122</act:id>
+  <act:type>BANK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Pagaré de banc</act:description>
+  <act:parent type="new">1880e89ec9fe82622b8648df481dd2b7</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Mercat monetari</act:name>
+  <act:id type="new">3a01e5b0132ba26803b49732a3242654</act:id>
+  <act:type>BANK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Mercat monetari</act:description>
+  <act:parent type="new">1880e89ec9fe82622b8648df481dd2b7</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ingressos</act:name>
+  <act:id type="new">4b3e36f325569b80efc7d3331bdf851b</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ingressos</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ingressos per interessos</act:name>
+  <act:id type="new">fd131cae797d1fb83c2e2bf57254eca5</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ingressos per interessos</act:description>
+  <act:parent type="new">4b3e36f325569b80efc7d3331bdf851b</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interès de pagarés</act:name>
+  <act:id type="new">28d311f0f38da5e35628e76ad8bcc853</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interès de pagarés</act:description>
+  <act:parent type="new">fd131cae797d1fb83c2e2bf57254eca5</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interès de mercat monetari</act:name>
+  <act:id type="new">dc537946f39e84ccef7ce38f016249af</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interès de mercat monetari</act:description>
+  <act:parent type="new">fd131cae797d1fb83c2e2bf57254eca5</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_childcare.gnucash-xea b/accounts/ca/acctchrt_childcare.gnucash-xea
new file mode 100644
index 0000000..3cfea6b
--- /dev/null
+++ b/accounts/ca/acctchrt_childcare.gnucash-xea
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Despeses de la llar d'infants
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Compte per gestionar despeses de la llar d'infants
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu de seleccionar aquest joc de comptes si teniu despeses de llar d'infants.
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">ee8238ee2c2ce590160761df09b99b72</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Llar d'infants</act:name>
+  <act:id type="new">8999739a6bfc46088a3ea5ec45e5f8a4</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Llar d'infants</act:description>
+  <act:parent type="new">ee8238ee2c2ce590160761df09b99b72</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_common.gnucash-xea b/accounts/ca/acctchrt_common.gnucash-xea
new file mode 100644
index 0000000..e61093f
--- /dev/null
+++ b/accounts/ca/acctchrt_common.gnucash-xea
@@ -0,0 +1,728 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Comptes comuns
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Un joc bàsic de comptes emprats majoritàriament
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+      La majoria dels usuaris desitjarà escollir aquest joc de comptes.
+      Inclou els comptes emprats més habitualment (compte corrent, d'estalvis, metàl·lic, tarjeta de crèdit, ingressos, despeses comuns)
+  </gnc-act:long-description>
+  <gnc-act:start-selected>1</gnc-act:start-selected>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu</act:name>
+  <act:id type="new">98f262dfab9a2b99ac42919dcf58d304</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu circulant</act:name>
+  <act:id type="new">a1dd5f225156f110689c204fefded0ab</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu circulant</act:description>
+  <act:parent type="new">98f262dfab9a2b99ac42919dcf58d304</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Compte corrent</act:name>
+  <act:id type="new">b477aa9e0d4eb67c34e1e35903fb3f99</act:id>
+  <act:type>BANK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Compte corrent</act:description>
+  <act:parent type="new">a1dd5f225156f110689c204fefded0ab</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Compte d'estalvis</act:name>
+  <act:id type="new">eeae5a1892e88adbc3b369c76ee4e889</act:id>
+  <act:type>BANK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Compte d'estalvis</act:description>
+  <act:parent type="new">a1dd5f225156f110689c204fefded0ab</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Metàl·lic</act:name>
+  <act:id type="new">07b454b9dd6f68c4b613c5f1ef76f884</act:id>
+  <act:type>CASH</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Metàl·lic</act:description>
+  <act:parent type="new">a1dd5f225156f110689c204fefded0ab</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Passiu</act:name>
+  <act:id type="new">19a911feed9b41b8b01be036a2aed9fe</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Passiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Comptes per pagar</act:name>
+  <act:id type="new">a8186db64d71dc2ca5fdccb3234b531b</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Comptes per pagar</act:description>
+  <act:parent type="new">19a911feed9b41b8b01be036a2aed9fe</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Tarjeta de crèdit</act:name>
+  <act:id type="new">efc3caac2619666c53e6e27f02d5e716</act:id>
+  <act:type>CREDIT</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Tarjeta de crèdit</act:description>
+  <act:parent type="new">a8186db64d71dc2ca5fdccb3234b531b</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ingressos</act:name>
+  <act:id type="new">a7ab23dd2d41616042034d5a012a0850</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ingressos</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Pagues extra</act:name>
+  <act:id type="new">59b72cd943a2ca6f077748bba9a942cd</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Pagues extra</act:description>
+  <act:parent type="new">a7ab23dd2d41616042034d5a012a0850</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Regals rebuts</act:name>
+  <act:id type="new">1adcf2c65d7a66f32144ccd9ce4f438f</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Regals rebuts</act:description>
+  <act:parent type="new">a7ab23dd2d41616042034d5a012a0850</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ingressos per interessos</act:name>
+  <act:id type="new">c47361e40d9478ec11758097e64d693c</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ingressos per interessos</act:description>
+  <act:parent type="new">a7ab23dd2d41616042034d5a012a0850</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos de compte corrent</act:name>
+  <act:id type="new">73481e2da7461fc34e7003b7ec560bdf</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos de compte corrent</act:description>
+  <act:parent type="new">c47361e40d9478ec11758097e64d693c</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Altres interessos</act:name>
+  <act:id type="new">be17363347a8578c48cecd06bc8b7aa8</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Altres interessos</act:description>
+  <act:parent type="new">c47361e40d9478ec11758097e64d693c</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos del compte d'estalvis</act:name>
+  <act:id type="new">2802ac0d1bff1c09a903f2ad6fde2725</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos del compte d'estalvis</act:description>
+  <act:parent type="new">c47361e40d9478ec11758097e64d693c</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Altres ingressos</act:name>
+  <act:id type="new">49525ad0fb4ced06b9874d365d53f505</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Altres ingressos</act:description>
+  <act:parent type="new">a7ab23dd2d41616042034d5a012a0850</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Sou</act:name>
+  <act:id type="new">a750b99cb8487a5e47daedcd3a69fe85</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Sou</act:description>
+  <act:parent type="new">a7ab23dd2d41616042034d5a012a0850</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">1884bbd7394883ebafec8b9e2eb091a4</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ajustos</act:name>
+  <act:id type="new">72f85277a7a7f8b4de175405e20d83bd</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ajustos</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Automòbil</act:name>
+  <act:id type="new">56df186f1ce6114ddca7b9e5d03af390</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Automòbil</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Quotes</act:name>
+  <act:id type="new">2ff007a389bd23d8970afeba2d58c9a8</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Quotes</act:description>
+  <act:parent type="new">56df186f1ce6114ddca7b9e5d03af390</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Benzina</act:name>
+  <act:id type="new">e64b5eecf86ce4e27a64c477a4c77477</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Benzina</act:description>
+  <act:parent type="new">56df186f1ce6114ddca7b9e5d03af390</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Aparcament</act:name>
+  <act:id type="new">d72262c1c0e2c3388183ebb44a98b011</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Aparcament</act:description>
+  <act:parent type="new">56df186f1ce6114ddca7b9e5d03af390</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Reparacions i manteniment</act:name>
+  <act:id type="new">665dd78f0cc75dd331f556949337de68</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Reparacions i manteniment</act:description>
+  <act:parent type="new">56df186f1ce6114ddca7b9e5d03af390</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Càrrec de servei bancari</act:name>
+  <act:id type="new">fb6c8e25a50737e70fffde432a2355ee</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Càrrec de servei bancari</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Llibres</act:name>
+  <act:id type="new">36479bbc17680f4b9663a9842736153f</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Llibres</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>TV per Cable</act:name>
+  <act:id type="new">a1393344fb199f08f751ac3154694e87</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>TV per Cable</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Obres benèfiques</act:name>
+  <act:id type="new">ec8eec3d46c69aa861fda836e11346c0</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Obres benèfiques</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Roba</act:name>
+  <act:id type="new">c27a040a73eac2688d85d29b5b5309c8</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Roba</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Informàtica</act:name>
+  <act:id type="new">fc4390b6214ad1576c5ffffc2b3c268c</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Informàtica</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Restaurants</act:name>
+  <act:id type="new">0a59a3347e4ff02b862de41ef59d7351</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Restaurants</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Educació</act:name>
+  <act:id type="new">5b5ac050529b0f553752babe4a6a35d2</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Educació</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Oci</act:name>
+  <act:id type="new">0ebd1d5f40d9e9e8bb1a4bf539650dd1</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Oci</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Música/Pel·lícules</act:name>
+  <act:id type="new">4570ea8f4ac5cbd7d8927c905f0978ae</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Música/Pel·lícules</act:description>
+  <act:parent type="new">0ebd1d5f40d9e9e8bb1a4bf539650dd1</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Esbarjo</act:name>
+  <act:id type="new">7db9b0aa3bc348da9900f95fc67541a1</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Esbarjo</act:description>
+  <act:parent type="new">0ebd1d5f40d9e9e8bb1a4bf539650dd1</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Viatges</act:name>
+  <act:id type="new">def0eac939dbd668f503d84860de8d6e</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Viatges</act:description>
+  <act:parent type="new">0ebd1d5f40d9e9e8bb1a4bf539650dd1</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Regals</act:name>
+  <act:id type="new">f86b1cebc619455ada23952a0e810909</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Regals</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Comestibles</act:name>
+  <act:id type="new">83bc2bd915ab6b74c7107b55f8783523</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Comestibles</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Hobbies</act:name>
+  <act:id type="new">89f6400a94cd87fea0b056faf6ab7744</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Hobbies</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Assegurances</act:name>
+  <act:id type="new">5bda5ff833bc395dc1b00f95c66ce555</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Assegurances</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Assegurança d'Automòbil</act:name>
+  <act:id type="new">cd72695526906a15ba1a1d9a7680b8e7</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Assegurança d'Automòbil</act:description>
+  <act:parent type="new">5bda5ff833bc395dc1b00f95c66ce555</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Assegurança sanitària</act:name>
+  <act:id type="new">d80613194a52340c9e5eb62e853c72cf</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Assegurança sanitària</act:description>
+  <act:parent type="new">5bda5ff833bc395dc1b00f95c66ce555</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Assegurança de vida</act:name>
+  <act:id type="new">70a327f54be53ef187a52b1d8df70fdd</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Assegurança de vida</act:description>
+  <act:parent type="new">5bda5ff833bc395dc1b00f95c66ce555</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Bugaderia</act:name>
+  <act:id type="new">1006551b2458631dfc8507b7451c9631</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Bugaderia</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses mèdiques</act:name>
+  <act:id type="new">62752930dd1b2b4c90c6d198bd2ff33f</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses mèdiques</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Altres Despeses</act:name>
+  <act:id type="new">759deef82e73587bf48a7dd76aa6abe8</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Altres Despeses</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Serveis d'Internet</act:name>
+  <act:id type="new">2170a1a631cc3b6fc32813fa49a12f77</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Serveis d'Internet</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Telèfon</act:name>
+  <act:id type="new">1d9d7265e25c6c84dda514d2e8899e87</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Telèfon</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Transport públic</act:name>
+  <act:id type="new">64aa760163c7768518e49a104d1c171f</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Transport públic</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Suscripcions</act:name>
+  <act:id type="new">0336712690d36bcb02e0ce59b5d7653b</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Suscripcions</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Material d'oficina</act:name>
+  <act:id type="new">e2b34f49d4cf916cf4d45525e1e7319d</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Material d'oficina</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Impostos</act:name>
+  <act:id type="new">2c53a8a0c8b36f7de3f4052653886c2b</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Impostos</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>IRPF</act:name>
+  <act:id type="new">090a786357463ec7fbee8066cb999097</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>IRPF</act:description>
+  <act:parent type="new">2c53a8a0c8b36f7de3f4052653886c2b</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Retencions</act:name>
+  <act:id type="new">0785932c5de43e814659420762c9b577</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Retencions</act:description>
+  <act:parent type="new">2c53a8a0c8b36f7de3f4052653886c2b</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Altres impostos</act:name>
+  <act:id type="new">51875f8aaa0e4f2295a2ae13cf780b2e</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Altres impostos</act:description>
+  <act:parent type="new">2c53a8a0c8b36f7de3f4052653886c2b</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Seguretat Social</act:name>
+  <act:id type="new">c252f10f3d57dd05c500856164b1729e</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Seguretat Social</act:description>
+  <act:parent type="new">2c53a8a0c8b36f7de3f4052653886c2b</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Municipals</act:name>
+  <act:id type="new">cd1f1b512ed51a069fd83a5ffcaf6e11</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Municipals</act:description>
+  <act:parent type="new">2c53a8a0c8b36f7de3f4052653886c2b</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Serveis</act:name>
+  <act:id type="new">57635fa5f71dee8ffc207c277250e773</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Serveis</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Electricitat</act:name>
+  <act:id type="new">2fe462e202e2daffd845359b08a7eefe</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Electricitat</act:description>
+  <act:parent type="new">57635fa5f71dee8ffc207c277250e773</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Recollida de brossa</act:name>i
+  <act:id type="new">2d0315d7b2f8f11a8a8b32d805bca6eb</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Recollida de brossa</act:description>
+  <act:parent type="new">57635fa5f71dee8ffc207c277250e773</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Gas</act:name>
+  <act:id type="new">dcc33ce7edf402e327318aa1890d35ea</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Gas</act:description>
+  <act:parent type="new">57635fa5f71dee8ffc207c277250e773</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Aigua</act:name>
+  <act:id type="new">8cdc91b733444f9f0dfae9773b8f408c</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Aigua</act:description>
+  <act:parent type="new">57635fa5f71dee8ffc207c277250e773</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Resultat</act:name>
+  <act:id type="new">3ab6a6d97b216c11333e48aa2b749a91</act:id>
+  <act:type>EQUITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Resultat</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Balanços d'obertura</act:name>
+  <act:id type="new">a0a622a30410f75eba35d2875a843da8</act:id>
+  <act:type>EQUITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Balanços d'obertura</act:description>
+  <act:parent type="new">3ab6a6d97b216c11333e48aa2b749a91</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_currency.gnucash-xea b/accounts/ca/acctchrt_currency.gnucash-xea
new file mode 100644
index 0000000..4b5acca
--- /dev/null
+++ b/accounts/ca/acctchrt_currency.gnucash-xea
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Compte de conversió monetària
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Compte per convertir i comerciar amb moneda estrangera
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu de seleccionar aquest joc de comptes si convertiu monedes estrangeres.
+    
+    Nota: El compte es troba en USD; editi el compte per modificar la moneda
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu</act:name>
+  <act:id type="new">b3c65be1c5d163746ddc0c506f3f4619</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Inversions</act:name>
+  <act:id type="new">d9c796b35784533aee4309e28a3cbfc5</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Inversions</act:description>
+  <act:parent type="new">b3c65be1c5d163746ddc0c506f3f4619</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Comerç de monedes estrangeres</act:name>
+  <act:id type="new">9206632307989cb5b244ad5da5d3131b</act:id>
+  <act:type>CURRENCY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>USD</cmdty:id>
+  </act:commodity>
+  <act:description>Comerç de monedes estrangeres</act:description>
+  <act:parent type="new">d9c796b35784533aee4309e28a3cbfc5</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_eduloan.gnucash-xea b/accounts/ca/acctchrt_eduloan.gnucash-xea
new file mode 100644
index 0000000..c4f69f0
--- /dev/null
+++ b/accounts/ca/acctchrt_eduloan.gnucash-xea
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Préstec per a l'educació
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Comptes per a préstecs per estudis i interessos associats
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu de seleccionar aquest conjunt de comptes si posseïu un préstec per a l'educació (préstec per a l'educació, interessos de préstec per a l'educació)
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Passiu</act:name>
+  <act:id type="new">4e7e8e39487ad4aba0b62c2232c577c5</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Passiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Préstecs</act:name>
+  <act:id type="new">c3219e37044b0531d66a7b64433b026d</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Préstecs</act:description>
+  <act:parent type="new">4e7e8e39487ad4aba0b62c2232c577c5</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Préstec per a l'educació</act:name>
+  <act:id type="new">ddeba367199bd025e00420a19d6f9ae4</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Préstec per a l'educació</act:description>
+  <act:parent type="new">c3219e37044b0531d66a7b64433b026d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">fdbf47b39f70e8818f325eee7931039a</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos</act:name>
+  <act:id type="new">1cfcd30ea97b954ffb550ab87d561033</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos</act:description>
+  <act:parent type="new">fdbf47b39f70e8818f325eee7931039a</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos de préstec per a l'educació</act:name>
+  <act:id type="new">04e3d970dc60d3920f40b93fce8924a2</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos de préstec per a l'educació</act:description>
+  <act:parent type="new">1cfcd30ea97b954ffb550ab87d561033</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_fixedassets.gnucash-xea b/accounts/ca/acctchrt_fixedassets.gnucash-xea
new file mode 100644
index 0000000..d0bbe54
--- /dev/null
+++ b/accounts/ca/acctchrt_fixedassets.gnucash-xea
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Actius fixos
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Comptes per gestionar diferents actius fixos
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu de seleccionar aquest compte si teniu diferents actius fixos (casa, vehicle, casa de vacances, altres actius).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu</act:name>
+  <act:id type="new">64b6276c060185131cecbd1ac6218440</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu fix</act:name>
+  <act:id type="new">9b171f77000bf68dd1ebbaf58336656d</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu fix</act:description>
+  <act:parent type="new">64b6276c060185131cecbd1ac6218440</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Casa</act:name>
+  <act:id type="new">9205ad6b6482903e5a696602d491c8f5</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Casa</act:description>
+  <act:parent type="new">9b171f77000bf68dd1ebbaf58336656d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Altres actius</act:name>
+  <act:id type="new">ad3b239297277c9ef3840c0433cecb18</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Altres actius</act:description>
+  <act:parent type="new">9b171f77000bf68dd1ebbaf58336656d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Vehicle</act:name>
+  <act:id type="new">5913089ffc36df6f0a5d96a5d7a444c0</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Vehicle</act:description>
+  <act:parent type="new">9b171f77000bf68dd1ebbaf58336656d</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_homeloan.gnucash-xea b/accounts/ca/acctchrt_homeloan.gnucash-xea
new file mode 100644
index 0000000..c872aef
--- /dev/null
+++ b/accounts/ca/acctchrt_homeloan.gnucash-xea
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Préstec hipotecari
+    </gnc-act:title>
+    <gnc-act:short-description>
+     Comptes per a préstec hipotecari i interès associat
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu d'escollir aquest joc de comptes si teniu contractat un préstec hipotecari (préstec hipotecari, interès hipoteca).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Passiu</act:name>
+  <act:id type="new">6664763bd1ea41462cba5ef856d9c00c</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Passiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Préstecs</act:name>
+  <act:id type="new">2e6e2d91551cff7b1fd8d6eb34c12117</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Préstecs</act:description>
+  <act:parent type="new">6664763bd1ea41462cba5ef856d9c00c</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Préstec hipotecari</act:name>
+  <act:id type="new">4df1b393c218d9047dd22d33d2737e83</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Préstec hipotecari</act:description>
+  <act:parent type="new">2e6e2d91551cff7b1fd8d6eb34c12117</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">2f076f5ae073173a11d33420cd39fa4d</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos</act:name>
+  <act:id type="new">3dc58d8a51b5deaa22e0c65d81e90346</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos</act:description>
+  <act:parent type="new">2f076f5ae073173a11d33420cd39fa4d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interès de la hipoteca</act:name>
+  <act:id type="new">c1e23fa813d3c8c4a8ea1228a7615b79</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interès de la hipoteca</act:description>
+  <act:parent type="new">3dc58d8a51b5deaa22e0c65d81e90346</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_homeown.gnucash-xea b/accounts/ca/acctchrt_homeown.gnucash-xea
new file mode 100644
index 0000000..126c4f1
--- /dev/null
+++ b/accounts/ca/acctchrt_homeown.gnucash-xea
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Despeses de propietari de casa
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Despeses associades a la propietat d'una casa
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Hauríeu de seleccionar aquest joc de comptes si posseïu una casa. Aquest joc us proporciona un grup de comptes per controlar les despeses domèstiques (assegurança, impostos, reparacions).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">84732f5fdd27b6463d75bf958e3a4b06</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Reparacions domèstiques</act:name>
+  <act:id type="new">fa27de57090e107fa99fe1db53790f23</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Reparacions domèstiques</act:description>
+  <act:parent type="new">84732f5fdd27b6463d75bf958e3a4b06</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Assegurances</act:name>
+  <act:id type="new">4677fe36914ebcf23758f3bf20686b4a</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Assegurances</act:description>
+  <act:parent type="new">84732f5fdd27b6463d75bf958e3a4b06</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Assegurança de la llar</act:name>
+  <act:id type="new">3b5909f31bda0e0f76149fd600e0cb1d</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Assegurança de la llar</act:description>
+  <act:parent type="new">4677fe36914ebcf23758f3bf20686b4a</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Impostos</act:name>
+  <act:id type="new">a931b8ffe2917ff9a069333623da96ca</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Impostos</act:description>
+  <act:parent type="new">84732f5fdd27b6463d75bf958e3a4b06</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Contribució</act:name>
+  <act:id type="new">3994b8f5a6a8b2a0a48126fa955e03f7</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Contribució</act:description>
+  <act:parent type="new">a931b8ffe2917ff9a069333623da96ca</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_otherloan.gnucash-xea b/accounts/ca/acctchrt_otherloan.gnucash-xea
new file mode 100644
index 0000000..9959254
--- /dev/null
+++ b/accounts/ca/acctchrt_otherloan.gnucash-xea
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Altres préstecs
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Comptes per controlar altres préstecs, junt amb el seu interès associat
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Desitjareu seleccionar aquest joc de comptes si teniu un préstec diferent a un préstec hipotecari (altres préstecs, interessos d'altres préstecs).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Passiu</act:name>
+  <act:id type="new">8ec79e80d9abf58d78ce3129d3fe3365</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Passiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Préstecs</act:name>
+  <act:id type="new">b5624a9d1a1b797b87b815774faccfe4</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Préstecs</act:description>
+  <act:parent type="new">8ec79e80d9abf58d78ce3129d3fe3365</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Altres préstecs</act:name>
+  <act:id type="new">eb79670a4c9b0faab87485b7b2a4abe4</act:id>
+  <act:type>LIABILITY</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Altres préstecs</act:description>
+  <act:parent type="new">b5624a9d1a1b797b87b815774faccfe4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">565e52a122e8acc9a67a36e61357e2ae</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Interessos</act:name>
+  <act:id type="new">4a02c14e992ea79076837c164aa6fc8d</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interessos</act:description>
+  <act:parent type="new">565e52a122e8acc9a67a36e61357e2ae</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Altre interès</act:name>
+  <act:id type="new">f01de45e290ecc29b64d9cb8a733af68</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Interès associat a un altre préstec</act:description>
+  <act:parent type="new">4a02c14e992ea79076837c164aa6fc8d</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_renter.gnucash-xea b/accounts/ca/acctchrt_renter.gnucash-xea
new file mode 100644
index 0000000..d076ff4
--- /dev/null
+++ b/accounts/ca/acctchrt_renter.gnucash-xea
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Despeses d'inquilí
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Despeses associades a llogar una casa
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Voldreu escollir aquest joc de comptes si llogueu una casa o un apartament (lloguer, assegurança d'inquilí).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">9a2b4520f113372f4e576f5b6dc129c6</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Assegurances</act:name>
+  <act:id type="new">b79b231807a98cd562c46cf0454e9f25</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Assegurances</act:description>
+  <act:parent type="new">9a2b4520f113372f4e576f5b6dc129c6</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Assegurança de l'inquilí</act:name>
+  <act:id type="new">a4c93c964b8322d534e35b7054cbda4d</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Assegurança de l'inquilí</act:description>
+  <act:parent type="new">b79b231807a98cd562c46cf0454e9f25</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Lloguer</act:name>
+  <act:id type="new">c1638a9a48d4d0e1b17d99219a18f34b</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Lloguer</act:description>
+  <act:parent type="new">9a2b4520f113372f4e576f5b6dc129c6</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_retiremt.gnucash-xea b/accounts/ca/acctchrt_retiremt.gnucash-xea
new file mode 100644
index 0000000..9e26790
--- /dev/null
+++ b/accounts/ca/acctchrt_retiremt.gnucash-xea
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Comptes de jubilació
+    </gnc-act:title>
+    <gnc-act:short-description>
+      Compte de jubilació amb subcomptes d'inversions relacionades
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Voldreu escollir aquest joc de comptes si teniu comptes de jubilació (d'accions, bons, fons d'inversió, fons d'índex).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu</act:name>
+  <act:id type="new">e67ef2c52a4eaf3b9d37d317848a5812</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Inversions</act:name>
+  <act:id type="new">64cf99f6bafe0a539a5941ea713bdfcd</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Inversions</act:description>
+  <act:parent type="new">e67ef2c52a4eaf3b9d37d317848a5812</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Jubilació</act:name>
+  <act:id type="new">4173f3047238f4b5595b11d6161b2f48</act:id>
+  <act:type>BANK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Jubilació</act:description>
+  <act:slots>
+    <slot>
+      <slot:key>notes</slot:key>
+      <slot:value type="string">IRA, 401(k), o altres fons de jubilació</slot:value>
+    </slot>
+  </act:slots>
+  <act:parent type="new">64cf99f6bafe0a539a5941ea713bdfcd</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Bons</act:name>
+  <act:id type="new">9053199c1da747555d12272f48c719fd</act:id>
+  <act:type>STOCK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Bons</act:description>
+  <act:parent type="new">4173f3047238f4b5595b11d6161b2f48</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Accions</act:name>
+  <act:id type="new">9bf53e9580991e323b297999fddff988</act:id>
+  <act:type>STOCK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Accions</act:description>
+  <act:parent type="new">4173f3047238f4b5595b11d6161b2f48</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Fons d'índex</act:name>
+  <act:id type="new">2326b032fe4e8f434159310fccf17091</act:id>
+  <act:type>MUTUAL</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Fons d'índex</act:description>
+  <act:parent type="new">4173f3047238f4b5595b11d6161b2f48</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Fons d'inversió</act:name>
+  <act:id type="new">a62d804729117e74a6c880cecb818b56</act:id>
+  <act:type>MUTUAL</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Fons d'inversió</act:description>
+  <act:parent type="new">4173f3047238f4b5595b11d6161b2f48</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_spouseinc.gnucash-xea b/accounts/ca/acctchrt_spouseinc.gnucash-xea
new file mode 100644
index 0000000..a02afd7
--- /dev/null
+++ b/accounts/ca/acctchrt_spouseinc.gnucash-xea
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Ingressos de cònjuge
+    </gnc-act:title>
+    <gnc-act:short-description>
+     Comptes per controlar els ingressos del cònjuge de manera separada
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Voldreu seleccionar aquest joc de comptes si el vostre cònjuge treballa (sou (cònjuge), impostos (cònjuge)).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Ingressos</act:name>
+  <act:id type="new">b4fadf6188d7f1ae7e7aa4fa27f5cc95</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Ingressos</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Sou (Cònjuge)</act:name>
+  <act:id type="new">7c4495ff132d100b0aa339ce683200dd</act:id>
+  <act:type>INCOME</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Sou (Cònjuge)</act:description>
+  <act:parent type="new">b4fadf6188d7f1ae7e7aa4fa27f5cc95</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Despeses</act:name>
+  <act:id type="new">1884bbd7394883ebafec8b9e2eb091a4</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Despeses</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Impostos (Cònjuge)</act:name>
+  <act:id type="new">3cd0ca7d6b0e5f44e4cde2851c3ff387</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Impostos (Cònjuge)</act:description>
+  <act:parent type="new">1884bbd7394883ebafec8b9e2eb091a4</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>IRPF</act:name>
+  <act:id type="new">78df9cf06ee197272a695a4c3044f749</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>IRPF</act:description>
+  <act:parent type="new">3cd0ca7d6b0e5f44e4cde2851c3ff387</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Retencions</act:name>
+  <act:id type="new">eba0c095658c7c3a4f4294db9c7392f3</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Retencions</act:description>
+  <act:parent type="new">3cd0ca7d6b0e5f44e4cde2851c3ff387</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Altres impostos</act:name>
+  <act:id type="new">dea0cf67026749c9a5aa97be4e5cd052</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Altres impostos</act:description>
+  <act:parent type="new">3cd0ca7d6b0e5f44e4cde2851c3ff387</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Seguretat Social</act:name>
+  <act:id type="new">9bd3abb2ed8c4c0d00f8e8ec36d2744d</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Seguretat Social</act:description>
+  <act:parent type="new">3cd0ca7d6b0e5f44e4cde2851c3ff387</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Municipals</act:name>
+  <act:id type="new">aa14dbcd622024495a8a972b0f37d13a</act:id>
+  <act:type>EXPENSE</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Municipals</act:description>
+  <act:parent type="new">3cd0ca7d6b0e5f44e4cde2851c3ff387</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->
diff --git a/accounts/ca/acctchrt_spouseretire.gnucash-xea b/accounts/ca/acctchrt_spouseretire.gnucash-xea
new file mode 100644
index 0000000..b5f1393
--- /dev/null
+++ b/accounts/ca/acctchrt_spouseretire.gnucash-xea
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<gnc-account-example>
+    <gnc-act:title>
+      Comptes de jubilació de cònjuge
+    </gnc-act:title>
+    <gnc-act:short-description>
+     Compte de jubilació amb comptes d'inversió associats per a cònjuge
+    </gnc-act:short-description>
+    <gnc-act:long-description>
+    Voldreu seleccionar aquest joc de comptes si teniu inversions a nom del vostre cònjuge (accions, bons, fons d'inversió, fons d'índex, interessos, dividents).
+  </gnc-act:long-description>
+<gnc:account version="2.0.0">
+  <act:name>Root Account</act:name>
+  <act:id type="new">1972cce2e2364f95b2b0bc014502661d</act:id>
+  <act:type>ROOT</act:type>
+  <act:commodity-scu>0</act:commodity-scu>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Actiu</act:name>
+  <act:id type="new">96d9b17add59eb4c7edec7ed241af755</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Actiu</act:description>
+  <act:parent type="new">1972cce2e2364f95b2b0bc014502661d</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Inversions</act:name>
+  <act:id type="new">f46c9f777b1730c6b5f4a1faf9e31708</act:id>
+  <act:type>ASSET</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Inversions</act:description>
+  <act:parent type="new">96d9b17add59eb4c7edec7ed241af755</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Jubilació de cònjuge</act:name>
+  <act:id type="new">4426b41837adc284f96b291c31022844</act:id>
+  <act:type>BANK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Jubilació de cònjuge</act:description>
+  <act:slots>
+    <slot>
+      <slot:key>notes</slot:key>
+      <slot:value type="string">IRA, 401(k), or other retirement</slot:value>
+    </slot>
+  </act:slots>
+  <act:parent type="new">f46c9f777b1730c6b5f4a1faf9e31708</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Bons</act:name>
+  <act:id type="new">c8e7c315502547e51bfdd5a70b5cdd2e</act:id>
+  <act:type>STOCK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Bons</act:description>
+  <act:parent type="new">4426b41837adc284f96b291c31022844</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Accions</act:name>
+  <act:id type="new">b8838eb77b9603e035e1f7b440d468ae</act:id>
+  <act:type>STOCK</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Accions</act:description>
+  <act:parent type="new">4426b41837adc284f96b291c31022844</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Fons d'índex</act:name>
+  <act:id type="new">0ec1a5b402ceea10d95445a2b31c41a1</act:id>
+  <act:type>MUTUAL</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Fons d'índex</act:description>
+  <act:parent type="new">4426b41837adc284f96b291c31022844</act:parent>
+</gnc:account>
+<gnc:account version="2.0.0">
+  <act:name>Fons d'inversió</act:name>
+  <act:id type="new">d9ed01f9b8f9845bc3f68f3e0afb021f</act:id>
+  <act:type>MUTUAL</act:type>
+  <act:commodity>
+    <cmdty:space>ISO4217</cmdty:space>
+    <cmdty:id>EUR</cmdty:id>
+  </act:commodity>
+  <act:description>Fons d'inversió</act:description>
+  <act:parent type="new">4426b41837adc284f96b291c31022844</act:parent>
+</gnc:account>
+</gnc-account-example>
+
+<!-- Local variables: -->
+<!-- mode: xml        -->
+<!-- End:             -->

commit 1a84b4a000cc242b463bcf32000d87492a2ed32b
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Wed Sep 20 19:59:17 2017 +0200

    Properly ignore internal report options that are not on invisible option pages when opening the report options dialog

diff --git a/src/gnome-utils/dialog-options.c b/src/gnome-utils/dialog-options.c
index 60a8903..26362e4 100644
--- a/src/gnome-utils/dialog-options.c
+++ b/src/gnome-utils/dialog-options.c
@@ -1010,6 +1010,11 @@ gnc_option_set_ui_widget(GNCOption *option,
         LEAVE("bad type");
         return;
     }
+    else if (g_strcmp0 (type, "internal") == 0)
+    {
+        LEAVE("internal type");
+        return;
+    }
 
     raw_name = gnc_option_name(option);
     if (raw_name && *raw_name)

commit 0004a44f5f188d910cf7ab155ed1f0ce7fa1949a
Author: John Ralls <jralls at ceridwen.us>
Date:   Sat Sep 16 18:01:20 2017 -0700

    Release 2.7.0

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8db14ef..ee77352 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,15 +12,15 @@ ENABLE_TESTING()
 
 # Version number of gnucash
 SET (GNUCASH_MAJOR_VERSION 2)
-SET (GNUCASH_MINOR_VERSION 6)
-SET (GNUCASH_MICRO_VERSION 99)
+SET (GNUCASH_MINOR_VERSION 7)
+SET (GNUCASH_MICRO_VERSION 0)
 SET (GNUCASH_NANO_VERSION 0)
 SET (VERSION "${GNUCASH_MAJOR_VERSION}.${GNUCASH_MINOR_VERSION}.${GNUCASH_MICRO_VERSION}")
 SET (GNUCASH_LATEST_STABLE_SERIES 2.6)
 
 SET (PACKAGE gnucash)
 SET (PACKAGE_NAME GnuCash)
-SET (PACKAGE_VERSION 2.6.99)
+SET (PACKAGE_VERSION 2.7.0)
 SET (PACKAGE_BUGREPORT gnucash-devel at gnucash.org)
 SET (PACKAGE_TARNAME ${PACKAGE})
 SET (PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
diff --git a/ChangeLog b/ChangeLog
index 58657c8..591f74c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,2812 +1,6088 @@
-2017-08-04 Geert Janssens 
+2017-09-16 John Ralls 
 
-	* Merge branch 'gtk3-update4' of https://github.com/Bob-IT/gnucash (origin/master, origin/HEAD, master)
+	* Merge branch 'maint' (HEAD -> unstable, master)
 
-2017-08-03 Robert Fewell 
+2017-09-16 John Ralls 
 
-	* Missed changing the GncItemEdit alignment for the first row
+	* Fix test-userdata-dir on Mac. (origin/master, origin/HEAD)
 
-2017-08-03 Geert Janssens 
+2017-09-16 Geert Janssens 
 
-	* Tweak cmake/autotools so they produce the same output for POTFILES.in
+	* Travis fixes
 
-2017-08-03 Robert Fewell 
+2017-09-16 Geert Janssens 
 
-	* Change how the widgets are named for CSS
+	* Minor tweaks to the userdata_dir logic
 
-2017-08-03 Robert Fewell 
+2017-09-16 John Ralls 
 
-	* Replace the thicker lower line for the cursor, removed by mistake
+	* Fix python init errors.
 
-2017-08-03 Robert Fewell 
+2017-09-16 Geert Janssens 
 
-	* When drawing the cursor, remove the requirement to test for first row
+	* Improve a few comments.
 
-2017-08-03 Robert Fewell 
+2017-09-16 Geert Janssens 
 
-	* Change the divider line back to 3px
+	* Disable creating a user_data_dir in the test environment
 
-2017-08-03 Robert Fewell 
+2017-09-16 Geert Janssens 
 
-	* Revert change to text vertical offset
+	* Also undo the changes to POTFILES.in
 
-2017-08-03 Robert Fewell 
+2017-09-06 John Ralls 
 
-	* Do not make the first row height smaller
+	* Install the current, 2015, and 2016 ChangeLogs. (origin/maint, maint)
 
-2017-08-03 Robert Fewell 
+2017-09-16 Geert Janssens 
 
-	* Return the vertical split borders to light
+	* Revert "Merge branch 'new-gst-report' of https://github.com/christopherlam/gnucash"
 
-2017-08-03 Robert Fewell 
+2017-09-16 Geert Janssens 
 
-	* Change the hatching draw fix to use a relative move
+	* Update python bindings to use PyGI and Gtk3
 
-2017-08-01 Geert Janssens 
+2017-09-16 Geert Janssens 
 
-	* Merge branch 'master' of https://github.com/0-wiz-0/gnucash
+	* Merge branch 'new-gst-report' of https://github.com/christopherlam/gnucash
 
-2017-08-01 Robert Fewell 
+2017-09-11 christopherlam 
 
-	* Fix a problem with the arrows when register first loads
+	* "Sorting" tab overhaul to improve UI
 
-2017-08-01 Robert Fewell 
+2017-09-16 christopherlam 
 
-	* Fix the place the popup appears when above the row
+	* Disallow Closing Transactions. These txns must not be counted in this report.
 
-2017-08-01 Robert Fewell 
+2017-09-15 christopherlam 
 
-	* To update the toggle arrow it needs to be removed from the container
+	* Initial commit income-gst-report.scm
 
-2017-08-01 Robert Fewell 
+2017-09-15 christopherlam 
 
-	* Change the cursor grid coordinates to reflect the other changes
+	* Reindent income-gst-report.scm
 
-2017-08-01 Robert Fewell 
+2017-09-15 christopherlam 
 
-	* Change the cursor grid coordinates to reflect the other changes
+	* cp transction.scm income-gst-statement.scm
 
-2017-08-01 Robert Fewell 
+2017-09-15 Geert Janssens 
 
-	* Remove some blank lines from the header source file
+	* Merge branch 'maint'
 
-2017-08-01 Robert Fewell 
+2017-09-15 Geert Janssens 
 
-	* Add css style classes to parts of the register
+	* Bug 647805 - Interdependent report options fail to change state after using apply for a limited number of times
 
-2017-08-01 Robert Fewell 
+2017-09-15 fell 
 
-	* Change the cell grid lines slightly
+	* Bug 787479 - Persian currency symbol is doubled
 
-2017-08-01 Robert Fewell 
+2017-09-14 John Ralls 
 
-	* Make the header align with the sheet when scrolled horizontally
+	* Fix the actual cmake dist problem, missing macros.
 
-2017-08-01 Robert Fewell 
+2017-09-13 Geert Janssens 
 
-	* Change the layout to show left border of first cell
+	* Apply python binding changes to correct file
 
-2017-08-01 Robert Fewell 
+2017-09-12 John Ralls 
 
-	* Update the register grid
+	* Fix some odd automake errors that show up only during a CMake ninja dist.
 
-2017-07-31 John Ralls 
+2017-09-12 John Ralls 
 
-	* Check the right variable in the right version of gdk to test for a Mac build.
+	* Fix distribution pieces for gwenhywfar-gtk3.
 
-2017-07-29 Thomas Klausner 
+2017-09-12 John Ralls 
 
-	* Use proper glib2 include path.
+	* Re-enable generation of POTFILES.in
 
-2017-07-27 Thomas Klausner 
+2017-09-10 lmat 
 
-	* Use portable test(1) operator.
+	* Adding python tests to cmake
 
-2017-07-23 John Ralls 
+2017-09-12 Geert Janssens 
 
-	* Merge Guido Falsi's 'fix-typo-and-indent' branch.
+	* Merge branch 'maint'
 
-2017-07-10 Guido Falsi 
+2017-09-11 Rob Gowin 
 
-	* Fix a typo in a comment, and indentition of if conditional content.
+	* Fix issues with loading and running init.py
 
-2017-07-23 John Ralls 
+2017-09-11 John Ralls 
 
-	* Merge Bob Fewell's 'gtk3-update3' branch.
+	* Disable regeneration of POTFILES.in
 
-2017-07-23 Robert Fewell 
+2017-09-11 John Ralls 
 
-	* These files have the QofLogModule defined but never used
+	* Fix tiny omission that didn't build standard-reports.go.
 
-2017-07-23 Robert Fewell 
+2017-09-11 fell 
 
-	* Comment out some unused variables while register is still in flux
+	* Update changed string in de.po
 
-2017-07-23 Robert Fewell 
+2017-09-11 fell 
 
-	* Add some additional REGISTER2_ENABLED code blocks
+	* Fix error in recent commit
 
-2017-07-23 Robert Fewell 
+2017-09-10 John Ralls 
 
-	* Code clean up, comment out some additional static defines
+	* Link libgncmod-app-utils-python to libgncmod-app-utils.
 
-2017-07-23 Robert Fewell 
+2017-09-11 fell 
 
-	* Code clean up on register2 files
+	* Remove build_year from translatable copyright string
 
-2017-07-23 Robert Fewell 
+2017-09-10 fell 
 
-	* Code clean up, remove unused variable
+	* Review of PR #183
 
-2017-07-23 Robert Fewell 
+2017-09-10 Geert Janssens 
 
-	* Add a gtk version check for gnc-cell-renderer-popup
+	* Merge branch 'maint'
 
-2017-07-23 Robert Fewell 
+2017-09-10 Geert Janssens 
 
-	* Code clean up, remove some variables that were set but never used
+	* Merge branch 'fix_cmake_ofx_dep' of https://github.com/bhardwajs/gnucash
 
-2017-07-23 Robert Fewell 
+2017-09-09 christopherlam 
 
-	* Code clean up, remove some static defines and redundant code
+	* Fix swig wrapper for gncTaxTableGetTaxTables
 
-2017-07-23 Robert Fewell 
+2017-09-10 Geert Janssens 
 
-	* Code clean up, remove unused variables
+	* Merge branch 'trav' of https://github.com/limitedAtonement/gnucash
 
-2017-07-23 Robert Fewell 
+2017-09-10 Geert Janssens 
 
-	* Code clean up, remove unused variables
+	* Re-enable python-bindings test this time with a fully corrected python path
 
-2017-07-23 Robert Fewell 
+2017-09-09 John Ralls 
 
-	* Code clean up, remove unused variables
+	* Add w_image.c to EXTRA_DIST.
 
-2017-07-23 Robert Fewell 
+2017-09-04 Daniel 
 
-	* Code clean up, remove unused variables
+	* L10N: DE, some small corrections.
 
-2017-07-23 Robert Fewell 
+2017-09-09 Sumit Bhardwaj 
 
-	* Move static inline CSS to gnucash.css file
+	* Made ofx-gschema dependent on WITH_OFX flag
 
-2017-07-23 Robert Fewell 
+2017-09-06 lmat 
 
-	* Add an application specific CSS file
+	* Configure travis to use docker for CI
 
-2017-07-23 Robert Fewell 
+2017-09-09 Geert Janssens 
 
-	* Fix problem with gbv_treeview_resized_cb
+	* Temporarily disable python-bindings as it's currently failing
 
-2017-07-23 Robert Fewell 
+2017-09-09 Geert Janssens 
 
-	* Fix error in use of AccountFilterDialog structure in budgets
+	* Merge branch 'maint'
 
-2017-07-23 Robert Fewell 
+2017-09-08 Rob Gowin 
 
-	* Fix typo of version, should be 3.10
+	* Fix problems that occur when running out of CMake build dir
 
-2017-07-23 Robert Fewell 
+2017-09-08 Rob Gowin 
 
-	* Fix critical error when Gnucash closes with report pages open
+	* Run the python bindings test when using CMake
 
-2017-07-23 John Ralls 
+2017-09-06 lmat 
 
-	* [Mac] use gtk-mac-integration-gtk3 now that we're building with gtk3.
+	* Adding .gitignore entries for ctags and vim swaps
 
-2017-07-22 John Ralls 
+2017-09-08 fell 
 
-	* Detect and flag MinGW64
+	* Revert PR #182 mostly.
 
-2017-07-22 Alex Aycinena 
+2017-09-08 Geert Janssens 
 
-	* Revert visible changes to File->Properties for Book Currency from master in order to do further work in feature branch.
+	* Merge branch 'maint.translation.de.02' of https://github.com/quazgar/gnucash into maint
 
-2017-07-21 John Ralls 
+2017-09-06 John Ralls 
 
-	* Merge Sumit Bhardway's 'gdate-day-buffer' fix for gcc-7.
+	* Add include of Foundation framework for NSString and NSBundle.
 
-2017-07-20 Sumit Bhardwaj 
+2017-09-06 John Ralls 
 
-	* membuf changes in gnc-dense-cal.c for gcc7 warnings
+	* Set -xobjective-c or -xobjective-c++ for Mac code depending compiler.
 
-2017-07-16 John Ralls 
+2017-09-06 John Ralls 
 
-	* Turn off GncAddSchemeTargets debugging messages.
+	* Append to string the pre-cmake-3.4 way.
 
-2017-07-20 John Ralls 
+2017-09-06 John Ralls 
 
-	* Remove obsolete throw specifications.
+	* Install the current, 2015, and 2016 ChangeLogs.
 
-2017-07-17 John Ralls 
+2017-09-06 Geert Janssens 
 
-	* Merge branch 'maint'
+	* Ajust the GUILE_COMPILE_PATH such that it also works on Windows
 
-2017-07-17 Rob Gowin 
+2017-09-05 Geert Janssens 
 
-	* Fix failure to compile AQBanking GSchemas in CMake Build.
+	* Fix gtest-gnc-timezone test on Windows
 
-2017-07-16 John Ralls 
+2017-09-05 Geert Janssens 
 
-	* Version-check some webkit properties.
+	* Fix gnc-rational test on Windows
 
-2017-07-15 John Ralls 
+2017-09-04 Geert Janssens 
 
-	* Relax handling of bad numeric values in the DOM parser.
+	* Windows: check permissions actually used on the platform
 
-2017-07-15 John Ralls 
+2017-09-04 Geert Janssens 
 
-	* Prevent infinite loop in to_decimal if numerator becomes 0.
+	* Amend previous commit
 
-2017-07-15 John Ralls 
+2017-08-31 Geert Janssens 
 
-	* Merge Bob Fewell's Gtk3-Update2 branch.
+	* Convert boost::filesystem path strings to utf8.
 
-2017-07-15 Robert Fewell 
+2017-09-04 Daniel 
 
-	* Fix missing id values for GtkTreeSelection in glade files
+	* L10N: DE, automatic "make pot" changes.
 
-2017-07-15 Robert Fewell 
+2017-09-04 Daniel 
 
-	* Remove redundant GTK_CHECK_VERSION's
+	* L10N: DE, fix bug #787226: Bill ID / Billing ID swapped.
 
-2017-07-15 Robert Fewell 
+2017-09-03 Geert Janssens 
 
-	* Replace deprecated stock-id with icon-name
+	* Merge branch 'maint'
 
-2017-07-15 Robert Fewell 
+2017-09-03 Geert Janssens 
 
-	* Replace some missed GTK_STOCK_ items
+	* Only build aqbanking when requested
 
-2017-07-15 Robert Fewell 
+2017-09-02 Sumit Bhardwaj 
 
-	* Add function to add the color background data function to account column
+	* Added WITH_OFX fix to CMakeLists in gnucash/import-export/ofx
 
-2017-07-15 Robert Fewell 
+2017-09-02 Geert Janssens 
 
-	* Replace Gtk3 deprecated widgets in currency_accounting_widget
+	* Merge branch 'maint'
 
-2017-07-15 Robert Fewell 
+2017-09-02 Geert Janssens 
 
-	* Add function to clear the display of the currency edit widget
+	* Fix deliberate test failure on previous commit
 
-2017-07-15 Robert Fewell 
+2017-09-02 Geert Janssens 
 
-	* Modify the Account color button
+	* Have Travis print out build logs in case of test failures
 
-2017-07-15 Robert Fewell 
+2017-09-02 Geert Janssens 
 
-	* Replace missing key accelerators
+	* Merge branch 'maint'
 
-2017-07-14 John Ralls 
+2017-09-02 Geert Janssens 
 
-	* Enable AQBanking by default in CMake build.
+	* Set up a build matrix on Travis CI
 
-2017-07-14 John Ralls 
+2017-09-01 Rob Gowin 
 
-	* Adjust autotools build for gnc-html-webkit changes.
+	* Enable CMake build in Travis CI
 
-2017-07-11 John Ralls 
+2017-08-31 Geert Janssens 
 
-	* Conditionally build for Webkit1 on Win32 and Webkit2 everywhere else. (zzmerge/master)
+	* Use boost::filesystem's built-in conversion between character encodings.
 
-2017-07-09 John Ralls 
+2017-08-27 John Ralls 
 
-	* Check for package webkitgtk-3.0 (webkit1 API) on Windows.
+	* Remove set target property on no-longer-extant gncmod-utility-reports target.
 
-2017-07-03 John Ralls 
+2017-08-27 John Ralls 
 
-	* Use GStatBuf to match newer GLib API
+	* Fix poor error message on missing guile and make it fatal.
 
-2017-06-15 John Ralls 
+2017-08-27 John Ralls 
 
-	* Include winsock2.h before windows.h to silence a compile warning.
+	* Remove references to special HTMLHELP directory.
 
-2017-06-15 John Ralls 
+2017-08-27 John Ralls 
 
-	* Disable Guile's GnuLib broken redefinition of 'close'.
+	* Fix type mismatch (ptr & int) in comparison.
 
-2017-06-15 John Ralls 
+2017-08-27 John Ralls 
 
-	* Change the dll lookup directory when building with CMake on Win32.
+	* Move Win32 additions to engine_SOURCES to before first use.
 
-2017-06-15 John Ralls 
+2017-08-31 Geert Janssens 
 
-	* Win32 doesn't use the fake backend links, it just uses the regular dlls.
+	* Fix FIND_PROGRAM invocation for guile
 
-2017-06-15 John Ralls 
+2017-08-31 Geert Janssens 
 
-	* Link libws32 to the DBI backend on MINGW64
+	* Set the same minimum required gtk version for cmake and autotools
 
-2017-06-15 John Ralls 
+2017-08-31 Geert Janssens 
 
-	* Set deprecated-declarations to no-error for WIN32 so that it will work with Guile2.
+	* Merge branch 'kvpvaltostring' of https://github.com/limitedAtonement/gnucash
 
-2017-06-05 John Ralls 
+2017-08-31 Geert Janssens 
 
-	* Replace use of CMAKE_PREFIX_PATH
+	* Detail what is meant with a dark theme
 
-2017-06-05 John Ralls 
+2017-08-31 Geert Janssens 
 
-	* [Mingw64] Set command variables correctly for Guile2 compilation.
+	* Merge branch 'gtk3-update5' of https://github.com/Bob-IT/gnucash
 
-2017-05-27 John Ralls 
+2017-08-30 Robert Fewell 
 
-	* Fix ENDIF() parameter.
+	* Move another couple of functions used more than once to gnc-gtk-utils
 
-2017-05-27 John Ralls 
+2017-08-30 Robert Fewell 
 
-	* Add CMake files and .gitattributes to lf-only files.
+	* Move function is_color_light to gnc-gtk-utils and rename
 
-2017-05-26 John Ralls 
+2017-08-29 Geert Janssens 
 
-	* Adjustments to build on mingw-64.
+	* Merge branch 'prices-out2' of https://github.com/Bob-IT/gnucash
 
-2017-07-13 Alex Aycinena 
+2017-08-18 lmat 
 
-	* Change test-gnc-ui-util.c and test-option-util.cpp so that test-app-utils passes during make check.
+	* Should return std::string
 
-2017-07-12 Geert Janssens 
+2017-08-08 lmat 
 
-	* Fix cmake's build as installed
+	* Clear up guile2 vs. guile cmake confusion
 
-2017-07-11 Alex Aycinena 
+2017-08-28 Robert Fewell 
 
-	* Revert changes to test-gnc-ui-util.c until I can get my system to test them.
+	* Change the background colours of the import-main-matcher
 
-2017-07-10 Geert Janssens 
+2017-08-28 Robert Fewell 
 
-	* Merge branch 'dist-alignment'
+	* Change colour function to is_color_light in gnc-dense-cal
 
-2017-07-10 Geert Janssens 
+2017-08-26 Geert Janssens 
 
-	* Align master-only dist files between cmake and autotools
+	* Extend environment file parsing to also parse environment.local
 
-2017-07-10 Alex Aycinena 
+2017-08-26 Geert Janssens 
 
-	* Fix error of incorrect argument passed to gnc_commodity_new.
+	* Mention GNC_DATA_HOME and AQBANKING_HOME in the environment file.
 
-2017-07-10 Geert Janssens 
+2017-08-26 Geert Janssens 
 
-	* Merge branch 'maint'
+	* Check GNC_DATA_HOME environment to override default userdata location.
 
-2017-07-10 Geert Janssens 
+2017-08-23 Geert Janssens 
 
-	* Merge branch 'maint'
+	* Use platform dependent locations for gnucash user's data (gnc_userdata_home)
 
-2017-07-10 Geert Janssens 
+2017-08-22 Geert Janssens 
 
-	* Fix a couple of double EXTRA_DIST declarations from the previous commit (zzmerge/maint)
+	* Rewrite several file path routines to use boost::filesystem
 
-2017-07-10 Geert Janssens 
+2017-08-25 John Ralls 
 
-	* Add CMakeLists.txt files to dist tarball generated by autotools
+	* Build gwengui-gkt3 only if AQBanking is enabled.
 
-2017-07-10 Geert Janssens 
+2017-08-25 John Ralls 
 
-	* Rework icon cache loading (gjgh/master)
+	* Temporarily include building libgwengui-gtk3 in GnuCash.
 
-2017-07-10 Geert Janssens 
+2017-08-24 John Ralls 
 
-	* Add icons in the proper directory
+	* Conditionally modify getpassword_cb to match new signature in gwenhywfar 4.7.99.
 
-2017-07-09 Robert Fewell 
+2017-08-24 John Ralls 
 
-	* Replace style strings with proper defined types
+	* Convert to libgwengui-gtk3
 
-2017-07-09 Robert Fewell 
+2017-08-25 Geert Janssens 
 
-	* Redo the change to Gtk3.10 based glade file from current master
+	* Fully enable the new Account Substring option on the transaction report
 
-2017-07-09 Robert Fewell 
+2017-08-25 Geert Janssens 
 
-	* Remove the preference for showing an icon and label
+	* Hide Account Substring option
 
-2017-07-09 Robert Fewell 
+2017-08-25 christopherlam 
 
-	* Remove setting the rules hint for tree views
+	* Reduce to compatibility shim
 
-2017-07-09 Robert Fewell 
+2017-08-16 christopherlam 
 
-	* Fix mistake in changing button labels from stock
+	* added case sensitive filter
 
-2017-07-09 Robert Fewell 
+2017-08-16 christopherlam 
 
-	* Fix mistake in adding style context to Find Transactions dialog
+	* Account fullname filter for transaction.scm
 
-2017-07-09 Robert Fewell 
+2017-08-25 Geert Janssens 
 
-	* Replace register Gtk3 deprecated functions in gnucash-sheet.c
+	* Hide Account Substring option
 
-2017-07-09 Robert Fewell 
+2017-08-25 Geert Janssens 
 
-	* Replace register Gtk3.14 deprecated functions related to gtk_arrow
+	* Merge branch 'patch-3' of https://github.com/christopherlam/gnucash into maint
 
-2017-07-09 Robert Fewell 
+2017-08-25 christopherlam 
 
-	* Replace register GTk3.16 deprecated function gdk_cursor_new
+	* Reduce to compatibility shim
 
-2017-07-09 Robert Fewell 
+2017-08-24 Robert Fewell 
 
-	* Replace deprecated Gtk3.22 function to get monitor size
+	* Change comment in fallback css file for emphasize-label
 
-2017-07-09 Robert Fewell 
+2017-08-23 Robert Fewell 
 
-	* Replace Gtk3.20 deprecated functions in gnc-cell-renderer-popup.c
+	* Rename the colour defines to closely match the text in import matcher
 
-2017-07-09 Robert Fewell 
+2017-08-23 Robert Fewell 
 
-	* Replace Gtk3.22 deprecated functions to do with monitor size
+	* Rename direction boolean to arrow_down
 
-2017-07-09 Robert Fewell 
+2017-08-23 Robert Fewell 
 
-	* Replace Gtk3.20 functions in gnc-date-edit.c
+	* Change the way dense calendar background colours are sourced
 
-2017-07-09 Robert Fewell 
+2017-08-23 Robert Fewell 
 
-	* Replace Gtk3.22 deprecated function gtk_menu_popup
+	* Improve marker alignment depending on row height being odd or even
 
-2017-07-09 Robert Fewell 
+2017-08-23 Robert Fewell 
 
-	* Replace Gtk3.22 deprecated function gtk_menu_popup
+	* Fix some lines with spaces on them
 
-2017-07-09 Robert Fewell 
+2017-08-23 Robert Fewell 
 
-	* Replace Gtk3.22 deprecated function gtk_menu_popup
+	* Change glade comment in css file
 
-2017-07-09 Robert Fewell 
+2017-08-23 Geert Janssens 
 
-	* Replace Gtk3.22 deprecated function gtk_menu_popup
+	* Build test-import-pending-matches as c++
 
-2017-07-09 Robert Fewell 
+2017-08-22 Robert Fewell 
 
-	* Replace Gtk3.22 deprecated function to get monitor size
+	* Use GTK_STYLE_PROVIDER_PRIORITY_FALLBACK for fallback css file
 
-2017-07-09 Robert Fewell 
+2017-08-14 Robert Fewell 
 
-	* Replace Gtk3.20 deprecated functions based on device_manager
+	* Use the css class defines in the import matcher help dialog
 
-2017-07-09 Robert Fewell 
+2017-08-13 Robert Fewell 
 
-	* Replace Gtk3.22 deprecated function gtk_menu_popup
+	* Minor fix to gnc-tree-model-account, removal of double ;
 
-2017-07-09 Robert Fewell 
+2017-08-13 Robert Fewell 
 
-	* Replace Gtk3.22 deprecated function gtk_menu_popup
+	* These variables are not required any more in gnc-dense-cal
 
-2017-07-09 Robert Fewell 
+2017-08-13 Robert Fewell 
 
-	* Replace Gtk3.22 deprecated gtk_show_uri
+	* Change the css for the primary label in dialog account
 
-2017-07-09 Geert Janssens 
+2017-08-13 Robert Fewell 
 
-	* Rework our icon management
+	* Change the Register2 css to be from the fallback file
 
-2017-07-09 Alex Aycinena 
+2017-08-13 Robert Fewell 
 
-	* Book-Currency Feature step 6
+	* Do not set the foreground colour in Import Matcher
 
-2017-07-09 Geert Janssens 
+2017-08-13 Robert Fewell 
 
-	* Fix build with cmake > 3.5
+	* Rework the Import Matcher colours to be from the fallback css file
 
-2017-07-08 John Ralls 
+2017-08-13 Robert Fewell 
 
-	* Allow compilation with either Webkit2Gtk-4.0 or WebKit2Gtk-3.0.
+	* Rename css class negative-color to negative-numbers
 
-2017-07-08 John Ralls 
+2017-08-12 Robert Fewell 
 
-	* Adjust Makefile.am for pixmap hierarchy change in 4aea4c5.
+	* The summary bar never respected the use of a negative colour
 
-2017-07-08 John Ralls 
+2017-08-12 Robert Fewell 
 
-	* Don't warn about all of the deprecated Gtk functions we're using.
+	* Change the account treeview to use the css negative color
 
-2017-07-08 Geert Janssens 
+2017-08-12 Robert Fewell 
+
+	* Rework the negative label colour
+
+2017-08-09 Robert Fewell 
+
+	* Replace toggle arrow with a theme drawn one
+
+2017-08-09 Robert Fewell 
+
+	* Add draw arrow call back to various widgets
+
+2017-08-09 Robert Fewell 
+
+	* Add a draw callback to draw a theme based up/down arrow
+
+2017-08-08 Robert Fewell 
+
+	* Change the dense calender to use css so that it can be themed
+
+2017-08-08 Robert Fewell 
+
+	* Add CSS provider of a lesser priority than themes
+
+2017-08-22 Mike Alexander 
+
+	* Fix sigfigs(n) rounding to work when the input is bigger tnan 10**n.
+
+2017-08-22 Mike Alexander 
+
+	* Fix numerator overflow constructing GncNumeric from 96.16
+
+2017-04-15 Mike Alexander 
+
+	* Add tests for converting doubles 96.16 and 9616000000.0 to GncNumeric.
+
+2017-08-21 Mike Alexander 
+
+	* Add a couple of directories containing dependencies of libtest-core-guile.
+
+2017-08-21 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-07-01 Yasuaki Taniguchi 
+
+	* Bug 784284 - unifying "Clear the entry." tooltip on Loan Repayment Calculator
+
+2017-08-21 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-08-19 Kristjan Onu 
+
+	* Correct Price Overview documentation typos
+
+2017-08-21 fell 
+
+	* PR #172: Accelerator fixes for Latvian language
+
+2017-08-08 Robert Fewell 
+
+	* Remove the rules hint from gnc-tree-view to align with current setting
+
+2017-08-21 Geert Janssens 
+
+	* Fix cmake run on Ubuntu 16.04 (and possibly other distros)
+
+2017-08-21 Geert Janssens 
+
+	* Fix missing Find... functionality
+
+2017-08-20 John Ralls 
+
+	* Remove test for transaction set-date diagnostic message.
+
+2017-08-20 John Ralls 
+
+	* Use time64 GncDateTime constructor instead of struct tm constructor.
+
+2017-08-20 John Ralls 
+
+	* Disable creating a date string to maybe use in a PINFO message.
+
+2017-08-20 John Ralls 
+
+	* Parse date strings into a struct tm and construct GDateTime with that.
+
+2017-08-20 John Ralls 
+
+	* Test features to see if they're already set before setting them.
+
+2017-08-20 Robert Fewell 
+
+	* Move gnc-gdate-utils functions to gnc-date and remove files.
+
+2017-08-20 Robert Fewell 
+
+	* Change tabs to spaces and remove some blank lines
+
+2017-08-20 Robert Fewell 
+
+	* Rename gnc_pricedb_remove_old_prices_keep_last
+
+2017-08-20 Robert Fewell 
+
+	* Rename save_cloned_price to clone_price
+
+2017-08-20 Robert Fewell 
+
+	* Added second if clause for completeness.
+
+2017-08-20 Robert Fewell 
+
+	* Remove the 'if else' blocks by using boolean variable.
+
+2017-08-20 Robert Fewell 
+
+	* Rename function to be plural as more than one commodity returned in list
+
+2017-08-20 Robert Fewell 
+
+	* Move gnc-gdate-utils.c/h from app-utils to engine
+
+2017-08-10 Robert Fewell 
+
+	* Fix some missing id's in the glade file
+
+2017-08-10 Robert Fewell 
+
+	* Modify the unit tests to reflect changes.
+
+2017-08-10 Robert Fewell 
+
+	* This change modifies the way old prices can be removed.
+
+2017-08-19 John Ralls 
+
+	* Commit imap conversions once per account instead of per import map slot.
+
+2017-08-19 John Ralls 
+
+	* Revert "Fix mac looking in wrong directory for libgncmod-backend-dbi.dylib."
+
+2017-08-19 John Ralls 
+
+	* Fix load string KVP memory error.
+
+2017-08-19 John Ralls 
+
+	* Fix typo, broke build on Mac.
+
+2017-08-16 John Ralls 
+
+	* Fix mac looking in wrong directory for libgncmod-backend-dbi.dylib.
+
+2017-08-17 Geert Janssens 
+
+	* Minor cleanupus in .gitignore
+
+2017-08-17 Geert Janssens 
+
+	* Rename directory for code from external projects
+
+2017-08-17 Geert Janssens 
+
+	* Win32: drop goffice directory from path
+
+2017-08-17 Geert Janssens 
+
+	* Improve a comment
+
+2017-08-17 Geert Janssens 
+
+	* Add as many values as there are fields in the list
+
+2017-08-17 Geert Janssens 
+
+	* Use another way to fix backend loading on OS X
+
+2017-08-16 John Ralls 
+
+	* Fix mac looking in wrong directory for libgncmod-backend-dbi.dylib.
+
+2017-08-16 John Ralls 
+
+	* Fix time-string format in backend for GncDateTime(std::string).
+
+2017-08-14 John Ralls 
+
+	* Fix the most serious backend memory leaks.
+
+2017-08-16 christopherlam 
+
+	* added case sensitive filter
+
+2017-08-16 christopherlam 
+
+	* Account fullname filter for transaction.scm
+
+2017-08-03 christopherlam 
+
+	* Remove clutter from generated html
+
+2017-08-03 christopherlam 
+
+	* Partial fix for bug 660027
+
+2017-08-16 Geert Janssens 
+
+	* Fix a number of test mismatches between cmake and autotools
+
+2017-08-16 Geert Janssens 
+
+	* Keep the test modules from gnc-module outside of the normal GNC_MODULE_PATH
+
+2017-08-16 Valdis Vitolins 
+
+	* Accelerator fixes for Latvian language
+
+2017-08-14 Geert Janssens 
+
+	* Merge branch 'reorganize-source-dirs'
+
+2017-08-14 Geert Janssens 
+
+	* Eliminate plugins directory
+
+2017-08-13 Geert Janssens 
+
+	* Eliminate the separate bin directory
+
+2017-08-13 Geert Janssens 
+
+	* Update .gitignore to handle all the renamed directories
+
+2017-08-11 Geert Janssens 
+
+	* Drop packaging directory
+
+2017-08-11 Geert Janssens 
+
+	* Add conditional source files to dist tarball
+
+2017-08-11 Geert Janssens 
+
+	* Cleanup some more obscure references to no longer existing 'src' directory
+
+2017-08-11 Geert Janssens 
+
+	* Move accounts, checks and pixmaps into a data directory
+
+2017-08-11 fell 
+
+	* PR #170 Fixes for po/lv.po file
+
+2017-08-11 Valdis Vitolins 
+
+	* Fixes for po/lv.po file
+
+2017-08-10 Geert Janssens 
+
+	* Restructure the src directory
+
+2017-08-10 fell 
+
+	* Merge Messages fom Maint in lv.po
+
+2017-08-09 Valdis Vitolins 
+
+	* *.po file updated for Latvian language
+
+2017-08-09 Geert Janssens 
+
+	* Move global definitions to toplevel CMakeLists.txt
+
+2017-08-09 Geert Janssens 
+
+	* Drop the cutecash experiment and the gtkmm optional bindings
+
+2017-08-08 Geert Janssens 
+
+	* Drop gtk dependency from app-utils
+
+2017-08-07 Geert Janssens 
+
+	* Make all backend loading use the same build environment module path resolution
+
+2017-08-06 Geert Janssens 
+
+	* Merge qof directory into engine
+
+2017-08-09 Geert Janssens 
+
+	* Fix ambiguity in Dutch translation of the gnucash description
+
+2017-08-05 Geert Janssens 
+
+	* Move core-utils files with depedencies on qof to engine
+
+2017-08-07 Geert Janssens 
+
+	* Fix cmake based sqlite3 test when run twice in a row
+
+2017-08-05 Geert Janssens 
+
+	* Fix source file dependency on config.h in engine
+
+2017-08-04 Geert Janssens 
+
+	* Remove the gncmod boilerplate from standard-reports and utility-reports
+
+2017-07-21 Geert Janssens 
+
+	* Integrate gnome-business into gnome
+
+2017-07-21 Geert Janssens 
+
+	* Move auxiliary business files to gnome directory
+
+2017-07-20 Geert Janssens 
+
+	* Move business-gnome subdirectory to higher level
+
+2017-07-20 Geert Janssens 
+
+	* Remove references to long obsolete source directories
+
+2011-11-19 Geert Janssens 
+
+	* Merge business ledger into ledger-core
+
+2017-08-07 Geert Janssens 
+
+	* Update ChangeLog
+
+2017-08-04 Geert Janssens 
+
+	* Merge branch 'gtk3-update4' of https://github.com/Bob-IT/gnucash
+
+2017-08-03 Robert Fewell 
+
+	* Missed changing the GncItemEdit alignment for the first row
+
+2017-08-03 Geert Janssens 
+
+	* Tweak cmake/autotools so they produce the same output for POTFILES.in
+
+2017-08-03 Robert Fewell 
+
+	* Change how the widgets are named for CSS
+
+2017-08-03 Robert Fewell 
+
+	* Replace the thicker lower line for the cursor, removed by mistake
+
+2017-08-03 Robert Fewell 
+
+	* When drawing the cursor, remove the requirement to test for first row
+
+2017-08-03 Robert Fewell 
+
+	* Change the divider line back to 3px
+
+2017-08-03 Robert Fewell 
+
+	* Revert change to text vertical offset
+
+2017-08-03 Robert Fewell 
+
+	* Do not make the first row height smaller
+
+2017-08-03 Robert Fewell 
+
+	* Return the vertical split borders to light
+
+2017-08-03 Robert Fewell 
+
+	* Change the hatching draw fix to use a relative move
+
+2017-08-01 Geert Janssens 
+
+	* Merge branch 'master' of https://github.com/0-wiz-0/gnucash
+
+2017-08-01 christopherlam 
+
+	* Fix income statement when trading accounts not used
+
+2017-08-01 Robert Fewell 
+
+	* Fix a problem with the arrows when register first loads
+
+2017-08-01 christopherlam 
+
+	* Add vertical-align:top to default text fields.
+
+2017-08-01 Robert Fewell 
+
+	* Fix the place the popup appears when above the row
+
+2017-08-01 Robert Fewell 
+
+	* To update the toggle arrow it needs to be removed from the container
+
+2017-08-01 Robert Fewell 
+
+	* Change the cursor grid coordinates to reflect the other changes
+
+2017-08-01 Robert Fewell 
+
+	* Change the cursor grid coordinates to reflect the other changes
+
+2017-08-01 Robert Fewell 
+
+	* Remove some blank lines from the header source file
+
+2017-08-01 Robert Fewell 
+
+	* Add css style classes to parts of the register
+
+2017-08-01 Robert Fewell 
+
+	* Change the cell grid lines slightly
+
+2017-08-01 Robert Fewell 
+
+	* Make the header align with the sheet when scrolled horizontally
+
+2017-08-01 Robert Fewell 
+
+	* Change the layout to show left border of first cell
+
+2017-08-01 Robert Fewell 
+
+	* Update the register grid
+
+2017-07-31 John Ralls 
+
+	* Check the right variable in the right version of gdk to test for a Mac build.
+
+2017-07-29 Thomas Klausner 
+
+	* Use proper glib2 include path.
+
+2017-07-27 Thomas Klausner 
+
+	* Use portable test(1) operator.
+
+2017-07-23 John Ralls 
+
+	* Merge Guido Falsi's 'fix-typo-and-indent' branch.
+
+2017-07-10 Guido Falsi 
+
+	* Fix a typo in a comment, and indentition of if conditional content.
+
+2017-07-23 John Ralls 
+
+	* Merge Bob Fewell's 'gtk3-update3' branch.
+
+2017-07-23 Robert Fewell 
+
+	* These files have the QofLogModule defined but never used
+
+2017-07-23 Robert Fewell 
+
+	* Comment out some unused variables while register is still in flux
+
+2017-07-23 Robert Fewell 
+
+	* Add some additional REGISTER2_ENABLED code blocks
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up, comment out some additional static defines
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up on register2 files
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up, remove unused variable
+
+2017-07-23 Robert Fewell 
+
+	* Add a gtk version check for gnc-cell-renderer-popup
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up, remove some variables that were set but never used
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up, remove some static defines and redundant code
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up, remove unused variables
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up, remove unused variables
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up, remove unused variables
+
+2017-07-23 Robert Fewell 
+
+	* Code clean up, remove unused variables
+
+2017-07-23 Robert Fewell 
+
+	* Move static inline CSS to gnucash.css file
+
+2017-07-23 Robert Fewell 
+
+	* Add an application specific CSS file
+
+2017-07-23 Robert Fewell 
+
+	* Fix problem with gbv_treeview_resized_cb
+
+2017-07-23 Robert Fewell 
+
+	* Fix error in use of AccountFilterDialog structure in budgets
+
+2017-07-23 Robert Fewell 
+
+	* Fix typo of version, should be 3.10
+
+2017-07-23 Robert Fewell 
+
+	* Fix critical error when Gnucash closes with report pages open
+
+2017-07-23 John Ralls 
+
+	* [Mac] use gtk-mac-integration-gtk3 now that we're building with gtk3.
+
+2017-07-22 John Ralls 
+
+	* Detect and flag MinGW64
+
+2017-07-22 Alex Aycinena 
+
+	* Revert visible changes to File->Properties for Book Currency from master in order to do further work in feature branch.
+
+2017-07-21 John Ralls 
+
+	* Merge Sumit Bhardway's 'gdate-day-buffer' fix for gcc-7.
+
+2017-07-20 Sumit Bhardwaj 
+
+	* membuf changes in gnc-dense-cal.c for gcc7 warnings
+
+2017-07-16 John Ralls 
+
+	* Turn off GncAddSchemeTargets debugging messages.
+
+2017-07-20 John Ralls 
+
+	* Remove obsolete throw specifications.
+
+2017-07-17 John Ralls 
+
+	* Merge branch 'maint'
+
+2017-07-17 Rob Gowin 
+
+	* Fix failure to compile AQBanking GSchemas in CMake Build.
+
+2017-07-16 John Ralls 
+
+	* Version-check some webkit properties.
+
+2017-07-15 John Ralls 
+
+	* Relax handling of bad numeric values in the DOM parser.
+
+2017-07-15 John Ralls 
+
+	* Prevent infinite loop in to_decimal if numerator becomes 0.
+
+2017-07-15 John Ralls 
+
+	* Merge Bob Fewell's Gtk3-Update2 branch.
+
+2017-07-15 Robert Fewell 
+
+	* Fix missing id values for GtkTreeSelection in glade files
+
+2017-07-15 Robert Fewell 
+
+	* Remove redundant GTK_CHECK_VERSION's
+
+2017-07-15 Robert Fewell 
+
+	* Replace deprecated stock-id with icon-name
+
+2017-07-15 Robert Fewell 
+
+	* Replace some missed GTK_STOCK_ items
+
+2017-07-15 Robert Fewell 
+
+	* Add function to add the color background data function to account column
+
+2017-07-15 Robert Fewell 
+
+	* Replace Gtk3 deprecated widgets in currency_accounting_widget
+
+2017-07-15 Robert Fewell 
+
+	* Add function to clear the display of the currency edit widget
+
+2017-07-15 Robert Fewell 
+
+	* Modify the Account color button
+
+2017-07-15 Robert Fewell 
+
+	* Replace missing key accelerators
+
+2017-07-14 John Ralls 
+
+	* Enable AQBanking by default in CMake build.
+
+2017-07-14 John Ralls 
+
+	* Adjust autotools build for gnc-html-webkit changes.
+
+2017-07-11 John Ralls 
+
+	* Conditionally build for Webkit1 on Win32 and Webkit2 everywhere else.
+
+2017-07-09 John Ralls 
+
+	* Check for package webkitgtk-3.0 (webkit1 API) on Windows.
+
+2017-07-03 John Ralls 
+
+	* Use GStatBuf to match newer GLib API
+
+2017-06-15 John Ralls 
+
+	* Include winsock2.h before windows.h to silence a compile warning.
+
+2017-06-15 John Ralls 
+
+	* Disable Guile's GnuLib broken redefinition of 'close'.
+
+2017-06-15 John Ralls 
+
+	* Change the dll lookup directory when building with CMake on Win32.
+
+2017-06-15 John Ralls 
+
+	* Win32 doesn't use the fake backend links, it just uses the regular dlls.
+
+2017-06-15 John Ralls 
+
+	* Link libws32 to the DBI backend on MINGW64
+
+2017-06-15 John Ralls 
+
+	* Set deprecated-declarations to no-error for WIN32 so that it will work with Guile2.
+
+2017-06-05 John Ralls 
+
+	* Replace use of CMAKE_PREFIX_PATH
+
+2017-06-05 John Ralls 
+
+	* [Mingw64] Set command variables correctly for Guile2 compilation.
+
+2017-05-27 John Ralls 
+
+	* Fix ENDIF() parameter.
+
+2017-05-27 John Ralls 
+
+	* Add CMake files and .gitattributes to lf-only files.
+
+2017-05-26 John Ralls 
+
+	* Adjustments to build on mingw-64.
+
+2017-07-13 Alex Aycinena 
+
+	* Change test-gnc-ui-util.c and test-option-util.cpp so that test-app-utils passes during make check.
+
+2017-07-12 Geert Janssens 
+
+	* Fix cmake's build as installed
+
+2017-07-11 Alex Aycinena 
+
+	* Revert changes to test-gnc-ui-util.c until I can get my system to test them.
+
+2017-07-10 Geert Janssens 
+
+	* Merge branch 'dist-alignment'
+
+2017-07-10 Geert Janssens 
+
+	* Align master-only dist files between cmake and autotools
+
+2017-07-10 Alex Aycinena 
+
+	* Fix error of incorrect argument passed to gnc_commodity_new.
+
+2017-07-10 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-07-10 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-07-10 Geert Janssens 
+
+	* Fix a couple of double EXTRA_DIST declarations from the previous commit
+
+2017-07-10 Geert Janssens 
+
+	* Add CMakeLists.txt files to dist tarball generated by autotools
+
+2017-07-10 Geert Janssens 
+
+	* Rework icon cache loading
+
+2017-07-10 Geert Janssens 
+
+	* Add icons in the proper directory
+
+2017-07-09 Robert Fewell 
+
+	* Replace style strings with proper defined types
+
+2017-07-09 Robert Fewell 
+
+	* Redo the change to Gtk3.10 based glade file from current master
+
+2017-07-09 Robert Fewell 
+
+	* Remove the preference for showing an icon and label
+
+2017-07-09 Robert Fewell 
+
+	* Remove setting the rules hint for tree views
+
+2017-07-09 Robert Fewell 
+
+	* Fix mistake in changing button labels from stock
+
+2017-07-09 Robert Fewell 
+
+	* Fix mistake in adding style context to Find Transactions dialog
+
+2017-07-09 Robert Fewell 
+
+	* Replace register Gtk3 deprecated functions in gnucash-sheet.c
+
+2017-07-09 Robert Fewell 
+
+	* Replace register Gtk3.14 deprecated functions related to gtk_arrow
+
+2017-07-09 Robert Fewell 
+
+	* Replace register GTk3.16 deprecated function gdk_cursor_new
+
+2017-07-09 Robert Fewell 
+
+	* Replace deprecated Gtk3.22 function to get monitor size
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.20 deprecated functions in gnc-cell-renderer-popup.c
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated functions to do with monitor size
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.20 functions in gnc-date-edit.c
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated function gtk_menu_popup
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated function gtk_menu_popup
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated function gtk_menu_popup
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated function gtk_menu_popup
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated function to get monitor size
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.20 deprecated functions based on device_manager
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated function gtk_menu_popup
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated function gtk_menu_popup
+
+2017-07-09 Robert Fewell 
+
+	* Replace Gtk3.22 deprecated gtk_show_uri
+
+2017-07-09 Geert Janssens 
+
+	* Rework our icon management
+
+2017-07-09 Alex Aycinena 
+
+	* Book-Currency Feature step 6
+
+2017-07-09 Geert Janssens 
+
+	* Fix build with cmake > 3.5
+
+2017-07-08 John Ralls 
+
+	* Allow compilation with either Webkit2Gtk-4.0 or WebKit2Gtk-3.0.
+
+2017-07-08 John Ralls 
+
+	* Adjust Makefile.am for pixmap hierarchy change in 4aea4c5.
+
+2017-07-08 John Ralls 
+
+	* Don't warn about all of the deprecated Gtk functions we're using.
+
+2017-07-08 Geert Janssens 
 
 	* Travis - install libgtk-3-dev and libwebkit2gtk-3.0-dev before building
 
-2017-07-08 Geert Janssens 
+2017-07-08 Geert Janssens 
+
+	* A few cleanups from the previous merge commit
+
+2017-07-08 Geert Janssens 
+
+	* Merge branch 'gtk3'
+
+2017-07-06 Robert Fewell 
+
+	* Make the About dialog sizeable and format AUTHORS and DOCUMENTERS
+
+2017-07-04 John Ralls 
+
+	* Merge CMake Distcheck from 'maint'.
+
+2017-07-04 Robert Fewell 
+
+	* Replace Gtk3.14 function gtk_icon_theme_add_builtin_icon
+
+2017-07-04 Robert Fewell 
+
+	* Missed this from previous commit
+
+2017-07-04 Robert Fewell 
+
+	* Rearrange the pixmap folder to contain a hicolor directory structure
+
+2017-06-06 Rob Gowin 
+
+	* No need for make dist and distcheck when checking autotools build in cmake
+
+2017-02-01 Rob Gowin 
+
+	* Implement 'dist', 'distcheck' and 'uninstall' targets for CMake
+
+2017-06-26 Kuang-che Wu 
+
+	* Fix import-export compile on windows
+
+2017-07-03 Robert Fewell 
+
+	* Missed specifying Gtk3.12 version for set_margin_end
+
+2017-07-03 Robert Fewell 
+
+	* Fix some entries in glade files that did not have id's
+
+2017-07-02 John Ralls 
+
+	* Merge branch 'maint'
+
+2017-07-02 John Ralls 
+
+	* Some more translations from the TP. (tag: 2.6.17b)
+
+2017-07-02 Robert Fewell 
+
+	* Fix corrupted Gtk2 aqbanking glade file
+
+2017-07-02 Robert Fewell 
+
+	* Missed a preference option from the aqbanking glade file
+
+2017-07-02 Geert Janssens 
+
+	* Merge branch 'fix-win-compile' of https://github.com/kcwu/gnucash
+
+2017-07-02 Robert Fewell 
+
+	* Change the relative column to a pixbuf so it looks like find account
+
+2017-07-02 Robert Fewell 
+
+	* Fixup for gnc-gui-query.c, invalid cast
+
+2017-07-02 Robert Fewell 
+
+	* Remove Gtk3.14 deprecated function, it does not do any thing
+
+2017-07-02 Robert Fewell 
+
+	* Replace deprecated Gtk3.16 gtk_override_background_color
+
+2017-07-02 Robert Fewell 
+
+	* Replace deprecated Gtk3.16 functions to change colour.
+
+2017-07-02 Robert Fewell 
+
+	* Replace deprecated Gtk3.16 function gtk_widget_override_font
+
+2017-07-02 Robert Fewell 
+
+	* Replace gtk_alignment in various functions
+
+2017-07-02 Robert Fewell 
+
+	* Replace deprecated Gtk3.14 function gtk_arrow_new with an icon
+
+2017-07-02 Robert Fewell 
+
+	* Replace deprecated Gtk3.16 function in dialog-account.c
+
+2017-07-02 Robert Fewell 
+
+	* Add css style context to various widgets so they can easily be changed
+
+2017-07-02 Robert Fewell 
+
+	* Add css style context to various widgets so they can easily be changed
+
+2017-07-02 Robert Fewell 
+
+	* Add css style context to various widgets so they can easily be changed
+
+2017-07-02 Robert Fewell 
+
+	* Add function to add css style context to a widget
+
+2017-07-02 Robert Fewell 
+
+	* Use the new preference to control icons and labels on buttons
+
+2017-07-02 Robert Fewell 
+
+	* Add grid line preference to various tree views
+
+2017-07-02 Robert Fewell 
+
+	* Tweak the tab labels to add left and right margins
+
+2017-07-02 Robert Fewell 
+
+	* Add new preference to show tree view grid lines
+
+2017-07-01 John Ralls 
+
+	* Re-release 2.6.17 (tag: 2.6.17a)
+
+2017-07-01 John Ralls 
+
+	* Release 2.6.17 (tag: 2.6.17)
+
+2017-06-30 John Ralls 
+
+	* Update translations from the translation project.
+
+2017-06-29 Mike Evans 
+
+	* Bug 784317 - typo in 'import customers or vendors from text file' dialog
+
+2017-06-28 Robert Fewell 
+
+	* Minor fixups to the assistant-csv-trans-import glade file
+
+2017-06-28 Robert Fewell 
+
+	* Replace deprecated gtk_image_menu_item in gnumeric popup
+
+2017-06-28 Robert Fewell 
+
+	* Fix error of invalid cast to GTK_COMBO_BOX in trans importer
+
+2017-06-28 Robert Fewell 
+
+	* Replace deprecated render_icon_pixbuf in dialog-print-check
+
+2017-06-27 Robert Fewell 
+
+	* Rename use of icon defines to reflect changes in icon.h
+
+2017-06-27 Robert Fewell 
+
+	* Change the way icons are loaded and the corresponding define names
+
+2017-06-27 Robert Fewell 
+
+	* Change some functions to use icon names instead of stock id's
+
+2017-06-26 Robert Fewell 
+
+	* Replace GTK_STOCK_INDEX, _YES and _APPLY with icon names.
+
+2017-06-26 Robert Fewell 
+
+	* Replace GTK_STOCK_PRINT_PREVIEW with icon name "document-print-preview"
+
+2017-06-26 Robert Fewell 
+
+	* Replace GTK_STOCK_CANCEL with icon name "process-stop"
+
+2017-06-26 Robert Fewell 
+
+	* Replace GTK_STOCK_CONVERT with two icon names
+
+2017-06-26 Robert Fewell 
+
+	* Missed some replace GTK_STOCK_... images with there equivalent icon name
+
+2017-06-26 Robert Fewell 
+
+	* Missed changing some stock labels on buttons to icon names
+
+2017-06-26 Robert Fewell 
+
+	* Replace GTK_STOCK_... images with there equivalent icon name
+
+2017-06-26 Robert Fewell 
+
+	* Missed changing some stock labels on some buttons
+
+2017-06-25 John Ralls 
+
+	* Bug 782274 - Transactions produced by Transfer Funds or Process...
+
+2017-06-26 Kuang-che Wu 
+
+	* Fix import-export compile on windows
+
+2017-06-25 Robert Fewell 
+
+	* Replace deprecated functions in gnc_cell_renderer_date
+
+2017-06-25 Robert Fewell 
+
+	* Replace deprecated function to get mouse pointer position
+
+2017-06-24 John Ralls 
+
+	* Bug 782897 - Stock Split Assistant crashes GnuCash if you enter a New...
+
+2017-06-24 Robert Fewell 
+
+	* GtkTreeView rules_hint is deprecated after version 3.14
+
+2017-06-24 Robert Fewell 
+
+	* Replace deprecated widget_render_icon function in print-check
+
+2017-06-23 Robert Fewell 
+
+	* Replace GtkTable with GtkGrid in the register
+
+2017-06-23 Robert Fewell 
+
+	* Replace deprecated size_request in register date-picker
+
+2017-06-23 Robert Fewell 
+
+	* Replace deprecated menu function in gnc-csv-gnumeric-popup.c
+
+2017-06-23 Robert Fewell 
+
+	* Replace deprecated size_request in gnc-tree-view.c
+
+2017-06-23 Robert Fewell 
+
+	* Replace deprecated gtk_rc... functions in gnc-tree-view_split-reg.c
+
+2017-06-23 Robert Fewell 
+
+	* Replace deprecated functions in gnc-date-edit.c
+
+2017-06-23 Robert Fewell 
+
+	* Replace deprecated functions in gnc-combott.c
+
+2017-06-23 Robert Fewell 
+
+	* Replace deprecated font function in gnc-report.c
+
+2017-06-23 Robert Fewell 
+
+	* Glade GUI adds a has_padding property to the action area which is wrong
+
+2017-06-23 Robert Fewell 
+
+	* Fix up, box should be a GtkWidget
+
+2017-06-22 Robert Fewell 
+
+	* Files linked to assistant-loan.glade
+
+2017-06-22 Robert Fewell 
+
+	* Files linked to dialog-import.glade
+
+2017-06-22 Robert Fewell 
+
+	* Files linked to dialog-account-picker.glade
+
+2017-06-22 Robert Fewell 
+
+	* Convert gtktable to grid in assistant-qif-import
+
+2017-06-22 Robert Fewell 
+
+	* Files linked to assistant-csv-trans-import.glade
+
+2017-06-22 Robert Fewell 
+
+	* Fix up for to align button or account import
+
+2017-06-21 Robert Fewell 
+
+	* Files linked to assistant-csv-account-import.glade
+
+2017-06-21 Robert Fewell 
+
+	* Files linked to assistant-csv-export.glade
+
+2017-06-21 Robert Fewell 
+
+	* Files linked to assistant-acct-period.glade
+
+2017-06-21 Robert Fewell 
+
+	* Files linked to assistant-stock-split.glade
+
+2017-06-21 Robert Fewell 
+
+	* Files linked to assistant-hierarchy.glade
+
+2017-06-21 Geert Janssens 
+
+	* Fix commodity namespace tests
+
+2017-06-20 Geert Janssens 
+
+	* Stop writing commodity namespaces to xml files in gnucash 1.8 compatible way
+
+2017-06-20 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-06-20 Geert Janssens 
+
+	* Bug 603379 - Prevent changing some Account Options if it has transactions - followup
+
+2017-06-20 John Ralls 
+
+	* Fix Travis Failure
+
+2017-06-20 John Ralls 
+
+	* Merge branch 'maint'
+
+2017-06-20 Robert Fewell 
+
+	* This is minor change to eliminate the spaces in dialog names
+
+2017-06-20 Robert Fewell 
+
+	* Remove the aqbanking preferences from this gtk2 glade file
+
+2017-06-20 Robert Fewell 
+
+	* Create a new glade for aqbanking preferences as this now uses a grid
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-preferences.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-customer-import-gui.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-bi-import-gui.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-report.glade
+
+2017-06-20 Robert Fewell 
+
+	* Changes to dialog-custom-report.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-search.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to business-prefs.glade
+
+2017-06-20 Robert Fewell 
+
+	* Change business-options-gnome.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-vendor.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-payment.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-order.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-job.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-invoice.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-employee.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-date-close.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-customer.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-choose-owner.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-billterms.glade
+
+2017-06-20 Geert Janssens 
+
+	* Properly define the template namespace rather than using a local string everywhere
+
+2017-06-16 Geert Janssens 
+
+	* Bug 781634 followup - separate translatable commodity namespace strings from those uses in storage
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to gnc-plugin-page-register2.glade
+
+2017-06-20 Robert Fewell 
+
+	* File linked to gnc-plugin-page-register.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to window-reconcile.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to window-autoclear.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-sx-glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-tax-info.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-trans-assoc.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-print-check.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-price.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to gnc-plugin-page-budget.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-progress.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-new-user.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-lot-viewer.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-imap-editor.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-find-account.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-fincalc.glade
+
+2017-06-20 Robert Fewell 
+
+	* Files linked to dialog-commodities.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-options.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to gnc-date-format.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to gnc-tree-view-owner.glade
+
+2017-06-18 Robert Fewell 
+
+	* Fix up for incorrect glade file option
+
+2017-06-18 Robert Fewell 
+
+	* Change files linked to gnc-frequency.glade
+
+2017-06-18 Robert Fewell 
+
+	* Change recurrence.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-userpass.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-transfer.glade
+
+2017-06-18 Robert Fewell 
+
+	* Fix ups for dialog-commodity
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-tax-table.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-query-view.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-reset-warnings.glade
+
+2017-06-18 Robert Fewell 
+
+	* Change file dialog-totd.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-object-references.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-file-access.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-commodity.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-book-close.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to assistant-xml-encoding.glade
+
+2017-06-18 Robert Fewell 
+
+	* Change dialog-account.glade
+
+2017-06-18 Robert Fewell 
+
+	* Files linked to dialog-account.glade
+
+2017-06-17 Robert Fewell 
+
+	* Couple of corrections to previous commit.
+
+2017-06-17 Robert Fewell 
+
+	* Replace gtk_misc_set_alignment with own label alignment function
+
+2017-06-17 Robert Fewell 
+
+	* Replace gtk_scrolled_window_add_with_viewport
+
+2017-06-17 Robert Fewell 
+
+	* Change dialog buttons from using GKT_STOCK_ labels
+
+2017-06-17 Robert Fewell 
+
+	* Remove depreciated gtk_button_set_use_stock
+
+2017-06-16 John Ralls 
+
+	* Correctly store time64 0 in the SQL backend.
+
+2017-06-16 John Ralls 
+
+	* Clamp time64 values passed to GDateTime functions to the valid range.
+
+2017-06-16 Robert Fewell 
+
+	* Replace deprecated widgets in goffice
+
+2017-06-16 Robert Fewell 
+
+	* Correct corrupted line in gnc-account-sel.h
+
+2017-06-16 Robert Fewell 
+
+	* Change register Gtk horizontal and vertical widgets
+
+2017-06-16 Robert Fewell 
+
+	* Change all Gtk horizontal and vertical widgets
+
+2017-06-16 Robert Fewell 
+
+	* Change register GtkHbox widgets
+
+2017-06-16 Robert Fewell 
+
+	* Change all the GtkHbox widgets
+
+2017-06-16 Robert Fewell 
+
+	* Change all the GtkVBox widgets
+
+2017-06-16 Robert Fewell 
+
+	* Fix the tab label width update function to reflect changes
+
+2017-06-15 Robert Fewell 
+
+	* Replaced some deprecated widgets with the gtk3 equivalent
+
+2017-06-15 Robert Fewell 
+
+	* Fix Tab Labels
+
+2017-06-15 Robert Fewell 
+
+	* Replace some deprecated widgets in the register.
+
+2017-06-15 Robert Fewell 
+
+	* There were critical errors in trace file.
+
+2017-06-15 Robert Fewell 
+
+	* Replace deprecated widgets for GncDenseCal with gtk3 equivalents
+
+2017-06-15 Robert Fewell 
+
+	* Composite functions not required for GncDenseCal
+
+2017-06-15 Robert Fewell 
+
+	* Set the background of the GncDenseCal Widget
+
+2017-06-15 Robert Fewell 
+
+	* With Gtk3 it uses css to do the theming so change the file to load
+
+2017-06-04 christopherlam 
+
+	* Bug 776396 Further Fix
+
+2017-05-26 John Ralls 
+
+	* Bug 783095 - gnucash-2.6.16 segfaults on startup
+
+2017-05-21 Mike Evans 
+
+	* Change from deprecated gncEntrySetDate to gncEntrySetDateGDate. Again.
+
+2017-05-21 Mike Evans 
+
+	* Revert "Change from deprecated gncEntrySetDate to gncEntrySetDateGDate." Oops, more work required.
+
+2017-05-21 Mike Evans 
+
+	* Change from deprecated gncEntrySetDate to gncEntrySetDateGDate.
+
+2017-05-19 Mike Evans 
+
+	* Correct a typo.
+
+2017-05-18 Mike Evans 
+
+	* Use correct column for entry date.
+
+2017-05-16 Guy Taylor 
+
+	* Fix coredump in Python when using "get_namespaces"
+
+2017-05-16 Guy Taylor 
+
+	* Enable Python tests in Travis CI
+
+2017-05-13 Bert 
+
+	* Bug 776396 - Foreign currency reports, amounts are not aligned correctly
+
+2016-08-10 fell 
+
+	* Add XSU to iso-4217-currencies
+
+2017-05-03 Geert Janssens 
+
+	* Drop ifdeffed out code block
+
+2017-05-03 Geert Janssens 
+
+	* Bug 781634 - Alert on missing account currency when opening account
+
+2017-05-03 Geert Janssens 
+
+	* Properly handle import of reconcile state.
+
+2017-05-03 Geert Janssens 
+
+	* Document supported date formats in the saved csv settings
+
+2017-05-01 Geert Janssens 
+
+	* Use GncDate in csv importer
+
+2017-05-02 Geert Janssens 
+
+	* Add copy constructor and assignment operator to GncDate
+
+2017-04-29 Geert Janssens 
+
+	* Add comparison operators for GncDate
+
+2017-04-29 John Ralls 
+
+	* CMakeLists.txt: Remove Apple architecture settings.
+
+2017-04-16 John Ralls 
+
+	* Updated ar.po from ashalash at msn.com
+
+2017-04-29 fell 
+
+	* Fix wrong displayed position of the verbose flag in gnc-fq-dump
+
+2017-04-28 Geert Janssens 
+
+	* Convert gnc_dmy2timespec{,_end,_neutral} to use the equivalent GncDateTime constructor
+
+2017-04-28 Geert Janssens 
+
+	* Align day end time as used in the GncDateTime constructor and gnc_dmy2timespec_end
+
+2017-04-28 Geert Janssens 
+
+	* Fix John's remarks
+
+2017-04-28 Geert Janssens 
+
+	* Fix double free abort in gtest-gnc-datetime.cpp
+
+2017-04-21 Geert Janssens 
+
+	* Add constructor to create GncDate from string and predefined date format
+
+2017-04-22 Geert Janssens 
+
+	* Various small fixups in csv importer
+
+2017-04-28 Geert Janssens 
+
+	* Align cmake rational/numeric test invocation with Makefile based one
+
+2017-04-26 Geert Janssens 
+
+	* Fix autotools based build
+
+2017-04-20 Geert Janssens 
+
+	* Fix static code checker warnings about parameter definition in doxygen comments
+
+2017-04-20 Geert Janssens 
+
+	* Add GncDateTime constructor taking a GncDate as parameter
+
+2017-04-20 Geert Janssens 
+
+	* Swap GncDate and GncDateTime in preparation of a future commit
+
+2017-04-17 John Ralls 
+
+	* Work around googletest bug 920.
+
+2017-04-16 John Ralls 
+
+	* Merge branch 'PR140' into maint
+
+2017-04-16 John Ralls 
+
+	* Merge branch 'pr141'
+
+2017-04-16 Nitin Anand 
+
+	* Fix crash while saving scheduled transaction template
+
+2016-08-04 John Ralls 
+
+	* Adjust CMAKE_C_FLAGS for better release/debug behavior.
+
+2017-04-14 Geert Janssens 
+
+	* Gtk3: fix failing item-edit widget on sheets
+
+2017-04-14 Geert Janssens 
+
+	* Gtk3: fix register redrawing when the window is scrolled
+
+2017-04-11 Geert Janssens 
+
+	* Gtk3: Fix register not being drawn - item_edit still missing
+
+2017-04-11 Geert Janssens 
+
+	* Fix build with webkitgtk >= 2.8
+
+2017-03-31 John Ralls 
+
+	* Get links working.
+
+2017-03-31 John Ralls 
+
+	* Get WebKit2Gtk basics compiling and working.
+
+2017-03-23 John Ralls 
+
+	* Revert "Fix query period in test-account-get-trans-type-splits-interval."
+
+2017-02-27 John Ralls 
+
+	* Correct gnc-html-webkit.c indentation.
+
+2017-03-31 Geert Janssens 
+
+	* Gtk3: Replace obsolete functions
+
+2017-03-31 Geert Janssens 
+
+	* Temporarily disable deprecation warnings
+
+2017-02-27 John Ralls 
+
+	* Remove if-0-ed out code from gnc-html-webkit.c
+
+2015-08-25 Geert Janssens 
+
+	* Gtk3: fix direct access issue for entry widget in cell renderer mode
+
+2017-03-13 Geert Janssens 
+
+	* Gtk3: Convert GdkColor into GdkRGBA
+
+2017-03-13 Geert Janssens 
+
+	* Gtk3: replace expose_event size_request functions
+
+2015-08-29 Geert Janssens 
+
+	* Gtk3: Fix the remaining gtk direct access violations
+
+2015-08-24 Geert Janssens 
+
+	* Gtk3: adapt to changed callback function signature
+
+2015-08-23 Geert Janssens 
+
+	* Gtk3: use CSS style instead of old GtkStyle interface
+
+2017-04-10 John Ralls 
+
+	* Use the Mac Locale to find the account templates only when building with quartz.
+
+2017-04-10 Mike Alexander 
+
+	* Fix a minor typo.
+
+2017-04-10 Mike Alexander 
+
+	* Delete left over line from previous merge conflict.
+
+2017-04-10 Mike Alexander 
+
+	* Merge branch 'maint'
+
+2017-04-04 Mike Alexander 
+
+	* Fix the SWIG Guile wrapping of functions that have a "struct tm" parameter.
+
+2017-04-04 Mike Alexander 
+
+	* Calling sigfigs_denom with a zero crashes due to a divide by zero.
+
+2017-04-05 Mike Alexander 
+
+	* Add an XCode target to run the numeric unit tests and rename the main target to GnuCash.
+
+2017-04-04 Mike Alexander 
+
+	* Update XCode file lists and sort them alphabetically.
+
+2017-04-04 Mike Alexander 
+
+	* Fix a crash in scrub_sx_split_numeric introduced in b3eb9d0.
+
+2017-04-04 Mike Alexander 
+
+	* gnc_numeric_convert should return an invalid number unchanged instead of crashing.
+
+2017-04-08 John Ralls 
+
+	* Revert "Some instrumentation output..."
+
+2017-04-08 John Ralls 
+
+	* Change GTest annotations to use the right class name for GncInt128 tests.
+
+2017-04-07 John Ralls 
+
+	* Some instrumentation output for how much the numerator or denominator is shifted.
+
+2017-04-07 John Ralls 
+
+	* Better manage truncation in GncRational::round_to_numeric.
+
+2017-04-07 John Ralls 
+
+	* Fix GncInt128 maxbits to account for the flag bits.
+
+2017-04-07 John Ralls 
+
+	* Fix carrying to the wrong end of the lower leg in left shift.
+
+2017-04-07 John Ralls 
+
+	* Fix a magic number in GncInt128.
+
+2017-04-03 John Ralls 
+
+	* Save Changes Bug 780889 - Split-register transactions result in invalid...
+
+2017-04-02 John Ralls 
+
+	* Add some tests looking for a GncInt128 divide overflow problem.
+
+2017-04-02 John Ralls 
+
+	* Bug 780845 - link in github repo README file needs correction/editing
+
+2017-04-02 John Ralls 
+
+	* Bug 780845 - link in github repo README file needs correction/editing
+
+2015-08-22 Geert Janssens 
+
+	* Gtk3: Fix cursor handling
+
+2015-08-22 Geert Janssens 
+
+	* Gtk3: GtkObject has been removed
+
+2015-08-22 Geert Janssens 
+
+	* Switch to building with the gtk+-3.0 toolkit
+
+2017-03-13 Geert Janssens 
+
+	* GnucashSheet - drop unused variables
+
+2017-03-13 Geert Janssens 
+
+	* GnucashSheet - fix screen refresh
+
+2017-03-13 Geert Janssens 
+
+	* Fix two critical GObject warnings
+
+2017-03-13 Geert Janssens 
+
+	* ItemEdit - drop unused function
+
+2017-03-10 Geert Janssens 
+
+	* Extract the GnucashRegister widget into a separate file
+
+2017-03-10 Geert Janssens 
+
+	* Restore pasting in the item_edit
+
+2017-03-09 Geert Janssens 
+
+	* Rework GncItemEdit widget
+
+2017-03-09 Geert Janssens 
+
+	* Fix hidden scrollbars for itemlist type popup
+
+2017-03-09 Geert Janssens 
+
+	* Fix crash in previously unreached code
+
+2017-03-09 Geert Janssens 
+
+	* Create specialized popup items their respective source files
+
+2017-03-07 Geert Janssens 
+
+	* Reduce the cursor from a full widget to a simple gobject that tracks cursor coordinates
+
+2017-03-07 Geert Janssens 
+
+	* Rework gnucash-cursor
+
+2017-03-11 Geert Janssens 
+
+	* Reduce grid object from a complete widget to only two utility functions
+
+2017-03-11 Geert Janssens 
+
+	* Refactor divider line drawing some more to reduce duplicate code
+
+2017-03-11 Geert Janssens 
+
+	* Use cairo to redraw the grid widget
+
+2017-03-01 Geert Janssens 
+
+	* Replace all other uses of GnomeCanvas with standard gtk widgets
+
+2017-02-24 Geert Janssens 
+
+	* Convert gnc-header from GnomeCanvas to GtkLayout
+
+2017-03-30 John Ralls 
+
+	* Merge Ueli Neiderer's swift-transactiontxt branch into maint.
+
+2017-03-30 Ueli Niederer 
+
+	* Obey GNUcash coding style
+
+2017-03-30 Ueli Niederer 
+
+	* Added a preference to control import behaivour of transaction text
+
+2017-03-28 Ueli Niederer 
+
+	* Including the transaction text into the purpose text
+
+2017-03-28 John Ralls 
+
+	* Use qof_instance_set/get instead of g_object_set/get.
+
+2017-03-28 John Ralls 
+
+	* Merge branch 'maint'
+
+2017-03-26 Mike Alexander 
+
+	* Remove the xxx_with_error functions from Python bindings. They were removed from GnuCash in b199593 In January.
+
+2017-03-25 John Ralls 
+
+	* Release 2.6.16 (tag: 2.6.16)
+
+2017-03-25 John Ralls 
+
+	* Reduce the gate on get_random_gnc_numeric.
+
+2017-03-25 John Ralls 
+
+	* Update translations ca, nl, and sr from the translation project.
+
+2017-03-24 John Ralls 
+
+	* Bug 670731 - Future Value not working with Loan Scheduled transaction
+
+2017-03-23 John Ralls 
+
+	* Revert "Fix query period in test-account-get-trans-type-splits-interval."
+
+2017-03-24 fell 
+
+	* Update of de.po
+
+2017-03-24 fell 
+
+	* update de.po
+
+2017-03-24 fell 
+
+	* Use "Billing Information" as in other biz modules
+
+2014-12-18 Geert Janssens 
+
+	* Whitespace cosmetics
+
+2017-03-23 John Ralls 
+
+	* Bug 776247 - PriceEditor thinks Currency XXX is an actual currency...
+
+2017-03-23 fell 
+
+	* Fix a typo in my last commit
+
+2017-03-23 fell 
+
+	* Exlpain "Blank Transaction" to translators
+
+2017-03-23 Geert Janssens 
+
+	* Align a help string in two different files for easier translation
+
+2017-03-23 Robert Fewell 
+
+	* Bug388500 - Add option to remove deleted files from the history list
+
+2017-03-23 Geert Janssens 
+
+	* Disable tests when minimum glib2 requirement is not met
+
+2017-03-22 Geert Janssens 
+
+	* Bug 739571 - Small fixups for previous commits
+
+2016-02-13 Jesse Olmer 
+
+	* Bug 739571 - Matching imported transactions doesn't indicate previously matched entries
+
+2016-01-17 Jesse Olmer 
+
+	* Bug 739571 - Matching imported transactions doesn't indicate previously matched entries
+
+2017-03-22 fell 
+
+	* Update de.po
+
+2017-03-22 fell 
+
+	* Prepare update of de.po
+
+2017-03-16 fell 
+
+	* Add 2 translator comments to get a unique translation for 'Tax Report Options'
+
+2017-03-21 John Ralls 
+
+	* Save Changes Bug 776517 - Trial Balance Report:...
+
+2017-03-21 Geert Janssens 
+
+	* Bug 766630 - gui dialog for sorting transactions to accounts after aqbanking import broken
+
+2017-03-21 Geert Janssens 
+
+	* Resave dialog-import.glade without any real change
+
+2017-03-21 John Ralls 
+
+	* Bug 778208 - Scheduling 2nd, 3rd or 4th Wed doesn't seem to work.
+
+2017-03-18 Robert Fewell 
+
+	* Bug 603379 - Prevent changing some Account Options if it has transactions
+
+2017-03-18 Robert Fewell 
+
+	* Bug 603379 - Count the splits in an Account.
+
+2017-03-18 John Ralls 
+
+	* Merge en_GB budget->Budget into maint.
+
+2017-03-18 Simon Hollingshead 
+
+	* Consistently capitalise budget in en-GB menu items
+
+2017-03-18 John Ralls 
+
+	* Revert "Fix query period in test-account-get-trans-type-splits-interval."
+
+2017-03-17 John Ralls 
+
+	* Fix query period in test-account-get-trans-type-splits-interval.
+
+2017-03-18 John Ralls 
+
+	* Merge new Finnish translation into maint.
+
+2017-03-18 John Ralls 
+
+	* Update GnuCash version and PO date for Finnish translation.
+
+2017-03-17 John Ralls 
+
+	* Fix DST calculation error.
+
+2017-03-17 John Ralls 
+
+	* Fix query period in test-account-get-trans-type-splits-interval.
+
+2017-03-13 Tuomo Hartikainen 
+
+	* Update Finnish translation
+
+2017-03-17 Tuomo Hartikainen 
+
+	* Merge updated po template in fi.po
+
+2017-03-17 Geert Janssens 
+
+	* Add missing macros
+
+2017-03-16 fell 
+
+	* PR #134: Update local symbol of iso-4217-currency MUR
+
+2017-03-16 Geert Janssens 
+
+	* Fix a couple of other deprecated symbols (gtk/gdk 2.x still)
+
+2017-03-16 Geert Janssens 
+
+	* Handle deprecation of g_settings_list_keys in gio 2.46
+
+2017-03-16 Geert Janssens 
+
+	* Raise minimum required version of glib-2.0 to 2.40
+
+2017-03-16 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-03-11 Robert Fewell 
+
+	* Bug 779411 - jqplot fixes for piechart and syntax error.
+
+2017-03-13 Robert Fewell 
+
+	* Bug388500 - Add option to remove deleted files from the history list
+
+2017-03-16 Geert Janssens 
+
+	* Fixup last commit
+
+2017-03-11 Geert Janssens 
+
+	* Csv Import - drop another reference to the no longer used lib/stf
+
+2017-03-13 Geert Janssens 
+
+	* Csv Import - Fix doxygen comment
+
+2017-03-14 John Ralls 
+
+	* Fix up building on MinGW with autotools.
+
+2017-03-14 John Ralls 
+
+	* Adjust locale test so that it works on both Ubuntu and MacOS.
+
+2017-03-13 Christian Stimming 
+
+	* Online banking: Add output of bank messages that might occasionally be received.
+
+2017-03-13 John Ralls 
+
+	* Fix missing fi in configure.ac.
+
+2017-03-13 John Ralls 
+
+	* Require ICU.
+
+2017-03-12 John Ralls 
+
+	* Change 'uint' to 'uint32_t'.
+
+2017-03-11 Christoph Rohland 
+
+	* Fix logic error for discounts
+
+2017-03-10 Christoph Rohland 
+
+	* Fix taxinvoice for bill entries with taxes
+
+2017-03-08 Christoph Rohland 
+
+	* Let taxinvoice optionally show the net instead of the given price
+
+2017-03-11 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-03-09 Christoph Rohland 
+
+	* Charge back net value of bill entries in invoices
+
+2017-03-10 John Ralls 
+
+	* Fix failed unit test from previous commit.
+
+2017-03-10 John Ralls 
+
+	* Bug 779217 - Transactions rounded to 5 decimal places when opening file.
+
+2017-03-10 John Ralls 
+
+	* Bug 777949 - Accounts implicitly created in ledger attempt creation twice
+
+2017-03-09 John Ralls 
+
+	* Bug 776564 - Creating a scheduled transaction from an existing...
+
+2017-03-04 Geert Janssens 
+
+	* Allow only date entry for opening balances on new accounts
+
+2017-03-04 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-03-02 hcrohland 
+
+	* Revert the taxinvoice.scm changes
+
+2017-03-01 hcrohland 
+
+	* Make the net price option better compatible with master
+
+2017-02-03 hcrohland 
+
+	* Enable taxinvoice to show net price
+
+2017-03-01 Geert Janssens 
+
+	* Make older compilers happy by using std::isnan instead of isnan
+
+2017-03-01 Geert Janssens 
+
+	* Remove redundant gtk_widget_show_all call
+
+2017-02-20 Robert Fewell 
+
+	* Bug 778042 These are the script changes for jqplot reports.
+
+2017-02-20 Robert Fewell 
+
+	* Bug 778042 Change the way reports are loaded in conjunction with script changes.
+
+2017-02-20 Geert Janssens 
+
+	* Csv Import - Use GncNumeric rather than GncRational
+
+2017-02-21 Geert Janssens 
+
+	* Fix typo in GcnRational's + operator
+
+2017-02-21 Geert Janssens 
+
+	* Fix gnc-numeric locale test on travis
+
+2017-02-20 John Ralls 
+
+	* Prevent localizing the decimal point in gcc<5.
+
+2017-02-20 John Ralls 
+
+	* Merge fetaure-branch 'numeric', provides GncNumeric C++ API.
+
+2017-02-20 John Ralls 
+
+	* Fix Geert’s code review comments.
+
+2017-02-06 John Ralls 
+
+	* Fix documentation errors.
+
+2017-02-03 John Ralls 
+
+	* Relax comparison test for GncRational::round_to_numeric
+
+2017-02-03 John Ralls 
+
+	* Replace std::regex with boost::regex.
+
+2017-02-03 John Ralls 
+
+	* Add libgnc-qof to dependencies for test-numeric.
+
+2017-02-02 John Ralls 
+
+	* Fix indentation error.
+
+2017-02-02 John Ralls 
+
+	* Remove a commented-out diagnostic.
+
+2017-02-02 John Ralls 
+
+	* Make the GncRational and GncNumeric APIs mostly identical.
+
+2017-02-02 John Ralls 
+
+	* Change GncRational::round to GncRational::convert.
+
+2017-01-31 John Ralls 
+
+	* Make the rounding functions templates and move them to their own header.
+
+2017-01-31 John Ralls 
+
+	* Replace GncInt128’s flags variable with bit-stuffing in the high leg.
+
+2017-01-30 John Ralls 
+
+	* Convert GncRational to throw instead of using a status byte.
+
+2017-01-30 John Ralls 
+
+	* Reimplement gnc_numeric in terms of GncNumeric instead of GncRational.
+
+2017-01-30 John Ralls 
+
+	* Add GncRational test for GncRational::round_to_numeric().
+
+2017-01-30 John Ralls 
+
+	* Fix GncInt128 tests for older compilers.
+
+2017-01-30 John Ralls 
+
+	* Add GncRational(GncNumeric) constructor.
+
+2017-01-30 John Ralls 
+
+	* Extract new class GncNumeric.
+
+2017-01-30 John Ralls 
+
+	* Remove #ifdef __cplusplus from gnu-numeric.cpp
+
+2017-01-30 John Ralls 
+
+	* Fix GncInt128 shift operators when shift amount will clear a leg.
+
+2017-01-30 John Ralls 
+
+	* Declare GncInt128::div() const
+
+2017-01-30 John Ralls 
+
+	* Fix minor typos and whitespace issues.
+
+2017-01-30 John Ralls 
+
+	* Change signature of GncRational::round from taking a GncDenominator…
+
+2017-01-30 John Ralls 
+
+	* Move test-numeric from src/engine to src/libqof/qof.
+
+2017-01-30 John Ralls 
+
+	* Add GncRational::reduce() and GncRational::round_to_numeric().
+
+2017-01-30 John Ralls 
+
+	* Fix inverted subtraction.
+
+2017-01-30 John Ralls 
+
+	* Add guard macro to gnu-rational.hpp.
+
+2017-01-16 John Ralls 
+
+	* Untabify gnu-numeric.cpp.
+
+2017-01-16 John Ralls 
+
+	* Remove unused gnc_numeric_foo_with_error functions.
+
+2017-01-15 John Ralls 
+
+	* Implement basic arithmetic operators for GncRational.
+
+2017-01-14 John Ralls 
+
+	* Reorder test parameters so that the expected value is first.
+
+2017-01-14 John Ralls 
+
+	* Add an error parameter on the GncInt128 constructor.
+
+2017-01-14 John Ralls 
+
+	* Add GTest test program for GncRational.
+
+2017-01-14 John Ralls 
+
+	* Add explicit and correct default GncRational constructor.
+
+2017-02-20 John Ralls 
+
+	* Add ICU libraries on which Boost:locale is dependent to CSV-Import LINK_LIBRARIES.
+
+2017-02-20 Geert Janssens 
+
+	* Merge branch 'csv_imp_cpp'
+
+2017-02-20 Geert Janssens 
+
+	* Use boost::locale:conv:utf_to_uft instead of codecvt_utf8
+
+2017-02-20 Geert Janssens 
+
+	* Properly test for invalid dates (gnc-date C interface no longer throws - rightfully so)
+
+2017-02-20 Geert Janssens 
+
+	* Some ui refinement
+
+2017-02-20 Geert Janssens 
+
+	* Cleanup - use less ambiguous variable name for an iterator
+
+2017-02-20 Geert Janssens 
+
+	* Fix base account reset when an account column is selected
+
+2017-02-18 Geert Janssens 
+
+	* Recover separators or column_widths when juggling file format more than once
+
+2017-02-17 Geert Janssens 
+
+	* Prevent multi-byte characters from erroneously being split in fixed-width mode
+
+2017-02-15 Geert Janssens 
+
+	* Include glib.h as everywhere else
+
+2017-02-11 Geert Janssens 
+
+	* Remove some obsolete comments and commented out code
+
+2017-02-11 Geert Janssens 
+
+	* Trim newlines from csv data
+
+2017-02-10 Geert Janssens 
+
+	* Fix crash when adding columns by double-clicking the preview data
+
+2017-02-09 Geert Janssens 
+
+	* Fix settings loading and saving
+
+2017-02-08 Geert Janssens 
+
+	* Improve visual feedback when previewing importable data
+
+2017-02-06 Geert Janssens 
+
+	* Improve preview table handling
+
+2017-01-14 Geert Janssens 
+
+	* Use GncRational directly instead of gnc_numeric in gnc-trans-props
+
+2017-01-12 Geert Janssens 
+
+	* Prevent the user from setting an invalid settings name
+
+2016-12-30 Geert Janssens 
+
+	* Move column parsing earlier up the chain of events
+
+2016-12-28 Geert Janssens 
+
+	* Copyright updates
+
+2016-12-28 Geert Janssens 
+
+	* Add a reset member function to GncPreTrans and GncPreSplit
+
+2016-12-24 Geert Janssens 
+
+	* Make sure all lines are checked for errors, regardless of their skipped status
+
+2016-12-24 Geert Janssens 
+
+	* Isolate the gtk callbacks from the assistant class' member variables.
+
+2016-12-24 Geert Janssens 
+
+	* Consistently use gnucash dialogs instead of generic gtk ones
+
+2016-12-24 Geert Janssens 
+
+	* Use std::unique_ptr for the TxImport object for better memory management
+
+2016-12-24 Geert Janssens 
+
+	* Convert assistant struct into a real c++ class
+
+2016-12-23 Geert Janssens 
+
+	* Handle error skipping on the preview page as well and drop the custom page forwarder
+
+2016-12-22 Geert Janssens 
+
+	* Complete error checking on the preview page
+
+2016-12-20 Geert Janssens 
+
+	* Move account searching to GncTxImport as it's responsible for the data
+
+2016-12-20 Geert Janssens 
+
+	* Remove redundant code
+
+2016-12-20 Geert Janssens 
+
+	* Cleanup round - move functions up and down to group related ones
+
+2016-12-18 Geert Janssens 
+
+	* Cleanup round
+
+2016-12-17 Geert Janssens 
+
+	* Revisit csv settings
+
+2016-12-16 Geert Janssens 
+
+	* Revisit error checking on the preview page.
+
+2016-12-16 Geert Janssens 
+
+	* Move the base account selection to the preview page
+
+2016-12-16 Geert Janssens 
+
+	* Add account selector to the preview window
+
+2016-12-16 Geert Janssens 
+
+	* Some variable declaration cleanups
+
+2016-12-16 Geert Janssens 
+
+	* Make sure row coloring happens each time the preview is updated
+
+2016-12-16 Geert Janssens 
+
+	* Remove redundant check for valid column types
+
+2016-12-13 Geert Janssens 
+
+	* Revisit csv trans import settings handling
+
+2016-12-13 Geert Janssens 
+
+	* Drop fixed-format csv importer
+
+2016-12-13 Geert Janssens 
+
+	* Allow user to only select column_types that make sense in the current context
+
+2016-12-13 Geert Janssens 
+
+	* Drop balance column from csv importer
+
+2016-12-11 Geert Janssens 
+
+	* Adapt csv export format to new csv importer capabilities
+
+2016-12-11 Geert Janssens 
+
+	* Extend csv importer to be able to import multi-currency and stock transactions
+
+2016-12-11 Geert Janssens 
+
+	* Extend csv importer to be able to import voided transactions
+
+2016-12-11 Geert Janssens 
+
+	* Extend csv importer to be able to import reconcile states
+
+2016-12-11 Geert Janssens 
+
+	* Add additional check before creating splits or transactions
+
+2016-12-11 Geert Janssens 
+
+	* Defer testing boost:optionals until really needed Similarly only lookup book when really needed
+
+2016-12-11 Geert Janssens 
+
+	* Create trans/split props only when needed and have them keep their own value of date/currency format
+
+2017-01-14 Geert Janssens 
+
+	* Extend csv importer to be able to import split action fields
+
+2016-12-10 Geert Janssens 
+
+	* Avoid assigning empty or null char*'s to a std::string
+
+2016-12-10 Geert Janssens 
+
+	* csv import prefs - store coltypes as strings
+
+2016-12-08 Geert Janssens 
+
+	* Convert column_widths to a vector
+
+2016-12-08 Geert Janssens 
+
+	* Drop superfluous code that sets the default in case of an error.
+
+2016-12-08 Geert Janssens 
+
+	* Use std::vector to store column types, and a few other data type changes
+
+2016-12-05 Geert Janssens 
+
+	* Convert CsvTransSettings into a c++ class
+
+2017-01-14 Geert Janssens 
+
+	* Remove final dependencies on GOFFICE
+
+2016-12-03 Geert Janssens 
+
+	* Fix error handling in the multi-split case (and probaly in the other case as well)
+
+2016-12-02 Geert Janssens 
+
+	* Introduce multi-split imports in the csv importer
+
+2016-12-02 Geert Janssens 
+
+	* Rework csv import preview with additional cleanups
+
+2016-11-29 Geert Janssens 
+
+	* Fix memory leaks in the draft transactions object
+
+2016-12-11 Geert Janssens 
+
+	* Cleanup commit
+
+2016-11-29 Geert Janssens 
+
+	* Rework the intermediate properties storage
+
+2016-11-28 Geert Janssens 
+
+	* Refactor parse_to_trans into smaller functions
+
+2016-11-28 Geert Janssens 
+
+	* Add property structs for transaction vs split properties
+
+2016-11-28 Geert Janssens 
+
+	* Refactor pair into a tuple in preparation of extending it
+
+2016-11-28 Geert Janssens 
+
+	* Factor out balance calculating function
+
+2016-10-12 Geert Janssens 
+
+	* Drop unused parameter
+
+2016-10-11 Geert Janssens 
+
+	* Drop remaining GError boilerplate from the c++ importer
+
+2016-10-11 Geert Janssens 
+
+	* Replace GError usage in parse function with proper try catch blocks
+
+2016-10-10 Geert Janssens 
+
+	* Replace GError usage in file_format and load_file with proper try catch blocks
+
+2017-01-14 Geert Janssens 
+
+	* Throw in case date can't be parsed instead of returning -1 as date
+
+2016-10-10 Geert Janssens 
+
+	* Various small C++ and other cleanups
+
+2016-10-10 Geert Janssens 
+
+	* Use gnc-date functions while parsing date strings for consistent timezone handling
+
+2016-09-16 Geert Janssens 
+
+	* Migrate the glib based test case for GncTxImport to google-test
+
+2016-09-16 Geert Janssens 
+
+	* Use consistent name for importer class and its filename
+
+2016-09-15 Geert Janssens 
+
+	* Fix column sizing for fixed width data
+
+2016-09-15 Geert Janssens 
+
+	* Prevent crash when switching to fixed with in assistant
+
+2016-09-15 Geert Janssens 
+
+	* Readd a column for the error messages when reviewing parse errors
+
+2016-09-15 Geert Janssens 
+
+	* Return nullptr in case of invalid numeric field to allow proper error handling
+
+2016-09-15 Geert Janssens 
+
+	* Rearrange statements in gnc_csv_preview_update_assist
+
+2016-09-14 Geert Janssens 
+
+	* Use one common liststore for all the combocells in the preview header treeview
+
+2016-09-14 Geert Janssens 
+
+	* Some changes to adhere better to the gnucash coding guidelines
+
+2016-09-13 Geert Janssens 
+
+	* Drop fake test in fw tokenizer
+
+2016-09-13 Geert Janssens 
+
+	* Add test cases for tokenizer classes
+
+2016-09-13 Geert Janssens 
+
+	* Trim whitespace in case of fixed width input
+
+2016-09-10 Geert Janssens 
+
+	* Replace transactions GList with a std::multimap
+
+2016-09-10 Geert Janssens 
+
+	* Another round of small c to c++(11) conversions
+
+2016-09-10 Geert Janssens 
+
+	* Delay the test for a default account until it's needed
+
+2016-09-09 Geert Janssens 
+
+	* Fix memory management for the temporary trans properties
+
+2016-09-10 Geert Janssens 
+
+	* Reduce code duplication by reusing trans_add_split
+
+2016-09-09 Geert Janssens 
+
+	* Fix memory corruption bug
+
+2016-09-09 Geert Janssens 
+
+	* Refactor TransProperty stuff to a simple void*
+
+2016-09-08 Geert Janssens 
+
+	* Replace private data structure TransPropertyList with a std::map
+
+2016-07-05 Geert Janssens 
+
+	* Remove fake csv parsing test
+
+2016-07-05 Geert Janssens 
+
+	* Add some polish to csv_import_trans_file_chooser_confirm_cb
+
+2016-06-25 Geert Janssens 
+
+	* Prevent c++ name mangling on functions used as callbacks by gtk
+
+2016-06-25 Geert Janssens 
+
+	* csv-imp - use enum instead of strings to track user selected column types
+
+2016-06-12 Geert Janssens 
+
+	* Convert column type to name mapping into a std::map
+
+2016-06-12 Geert Janssens 
+
+	* Adapt assistant for c++ guid changes
+
+2016-01-30 Geert Janssens 
+
+	* Refactor csv assistant code to use GncCsvParseData class instead of gnc-csv-model code
+
+2016-06-07 Geert Janssens 
+
+	* Build assistant-csv-trans-import.c(pp) as c++
+
+2016-06-12 Geert Janssens 
+
+	* Introduce parse error state
+
+2016-06-12 Geert Janssens 
+
+	* Small local variable cleanups
+
+2016-06-07 Geert Janssens 
+
+	* C++ - use std::pair to store tokenized line together with its error message
+
+2016-01-31 Geert Janssens 
+
+	* C++11 Convert unscoped enum into scoped one
+
+2016-01-31 Geert Janssens 
+
+	* Use more C++11 features
+
+2016-02-08 Geert Janssens 
+
+	* Revert to boost.regex without ICU support
+
+2016-02-06 Geert Janssens 
+
+	* Redo parse_date function using boost regular expressions
+
+2016-01-28 Geert Janssens 
+
+	* Convert error_lines GList in a vector of strings
+
+2016-01-28 Geert Janssens 
+
+	* Replace stf based file parser with gnc-tokenizer based one
+
+2015-05-08 Geert Janssens 
+
+	* Use vector instead of GArray for column_types class member
+
+2016-01-23 Geert Janssens 
+
+	* Convert GncCsvParseData into a class
+
+2016-01-23 Geert Janssens 
+
+	* csv-imp - copy gnc-csv-model and make it build as c++
+
+2016-06-07 Geert Janssens 
+
+	* Add dummy tokenizer to be used when file format isn't known yet
+
+2016-06-12 Geert Janssens 
+
+	* Add functions to manipulate fixed width column positions
+
+2016-01-28 Geert Janssens 
+
+	* Add fixed width file parser based on boost::tokenize
+
+2016-01-26 Geert Janssens 
+
+	* Add csv file parser based on boost::tokenize
+
+2016-01-28 Geert Janssens 
+
+	* Introduce base class for parsing importable files
+
+2016-01-28 Geert Janssens 
+
+	* Whitespace and spelling corrections
+
+2017-01-14 Geert Janssens 
+
+	* Look for translatable strings in lib directory as well
+
+2017-01-14 Geert Janssens 
+
+	* Use internalized goffice parts in csv-import
+
+2016-01-26 Geert Janssens 
+
+	* Fix build issues with goffice imported sources
+
+2016-01-28 Geert Janssens 
+
+	* Internalize parts of the goffice code
+
+2016-01-27 Geert Janssens 
+
+	* Small amendements to gnc-csv-account-map
+
+2017-02-20 Geert Janssens 
+
+	* Yet another tweak to properly find GMOCK sources
+
+2017-02-18 John Ralls 
+
+	* Silence the no lock table warnings in test-backend-dbi.
+
+2017-02-18 John Ralls 
+
+	* Fix failure to drop the temp numeric table at the end of dbi_library_test.
+
+2017-02-18 John Ralls 
+
+	* Make gnc_dbi_safe_sync_all safer.
+
+2017-02-18 sdementen 
+
+	* add gnc_get_current_session to swig interface
+
+2017-02-16 John Ralls 
+
+	* Move begin_transaction in lock_database to include checking for the table…
+
+2017-02-16 John Ralls 
+
+	* Add SAVEPOINT support to enable nested gnc_dbi_transaction calls.
+
+2017-02-16 John Ralls 
+
+	* Use the transactional member functions instead of running queries directly.
+
+2017-02-15 John Ralls 
+
+	* Merge branch 'maint'
+
+2017-02-14 fell 
+
+	* Review of pull request #125 from Mechtilde
+
+2017-02-14 Frank H. Ellenberger 
+
+	* Merge pull request #125 from Mechtilde/TranslationDE
+
+2017-02-12 Mechtilde 
+
+	* msgmerge with gnucash-2.6.15.pot
+
+2016-12-26 Mechtilde 
+
+	* translation tip_of_the_day
+
+2017-02-12 fell 
+
+	* Improve comment about available languages
+
+2017-02-10 fell 
+
+	* Set a separate translator comment to avoid pulling the whole file header comment in POT
+
+2017-02-10 fell 
+
+	* Fix german language tag
+
+2017-02-10 fell 
+
+	* Update PACKAGE_BUGREPORT, set PACKAGE_URL
+
+2017-02-08 Geert Janssens 
+
+	* One more stab at properly discovering gtest/gmock
+
+2017-02-06 Geert Janssens 
+
+	* Fix cmake's gmock handling to work with Fedora packages
+
+2017-02-04 John Ralls 
+
+	* Make gnc_dbi_safe_sync_all safer.
+
+2017-02-04 John Ralls 
+
+	* Move the transaction-lock on obtaining the database lock earlier.
+
+2017-02-04 John Ralls 
+
+	* Add SAVEPOINT support to enable nested gnc_dbi_transaction calls.
+
+2017-02-04 John Ralls 
+
+	* Extract static gnc_dbi_transaction functions.
+
+2017-02-02 Geert Janssens 
+
+	* Optionally locate boost via environment variable BOOST_ROOT
+
+2017-02-02 Geert Janssens 
+
+	* Fix building gtest library on mingw
+
+2017-02-02 Geert Janssens 
+
+	* Make google test framework a mandatory build dependency
+
+2017-02-01 DIG 
+
+	* Small updates for Russian translation
+
+2017-02-01 Geert Janssens 
+
+	* Fake change to test mail script on code.gnucash.org
+
+2017-02-01 Geert Janssens 
+
+	* Drop callback that reloads report when a report tab is selected
+
+2017-02-01 Geert Janssens 
+
+	* Revert "Add call back to track page size changes"
+
+2017-02-01 Geert Janssens 
+
+	* Revert "Change report resizing when not in view"
+
+2017-02-01 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-02-01 Geert Janssens 
+
+	* Log javascript console messages to the trace file
+
+2017-02-01 Geert Janssens 
+
+	* Always use actual window size when calculating x-axis ticks for charts
+
+2017-02-01 Geert Janssens 
+
+	* Bug 777875 - Reports with charts are flickering in certain circumstances
+
+2017-01-30 Geert Janssens 
+
+	* Extend account color to all columns in the account hierarchy page
+
+2017-01-30 Geert Janssens 
+
+	* Fix duplicate widget names in gtkbuilder file
+
+2017-01-30 Geert Janssens 
+
+	* Drop with_html_engine option
+
+2017-01-30 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-01-28 Geert Janssens 
+
+	* Travis - fix failure to load some libraries while running scm tests
+
+2017-01-28 Geert Janssens 
+
+	* Bug 759934 - Tiny reports in HiDPI
+
+2017-01-27 Geert Janssens 
+
+	* Drop a couple of webkit related configure tests
+
+2017-01-26 D. Hugh Redelmeier 
+
+	* add comments to clarify that taxtxf.scm is US-specific
+
+2017-01-26 Pedro Albuquerque 
+
+	* Bug 777561 - Update pt.po to v. 2.6.15
+
+2016-12-27 Robert Fewell 
+
+	* Bug 516920 - Calendar Pop up disappears of the left side
+
+2017-01-16 klemens 
+
+	* spelling fixes
+
+2017-01-23 Geert Janssens 
+
+	* Merge branch 'maint'
+
+2017-01-16 klemens 
+
+	* spelling fixes
+
+2017-01-21 Pedro Albuquerque 
+
+	* Several spelling corrections of the pt_PT translation
+
+2017-01-17 Mike Evans 
+
+	* Make strings translatable in dialog-bi-import.c
+
+2017-01-15 Mike Evans 
+
+	* Bug 767032 - Bad invoices from importing "posted" needing currency conversion
+
+2017-01-14 John Ralls 
+
+	* Ensure that all GncDate and GncDateTime constructors are in try blocks.
+
+2017-01-14 John Ralls 
+
+	* Make GncDate and GncDateTime default constructors have the current day/time.
+
+2017-01-14 John Ralls 
+
+	* Fix crash when $TZ isn’t defined.
+
+2017-01-14 John Ralls 
+
+	* Actually checkout gtest 1.8.0 in travis tests.
+
+2017-01-13 John Ralls 
+
+	* Fix local timezone-dependent test.
+
+2017-01-13 John Ralls 
+
+	* Change last test in test-gnc-timezone to EXPECT_EQ so it will log the results.
+
+2017-01-13 John Ralls 
+
+	* Display failing test-gnc-timezone.log for troubleshooting.
+
+2017-01-13 John Ralls 
+
+	* Fix test failures from adding bad-date tests.
+
+2017-01-13 Geert Janssens 
 
-	* A few cleanups from the previous merge commit
+	* Travis - lock google test framework to 1.8.0 for reproducible tests
 
-2017-07-08 Geert Janssens 
+2017-01-13 Geert Janssens 
 
-	* Merge branch 'gtk3'
+	* Travis - skip testing on trunk branch
 
-2017-07-06 Robert Fewell 
+2017-01-12 Geert Janssens 
 
-	* Make the About dialog sizeable and format AUTHORS and DOCUMENTERS
+	* Enable google test on travis
 
-2017-07-04 John Ralls 
+2017-01-12 Geert Janssens 
 
-	* Merge CMake Distcheck from 'maint'.
+	* Fix signedness of certain gmock based tests
 
-2017-07-04 Robert Fewell 
+2017-01-12 John Ralls 
 
-	* Replace Gtk3.14 function gtk_icon_theme_add_builtin_icon
+	* Prevent leaking exceptions from gnc_dmy2timespec_neutral
 
-2017-07-04 Robert Fewell 
+2017-01-10 John Ralls 
 
-	* Missed this from previous commit
+	* Add note about setting GTEST cmake variables.
 
-2017-07-04 Robert Fewell 
+2017-01-10 Geert Janssens 
 
-	* Rearrange the pixmap folder to contain a hicolor directory structure
+	* Fix compiler warning about confusing indentation
 
-2017-06-06 Rob Gowin 
+2017-01-10 Geert Janssens 
 
-	* No need for make dist and distcheck when checking autotools build in cmake (gjgh/maint)
+	* Drop unused DEBUG_MEMORY macro
 
-2017-02-01 Rob Gowin 
+2017-01-07 Stefan Talpalaru 
 
-	* Implement 'dist', 'distcheck' and 'uninstall' targets for CMake
+	* configure: fix --disable-debug, --disable-profile and --disable-locale-specific-tax
 
-2017-06-26 Kuang-che Wu 
+2016-12-27 John Ralls 
 
-	* Fix import-export compile on windows
+	* Define _(X) to handle localization of GNC_COMMODITY_NS_CURRENCY.
 
-2017-07-03 Robert Fewell 
+2016-12-27 John Ralls 
 
-	* Missed specifying Gtk3.12 version for set_margin_end
+	* Bug 776494 - Wrong menu entry in Tip of the day
 
-2017-07-03 Robert Fewell 
+2016-12-15 John Ralls 
 
-	* Fix some entries in glade files that did not have id's
+	* Localize the word “CURRENCY” used in the commodity namespace selectors.
 
-2017-07-02 John Ralls 
+2016-12-15 John Ralls 
+
+	* Bug 773945 - Select Security Dialog Not User Friendly
+
+2016-12-18 John Ralls 
+
+	* Fix reference to SVN in README.
+
+2016-12-18 John Ralls 
+
+	* Fix stray line from maint merge.
+
+2016-12-18 John Ralls 
+
+	* Merge branch 'maint' after release 2.6.15.
+
+2016-12-17 John Ralls 
+
+	* Release 2.6.15 (tag: 2.6.15)
+
+2016-12-17 John Ralls 
+
+	* Update AUTHORS and DOCUMENTORS.
+
+2016-12-17 John Ralls 
+
+	* Update Danish and Serbian translations from the Translation Project.
+
+2016-12-17 Phil Davis 
+
+	* README typo
+
+2016-12-13 John Ralls 
+
+	* Bug 775912 - Tips of the Day shows content only once very 3 times
+
+2016-12-11 John Ralls 
+
+	* Remove QIF importer error “Dates earlier than 1970 are not supported”.
+
+2016-12-11 John Ralls 
+
+	* Bug 685329 - Crashes on non-existent date
+
+2016-12-11 John Ralls 
+
+	* Bug 772369 - Replace use of guile's internal date/time functions
+
+2016-12-11 John Ralls 
+
+	* Bug 773808 - Export Report Crash
+
+2016-12-10 John Ralls 
+
+	* Bug 772484 - Segfault on Transaction edit
+
+2016-12-10 John Ralls 
+
+	* Bug 774237 - FTBFS under some timezones (eg. GMT-14)
+
+2016-12-09 John Ralls 
+
+	* Bug 775385 - Confusing error message which includes the text "file file"
+
+2016-12-09 John Ralls 
+
+	* Bug 775368 - "Average cost" price source problem
+
+2016-12-09 John Ralls 
+
+	* Change the default price-source from Average Cost to Nearest in Time.
+
+2016-12-09 John Ralls 
+
+	* Calculate rates only for buy transactions in the report commodity for cost totals.
+
+2016-12-09 Geert Janssens 
+
+	* Add code to keep the chart dynamically resizable when exported
+
+2016-12-09 Geert Janssens 
+
+	* Drop DOCTYPE header altogether.
+
+2016-12-04 John Ralls 
+
+	* Single functions for gnc:make-exchange-alist and gnc:get-exchange-totals.
+
+2016-12-01 John Ralls 
+
+	* Move checks for no split amount and trading accounts to get-match-commodity-splits.
+
+2016-12-01 John Ralls 
+
+	* Clean up whitespace in commodity-utilities.scm.
+
+2016-12-06 John Ralls 
 
 	* Merge branch 'maint'
 
-2017-07-02 John Ralls 
+2016-12-06 Ryan Tucker 
 
-	* Some more translations from the TP. (tag: 2.6.17b)
+	* fix missing chmod +x in configure.ac
 
-2017-07-02 Robert Fewell 
+2016-12-01 Robert Fewell 
 
-	* Fix corrupted Gtk2 aqbanking glade file
+	* Update the saved reports to 2.8 and old to 2.4
 
-2017-07-02 Robert Fewell 
+2016-12-01 Robert Fewell 
 
-	* Missed a preference option from the aqbanking glade file
+	* Missing comma in tm answers structure
 
-2017-07-02 Geert Janssens 
+2016-11-28 Robert Fewell 
 
-	* Merge branch 'fix-win-compile' of https://github.com/kcwu/gnucash
+	* Fix error when closing application
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Change the relative column to a pixbuf so it looks like find account
+	* Use new options-fancy-date to retrieve date format
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Fixup for gnc-gui-query.c, invalid cast
+	* Update the Fancy Date Format
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Remove Gtk3.14 deprecated function, it does not do any thing
+	* Add the ability to delete a path from options
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Replace deprecated Gtk3.16 gtk_override_background_color
+	* Add missing liststore to preference list
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Replace deprecated Gtk3.16 functions to change colour.
+	* Change daily-reports.scm to use new plot size
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Replace deprecated Gtk3.16 function gtk_widget_override_font
+	* Change price-scatter.scm to use new plot size
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Replace gtk_alignment in various functions
+	* Change net-linechart.scm to use the new plot size
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Replace deprecated Gtk3.14 function gtk_arrow_new with an icon
+	* Change net-barchart.scm to use new plot size
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Replace deprecated Gtk3.16 function in dialog-account.c
+	* Fix general-ledger.scm
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Add css style context to various widgets so they can easily be changed
+	* Change average-balance.scm to use new plot sizes
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Add css style context to various widgets so they can easily be changed
+	* Change account-piecharts and html-piechart
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Add css style context to various widgets so they can easily be changed
+	* Fix account-piechart.scm for guile 1.8.x
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Add function to add css style context to a widget
+	* Budget Chart changes
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Use the new preference to control icons and labels on buttons
+	* Update category-barchart to reflect changes
 
-2017-07-02 Robert Fewell 
+2016-11-28 Robert Fewell 
 
-	* Add grid line preference to various tree views
+	* Change plot-size-option to use a pair
 
-2017-07-02 Robert Fewell 
+2016-12-04 John Ralls 
 
-	* Tweak the tab labels to add left and right margins
+	* Bug 775567 - Importing QIF file from PayPal crashes GnuCash 2.6.14 on Windows XP service pack 3
 
-2017-07-02 Robert Fewell 
+2016-12-03 John Ralls 
 
-	* Add new preference to show tree view grid lines
+	* Prevent crash when there's an error loading a qif import file.
 
-2017-07-01 John Ralls 
+2016-12-03 John Ralls 
 
-	* Re-release 2.6.17 (tag: 2.6.17a)
+	* Stop saving all of the currencies in xml files.
 
-2017-07-01 John Ralls 
+2016-12-03 Geert Janssens 
 
-	* Release 2.6.17 (tag: 2.6.17)
+	* Fix double registration of backends
 
-2017-06-30 John Ralls 
+2016-12-02 John Ralls 
 
-	* Update translations from the translation project.
+	* Fix xml save crash.
 
-2017-06-29 Mike Evans 
+2016-11-19 Robert Fewell 
 
-	* Bug 784317 - typo in 'import customers or vendors from text file' dialog
+	* Bug 516920 Scheduled trasaction calendar popup off screen
 
-2017-06-28 Robert Fewell 
+2016-11-30 Geert Janssens 
 
-	* Minor fixups to the assistant-csv-trans-import glade file
+	* Fix compiler warning about misleading indentation
 
-2017-06-28 Robert Fewell 
+2016-11-28 John Ralls 
 
-	* Replace deprecated gtk_image_menu_item in gnumeric popup
+	* Third interim merge of 'c++-backend'
 
-2017-06-28 Robert Fewell 
+2016-11-28 John Ralls 
 
-	* Fix error of invalid cast to GTK_COMBO_BOX in trans importer
+	* Convert QofBackend to a C++ class and the backend class hierarchy into C++.
 
-2017-06-28 Robert Fewell 
+2016-11-28 John Ralls 
 
-	* Replace deprecated render_icon_pixbuf in dialog-print-check
+	* Remove need for  gnc_dbi_safe_sync_all to be a friend of GncDbiSqlConnection.
 
-2017-06-27 Robert Fewell 
+2016-11-27 John Ralls 
 
-	* Rename use of icon defines to reflect changes in icon.h
+	* Rename qofbackend-p.h and qofbackend.cpp
 
-2017-06-27 Robert Fewell 
+2016-11-21 John Ralls 
 
-	* Change the way icons are loaded and the corresponding define names
+	* Extract class GncXmlBackend from gnc-backend-xml.cpp to gnu-xml-backend.cpp.
 
-2017-06-27 Robert Fewell 
+2016-11-20 John Ralls 
 
-	* Change some functions to use icon names instead of stock id's
+	* Change struct FileBackend to class XmlBackend and rename all variables.
 
-2017-06-26 Robert Fewell 
+2016-11-17 John Ralls 
 
-	* Replace GTK_STOCK_INDEX, _YES and _APPLY with icon names.
+	* Remove tabs from io-gncxml-v2.h.
 
-2017-06-26 Robert Fewell 
+2016-11-28 Geert Janssens 
 
-	* Replace GTK_STOCK_PRINT_PREVIEW with icon name "document-print-preview"
+	* Fix report html header
 
-2017-06-26 Robert Fewell 
+2016-11-24 Geert Janssens 
 
-	* Replace GTK_STOCK_CANCEL with icon name "process-stop"
+	* Fix hard-coded reference to saved-reports-x.y file
 
-2017-06-26 Robert Fewell 
+2016-11-24 Geert Janssens 
 
-	* Replace GTK_STOCK_CONVERT with two icon names
+	* Merge branch 'maint'
 
-2017-06-26 Robert Fewell 
+2016-11-18 John Ralls 
 
-	* Missed some replace GTK_STOCK_... images with there equivalent icon name
+	* Fix another missing include <algorithm>.
 
-2017-06-26 Robert Fewell 
+2016-11-18 John Ralls 
 
-	* Missed changing some stock labels on buttons to icon names
+	* Add brackets around array instantion inside initializer list.
 
-2017-06-26 Robert Fewell 
+2016-11-18 John Ralls 
 
-	* Replace GTK_STOCK_... images with there equivalent icon name
+	* Remove EXTRA_DIST reference to as-scrub-includes.m4.
 
-2017-06-26 Robert Fewell 
+2016-11-18 John Ralls 
 
-	* Missed changing some stock labels on some buttons
+	* Remove std::move call that defeats RVO.
 
-2017-06-25 John Ralls 
+2016-11-18 John Ralls 
 
-	* Bug 782274 - Transactions produced by Transfer Funds or Process...
+	* Sync POTFILES.in with files added and removed by c++-backend.
 
-2017-06-26 Kuang-che Wu 
+2016-11-17 John Ralls 
 
-	* Fix import-export compile on windows
+	* Fix bad time format.
 
-2017-06-25 Robert Fewell 
+2016-11-17 John Ralls 
 
-	* Replace deprecated functions in gnc_cell_renderer_date
+	* Fix Travis build errors.
 
-2017-06-25 Robert Fewell 
+2016-11-17 John Ralls 
 
-	* Replace deprecated function to get mouse pointer position
+	* Second interim merge of c++-backend.
 
-2017-06-24 John Ralls 
+2016-11-17 John Ralls 
 
-	* Bug 782897 - Stock Split Assistant crashes GnuCash if you enter a New...
+	* Remove two unnecessary local variable declarations.
 
-2017-06-24 Robert Fewell 
+2016-11-15 John Ralls 
 
-	* GtkTreeView rules_hint is deprecated after version 3.14
+	* Convert foo_needing_parents to std::vector and its loops to std::remove_if.
 
-2017-06-24 Robert Fewell 
+2016-11-14 John Ralls 
 
-	* Replace deprecated widget_render_icon function in print-check
+	* Replace GStrings with std::strings.
 
-2017-06-23 Robert Fewell 
+2016-11-16 Robert Fewell 
 
-	* Replace GtkTable with GtkGrid in the register
+	* Changed the default value for date format
 
-2017-06-23 Robert Fewell 
+2016-11-16 Robert Fewell 
 
-	* Replace deprecated size_request in register date-picker
+	* Fix check printing custom preference value
 
-2017-06-23 Robert Fewell 
+2016-11-16 Robert Fewell 
 
-	* Replace deprecated menu function in gnc-csv-gnumeric-popup.c
+	* Correct the default options if default invalid
 
-2017-06-23 Robert Fewell 
+2016-11-16 Robert Fewell 
 
-	* Replace deprecated size_request in gnc-tree-view.c
+	* Add an unset option to date-format
 
-2017-06-23 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Replace deprecated gtk_rc... functions in gnc-tree-view_split-reg.c
+	* Added a default currency to the currency option
 
-2017-06-23 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Replace deprecated functions in gnc-date-edit.c
+	* Add plot size option for future compatibility
 
-2017-06-23 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Replace deprecated functions in gnc-combott.c
+	* Fix warning from glib when saving reports.
 
-2017-06-23 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Replace deprecated font function in gnc-report.c
+	* Change report resizing when not in view
 
-2017-06-23 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Glade GUI adds a has_padding property to the action area which is wrong
+	* Forgot to add the png file to previous commit
 
-2017-06-23 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Fix up, box should be a GtkWidget
+	* Add an image for the report tab
 
-2017-06-22 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Files linked to assistant-loan.glade
+	* Change the reload to include using web_view_reload
 
-2017-06-22 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Files linked to dialog-import.glade
+	* Track visibility of the view scroll bars
 
-2017-06-22 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Files linked to dialog-account-picker.glade
+	* Add progress bar updates for reload / Update
 
-2017-06-22 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Convert gtktable to grid in assistant-qif-import
+	* Add call back to track page size changes
 
-2017-06-22 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Files linked to assistant-csv-trans-import.glade
+	* Stop the progress bar changing height
 
-2017-06-22 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Fix up for to align button or account import
+	* Add idle function to load report
 
-2017-06-21 Robert Fewell 
+2016-11-15 Robert Fewell 
 
-	* Files linked to assistant-csv-account-import.glade
+	* Remove macros/as-scrub-include.m4 from makefile
 
-2017-06-21 Robert Fewell 
+2016-11-13 John Ralls 
 
-	* Files linked to assistant-csv-export.glade
+	* Move gnc_sql_save_commodity to GncSqlBackend, with some restructuring.
 
-2017-06-21 Robert Fewell 
+2016-11-13 John Ralls 
 
-	* Files linked to assistant-acct-period.glade
+	* Remove gnc-backend-sql.h and gnc-backend-sql.cpp.
 
-2017-06-21 Robert Fewell 
+2016-11-13 John Ralls 
+
+	* Move 3 utility functions from gnc-backend-sql to gnc-sql-column-table-entry.
+
+2016-11-13 John Ralls 
+
+	* Move gnc_sql_do_db_operation and gnc_sql_object_is_it_in_db into GncSqlBackend.
+
+2016-11-13 John Ralls 
+
+	* Remove unused duplicate source file.
+
+2016-11-13 Geert Janssens 
+
+	* Fix make check after commit 673888dee7c
+
+2016-11-12 Geert Janssens 
+
+	* Bug 770364 - Sign of Value in Lots in Account window seems inconsistent
+
+2016-11-12 Geert Janssens 
+
+	* Use G_MAXINT64 instead of 0 to indicate an invalid date
+
+2016-11-11 Geert Janssens 
+
+	* Show empty business splits in lot viewer
+
+2016-11-11 Geert Janssens 
+
+	* Check more splits while running check & repair on business accounts
+
+2016-11-11 Geert Janssens 
+
+	* Business check & repair - correct lot invoice state
+
+2016-11-09 Geert Janssens 
+
+	* Various small improvements to check & repair on business accounts
+
+2016-11-06 Geert Janssens 
+
+	* When juggling business splits while scrubbing set both value and amount
+
+2016-11-06 Geert Janssens 
+
+	* Update progress bar while running Check & Repair
+
+2016-11-09 Geert Janssens 
+
+	* Remove lot from account while deleting the lot
+
+2016-11-10 John Ralls 
+
+	* Ensure that the Namespace combo box is initialized to a valid iter.
+
+2016-11-06 John Ralls 
+
+	* Fix DBI crash when URL lacks user and password.
+
+2016-11-06 John Ralls 
 
-	* Files linked to assistant-stock-split.glade
+	* Remove no-longer-necessary GncSqlBackend parameter.
 
-2017-06-21 Robert Fewell 
+2016-11-06 John Ralls 
 
-	* Files linked to assistant-hierarchy.glade
+	* Replace GncSqlBackend::time64_to_string() with GncDateTime::format_zulu().
 
-2017-06-21 Geert Janssens 
+2016-11-06 John Ralls 
 
-	* Fix commodity namespace tests
+	* New function GncDateTime::format_zulu(), makes time string in GMT.
 
-2017-06-20 Geert Janssens 
+2016-11-03 John Ralls 
 
-	* Stop writing commodity namespaces to xml files in gnucash 1.8 compatible way
+	* Replace C API with C++ API for functions used by GncSqlDbiBackend.
 
-2017-06-20 Geert Janssens 
+2016-11-01 John Ralls 
 
-	* Merge branch 'maint'
+	* Separate SQL backend classes into their own header and source files.
 
-2017-06-20 Geert Janssens 
+2016-10-30 John Ralls 
 
-	* Bug 603379 - Prevent changing some Account Options if it has transactions - followup
+	* Distinguish variables of various backend types by naming.
 
-2017-06-20 John Ralls 
+2016-11-07 John Ralls 
 
-	* Fix Travis Failure
+	* Allow PRId64 & PRIu64 to work on MingGW in gnc-backend-dbi.cpp.
 
-2017-06-20 John Ralls 
+2016-10-29 John Ralls 
 
-	* Merge branch 'maint'
+	* Interim merge of c++-backend to expose C++ interface.
 
-2017-06-20 Robert Fewell 
+2016-10-29 John Ralls 
 
-	* This is minor change to eliminate the spaces in dialog names
+	* Fix review comment errors.
 
-2017-06-20 Robert Fewell 
+2016-10-29 John Ralls 
 
-	* Remove the aqbanking preferences from this gtk2 glade file
+	* Fix another initializer list error.
 
-2017-06-20 Robert Fewell 
+2016-10-28 John Ralls 
 
-	* Create a new glade for aqbanking preferences as this now uses a grid
+	* Fix unsigned-signed comparison mismatch.
 
-2017-06-20 Robert Fewell 
+2016-10-28 John Ralls 
 
-	* Files linked to dialog-preferences.glade
+	* Initialize a variable to appease travis-ci.
 
-2017-06-20 Robert Fewell 
+2016-10-28 John Ralls 
 
-	* Files linked to dialog-customer-import-gui.glade
+	* Fix two C++11 initializer list errors.
 
-2017-06-20 Robert Fewell 
+2016-10-25 John Ralls 
 
-	* Files linked to dialog-bi-import-gui.glade
+	* Fix passing std::string to PWARN.
 
-2017-06-20 Robert Fewell 
+2016-08-09 John Ralls 
 
-	* Files linked to dialog-report.glade
+	* Bug 769115 - db name isn't escaped well
 
-2017-06-20 Robert Fewell 
+2016-08-09 John Ralls 
 
-	* Changes to dialog-custom-report.glade
+	* Use GncDbiProvider::get_table_list instead of calling out to libdbi.
 
-2017-06-20 Robert Fewell 
+2016-07-29 John Ralls 
 
-	* Files linked to dialog-search.glade
+	* Replace g_str functions in dbi_library_test with std::stringstream.
 
-2017-06-20 Robert Fewell 
+2016-07-29 John Ralls 
 
-	* Files linked to business-prefs.glade
+	* DBI: Convert all of the gchar to char, remove a few gratuitous g_funcs.
 
-2017-06-20 Robert Fewell 
+2016-07-29 John Ralls 
 
-	* Change business-options-gnome.glade
+	* Combine Postgres and MySql gnc_dbi_session_begin into a single template.
 
-2017-06-20 Robert Fewell 
+2016-07-29 John Ralls 
 
-	* Files linked to dialog-vendor.glade
+	* Move creation of the provider to GncDbiSqlConnection's constructor.
 
-2017-06-20 Robert Fewell 
+2016-07-29 John Ralls 
 
-	* Files linked to dialog-payment.glade
+	* Make conn_setup and the error handler functions templates on DbType.
 
-2017-06-20 Robert Fewell 
+2016-07-28 John Ralls 
 
-	* Files linked to dialog-order.glade
+	* Make gnc_lock_database a GncDbiSqlConnection member function.
 
-2017-06-20 Robert Fewell 
+2016-07-28 John Ralls 
 
-	* Files linked to dialog-job.glade
+	* Change parameter of save_may_clobber_data from QofBackend to dbi_conn.
 
-2017-06-20 Robert Fewell 
+2016-07-26 John Ralls 
 
-	* Files linked to dialog-invoice.glade
+	* Templatize the session_begin functions and new_backend().
 
-2017-06-20 Robert Fewell 
+2016-07-26 John Ralls 
 
-	* Files linked to dialog-employee.glade
+	* Make sure that all of the GncDbiProviderImpl functions are in the right file.
 
-2017-06-20 Robert Fewell 
+2016-07-26 John Ralls 
 
-	* Files linked to dialog-date-close.glade
+	* Extract functions conn_setup and create_database.
 
-2017-06-20 Robert Fewell 
+2016-07-26 John Ralls 
 
-	* Files linked to dialog-customer.glade
+	* Extract-function conn_test_dbi_library.
 
-2017-06-20 Robert Fewell 
+2016-07-26 John Ralls 
 
-	* Files linked to dialog-choose-owner.glade
+	* Don't leak the quoted string returned from dbi_conn_quote_string_copy.
 
-2017-06-20 Robert Fewell 
+2016-07-26 John Ralls 
 
-	* Files linked to dialog-billterms.glade
+	* Get rid of gotos.
 
-2017-06-20 Geert Janssens 
+2016-07-26 John Ralls 
 
-	* Properly define the template namespace rather than using a local string everywhere
+	* Reformat adjust_sql_options a bit to reduce nesting.
 
-2017-06-16 Geert Janssens 
+2016-07-26 John Ralls 
 
-	* Bug 781634 followup - separate translatable commodity namespace strings from those uses in storage
+	* Abstract setting database string-value options to function set_options.
 
-2017-06-20 Robert Fewell 
+2016-07-25 John Ralls 
 
-	* Files linked to gnc-plugin-page-register2.glade
+	* Separate DBI classes into their own files.
 
-2017-06-20 Robert Fewell 
+2016-07-24 John Ralls 
 
-	* File linked to gnc-plugin-page-register.glade
+	* Convert upgrade_table to member, remove some convenience functions.
 
-2017-06-20 Robert Fewell 
+2016-07-24 John Ralls 
 
-	* Files linked to window-reconcile.glade
+	* Remove a bunch of free functions already implemented as GncSqlBackend members.
 
-2017-06-20 Robert Fewell 
+2016-07-24 John Ralls 
 
-	* Files linked to window-autoclear.glade
+	* Remove some GList and GSList uses from tests.
 
-2017-06-20 Robert Fewell 
+2016-07-24 John Ralls 
 
-	* Files linked to dialog-sx-glade
+	* Rework gnc_sql_append_guid_list_to_sql to eliminate GString and GList.
 
-2017-06-20 Robert Fewell 
+2016-07-23 John Ralls 
 
-	* Files linked to dialog-tax-info.glade
+	* Replace GHashTable in GncSqlConnection with a std::vector.
 
-2017-06-20 Robert Fewell 
+2016-07-23 John Ralls 
 
-	* Files linked to dialog-trans-assoc.glade
+	* Replace std::vector<std::string> with StrVec.
 
-2017-06-20 Robert Fewell 
+2016-07-23 John Ralls 
 
-	* Files linked to dialog-print-check.glade
+	* Make conn_table_operation and add_columns_ddl members of GncDbiSqlConnection.
 
-2017-06-20 Robert Fewell 
+2016-07-21 John Ralls 
 
-	* Files linked to dialog-price.glade
+	* Convert GncSqlBackend and GncDbiBackend into a class hierarchy.
 
-2017-06-20 Robert Fewell 
+2016-07-18 John Ralls 
 
-	* Files linked to gnc-plugin-page-budget.glade
+	* Minimally document GncDbiResult.
 
-2017-06-20 Robert Fewell 
+2016-07-18 John Ralls 
 
-	* Files linked to dialog-progress.glade
+	* Pass ownership of the dbi_conn to GncDbiSqlConnection.
 
-2017-06-20 Robert Fewell 
+2016-07-18 John Ralls 
 
-	* Files linked to dialog-new-user.glade
+	* New function GncSqlConnection::dberror().
 
-2017-06-20 Robert Fewell 
+2016-07-18 John Ralls 
 
-	* Files linked to dialog-lot-viewer.glade
+	* Use the right include delineators, it's not in the current source dir.
 
-2017-06-20 Robert Fewell 
+2016-07-18 John Ralls 
 
-	* Files linked to dialog-imap-editor.glade
+	* Move GncDbiSqlConnection into a separate file.
 
-2017-06-20 Robert Fewell 
+2016-07-18 John Ralls 
 
-	* Files linked to dialog-find-account.glade
+	* Delete unused or duplicated member variables from GncSqlBackend & GncDbiBackend.
 
-2017-06-20 Robert Fewell 
+2016-07-18 John Ralls 
 
-	* Files linked to dialog-fincalc.glade
+	* Remove unused/never implemented QofBackend functions.
 
-2017-06-20 Robert Fewell 
+2016-07-16 John Ralls 
 
-	* Files linked to dialog-commodities.glade
+	* Remove no-longer-needed gnc_table_slist_free.
 
-2017-06-18 Robert Fewell 
+2016-07-16 John Ralls 
 
-	* Files linked to dialog-options.glade
+	* Templatize QofDbiBackendProvider.
 
-2017-06-18 Robert Fewell 
+2016-07-16 John Ralls 
 
-	* Files linked to gnc-date-format.glade
+	* Convert struct provider_functions_t into virtual class GncDbiProvider.
 
-2017-06-18 Robert Fewell 
+2016-07-16 John Ralls 
 
-	* Files linked to gnc-tree-view-owner.glade
+	* Rename gnc-backend-dbi-priv.h to gnc-backend-dbi.hpp.
 
-2017-06-18 Robert Fewell 
+2016-07-03 John Ralls 
 
-	* Fix up for incorrect glade file option
+	* Delete some no-longer (or in some cases never) used functions.
 
-2017-06-18 Robert Fewell 
+2016-06-18 John Ralls 
 
-	* Change files linked to gnc-frequency.glade
+	* Convert GncSqlConnection to a C++ class.
 
-2017-06-18 Robert Fewell 
+2016-06-18 John Ralls 
 
-	* Change recurrence.glade
+	* Use a std::unique_ptr for GncSqlStatement for better memory management.
 
-2017-06-18 Robert Fewell 
+2016-06-17 John Ralls 
 
-	* Files linked to dialog-userpass.glade
+	* gnc-backend-dbi.cpp: NULL -> nullptr.
 
-2017-06-18 Robert Fewell 
+2016-06-17 John Ralls 
 
-	* Files linked to dialog-transfer.glade
+	* Replace the ptr-to-func GncSqlObjectBackend struct with a class hierarchy.
 
-2017-06-18 Robert Fewell 
+2016-06-09 John Ralls 
 
-	* Fix ups for dialog-commodity
+	* Move GncSqlColumnTypeHandler functions into GncSqlColumnTableEntry.
 
-2017-06-18 Robert Fewell 
+2016-05-31 John Ralls 
 
-	* Files linked to dialog-tax-table.glade
+	* Change the object type string defines to an enum.
 
-2017-06-18 Robert Fewell 
+2016-05-09 John Ralls 
 
-	* Files linked to dialog-query-view.glade
+	* Convert GncSqlStatement to a virtual class.
 
-2017-06-18 Robert Fewell 
+2016-05-09 John Ralls 
 
-	* Files linked to dialog-reset-warnings.glade
+	* Create a new set_parameter template function to reduce repetition.
 
-2017-06-18 Robert Fewell 
+2016-04-09 John Ralls 
 
-	* Change file dialog-totd.glade
+	* Reimplement row retrieval as an iterator on GncSqlResults.
 
-2017-06-18 Robert Fewell 
+2016-08-07 John Ralls 
 
-	* Files linked to dialog-object-references.glade
+	* Don't override an already-set QofBackend error.
 
-2017-06-18 Robert Fewell 
+2016-03-27 John Ralls 
 
-	* Files linked to dialog-file-access.glade
+	* Make GncSqlRow a class and replace GValues with typed transfer functions.
 
-2017-06-18 Robert Fewell 
+2016-03-26 John Ralls 
 
-	* Files linked to dialog-commodity.glade
+	* Remove tabs from gnc-backend-sql*.
 
-2017-06-18 Robert Fewell 
+2016-03-11 John Ralls 
 
-	* Files linked to dialog-book-close.glade
+	* Fix potential dereference error.
 
-2017-06-18 Robert Fewell 
+2016-03-12 John Ralls 
 
-	* Files linked to assistant-xml-encoding.glade
+	* Combine add_colname_to_list and add_gvalue_to_slist into single function add_value_to_vec.
 
-2017-06-18 Robert Fewell 
+2016-03-12 John Ralls 
 
-	* Change dialog-account.glade
+	* Make GncSqlColumnTableEntry arrays into std::vectors.
 
-2017-06-18 Robert Fewell 
+2016-02-28 John Ralls 
 
-	* Files linked to dialog-account.glade
+	* Replace heap-allocate GncSqlColumnInfo GList with on-stack std::vector.
 
-2017-06-17 Robert Fewell 
+2016-02-28 John Ralls 
 
-	* Couple of corrections to previous commit.
+	* Change GncSqlColumnInfo::m_null_allowed to m_not_null and invert logic.
 
-2017-06-17 Robert Fewell 
+2016-02-28 John Ralls 
 
-	* Replace gtk_misc_set_alignment with own label alignment function
+	* Provide constructors for GncSqlColumnInfo, change variable names to m_ prefix.
 
-2017-06-17 Robert Fewell 
+2016-08-04 John Ralls 
 
-	* Replace gtk_scrolled_window_add_with_viewport
+	* Replace qof_object_foo_backend with c++ native containers.
 
-2017-06-17 Robert Fewell 
+2016-10-27 John Ralls 
 
-	* Change dialog buttons from using GKT_STOCK_ labels
+	* Fix free of non-malloced memory crash in SQL save slots.
 
-2017-06-17 Robert Fewell 
+2016-10-25 John Ralls 
 
-	* Remove depreciated gtk_button_set_use_stock
+	* Merge convert GUID from inheriting boost::guid to composition.
 
-2017-06-16 John Ralls 
+2016-10-24 lmat 
 
-	* Correctly store time64 0 in the SQL backend.
+	* Replaced inheritance from boost uuid with composition
 
-2017-06-16 John Ralls 
+2016-10-24 John Ralls 
 
-	* Clamp time64 values passed to GDateTime functions to the valid range.
+	* Bug 769124 - Australian (GMT-10) OFX transactions imported have previous
 
-2017-06-16 Robert Fewell 
+2016-10-20 lmat 
 
-	* Replace deprecated widgets in goffice
+	* Separate C guid from C++ guid
 
-2017-06-16 Robert Fewell 
+2016-10-20 John Ralls 
 
-	* Correct corrupted line in gnc-account-sel.h
+	* Bug 769124 - Australian (GMT-10) OFX transactions imported have previous days date.
 
-2017-06-16 Robert Fewell 
+2016-06-12 lmat 
 
-	* Change register Gtk horizontal and vertical widgets
+	* Added forward declaration for struct GncGUID
 
-2017-06-16 Robert Fewell 
+2016-10-14 Rob.Gowin 
 
-	* Change all Gtk horizontal and vertical widgets
+	* Remove configuration of HAVE_PUTENV.
 
-2017-06-16 Robert Fewell 
+2016-10-10 Geert Janssens 
 
-	* Change register GtkHbox widgets
+	* Merge branch 'maint'
 
-2017-06-16 Robert Fewell 
+2016-10-10 Geert Janssens 
 
-	* Change all the GtkHbox widgets
+	* Bug 771617 - Build fails because test test-report-utilities is sensitive to time of day/timezone
 
-2017-06-16 Robert Fewell 
+2016-10-10 Geert Janssens 
 
-	* Change all the GtkVBox widgets
+	* Merge branch 'maint'
 
-2017-06-16 Robert Fewell 
+2016-10-10 Geert Janssens 
 
-	* Fix the tab label width update function to reflect changes
+	* Bug 771617 - Build fails because test test-report-utilities is sensitive to time of day/timezone
 
-2017-06-15 Robert Fewell 
+2016-10-04 John Ralls 
 
-	* Replaced some deprecated widgets with the gtk3 equivalent
+	* Fix CSV importer to handle GMT + 13 Timezone (New Zealand Daylight Time).
 
-2017-06-15 Robert Fewell 
+2016-10-04 John Ralls 
 
-	* Fix Tab Labels
+	* Bug 772382 - Date off-by-one after DST change
 
-2017-06-15 Robert Fewell 
+2016-10-05 Christian Stimming 
 
-	* Replace some deprecated widgets in the register.
+	* Get cutecash to compile/link again.
 
-2017-06-15 Robert Fewell 
+2016-10-04 John Ralls 
 
-	* There were critical errors in trace file.
+	* Fix CSV importer to handle GMT + 13 Timezone (New Zealand Daylight Time).
 
-2017-06-15 Robert Fewell 
+2016-10-04 John Ralls 
 
-	* Replace deprecated widgets for GncDenseCal with gtk3 equivalents
+	* Bug 772382 - Date off-by-one after DST change
 
-2017-06-15 Robert Fewell 
+2016-10-03 Geert Janssens 
 
-	* Composite functions not required for GncDenseCal
+	* Merge branch 'maint'
 
-2017-06-15 Robert Fewell 
+2016-09-28 Ralf Habacker 
 
-	* Set the background of the GncDenseCal Widget
+	* Fix broken german account template 'Kontenrahmen für Wohnungswirtschaft'.
 
-2017-06-15 Robert Fewell 
+2016-10-03 Geert Janssens 
 
-	* With Gtk3 it uses css to do the theming so change the file to load
+	* Bug 771617 - Build fails because test test-report-utilities is sensitive to time of day/timezone
 
-2017-06-04 christopherlam 
+2016-10-02 Geert Janssens 
 
-	* Bug 776396 Further Fix
+	* Bug 772313 - Invalid DOCTYPE in report generation
 
-2017-05-26 John Ralls 
+2016-09-27 Robert Fewell 
 
-	* Bug 783095 - gnucash-2.6.16 segfaults on startup
+	* Change all key accelerators to use <primary>
 
-2017-05-21 Mike Evans 
+2016-09-27 Robert Fewell 
 
-	* Change from deprecated gncEntrySetDate to gncEntrySetDateGDate. Again.
+	* Add find account to register2 to keep in sync
 
-2017-05-21 Mike Evans 
+2016-09-27 Robert Fewell 
 
-	* Revert "Change from deprecated gncEntrySetDate to gncEntrySetDateGDate." Oops, more work required.
+	* Hide the radio buttons when searching full tree
 
-2017-05-21 Mike Evans 
+2016-09-25 Robert Fewell 
 
-	* Change from deprecated gncEntrySetDate to gncEntrySetDateGDate.
+	* Change from using icon-name to stock-id
 
-2017-05-19 Mike Evans 
+2016-09-23 Robert Fewell 
 
-	* Correct a typo.
+	* Change Find Account menu item to the Edit Menu
 
-2017-05-18 Mike Evans 
+2016-09-10 Robert Fewell 
 
-	* Use correct column for entry date.
+	* Make sure the parent accounts are overridden
 
-2017-05-16 Guy Taylor 
+2016-09-10 Robert Fewell 
 
-	* Fix coredump in Python when using "get_namespaces"
+	* Change from using toggle cell renderer to pixbuf
 
-2017-05-16 Guy Taylor 
+2016-05-17 Robert Fewell 
 
-	* Enable Python tests in Travis CI
+	* Add columns for account not used and zero balances
 
-2017-05-13 Bert 
+2016-05-17 Robert Fewell 
 
-	* Bug 776396 - Foreign currency reports, amounts are not aligned correctly
+	* Update to use the account tree filter override.
 
-2016-08-10 fell 
+2016-05-17 Robert Fewell 
 
-	* Add XSU to iso-4217-currencies
+	* Add account tree filter override
 
-2017-05-03 Geert Janssens 
+2016-04-27 Robert Fewell 
 
-	* Drop ifdeffed out code block
+	* Add option to find an account in list of accounts
 
-2017-05-03 Geert Janssens 
+2016-09-27 Rob Gowin 
 
-	* Bug 781634 - Alert on missing account currency when opening account
+	* Use default PKG_CHECK_MODULES for CMake version > 3.4
 
-2017-05-03 Geert Janssens 
+2016-09-27 John Ralls 
 
-	* Properly handle import of reconcile state.
+	* Fix test failure when in Spain.
 
-2017-05-03 Geert Janssens 
+2016-09-27 John Ralls 
 
-	* Document supported date formats in the saved csv settings
+	* gnc-timezone: Enable POSIX-style timezone strings on Unix systems.
 
-2017-05-01 Geert Janssens 
+2016-09-27 John Ralls 
 
-	* Use GncDate in csv importer
+	* Fix whitespace in function about to be extracted.
 
-2017-05-02 Geert Janssens 
+2016-09-27 John Ralls 
 
-	* Add copy constructor and assignment operator to GncDate
+	* gnu-timezone: Alias boost::local_time::posix_time_zone.
 
-2017-04-29 Geert Janssens 
+2016-09-26 John Ralls 
 
-	* Add comparison operators for GncDate
+	* Handle TZ that's not a file name by opening /etc/localtime.
 
-2017-04-29 John Ralls 
+2016-09-26 John Ralls 
 
-	* CMakeLists.txt: Remove Apple architecture settings.
+	* Fix crash from dereferencing nullptr when TZ isn't set.
 
-2017-04-16 John Ralls 
+2016-09-25 John Ralls 
 
-	* Updated ar.po from ashalash at msn.com
+	* Remove obsolete AS_SCRUB_INCLUDES macro.
 
-2017-04-29 fell 
+2016-09-25 Mike Evans 
 
-	* Fix wrong displayed position of the verbose flag in gnc-fq-dump
+	* Bug 771246 - Set Invoice/Bill items date correctly from imported CSV.
 
-2017-04-28 Geert Janssens 
+2016-09-23 John Ralls 
 
-	* Convert gnc_dmy2timespec{,_end,_neutral} to use the equivalent GncDateTime constructor
+	* See if setting TZ affects Travis tests.
 
-2017-04-28 Geert Janssens 
+2016-09-23 John Ralls 
 
-	* Align day end time as used in the GncDateTime constructor and gnc_dmy2timespec_end
+	* Check the TZ env variable before defaulting to /etc/localtime.
 
-2017-04-28 Geert Janssens 
+2016-09-23 John Ralls 
 
-	* Fix John's remarks
+	* Fix several instances of wrong way to retrieve boolean from KVP.
 
-2017-04-28 Geert Janssens 
+2016-09-17 John Ralls 
 
-	* Fix double free abort in gtest-gnc-datetime.cpp
+	* Merge branch 'maint'
 
-2017-04-21 Geert Janssens 
+2016-09-17 John Ralls 
 
-	* Add constructor to create GncDate from string and predefined date format
+	* Fix version in CMakeLists.txt. (tag: 2.6.14a)
 
-2017-04-22 Geert Janssens 
+2016-09-16 John Ralls 
 
-	* Various small fixups in csv importer
+	* Release 2.6.14 (tag: 2.6.14)
 
-2017-04-28 Geert Janssens 
+2016-09-16 John Ralls 
 
-	* Align cmake rational/numeric test invocation with Makefile based one
+	* Synchronize translation project.
 
-2017-04-26 Geert Janssens 
+2016-09-15 John Ralls 
 
-	* Fix autotools based build
+	* Bug 769746 - Zero interest loan formula fails.
 
-2017-04-20 Geert Janssens 
+2016-08-01 Robert Fewell 
 
-	* Fix static code checker warnings about parameter definition in doxygen comments
+	* Add option to recn cell type to be read only
 
-2017-04-20 Geert Janssens 
+2016-08-01 Robert Fewell 
 
-	* Add GncDateTime constructor taking a GncDate as parameter
+	* Make a distinction between file/link Association
 
-2017-04-20 Geert Janssens 
+2016-08-01 Robert Fewell 
 
-	* Swap GncDate and GncDateTime in preparation of a future commit
+	* Indicate an Association in the Register
 
-2017-04-17 John Ralls 
+2016-09-13 John Ralls 
 
-	* Work around googletest bug 920.
+	* Bug 771379 - GnuCash doesn't support Russian Ruble Symbol
 
-2017-04-16 John Ralls 
+2016-09-12 Mike Evans 
 
-	* Merge branch 'PR140' into maint
+	* Bug 771246 - Set Invoice/Bill items date correctly from imported CSV.
 
-2017-04-16 John Ralls 
+2016-09-11 John Ralls 
 
-	* Merge branch 'pr141'
+	* Bug 770181 - gnc-fq-dump incorrectly says "quote cannot be used...
 
-2017-04-16 Nitin Anand 
+2016-09-11 John Ralls 
 
-	* Fix crash while saving scheduled transaction template
+	* Bug 761667 - Crash opening associated location that has no scheme
 
-2016-08-04 John Ralls 
+2016-09-11 John Ralls 
 
-	* Adjust CMAKE_C_FLAGS for better release/debug behavior.
+	* Australian (GMT-10) OFX transactions imported have previous days date
 
-2017-04-14 Geert Janssens 
+2016-09-08 Geert Janssens 
 
-	* Gtk3: fix failing item-edit widget on sheets
+	* Bug 643025 - RFE: Ability to select and open multiple invoices
 
-2017-04-14 Geert Janssens 
+2016-09-07 Geert Janssens 
 
-	* Gtk3: fix register redrawing when the window is scrolled
+	* Bug 733153 - Ambiguous view of buttons in search dialog Linux version
 
-2017-04-11 Geert Janssens 
+2016-09-07 Geert Janssens 
 
-	* Gtk3: Fix register not being drawn - item_edit still missing
+	* Add small note the split action field is pre-filled by the business features
 
-2017-04-11 Geert Janssens 
+2016-06-10 Carsten Rinke 
 
-	* Fix build with webkitgtk >= 2.8
+	* Bug763257 - update Budget Line Chart to only send ISO formated date strings to jqplot
 
-2017-03-31 John Ralls 
+2016-08-03 Robert Fewell 
 
-	* Get links working.
+	* Bug 762901 [PATCH] Fix saving Account Treeview sort order.
 
-2017-03-31 John Ralls 
+2016-09-02 Serge Gebhardt 
 
-	* Get WebKit2Gtk basics compiling and working.
+	* Value "price" allowed in attr cd:type for element book (RELAX NG file)
 
-2017-03-23 John Ralls 
+2016-09-01 John Ralls 
 
-	* Revert "Fix query period in test-account-get-trans-type-splits-interval."
+	* Bug 769730 - Investments: Lots in This Account, Closed column shows
 
-2017-02-27 John Ralls 
+2016-08-26 Rob Gowin 
 
-	* Correct gnc-html-webkit.c indentation.
+	* CMake improvements for SWIG handling and Python bindings.
 
-2017-03-31 Geert Janssens 
+2016-08-25 Geoff Lee 
 
-	* Gtk3: Replace obsolete functions
+	* Bug 770303 - Incorrect commodity match during import OFX and possible solution.
 
-2017-03-31 Geert Janssens 
+2016-08-25 John Ralls 
 
-	* Temporarily disable deprecation warnings
+	* Whitespace cleanup in gnc_import_select_commodity.
 
-2017-02-27 John Ralls 
+2016-08-24 Geert Janssens 
 
-	* Remove if-0-ed out code from gnc-html-webkit.c
+	* SX - recalculate all occurrences of all SX if the calendar is updated to start on another month
 
-2015-08-25 Geert Janssens 
+2016-08-24 Geert Janssens 
 
-	* Gtk3: fix direct access issue for entry widget in cell renderer mode
+	* SX Window: correctly show first sx on calendar when it is moved to next weekday
 
-2017-03-13 Geert Janssens 
+2016-08-24 Geert Janssens 
 
-	* Gtk3: Convert GdkColor into GdkRGBA
+	* Bug 770136 - 'Reverse Order' in 'View'->'Sort by' is not saved
 
-2017-03-13 Geert Janssens 
+2016-08-22 John Ralls 
 
-	* Gtk3: replace expose_event size_request functions
+	* Bug 742461 - SQL backend doesn't update customer info
 
-2015-08-29 Geert Janssens 
+2016-08-22 Pierre-André Jacquod 
 
-	* Gtk3: Fix the remaining gtk direct access violations
+	* Bug 770196 - cppcheck va_list not closed
 
-2015-08-24 Geert Janssens 
+2016-08-21 John Ralls 
 
-	* Gtk3: adapt to changed callback function signature
+	* Revert "temporarily disable pre-logging messages."
 
-2015-08-23 Geert Janssens 
+2016-08-20 John Ralls 
 
-	* Gtk3: use CSS style instead of old GtkStyle interface
+	* Merge branch 'trans-assoc' from Bob Fewell.
 
-2017-04-10 John Ralls 
+2016-08-19 Robert Fewell 
 
-	* Use the Mac Locale to find the account templates only when building with quartz.
+	* Change Transaction Association Dialog
 
-2017-04-10 Mike Alexander 
+2016-08-16 Robert Fewell 
 
-	* Fix a minor typo.
+	* Add check for path being relative.
 
-2017-04-10 Mike Alexander 
+2016-08-16 Robert Fewell 
 
-	* Delete left over line from previous merge conflict.
+	* Add Preference path head for Trans. Associations
 
-2017-04-10 Mike Alexander 
+2016-08-02 Robert Fewell 
 
-	* Merge branch 'maint'
+	* Add sort button for Associations
 
-2017-04-04 Mike Alexander 
+2016-08-01 Robert Fewell 
 
-	* Fix the SWIG Guile wrapping of functions that have a "struct tm" parameter.
+	* Transaction Association List Dialog
 
-2017-04-04 Mike Alexander 
+2016-08-01 Robert Fewell 
 
-	* Calling sigfigs_denom with a zero crashes due to a divide by zero.
+	* Add option to recn cell type to be read only
 
-2017-04-05 Mike Alexander 
+2016-08-01 Robert Fewell 
 
-	* Add an XCode target to run the numeric unit tests and rename the main target to GnuCash.
+	* Make a distinction between file/link Association
 
-2017-04-04 Mike Alexander 
+2016-08-01 Robert Fewell 
 
-	* Update XCode file lists and sort them alphabetically.
+	* Indicate an Association in the Register
 
-2017-04-04 Mike Alexander 
+2016-08-01 Robert Fewell 
 
-	* Fix a crash in scrub_sx_split_numeric introduced in b3eb9d0.
+	* Change associate file/link to show existing entry
 
-2017-04-04 Mike Alexander 
+2016-08-20 John Ralls 
 
-	* gnc_numeric_convert should return an invalid number unchanged instead of crashing.
+	* Suppress the console window on launch when building with CMake on MSWin.
 
-2017-04-08 John Ralls 
+2016-08-20 John Ralls 
 
-	* Revert "Some instrumentation output..."
+	* Merge branch 'maint' of ssh://code.gnucash.org/gnucash into maint
 
-2017-04-08 John Ralls 
+2016-08-19 John Ralls 
 
-	* Change GTest annotations to use the right class name for GncInt128 tests.
+	* Bug 770113 - compiling issue with libdbi.
 
-2017-04-07 John Ralls 
+2016-08-19 John Ralls 
 
-	* Some instrumentation output for how much the numerator or denominator is shifted.
+	* Fix compilation error in sqlite3_error_fn.
 
-2017-04-07 John Ralls 
+2016-08-18 John Ralls 
 
-	* Better manage truncation in GncRational::round_to_numeric.
+	* temporarily disable pre-logging messages.
 
-2017-04-07 John Ralls 
+2016-08-10 Geert Janssens 
 
-	* Fix GncInt128 maxbits to account for the flag bits.
+	* Bug 639401 - Invoices Due Reminder
 
-2017-04-07 John Ralls 
+2016-08-04 John Ralls 
 
-	* Fix carrying to the wrong end of the lower leg in left shift.
+	* Adjust CMAKE_C_FLAGS for better release/debug behavior.
 
-2017-04-07 John Ralls 
+2016-08-09 John Ralls 
 
-	* Fix a magic number in GncInt128.
+	* Merge branch 'maint'
 
-2017-04-03 John Ralls 
+2016-08-08 Stefan Talpalaru 
 
-	* Save Changes Bug 780889 - Split-register transactions result in invalid...
+	* remove duplicate line
 
-2017-04-02 John Ralls 
+2016-08-08 Stefan Talpalaru 
 
-	* Add some tests looking for a GncInt128 divide overflow problem.
+	* fix compilation with guile-2.0.12
 
-2017-04-02 John Ralls 
+2016-04-28 fell 
 
-	* Bug 780845 - link in github repo README file needs correction/editing
+	* Minor improvement of singe quote sources SIX*
 
-2017-04-02 John Ralls 
+2016-08-06 John Ralls 
 
-	* Bug 780845 - link in github repo README file needs correction/editing
+	* Bug 769576 - Seg Fault on Editing Scheduled Transaction's Amount
 
-2015-08-22 Geert Janssens 
+2016-08-02 John Ralls 
 
-	* Gtk3: Fix cursor handling
+	* Don't error out if select @@sql_mode is an empty string.
 
-2015-08-22 Geert Janssens 
+2016-08-02 John Ralls 
 
-	* Gtk3: GtkObject has been removed
+	* Fix crash and error decoding GDates returned as time64.
 
-2015-08-22 Geert Janssens 
+2016-08-01 John Ralls 
 
-	* Switch to building with the gtk+-3.0 toolkit
+	* Attempt to fix Travis test failure.
 
-2017-03-13 Geert Janssens 
+2016-07-31 fell 
 
-	* GnucashSheet - drop unused variables
+	* de.po: merge new template
 
-2017-03-13 Geert Janssens 
+2016-07-31 fell 
 
-	* GnucashSheet - fix screen refresh
+	* Fix a typo in dialog invoice
 
-2017-03-13 Geert Janssens 
+2016-07-31 fell 
 
-	* Fix two critical GObject warnings
+	* de.po: review of commit d5fa61d
 
-2017-03-13 Geert Janssens 
+2016-07-31 fell 
 
-	* ItemEdit - drop unused function
+	* minor fix of de.po
 
-2017-03-10 Geert Janssens 
+2016-07-16 Marco Zietzling 
 
-	* Extract the GnucashRegister widget into a separate file
+	* fixed some more German translations
 
-2017-03-10 Geert Janssens 
+2016-07-16 Marco Zietzling 
 
-	* Restore pasting in the item_edit
+	* fixed some more German translations
 
-2017-03-09 Geert Janssens 
+2016-07-16 Marco Zietzling 
 
-	* Rework GncItemEdit widget
+	* fixed some more German translations
 
-2017-03-09 Geert Janssens 
+2016-07-16 Marco Zietzling 
 
-	* Fix hidden scrollbars for itemlist type popup
+	* fixed German translations
 
-2017-03-09 Geert Janssens 
+2016-07-16 John Ralls 
 
-	* Fix crash in previously unreached code
+	* Merge branch 'maint'
 
-2017-03-09 Geert Janssens 
+2016-07-16 Rob Gowin 
 
-	* Create specialized popup items their respective source files
+	* Fixes to get CMake "MinGW Makefiles" generator to work.
 
-2017-03-07 Geert Janssens 
+2016-07-15 John Ralls 
 
-	* Reduce the cursor from a full widget to a simple gobject that tracks cursor coordinates
+	* Merge branch 'maint'
 
-2017-03-07 Geert Janssens 
+2016-07-14 Rob Gowin 
 
-	* Rework gnucash-cursor
+	* Allow HTMLHELP_DIR to be specified on cmake command line
 
-2017-03-11 Geert Janssens 
+2016-07-14 John Ralls 
 
-	* Reduce grid object from a complete widget to only two utility functions
+	* Remove superflous use of std::stringstream.
 
-2017-03-11 Geert Janssens 
+2016-07-12 John Ralls 
 
-	* Refactor divider line drawing some more to reduce duplicate code
+	* Fix wrong PWARN calling signature.
 
-2017-03-11 Geert Janssens 
+2016-07-12 Mike Evans 
 
-	* Use cairo to redraw the grid widget
+	* Bug 756416 - CSV data with Posted information will always have last invoice not posted.
 
-2017-03-01 Geert Janssens 
+2016-07-11 John Ralls 
 
-	* Replace all other uses of GnomeCanvas with standard gtk widgets
+	* Use the right value to determine if the zone has a daylight time.
 
-2017-02-24 Geert Janssens 
+2016-07-08 John Ralls 
 
-	* Convert gnc-header from GnomeCanvas to GtkLayout
+	* Merge branch 'maint'
 
-2017-03-30 John Ralls 
+2016-07-08 John Ralls 
 
-	* Merge Ueli Neiderer's swift-transactiontxt branch into maint.
+	* Tweak version.cmake to work on Windows.
 
-2017-03-30 Ueli Niederer 
+2016-07-05 John Ralls 
 
-	* Obey GNUcash coding style
+	* Merge branch 'maint'
 
-2017-03-30 Ueli Niederer 
+2016-07-05 John Ralls 
 
-	* Added a preference to control import behaivour of transaction text
+	* Make CMake use the same scm-revision program as Autotools.
 
-2017-03-28 Ueli Niederer 
+2016-07-03 John Ralls 
 
-	* Including the transaction text into the purpose text
+	* Merge branch 'maint'
 
-2017-03-28 John Ralls 
+2016-07-03 John Ralls 
 
-	* Use qof_instance_set/get instead of g_object_set/get.
+	* Clear the GDate before use.
 
-2017-03-28 John Ralls 
+2016-07-03 John Ralls 
 
 	* Merge branch 'maint'
 
-2017-03-26 Mike Alexander 
+2016-07-02 John Ralls 
 
-	* Remove the xxx_with_error functions from Python bindings. They were removed from GnuCash in b199593 In January.
+	* Bug 137017 - date of transaction change with time zone change
 
-2017-03-25 John Ralls 
+2016-07-02 John Ralls 
 
-	* Release 2.6.16 (tag: 2.6.16)
+	* Don't override optimization flags in CMakeLists.txt.
 
-2017-03-25 John Ralls 
+2016-07-02 Geert Janssens 
 
-	* Reduce the gate on get_random_gnc_numeric.
+	* When default tax table is 'None', set a new invoice/bill entry as not taxabl by default as well.
 
-2017-03-25 John Ralls 
+2016-07-01 John Ralls 
 
-	* Update translations ca, nl, and sr from the translation project.
+	* GCC-4.9 doesn't have the C++14 initializer list fix.
 
-2017-03-24 John Ralls 
+2016-07-01 John Ralls 
 
-	* Bug 670731 - Future Value not working with Loan Scheduled transaction
+	* Enable Google Tests under CMake.
 
-2017-03-23 John Ralls 
+2016-06-30 John Ralls 
 
-	* Revert "Fix query period in test-account-get-trans-type-splits-interval."
+	* MinGW doesn't support stoi, use atoi instead.
 
-2017-03-24 fell 
+2016-06-28 John Ralls 
 
-	* Update of de.po
+	* Merge branch 'maint'
 
-2017-03-24 fell 
+2016-06-28 John Ralls 
 
-	* update de.po
+	* Fix incomplete function name from 74fa556. (tag: 2.6.13b)
 
-2017-03-24 fell 
+2016-06-27 John Ralls 
 
-	* Use "Billing Information" as in other biz modules
+	* Reset release date to 28 June. (tag: 2.6.13a)
 
-2014-12-18 Geert Janssens 
+2016-06-27 John Ralls 
 
-	* Whitespace cosmetics
+	* containsString wasn't introduced until OS X 10.10.
 
-2017-03-23 John Ralls 
+2016-06-25 John Ralls 
 
-	* Bug 776247 - PriceEditor thinks Currency XXX is an actual currency...
+	* Release 2.6.13 (tag: 2.6.13)
 
-2017-03-23 fell 
+2016-06-24 John Ralls 
 
-	* Fix a typo in my last commit
+	* Update translations from the translation project.
 
-2017-03-23 fell 
+2016-06-23 John Ralls 
 
-	* Exlpain "Blank Transaction" to translators
+	* Remove automatch_store_transactions() from import-main-matcher.
 
-2017-03-23 Geert Janssens 
+2016-06-23 John Ralls 
 
-	* Align a help string in two different files for easier translation
+	* Bug 760021 - File "Save As" to an existing file...overwrites without warning.
 
-2017-03-23 Robert Fewell 
+2016-06-23 John Ralls 
 
-	* Bug388500 - Add option to remove deleted files from the history list
+	* Bump CMake version to current.
 
-2017-03-23 Geert Janssens 
+2016-06-22 John Ralls 
 
-	* Disable tests when minimum glib2 requirement is not met
+	* Bug 761672 - Transfer made to placeholder account
 
-2017-03-22 Geert Janssens 
+2016-06-22 John Ralls 
 
-	* Bug 739571 - Small fixups for previous commits
+	* Bug 764248 - saved-reports-2.4-backup line endings unconventional
 
-2016-02-13 Jesse Olmer 
+2016-06-22 goodvibes2 
 
-	* Bug 739571 - Matching imported transactions doesn't indicate previously matched entries
+	* Update README to refer to wiki Submitting_Patches as per github  discussion re this file.
 
-2016-01-17 Jesse Olmer 
+2016-06-22 John Ralls 
 
-	* Bug 739571 - Matching imported transactions doesn't indicate previously matched entries
+	* Bug 748983 - Crash after opening money transfer dialog twice
 
-2017-03-22 fell 
+2016-06-20 goodvibes2 
 
-	* Update de.po
+	* Bug 637004 Optionally allow customer and vendor address info to display   Use an internal option to hold receivable/payable flag,   remove trailing spaces.
 
-2017-03-22 fell 
+2016-06-18 goodvibes2 
 
-	* Prepare update of de.po
+	* Bug 637004 Optionally allow customer and vendor address info to display   in the Receivable Aging and Payable Aging reports so can be copied   and pasted into a spreadsheet for use in mail merge.
 
-2017-03-16 fell 
+2016-06-20 John Ralls 
 
-	* Add 2 translator comments to get a unique translation for 'Tax Report Options'
+	* Fix Travis test failure in gnc_iso8601_to_timespec_gmt.
 
-2017-03-21 John Ralls 
+2016-06-20 John Ralls 
 
-	* Save Changes Bug 776517 - Trial Balance Report:...
+	* Fix gnc_iso8601_to_timespec_gmt test failure.
 
-2017-03-21 Geert Janssens 
+2016-06-20 John Ralls 
 
-	* Bug 766630 - gui dialog for sorting transactions to accounts after aqbanking import broken
+	* Bug 767824 - Some UTC timezones incorrectly recognized on Windows 7
 
-2017-03-21 Geert Janssens 
+2016-06-17 Alex Aycinena 
 
-	* Resave dialog-import.glade without any real change
+	* Book-Currency Feature step 5
 
-2017-03-21 John Ralls 
+2016-06-09 John Ralls 
 
-	* Bug 778208 - Scheduling 2nd, 3rd or 4th Wed doesn't seem to work.
+	* Merge branch 'guid_header'
 
-2017-03-18 Robert Fewell 
+2016-06-09 John Ralls 
 
-	* Bug 603379 - Prevent changing some Account Options if it has transactions
+	* Merge branch 'session-refactor'
 
-2017-03-18 Robert Fewell 
+2016-06-09 John Ralls 
 
-	* Bug 603379 - Count the splits in an Account.
+	* Some minor fixups to resolve clang warning and errors from session-refactor.
 
-2017-03-18 John Ralls 
+2016-06-07 lmat 
 
-	* Merge en_GB budget->Budget into maint.
+	* Clean up guid usage.
 
-2017-03-18 Simon Hollingshead 
+2016-06-07 lmat 
 
-	* Consistently capitalise budget in en-GB menu items
+	* Add C++ header for guid.cpp and tests.
 
-2017-03-18 John Ralls 
+2016-06-06 lmat 
 
-	* Revert "Fix query period in test-account-get-trans-type-splits-interval."
+	* Remove unused, left over typedef
 
-2017-03-17 John Ralls 
+2016-06-05 lmat 
 
-	* Fix query period in test-account-get-trans-type-splits-interval.
+	* Adding googletest cases for c++ qofsession struct
 
-2017-03-18 John Ralls 
+2016-06-05 lmat 
 
-	* Merge new Finnish translation into maint.
+	* Replace C qofsession struct with c++ qofsession struct
 
-2017-03-18 John Ralls 
+2016-06-05 lmat 
 
-	* Update GnuCash version and PO date for Finnish translation.
+	* Check the appropriate locations for gmock and gtest sources
 
-2017-03-17 John Ralls 
+2016-06-05 lmat 
 
-	* Fix DST calculation error.
+	* Corrected "misleading" indentation
 
-2017-03-17 John Ralls 
+2016-06-06 Alex Aycinena 
 
-	* Fix query period in test-account-get-trans-type-splits-interval.
+	* Merge maint.
 
-2017-03-13 Tuomo Hartikainen 
+2016-06-06 Alex Aycinena 
 
-	* Update Finnish translation
+	* Partially revert commit B555f495 and solve problem more simply by instead resequencing prior statements.
 
-2017-03-17 Tuomo Hartikainen 
+2016-05-27 Carsten Rinke 
 
-	* Merge updated po template in fi.po
+	* Bug763257 - add line charts to Income/Expense/Asset/Liability reports
 
-2017-03-17 Geert Janssens 
+2016-04-16 Geert Janssens 
 
-	* Add missing macros
+	* Restore proper formatting on the linechart highlighter
 
-2017-03-16 fell 
+2016-04-16 Geert Janssens 
 
-	* PR #134: Update local symbol of iso-4217-currency MUR
+	* Bug763257 - add line charts to Income/Expense/Asset/Liability reports
 
-2017-03-16 Geert Janssens 
+2016-03-08 Carsten Rinke 
 
-	* Fix a couple of other deprecated symbols (gtk/gdk 2.x still)
+	* Bug763257 - add line charts to Income/Expense/Asset/Liability reports
 
-2017-03-16 Geert Janssens 
+2016-06-05 Alex Aycinena 
 
-	* Handle deprecation of g_settings_list_keys in gio 2.46
+	* Remove semi-colon accidently left in prior commit.
 
-2017-03-16 Geert Janssens 
+2016-06-05 Alex Aycinena 
 
-	* Raise minimum required version of glib-2.0 to 2.40
+	* Merge maint. The gnc_gui_refresh_all statement in gnc_book_options_dialog_apply_cb causes the 'apply' and 'OK' buttons to be set to sensitive on the open Book Options dialog in some circumstances; this commit causes them to be reset to insensitive, as they should be.
 
-2017-03-16 Geert Janssens 
+2016-06-04 Alex Aycinena 
 
-	* Merge branch 'maint'
+	* The gnc_gui_refresh_all statement in gnc_book_options_dialog_apply_cb causes the 'apply' and 'OK' buttons to be set to sensitive on the open Book Options dialog in some circumstances; this commit causes them to be reset to insensitive, as they should be.
 
-2017-03-11 Robert Fewell 
+2016-06-02 John Ralls 
 
-	* Bug 779411 - jqplot fixes for piechart and syntax error.
+	* One line too far.
 
-2017-03-13 Robert Fewell 
+2016-06-02 John Ralls 
 
-	* Bug388500 - Add option to remove deleted files from the history list
+	* Add CPPFLAGS and LD_ADD to the date/time gtests.
 
-2017-03-16 Geert Janssens 
+2016-06-02 Geert Janssens 
 
-	* Fixup last commit
+	* Avoid variable redefined errors for _FORTIFY_SOURCE
 
-2017-03-11 Geert Janssens 
+2016-05-21 Geert Janssens 
 
-	* Csv Import - drop another reference to the no longer used lib/stf
+	* Fix leaking of ICU's c++ interface through libxml on some platforms
 
-2017-03-13 Geert Janssens 
+2016-05-31 Geert Janssens 
 
-	* Csv Import - Fix doxygen comment
+	* Update README file regarding pull request policy
 
-2017-03-14 John Ralls 
+2016-05-29 John Ralls 
 
-	* Fix up building on MinGW with autotools.
+	* Bug 766960 - gnucash-make-guids fails to run due to hardcoded paths.
 
-2017-03-14 John Ralls 
+2016-05-23 John Ralls 
 
-	* Adjust locale test so that it works on both Ubuntu and MacOS.
+	* Remove throw from noexcept TimeZoneProvider::get().
 
-2017-03-13 Christian Stimming 
+2016-05-23 John Ralls 
 
-	* Online banking: Add output of bank messages that might occasionally be received.
+	* Fix misspellt BOOST_LDFLAGS.
 
-2017-03-13 John Ralls 
+2016-02-16 John Ralls 
 
-	* Fix missing fi in configure.ac.
+	* Remove close hook list; not used.
 
-2017-03-13 John Ralls 
+2016-03-12 John Ralls 
 
-	* Require ICU.
+	* Backends: astyle -xd -k1 -m0 -M60 -xL -xC79 -OHpUcZns4 --brackets=break
 
-2017-03-12 John Ralls 
+2016-03-12 John Ralls 
 
-	* Change 'uint' to 'uint32_t'.
+	* Remove old static analysis markup from backend.
 
-2017-03-11 Christoph Rohland 
+2016-05-23 John Ralls 
 
-	* Fix logic error for discounts
+	* Merge branch 'maint'
 
-2017-03-10 Christoph Rohland 
+2016-05-21 John Ralls 
 
-	* Fix taxinvoice for bill entries with taxes
+	* Fix up boost regex linkage issues on non-OSX platforms.
 
-2017-03-08 Christoph Rohland 
+2016-05-21 Geert Janssens 
 
-	* Let taxinvoice optionally show the net instead of the given price
+	* Bug 765859 - The budget reports missing in Hungarian edition
 
-2017-03-11 Geert Janssens 
+2016-05-21 Geert Janssens 
 
-	* Merge branch 'maint'
+	* Fix travis build
 
-2017-03-09 Christoph Rohland 
+2016-05-21 Geert Janssens 
 
-	* Charge back net value of bill entries in invoices
+	* Bug 736352 - Expense Voucher adds tax automatically
 
-2017-03-10 John Ralls 
+2016-05-21 Geert Janssens 
 
-	* Fix failed unit test from previous commit.
+	* Bug 766200 - Three-up printing does not position the third check properly
 
-2017-03-10 John Ralls 
+2016-05-21 Geert Janssens 
 
-	* Bug 779217 - Transactions rounded to 5 decimal places when opening file.
+	* Check printing: make logic easier to follow
 
-2017-03-10 John Ralls 
+2016-05-20 John Ralls 
 
-	* Bug 777949 - Accounts implicitly created in ledger attempt creation twice
+	* Merge branch 'maint'
 
-2017-03-09 John Ralls 
+2016-05-20 John Ralls 
 
-	* Bug 776564 - Creating a scheduled transaction from an existing...
+	* GCC-4.8 hasn't implemented std::regex so use boost::regex instead.
 
-2017-03-04 Geert Janssens 
+2016-05-20 John Ralls 
 
-	* Allow only date entry for opening balances on new accounts
+	* regex_replace: construct std::string for third argument.
 
-2017-03-04 Geert Janssens 
+2016-05-20 John Ralls 
 
 	* Merge branch 'maint'
 
-2017-03-02 hcrohland 
+2016-05-20 John Ralls 
 
-	* Revert the taxinvoice.scm changes
+	* Fix adjust_sql_option_string test on Windows.
 
-2017-03-01 hcrohland 
+2016-05-19 John Ralls 
 
-	* Make the net price option better compatible with master
+	* Move adjust_sql_options_string declaration to gnc-backend-dbi-priv.h.
 
-2017-02-03 hcrohland 
+2016-05-19 John Ralls 
 
-	* Enable taxinvoice to show net price
+	* Remove unnecessary g_strdup_printf.
 
-2017-03-01 Geert Janssens 
+2016-05-19 John Ralls 
 
-	* Make older compilers happy by using std::isnan instead of isnan
+	* Fix inconsistent and non-conforming whitespace and comments.
 
-2017-03-01 Geert Janssens 
+2016-05-20 Mike Evans 
 
-	* Remove redundant gtk_widget_show_all call
+	* Bug 766688 - Minimal fraction of BYN should be 1/100
 
-2017-02-20 Robert Fewell 
+2016-05-19 John Ralls 
 
-	* Bug 778042 These are the script changes for jqplot reports.
+	* Fix bad library name from c1ad6154.
 
-2017-02-20 Robert Fewell 
+2016-05-13 John Ralls 
 
-	* Bug 778042 Change the way reports are loaded in conjunction with script changes.
+	* Bug 764871 - Crash starting gnu cash
 
-2017-02-20 Geert Janssens 
+2016-05-14 John Ralls 
 
-	* Csv Import - Use GncNumeric rather than GncRational
+	* Don't try to compile test_adjust_sql_options on windows, it won't link.
 
-2017-02-21 Geert Janssens 
+2016-05-11 colinl 
 
-	* Fix typo in GcnRational's + operator
+	* Improved adjust_sql_options_string, added tests
 
-2017-02-21 Geert Janssens 
+2016-05-10 colinl 
 
-	* Fix gnc-numeric locale test on travis
+	* Tidied up adjust_sql_options
 
-2017-02-20 John Ralls 
+2016-05-10 colinl 
 
-	* Prevent localizing the decimal point in gcc<5.
+	* adjust_sql_options working but needs tidy up and remove diagnostics
 
-2017-02-20 John Ralls 
+2016-05-03 victor811 
 
-	* Merge fetaure-branch 'numeric', provides GncNumeric C++ API.
+	* Update Russian translation
 
-2017-02-20 John Ralls 
+2016-05-03 victor811 
 
-	* Fix Geert’s code review comments.
+	* Update Russian translation
 
-2017-02-06 John Ralls 
+2016-05-10 John Ralls 
 
-	* Fix documentation errors.
+	* Bug 766028 - crash on manual addition of price entry in Price Editor
 
-2017-02-03 John Ralls 
+2016-05-05 Mechtilde 
 
-	* Relax comparison test for GncRational::round_to_numeric
+	* correct some more shortcuts
 
-2017-02-03 John Ralls 
+2016-05-05 Mechtilde 
 
-	* Replace std::regex with boost::regex.
+	* correct some shortcuts
 
-2017-02-03 John Ralls 
+2016-01-19 Mechtilde 
 
-	* Add libgnc-qof to dependencies for test-numeric.
+	* correct typos
 
-2017-02-02 John Ralls 
+2016-01-02 Mechtilde 
 
-	* Fix indentation error.
+	* remove some fuzzy flags and add some translations
 
-2017-02-02 John Ralls 
+2016-01-20 Mechtilde 
 
-	* Remove a commented-out diagnostic.
+	* some corrections
 
-2017-02-02 John Ralls 
+2016-01-02 Mechtilde 
 
-	* Make the GncRational and GncNumeric APIs mostly identical.
+	* remove some fuzzy flags
 
-2017-02-02 John Ralls 
+2016-01-02 Mechtilde 
 
-	* Change GncRational::round to GncRational::convert.
+	* add some translations
 
-2017-01-31 John Ralls 
+2016-04-24 Per Johansson 
 
-	* Make the rounding functions templates and move them to their own header.
+	* FIxed remaining names.
 
-2017-01-31 John Ralls 
+2016-04-24 Per Johansson 
 
-	* Replace GncInt128’s flags variable with bit-stuffing in the high leg.
+	* Added Finnish account plan.
 
-2017-01-30 John Ralls 
+2016-05-07 Robert Fewell 
 
-	* Convert GncRational to throw instead of using a status byte.
+	* Update Transaction unit test date internal
 
-2017-01-30 John Ralls 
+2016-05-05 Robert Fewell 
 
-	* Reimplement gnc_numeric in terms of GncNumeric instead of GncRational.
+	* Date format using strftime under windows.
 
-2017-01-30 John Ralls 
+2016-05-05 Robert Fewell 
 
-	* Add GncRational test for GncRational::round_to_numeric().
+	* Gnucash on Windows will not start.
 
-2017-01-30 John Ralls 
+2016-04-21 Rob Gowin 
 
-	* Fix GncInt128 tests for older compilers.
+	* CMake: Don't try to install COPYING file that does not exist.
 
-2017-01-30 John Ralls 
+2016-04-10 Per Johansson 
 
-	* Add GncRational(GncNumeric) constructor.
+	* Added new sv_AX and sv_FI account plans.
 
-2017-01-30 John Ralls 
+2016-04-15 Geert Janssens 
 
-	* Extract new class GncNumeric.
+	* Improve quickfill performance on huge registers
 
-2017-01-30 John Ralls 
+2016-04-07 John Ralls 
 
-	* Remove #ifdef __cplusplus from gnu-numeric.cpp
+	* Correct the interpretation of the void* passed to sqlite3_error_fn.
 
-2017-01-30 John Ralls 
+2016-04-07 John Ralls 
 
-	* Fix GncInt128 shift operators when shift amount will clear a leg.
+	* Fix some new errors raised by clang 703.0.29.
 
-2017-01-30 John Ralls 
+2016-04-05 John Ralls 
 
-	* Declare GncInt128::div() const
+	* Ensure that PRIi64 is defined in mingw.
 
-2017-01-30 John Ralls 
+2016-04-05 Christian Stimming 
 
-	* Fix minor typos and whitespace issues.
+	* Bug 764268 - MT940 import select account based on transaction info
 
-2017-01-30 John Ralls 
+2016-03-30 Geert Janssens 
 
-	* Change signature of GncRational::round from taking a GncDenominator…
+	* Fix counter format resetting in a private kvp compatible way
 
-2017-01-30 John Ralls 
+2016-03-30 Geert Janssens 
 
-	* Move test-numeric from src/engine to src/libqof/qof.
+	* Fix critical warning introduced in f5a7aeca7913
 
-2017-01-30 John Ralls 
+2016-03-28 John Ralls 
 
-	* Add GncRational::reduce() and GncRational::round_to_numeric().
+	* Modify the changes from 139e3ea5 to accomodate private-KVP.
 
-2017-01-30 John Ralls 
+2016-03-28 John Ralls 
 
-	* Fix inverted subtraction.
+	* Delete dialog-print-check2.c which somehow managed to survive the last merge.
 
-2017-01-30 John Ralls 
+2016-03-27 John Ralls 
 
-	* Add guard macro to gnu-rational.hpp.
+	* Clean up more !g_strcmp0(foo, bar) == 0, which doesn't work.
 
-2017-01-16 John Ralls 
+2016-03-27 John Ralls 
 
-	* Untabify gnu-numeric.cpp.
+	* Restore some code removed in 8877f86 which left a variable uninitialized.
 
-2017-01-16 John Ralls 
+2016-03-27 John Ralls 
 
-	* Remove unused gnc_numeric_foo_with_error functions.
+	* Merge branch 'maint' after 2.6.12 release.
 
-2017-01-15 John Ralls 
+2016-03-24 John Ralls 
 
-	* Implement basic arithmetic operators for GncRational.
+	* Mac Localization: Prefer the country to the language for fall-back locales.
 
-2017-01-14 John Ralls 
+2016-03-22 John Ralls 
 
-	* Reorder test parameters so that the expected value is first.
+	* Extract some functions to make the Mac locale setup a bit more maintainable.
 
-2017-01-14 John Ralls 
+2016-03-25 John Ralls 
 
-	* Add an error parameter on the GncInt128 constructor.
+	* Release 2.6.12 (tag: 2.6.12)
 
-2017-01-14 John Ralls 
+2016-03-25 John Ralls 
 
-	* Add GTest test program for GncRational.
+	* Update translations from the Translation Project.
 
-2017-01-14 John Ralls 
+2016-03-25 Geert Janssens 
 
-	* Add explicit and correct default GncRational constructor.
+	* Bug 719904 - Decide payment type only based on the account type involved
 
-2017-02-20 John Ralls 
+2016-03-25 Geert Janssens 
 
-	* Add ICU libraries on which Boost:locale is dependent to CSV-Import LINK_LIBRARIES.
+	* Factor out a convenience function to retrieve a (business) owner starting from a transaction
 
-2017-02-20 Geert Janssens 
+2016-03-25 Geert Janssens 
 
-	* Merge branch 'csv_imp_cpp'
+	* Provide option to print checks directly from the payment window
 
-2017-02-20 Geert Janssens 
+2016-03-25 Geert Janssens 
 
-	* Use boost::locale:conv:utf_to_uft instead of codecvt_utf8
+	* Check printing: extract address from invoice/bill for payment transactions
 
-2017-02-20 Geert Janssens 
+2016-03-25 Geert Janssens 
 
-	* Properly test for invalid dates (gnc-date C interface no longer throws - rightfully so)
+	* Move some utility functions from gui code to engine
 
-2017-02-20 Geert Janssens 
+2016-03-25 Geert Janssens 
 
-	* Some ui refinement
+	* Update POTFILES.in after previous commit
 
-2017-02-20 Geert Janssens 
+2016-03-24 Geert Janssens 
 
-	* Cleanup - use less ambiguous variable name for an iterator
+	* Merge reg and reg2 variant of print check dialog back into one file
 
-2017-02-20 Geert Janssens 
+2016-03-24 Geert Janssens 
 
-	* Fix base account reset when an account column is selected
+	* Bug 693342 - Print (bottom) prints to middle for 3-check pages
 
-2017-02-18 Geert Janssens 
+2016-03-23 Geert Janssens 
 
-	* Recover separators or column_widths when juggling file format more than once
+	* Revert "Bug 118391 - Long currency names untranslated"
 
-2017-02-17 Geert Janssens 
+2016-03-23 Geert Janssens 
 
-	* Prevent multi-byte characters from erroneously being split in fixed-width mode
+	* Disable debug message that got enabled by accident last year
 
-2017-02-15 Geert Janssens 
+2016-03-23 Geert Janssens 
 
-	* Include glib.h as everywhere else
+	* Bug 687504 - Not possible to reset an invoice/bill counter format
 
-2017-02-11 Geert Janssens 
+2016-03-23 Geert Janssens 
 
-	* Remove some obsolete comments and commented out code
+	* Bug 642292 - General Ledger report - 'Primary Sort Key' value is not persistent
 
-2017-02-11 Geert Janssens 
+2016-03-22 John Ralls 
 
-	* Trim newlines from csv data
+	* New Xcode, new errors, sigh.
 
-2017-02-10 Geert Janssens 
+2016-03-22 Geert Janssens 
 
-	* Fix crash when adding columns by double-clicking the preview data
+	* Bug 482186 - Customer and vendor report for partners who get invoiced/paid in foreign currency show total labeled with the symbol of the default currency.
 
-2017-02-09 Geert Janssens 
+2016-03-21 Geert Janssens 
 
-	* Fix settings loading and saving
+	* Bug 728074 - Posting bill converts currency to itself using 0 rate
 
-2017-02-08 Geert Janssens 
+2016-03-21 Geert Janssens 
 
-	* Improve visual feedback when previewing importable data
+	* Bug 118391 - Long currency names untranslated
 
-2017-02-06 Geert Janssens 
+2016-03-21 Geert Janssens 
 
-	* Improve preview table handling
+	* Fix typo
 
-2017-01-14 Geert Janssens 
+2016-03-20 John Ralls 
 
-	* Use GncRational directly instead of gnc_numeric in gnc-trans-props
+	* Open correct xea directory if user has worked around bug 725296
 
-2017-01-12 Geert Janssens 
+2016-03-20 John Ralls 
 
-	* Prevent the user from setting an invalid settings name
+	* OSX: Get the locale for account trees from the OS instead of setlocale().
 
-2016-12-30 Geert Janssens 
+2016-03-19 Geert Janssens 
 
-	* Move column parsing earlier up the chain of events
+	* Bug 760107 - Change default date completion to sliding window
 
-2016-12-28 Geert Janssens 
+2016-03-15 Robert Fewell 
 
-	* Copyright updates
+	* Add Bayesian Conversion to Guid unit test
 
-2016-12-28 Geert Janssens 
+2016-03-14 Robert Fewell 
 
-	* Add a reset member function to GncPreTrans and GncPreSplit
+	* Update Unit tests for import_map
 
-2016-12-24 Geert Janssens 
+2016-03-19 Geert Janssens 
 
-	* Make sure all lines are checked for errors, regardless of their skipped status
+	* Merge branch 'maint'
 
-2016-12-24 Geert Janssens 
+2016-03-19 Geert Janssens 
 
-	* Isolate the gtk callbacks from the assistant class' member variables.
+	* Merge branch 'maint'
 
-2016-12-24 Geert Janssens 
+2016-03-19 Geert Janssens 
 
-	* Consistently use gnucash dialogs instead of generic gtk ones
+	* Fix doxigen comment after changed const behaviour
 
-2016-12-24 Geert Janssens 
+2016-03-19 Geert Janssens 
 
-	* Use std::unique_ptr for the TxImport object for better memory management
+	* Bug 620281 - Adding reversing transaction to bill transactions creates undeleteable transactions
 
-2016-12-24 Geert Janssens 
+2016-03-19 Geert Janssens 
 
-	* Convert assistant struct into a real c++ class
+	* Refuse to void read-only transactions.
 
-2016-12-23 Geert Janssens 
+2016-03-19 Geert Janssens 
 
-	* Handle error skipping on the preview page as well and drop the custom page forwarder
+	* Bug 754209 - Bills can be posted multiple times from "find bill" search results - follow up
 
-2016-12-22 Geert Janssens 
+2016-03-17 John Ralls 
 
-	* Complete error checking on the preview page
+	* Bug 733164 - Command-H Invokes Help->Help Contents
 
-2016-12-20 Geert Janssens 
+2016-03-17 John Ralls 
 
-	* Move account searching to GncTxImport as it's responsible for the data
+	* Set the transaction currency during auto-completion.
 
-2016-12-20 Geert Janssens 
+2016-03-17 John Ralls 
 
-	* Remove redundant code
+	* Correctly re-value splits when the transaction currency is changed.
 
-2016-12-20 Geert Janssens 
+2016-03-17 Geert Janssens 
 
-	* Cleanup round - move functions up and down to group related ones
+	* Use PRIi64 instead of PRIx64
 
-2016-12-18 Geert Janssens 
+2016-03-17 Geert Janssens 
 
-	* Cleanup round
+	* Bug 728722 - Setting number format details appear wrong in Help, section 10.3.4. Counters Book Options Tab
 
-2016-12-17 Geert Janssens 
+2016-03-16 Mike Evans 
 
-	* Revisit csv settings
+	* Bug 754209 - Bills can be posted from "find bill" search results even if bill is already posted and results in extra $ posted to A/P
 
-2016-12-16 Geert Janssens 
+2016-03-14 Geert Janssens 
 
-	* Revisit error checking on the preview page.
+	* Bug 720934 - Barcharts with many data points have overlapping x-axis labels
 
-2016-12-16 Geert Janssens 
+2016-03-11 Carsten Rinke 
 
-	* Move the base account selection to the preview page
+	* Bug728692 - Time bound on the Budget Barchart report
 
-2016-12-16 Geert Janssens 
+2016-02-28 Chris Good 
 
-	* Add account selector to the preview window
+	* Add Tip Of The Day re using multiple windows to do comparisons - Bug 762800
 
-2016-12-16 Geert Janssens 
+2016-03-13 Geert Janssens 
 
-	* Some variable declaration cleanups
+	* Fixup previous commit
 
-2016-12-16 Geert Janssens 
+2015-12-21 Matt G 
 
-	* Make sure row coloring happens each time the preview is updated
+	* Bug 742352 - Budget Summary section does not show expense totals
 
-2016-12-16 Geert Janssens 
+2015-11-11 Gilles Dartiguelongue 
 
-	* Remove redundant check for valid column types
+	* Bug 760015 - guile support is automagic
 
-2016-12-13 Geert Janssens 
+2016-03-11 Robert Fewell 
 
-	* Revisit csv trans import settings handling
+	* Change look_for_old_mapping to return NULL
 
-2016-12-13 Geert Janssens 
+2016-03-10 Robert Fewell 
 
-	* Drop fixed-format csv importer
+	* Rename some function to better reflect there use
 
-2016-12-13 Geert Janssens 
+2016-03-10 Robert Fewell 
 
-	* Allow user to only select column_types that make sense in the current context
+	* Remove unnecessary use of g_strdup of full_name
 
-2016-12-13 Geert Janssens 
+2016-03-13 Robert Fewell 
 
-	* Drop balance column from csv importer
+	* Change some functions to reduce code duplication and move feature setting to where KVP is actually set
 
-2016-12-11 Geert Janssens 
+2016-03-13 Robert Fewell 
 
-	* Adapt csv export format to new csv importer capabilities
+	* Add feature flag to prevent versions older than 2.6.12 from opening the data file.
 
-2016-12-11 Geert Janssens 
+2016-03-07 Robert Fewell 
 
-	* Extend csv importer to be able to import multi-currency and stock transactions
+	* Use GncImapInfo instead of struct imap_info where it makes sense to.
 
-2016-12-11 Geert Janssens 
+2016-03-07 Robert Fewell 
 
-	* Extend csv importer to be able to import voided transactions
+	* Change when an existing entry exists we add it to the converted entry
 
-2016-12-11 Geert Janssens 
+2016-03-07 Robert Fewell 
 
-	* Extend csv importer to be able to import reconcile states
+	* Improve old separator recognition by looking for the longest top level entry that matches the prefix. Also test for valid map account so we are not wasting time trying to convert a valid full_name.
 
-2016-12-11 Geert Janssens 
+2016-02-29 Robert Fewell 
 
-	* Add additional check before creating splits or transactions
+	* Modify gnc_account_imap_convert_bayes to run only once by setting a KVP Book entry and then testing
 
-2016-12-11 Geert Janssens 
+2016-02-29 Robert Fewell 
 
-	* Defer testing boost:optionals until really needed Similarly only lookup book when really needed
+	* Add Bayesian conversion to end of file open
 
-2016-12-11 Geert Janssens 
+2016-02-29 Robert Fewell 
 
-	* Create trans/split props only when needed and have them keep their own value of date/currency format
+	* Check for existing guid entries and update
 
-2017-01-14 Geert Janssens 
+2016-02-29 Robert Fewell 
 
-	* Extend csv importer to be able to import split action fields
+	* Create function to change Bayesian entries based on full account name to that of the account guid
 
-2016-12-10 Geert Janssens 
+2016-02-29 Robert Fewell 
 
-	* Avoid assigning empty or null char*'s to a std::string
+	* Modify Imap helper function to find map account by  guid
 
-2016-12-10 Geert Janssens 
+2016-02-29 Robert Fewell 
 
-	* csv import prefs - store coltypes as strings
+	* Rename account_name to account_guid to reflect change of use and remove newlines from PINFO lines
 
-2016-12-08 Geert Janssens 
+2016-02-29 Robert Fewell 
 
-	* Convert column_widths to a vector
+	* Change Bayes functions to use guid account string instead of full account name in kvp path
 
-2016-12-08 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Drop superfluous code that sets the default in case of an error.
+	* Merge branch 'maint'
 
-2016-12-08 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Use std::vector to store column types, and a few other data type changes
+	* Bug 763146 - Invalid exchange rate is recorded when entering multi-currency transaction
 
-2016-12-05 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Convert CsvTransSettings into a c++ class
+	* Ensure numerator is positive before checking if the value is < 1.
 
-2017-01-14 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Remove final dependencies on GOFFICE
+	* Ensure price is set when the amount is entered and user doesn't tab out.
 
-2016-12-03 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Fix error handling in the multi-split case (and probaly in the other case as well)
+	* Test rounded values, but don't store them, to minimize jitter in prices.
 
-2016-12-02 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Introduce multi-split imports in the csv importer
+	* Check price_source precedence first to save computation.
 
-2016-12-02 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Rework csv import preview with additional cleanups
+	* Ensure that xferData->price_source is always set correctly.
 
-2016-11-29 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Fix memory leaks in the draft transactions object
+	* Fix double semicolon.
 
-2016-12-11 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Cleanup commit
+	* Remove price-direction code for to default currency and alphabetic order.
 
-2016-11-29 Geert Janssens 
+2016-03-11 John Ralls 
 
-	* Rework the intermediate properties storage
+	* Extract functions update_price and new_price from create_price.
 
-2016-11-28 Geert Janssens 
+2016-03-10 John Ralls 
 
-	* Refactor parse_to_trans into smaller functions
+	* Merge branch 'maint'
 
-2016-11-28 Geert Janssens 
+2016-03-10 John Ralls 
 
-	* Add property structs for transaction vs split properties
+	* Fix typo in HTML header.
 
-2016-11-28 Geert Janssens 
+2016-03-10 John Ralls 
 
-	* Refactor pair into a tuple in preparation of extending it
+	* Bug 763111 - commodities prices editor creates hidden db entries
 
-2016-11-28 Geert Janssens 
+2016-03-10 John Ralls 
 
-	* Factor out balance calculating function
+	* Bug 763279 - GnuCash has empty reports
 
-2016-10-12 Geert Janssens 
+2016-03-08 John Ralls 
 
-	* Drop unused parameter
+	* Bug 722996 - Cannot add stock price on Price Editor
 
-2016-10-11 Geert Janssens 
+2016-03-10 Geert Janssens 
 
-	* Drop remaining GError boilerplate from the c++ importer
+	* Merge branch 'maint'
 
-2016-10-11 Geert Janssens 
+2016-03-10 Geert Janssens 
 
-	* Replace GError usage in parse function with proper try catch blocks
+	* Minor tweaks to Bayesian feature flag
 
-2016-10-10 Geert Janssens 
+2016-03-10 Robert Fewell 
 
-	* Replace GError usage in file_format and load_file with proper try catch blocks
+	* Make gnucash 2.7+ rerun bayesian data conversion whenever needed
 
-2017-01-14 Geert Janssens 
+2016-02-20 Robert Fewell 
 
-	* Throw in case date can't be parsed instead of returning -1 as date
+	* Allow matching accounts to be found also by their GUID which will be used in newer versions. The default behaviour is still to create new entries under the account fullname.
 
-2016-10-10 Geert Janssens 
+2016-03-10 Robert Fewell 
 
-	* Various small C++ and other cleanups
+	* Introduce GUID_BAYES feature flag
 
-2016-10-10 Geert Janssens 
+2016-03-03 Mike Evans 
 
-	* Use gnc-date functions while parsing date strings for consistent timezone handling
+	* Bug 762971 - Duplicating multiple invoices results in invoices without an ID number
 
-2016-09-16 Geert Janssens 
+2016-03-02 Mike Evans 
 
-	* Migrate the glib based test case for GncTxImport to google-test
+	* Bug - 761172 Importing invoices posts incorrect values.
 
-2016-09-16 Geert Janssens 
+2016-02-28 Phil Longstaff 
 
-	* Use consistent name for importer class and its filename
+	* Memory leak in gnc-gsettings.c
 
-2016-09-15 Geert Janssens 
+2016-02-28 Phil Longstaff 
 
-	* Fix column sizing for fixed width data
+	* Close some more memory leaks
 
-2016-09-15 Geert Janssens 
+2016-02-28 Phil Longstaff 
 
-	* Prevent crash when switching to fixed with in assistant
+	* Close some memory leaks identified by valgrind.
 
-2016-09-15 Geert Janssens 
+2016-02-22 Geert Janssens 
 
-	* Readd a column for the error messages when reviewing parse errors
+	* Bug 744157 - Tip about subaccount is confusing
 
-2016-09-15 Geert Janssens 
+2016-02-18 pmralbuquerque 
 
-	* Return nullptr in case of invalid numeric field to allow proper error handling
+	* Updated translations after TACG translation
 
-2016-09-15 Geert Janssens 
+2016-02-17 fell 
 
-	* Rearrange statements in gnc_csv_preview_update_assist
+	* Update the list of Finance::Quote methods
 
-2016-09-14 Geert Janssens 
+2016-02-11 Sebastien Bourdelin 
 
-	* Use one common liststore for all the combocells in the preview header treeview
+	* Fix a typo
 
-2016-09-14 Geert Janssens 
+2016-02-09 fell 
 
-	* Some changes to adhere better to the gnucash coding guidelines
+	* Add comment about replacement of 10000 BYR by 1 BYN
 
-2016-09-13 Geert Janssens 
+2016-01-27 RobGowin 
 
-	* Drop fake test in fw tokenizer
+	* cmake - Increase test pass rate on Windows
 
-2016-09-13 Geert Janssens 
+2016-02-01 Prayag Verma 
 
-	* Add test cases for tokenizer classes
+	* Fix Typos in doc/README.translator.txt
 
-2016-09-13 Geert Janssens 
+2016-01-26 RobGowin 
 
-	* Trim whitespace in case of fixed width input
+	* Fix CMake build after maint merge
 
-2016-09-10 Geert Janssens 
+2016-01-26 John Ralls 
 
-	* Replace transactions GList with a std::multimap
+	* Merge branch 'maint'
 
-2016-09-10 Geert Janssens 
+2016-01-15 RobGowin 
 
-	* Another round of small c to c++(11) conversions
+	* Remove extra symlink command
 
-2016-09-10 Geert Janssens 
+2016-01-18 RobGowin 
 
-	* Delay the test for a default account until it's needed
+	* cmake - Add ability to run tests under CMake
 
-2016-09-09 Geert Janssens 
+2016-01-23 RobGowin 
 
-	* Fix memory management for the temporary trans properties
+	* Don't skip test under clang when using Guile 2.x
 
-2016-09-10 Geert Janssens 
+2016-01-23 RobGowin 
 
-	* Reduce code duplication by reusing trans_add_split
+	* Change test to use LIBDIR to find dynamic libraries
 
-2016-09-09 Geert Janssens 
+2016-01-23 RobGowin 
 
-	* Fix memory corruption bug
+	* Add TEST_PATH variable to test
 
-2016-09-09 Geert Janssens 
+2016-01-24 John Ralls 
 
-	* Refactor TransProperty stuff to a simple void*
+	* Fix Travis build error.
 
-2016-09-08 Geert Janssens 
+2016-01-24 John Ralls 
 
-	* Replace private data structure TransPropertyList with a std::map
+	* Pretty up the SLR error dialog.
 
-2016-07-05 Geert Janssens 
+2016-01-24 John Ralls 
 
-	* Remove fake csv parsing test
+	* Bug 754856 - scheduled transaction <gnc.app-utils.sx> fails without warning
 
-2016-07-05 Geert Janssens 
+2016-01-24 John Ralls 
 
-	* Add some polish to csv_import_trans_file_chooser_confirm_cb
+	* Bug 754856 - scheduled transaction <gnc.app-utils.sx> fails without warning.
 
-2016-06-25 Geert Janssens 
+2016-01-23 John Ralls 
 
-	* Prevent c++ name mangling on functions used as callbacks by gtk
+	* Revert "Use python 3.3 VirtualEnv on travis."
 
-2016-06-25 Geert Janssens 
+2016-01-23 John Ralls 
 
-	* csv-imp - use enum instead of strings to track user selected column types
+	* Use python 3.3 VirtualEnv on travis.
 
-2016-06-12 Geert Janssens 
+2016-01-20 RobGowin 
 
-	* Convert column type to name mapping into a std::map
+	* [cmake] Reflect commit db0fd2 (Replace the TP pt.po ...) in CMake build.
 
-2016-06-12 Geert Janssens 
+2016-01-22 Geert Janssens 
 
-	* Adapt assistant for c++ guid changes
+	* Fix csv-imp test for master branch
 
-2016-01-30 Geert Janssens 
+2016-01-22 Geert Janssens 
 
-	* Refactor csv assistant code to use GncCsvParseData class instead of gnc-csv-model code
+	* Merge branch 'maint'
 
-2016-06-07 Geert Janssens 
+2016-01-22 Geert Janssens 
 
-	* Build assistant-csv-trans-import.c(pp) as c++
+	* Align gtkmm test suite with recent template updates
 
-2016-06-12 Geert Janssens 
+2016-01-22 Geert Janssens 
 
-	* Introduce parse error state
+	* Revert "Fix typo"
 
-2016-06-12 Geert Janssens 
+2016-01-22 Geert Janssens 
 
-	* Small local variable cleanups
+	* Fix typo
 
-2016-06-07 Geert Janssens 
+2016-01-21 John Ralls 
 
-	* C++ - use std::pair to store tokenized line together with its error message
+	* Fix typo.
 
-2016-01-31 Geert Janssens 
+2016-01-21 John Ralls 
 
-	* C++11 Convert unscoped enum into scoped one
+	* Fix segfault in utest-gnc-csv-model Teardown.
 
-2016-01-31 Geert Janssens 
+2016-01-21 John Ralls 
 
-	* Use more C++11 features
+	* Fix new cdv-import tests for running in a separate build directory.
 
-2016-02-08 Geert Janssens 
+2016-01-21 Alexander Pushkarev 
 
-	* Revert to boost.regex without ICU support
+	* adding BYN currency according to ISO 4217 ammendment #161 http://www.currency-iso.org/en/shared/amendments/iso-4217-amendment.html
 
-2016-02-06 Geert Janssens 
+2016-01-20 Geert Janssens 
 
-	* Redo parse_date function using boost regular expressions
+	* csv-imp - add parse test for semicolon separated strings
 
-2016-01-28 Geert Janssens 
+2016-01-20 Geert Janssens 
 
-	* Convert error_lines GList in a vector of strings
+	* csv-imp - new parse test starting from an in-source string struct
 
-2016-01-28 Geert Janssens 
+2015-09-28 Geert Janssens 
 
-	* Replace stf based file parser with gnc-tokenizer based one
+	* csv-imp - use GNC_TEST_ADD_FUNC for test_parse_date as well
 
-2015-05-08 Geert Janssens 
+2015-09-28 Geert Janssens 
 
-	* Use vector instead of GArray for column_types class member
+	* csv-imp - test_gnc_csv_new_parse_data doesn't use the fixture
 
-2016-01-23 Geert Janssens 
+2015-09-23 Geert Janssens 
 
-	* Convert GncCsvParseData into a class
+	* Match calls to g_string_chunk_new with g_string_chunk_free
 
-2016-01-23 Geert Janssens 
+2015-09-28 Geert Janssens 
 
-	* csv-imp - copy gnc-csv-model and make it build as c++
+	* csv-imp - don't free the parse data just created for testing
 
-2016-06-07 Geert Janssens 
+2015-09-28 Geert Janssens 
 
-	* Add dummy tokenizer to be used when file format isn't known yet
+	* csv-imp - move tests for gnc_csv_load_file to separate function
 
-2016-06-12 Geert Janssens 
+2015-09-23 Geert Janssens 
 
-	* Add functions to manipulate fixed width column positions
+	* csv-imp - test for gnc_csv_new_parse_data and skip gnc_csv_parse_data_free
 
-2016-01-28 Geert Janssens 
+2015-09-23 Geert Janssens 
 
-	* Add fixed width file parser based on boost::tokenize
+	* csv-imp - use setup and teardown for test_gnc_csv_parse
 
-2016-01-26 Geert Janssens 
+2015-09-23 Geert Janssens 
 
-	* Add csv file parser based on boost::tokenize
+	* Mark static functions as not testable
 
-2016-01-28 Geert Janssens 
+2016-01-20 Geert Janssens 
 
-	* Introduce base class for parsing importable files
+	* Test Date fixup
 
-2016-01-28 Geert Janssens 
+2015-09-22 Geert Janssens 
 
-	* Whitespace and spelling corrections
+	* csv-imp - add test for parse_date
 
-2017-01-14 Geert Janssens 
+2015-09-22 Geert Janssens 
 
-	* Look for translatable strings in lib directory as well
+	* csv-imp - add basic test for gnc_csv_parse
 
-2017-01-14 Geert Janssens 
+2015-05-11 Geert Janssens 
 
-	* Use internalized goffice parts in csv-import
+	* csv-imp - add initial (empty) test framework
 
-2016-01-26 Geert Janssens 
+2015-09-22 Geert Janssens 
 
-	* Fix build issues with goffice imported sources
+	* Set fixed time values so test results won't depend on the time the test is run
 
-2016-01-28 Geert Janssens 
+2015-05-12 Geert Janssens 
 
-	* Internalize parts of the goffice code
+	* Adjust GError usage to comply with the GError rules
 
-2016-01-27 Geert Janssens 
+2015-09-22 Geert Janssens 
 
-	* Small amendements to gnc-csv-account-map
+	* Cumulated minor spelling fixes in comments and other non-code texts
 
-2017-02-20 Geert Janssens 
+2015-05-12 Geert Janssens 
 
-	* Yet another tweak to properly find GMOCK sources
+	* Some indentation adapations
 
-2017-02-18 John Ralls 
+2016-01-20 Geert Janssens 
 
-	* Silence the no lock table warnings in test-backend-dbi.
+	* Hide owner abstraction from user oriented gui
 
-2017-02-18 John Ralls 
+2016-01-19 John Ralls 
 
-	* Fix failure to drop the temp numeric table at the end of dbi_library_test.
+	* Add small utility to print message catalog statistics.
 
-2017-02-18 John Ralls 
+2016-01-19 John Ralls 
 
-	* Make gnc_dbi_safe_sync_all safer.
+	* Replace the TP pt.po with the directly-contributed pt_PT.po
 
-2017-02-18 sdementen 
+2016-01-18 Robert Gill 
 
-	* add gnc_get_current_session to swig interface
+	* Bug 723689 - Splash screen doesn’t set the floating hint.
 
-2017-02-16 John Ralls 
+2016-01-17 John Ralls 
 
-	* Move begin_transaction in lock_database to include checking for the table…
+	* Bug 760711 - Non-ASCII characters not shown in Report Name when a report is created with 2.6.11
 
-2017-02-16 John Ralls 
+2016-01-17 fell 
 
-	* Add SAVEPOINT support to enable nested gnc_dbi_transaction calls.
+	* Fix a mistyped error message in configure.ac
 
-2017-02-16 John Ralls 
+2016-01-17 fell 
 
-	* Use the transactional member functions instead of running queries directly.
+	* Supplement to commit 837b258: Add ChangeLog.2015 to dist_doc_DATA
 
-2017-02-15 John Ralls 
+2016-01-15 John Ralls 
 
 	* Merge branch 'maint'
 
-2017-02-14 fell 
+2016-01-15 John Ralls 
 
-	* Review of pull request #125 from Mechtilde
+	* Fix reset of PKG_CONFIG_PATH to unset variable.
 
-2017-02-14 Frank H. Ellenberger 
+2016-01-15 RobGowin 
 
-	* Merge pull request #125 from Mechtilde/TranslationDE
+	* Tweak handling of COPYING file
 
-2017-02-12 Mechtilde 
+2016-01-13 RobGowin 
 
-	* msgmerge with gnucash-2.6.15.pot
+	* Support CMake 3.0 for Debian Jessie
 
-2016-12-26 Mechtilde 
+2016-01-14 Mike Evans 
 
-	* translation tip_of_the_day
+	* Bug 756469 - CSV Invoice Import - Items with double quote escape not imported.
 
-2017-02-12 fell 
+2016-01-12 John Ralls 
 
-	* Improve comment about available languages
+	* Merge branch 'maint'
 
-2017-02-10 fell 
+2016-01-12 John Ralls 
 
-	* Set a separate translator comment to avoid pulling the whole file header comment in POT
+	* Link LICENSE to COPYING, don't install INSTALL.
 
-2017-02-10 fell 
+2016-01-12 John Ralls 
 
-	* Fix german language tag
+	* Merge branch 'maint'
 
-2017-02-10 fell 
+2015-12-26 Rob Gowin 
 
-	* Update PACKAGE_BUGREPORT, set PACKAGE_URL
+	* CMake build changes for maint
 
-2017-02-08 Geert Janssens 
+2015-12-07 Rob Gowin 
 
-	* One more stab at properly discovering gtest/gmock
+	* Add ability to build GnuCash with CMake
 
-2017-02-06 Geert Janssens 
+2016-01-12 John Ralls 
 
-	* Fix cmake's gmock handling to work with Fedora packages
+	* Add dialog-imap-editor to CMakeLists.txt.
 
-2017-02-04 John Ralls 
+2016-01-12 John Ralls 
 
-	* Make gnc_dbi_safe_sync_all safer.
+	* Bug 760529 - Get Quotes updates value just once per day
 
-2017-02-04 John Ralls 
+2016-01-12 John Ralls 
 
-	* Move the transaction-lock on obtaining the database lock earlier.
+	* Remove extraneous debugging output.
 
-2017-02-04 John Ralls 
+2016-01-12 Mike Evans 
 
-	* Add SAVEPOINT support to enable nested gnc_dbi_transaction calls.
+	* Added some comments.
 
-2017-02-04 John Ralls 
+2016-01-11 John Ralls 
 
-	* Extract static gnc_dbi_transaction functions.
+	* Merge branch 'maint'
 
-2017-02-02 Geert Janssens 
+2016-01-11 John Ralls 
 
-	* Optionally locate boost via environment variable BOOST_ROOT
+	* Merge branch 'import-map-editor'
 
-2017-02-02 Geert Janssens 
+2016-01-11 John Ralls 
 
-	* Fix building gtest library on mingw
+	* Add missing static declaration.
 
-2017-02-02 Geert Janssens 
+2016-01-11 Robert Fewell 
 
-	* Make google test framework a mandatory build dependency
+	* New functions to simplify delete and filter parts
 
-2017-02-01 DIG 
+2016-01-06 Robert Fewell 
 
-	* Small updates for Russian translation
+	* Add Filter option to tree store
 
-2017-02-01 Geert Janssens 
+2015-12-28 Robert Fewell 
 
-	* Fake change to test mail script on code.gnucash.org
+	* Change list store into a tree store
 
-2017-02-01 Geert Janssens 
+2015-12-28 Robert Fewell 
 
-	* Drop callback that reloads report when a report tab is selected
+	* Some more name changes
 
-2017-02-01 Geert Janssens 
+2015-12-28 Robert Fewell 
 
-	* Revert "Add call back to track page size changes"
+	* Rename some functions and structures based on imap
 
-2017-02-01 Geert Janssens 
+2015-12-17 Robert Fewell 
 
-	* Revert "Change report resizing when not in view"
+	* Rename probability to count.
 
-2017-02-01 Geert Janssens 
+2015-12-17 Robert Fewell 
 
-	* Merge branch 'maint'
+	* Rename files and functions based on bayes to imap
 
-2017-02-01 Geert Janssens 
+2015-12-17 Robert Fewell 
 
-	* Log javascript console messages to the trace file
+	* Use Glib G_GINT64_FORMAT to specify correct format string for gint64 values.
 
-2017-02-01 Geert Janssens 
+2015-12-13 Robert Fewell 
 
-	* Always use actual window size when calculating x-axis ticks for charts
+	* Moved all KVP handling to Account.c, Added two main functions that return a Glist of kvp_info for Bayesian and Non Bayesian entries. Also added a get and delete function based on kvp path.
 
-2017-02-01 Geert Janssens 
+2015-11-22 Bob-IT 
 
-	* Bug 777875 - Reports with charts are flickering in certain circumstances
+	* Update POTFILES.in
 
-2017-01-30 Geert Janssens 
+2015-11-22 Robert Fewell 
 
-	* Extend account color to all columns in the account hierarchy page
+	* Reduce code duplication for non Bayesian information.
 
-2017-01-30 Geert Janssens 
+2015-11-20 Robert Fewell 
 
-	* Fix duplicate widget names in gtkbuilder file
+	* Cosmetic changes.
 
-2017-01-30 Geert Janssens 
+2015-11-20 Robert Fewell 
 
-	* Drop with_html_engine option
+	* Add the remove option.
 
-2017-01-30 Geert Janssens 
+2015-11-18 Robert Fewell 
 
-	* Merge branch 'maint'
+	* Hide the probability column where appropriate.
 
-2017-01-28 Geert Janssens 
+2015-11-18 Robert Fewell 
 
-	* Travis - fix failure to load some libraries while running scm tests
+	* Get Bayesian values, needed to change Qof function as values are stored under FRAME,FRAME,VALUE so changed to test for a FRAME and returns NULL.
 
-2017-01-28 Geert Janssens 
+2015-11-18 Robert Fewell 
 
-	* Bug 759934 - Tiny reports in HiDPI
+	* Get Non Bayesian and Online ID information
 
-2017-01-27 Geert Janssens 
+2015-11-15 Robert Fewell 
 
-	* Drop a couple of webkit related configure tests
+	* Add Basic framework for Bayesian editor dialog
 
-2017-01-26 D. Hugh Redelmeier 
+2016-01-11 strainu 
 
-	* add comments to clarify that taxtxf.scm is US-specific
+	* Update Romanian translations
 
-2017-01-26 Pedro Albuquerque 
+2016-01-10 John Ralls 
 
-	* Bug 777561 - Update pt.po to v. 2.6.15
+	* Release 2.6.11 (tag: 2.6.11)
 
-2016-12-27 Robert Fewell 
+2016-01-10 John Ralls 
 
-	* Bug 516920 - Calendar Pop up disappears of the left side
+	* Update copyright and ChangeLog for the new year.
 
-2017-01-16 klemens 
+2016-01-10 John Ralls 
 
-	* spelling fixes
+	* Add Language header value to silence msgfmt error.
 
-2017-01-23 Geert Janssens 
+2016-01-10 John Ralls 
 
-	* Merge branch 'maint'
+	* Update TP translations to latest files.
 
-2017-01-16 klemens 
+2016-01-10 Mike Evans 
 
-	* spelling fixes
+	* Bug 760398 - Cancelling the creation of a duplicate bill or invoice doesn't reset the invoice number counter
 
-2017-01-21 Pedro Albuquerque 
+2016-01-09 John Ralls 
 
-	* Several spelling corrections of the pt_PT translation
+	* Replace %ld and cast of gint64 to long with G_GINT64_FORMAT and no cast.
 
-2017-01-17 Mike Evans 
+2016-01-09 John Ralls 
 
-	* Make strings translatable in dialog-bi-import.c
+	* Fix travis compilation error.
 
-2017-01-15 Mike Evans 
+2016-01-07 Pedro Albuquerque 
 
-	* Bug 767032 - Bad invoices from importing "posted" needing currency conversion
+	* Update to 2.6.10.pot
 
-2017-01-14 John Ralls 
+2016-01-08 John Ralls 
 
-	* Ensure that all GncDate and GncDateTime constructors are in try blocks.
+	* Refactor the horror of gnc_sxed_check_consistent().
 
-2017-01-14 John Ralls 
+2016-01-07 John Ralls 
 
-	* Make GncDate and GncDateTime default constructors have the current day/time.
+	* Refactor gnc_sxed_check_changed() with a bunch of extract-functions.
 
-2017-01-14 John Ralls 
+2016-01-07 John Ralls 
 
-	* Fix crash when $TZ isn’t defined.
+	* Don't make the $prefix/share/gnucash/gnome link on OSX_QUARTZ
 
-2017-01-14 John Ralls 
+2016-01-05 John Ralls 
 
-	* Actually checkout gtest 1.8.0 in travis tests.
+	* Bug 680104 - formula not calculated when variables are mixed with constants
 
-2017-01-13 John Ralls 
+2016-01-03 John Ralls 
 
-	* Fix local timezone-dependent test.
+	* Extract Functions split_apply_formulas and split_apply_exchange_rate.
 
-2017-01-13 John Ralls 
+2016-01-09 fell 
 
-	* Change last test in test-gnc-timezone to EXPECT_EQ so it will log the results.
+	* Supplement to commit 79bb4b8: add built gschema files to .gitignore
 
-2017-01-13 John Ralls 
+2016-01-09 fell 
 
-	* Display failing test-gnc-timezone.log for troubleshooting.
+	* simplify commit c2598f8: Add a missing gettext in plugin page owner tree
 
-2017-01-13 John Ralls 
+2016-01-07 Alex Aycinena 
 
-	* Fix test failures from adding bad-date tests.
+	* Allow panel that provides information about TXF categories to be adjusted by the user in the Income Tax Information dialog under Edit->Tax Report Options.
 
-2017-01-13 Geert Janssens 
+2016-01-07 Alex Aycinena 
 
-	* Travis - lock google test framework to 1.8.0 for reproducible tests
+	* Minor improvement to information provided about TXF categories in the Income Tax Information dialog under Edit->Tax Report Options.
 
-2017-01-13 Geert Janssens 
+2016-01-06 Mike Evans 
 
-	* Travis - skip testing on trunk branch
+	* Prevent some GtkEntry getting focus in invoice.
 
-2017-01-12 Geert Janssens 
+2016-01-05 fell 
 
-	* Enable google test on travis
+	* Remove translatable flag from placeholder labels in dialog date-close
 
-2017-01-12 Geert Janssens 
+2016-01-02 John Ralls 
 
-	* Fix signedness of certain gmock based tests
+	* Rename sequence_ctx to temporal_state for consistency and clarity.
 
-2017-01-12 John Ralls 
+2016-01-02 John Ralls 
 
-	* Prevent leaking exceptions from gnc_dmy2timespec_neutral
+	* Bug 759570 - Postponing a repeating SX skips over the instance.
 
-2017-01-10 John Ralls 
+2016-01-02 John Ralls 
 
-	* Add note about setting GTEST cmake variables.
+	* Fix up some overly-long lines.
 
-2017-01-10 Geert Janssens 
+2016-01-02 John Ralls 
 
-	* Fix compiler warning about confusing indentation
+	* Explicitly type GncSXInstance's temporal state member.
 
-2017-01-10 Geert Janssens 
+2016-01-02 John Ralls 
 
-	* Drop unused DEBUG_MEMORY macro
+	* Clean up some noise.
 
-2017-01-07 Stefan Talpalaru 
+2016-01-02 John Ralls 
 
-	* configure: fix --disable-debug, --disable-profile and --disable-locale-specific-tax
+	* Remove xaccSchedXactionGetInstanceAfter
+
+2016-01-02 fell 
+
+	* Add a missing gettext in plugin page owner tree
 
diff --git a/NEWS b/NEWS
index d0e0b17..ce01879 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,80 @@
 Version history:
 ------- -------
+2.7.0  - 19 September 2017
+       The Gnucash Development Team is pleased to release Gnucash 2.7.0,
+       the first release of an unstable series leading to Gnucash 2.8.0.
+
+       This release is UNSTABLE and SHOULD NOT BE USED in production.
+
+       The headline item for this release is that GnuCash now uses the
+       Gtk+-3.0 Toolkit and the WebKit2Gtk API. This change was forced
+       on us by some major Linux distributions dropping support for
+       the WebKit1 API. Unfortunately the Webkit project doesn't
+       support Microsoft Windows so that platform will continue to use
+       the WebKit1 API, though with Gtk3. We've selected Gtk+-3.14.0
+       as the minimum version because it fully supports CSS
+       theming. Geert Janssens did the original conversion and Bob
+       Fewell has contributed much UI polishing.
+
+       Geert Janssens has overhauled the CSV importer, rewriting the
+       bulk of it in C++, adding new features including the ability to
+       re-import CSV files exported from GnuCash.
+
+       Geert has also adjusted the data file directory so that it's
+       located appropriately to the operating system's conventions by
+       default. It's still possible to overried with the environment
+       variable GNC_DOC_PATH, which replaces GNC_DOT_DIR in earlier
+       versions of GnuCash.
+
+       Bob Fewell has converted the account representation in the
+       Bayes import map to GUID from strings so that the matcher won't
+       have to be retrained if you rename an account. THIS WILL MAKE
+       YOUR MAP UNREADABLE BY PREVIOUS VERSIONS OF GNUCASH.  Bob has
+       also implemented an editor to remove outdated or incorrect
+       match data from the import maps, added user interfacs for
+       managing files associated with transactions, improved the
+       facility for removing old prices from the price database, and
+       provided for removing deleted files from the history list in
+       the file menu.
+
+       John Ralls has rewritten the numerics to allow for more
+       significant digits. The old 6-digit-maximum fraction will be a
+       9-digit maximum by 2.8. there is still some cleanup required
+       before the limit can actually change.
+
+       Christopher Lam has contributed a new Income GST Report and
+       made some improvements to the Transaction report.
+
+       Carsten Rinke has improved the appearance of the chart reports.
+
+       John Ralls and Aaron Laws have rewritten several parts of the
+       engine and SQL backend in C++, an effort that will continue in
+       the next development cycle. KVP is now private to
+       libgncmod-engine and accessible outside via qof_instance_set
+       and qof_instance_get. Aaron has reimplemented KVP itself in C++
+       using boost::variant and GUID based on boost::UUID.
+
+       John rewrote the date implementation to boost::date-time,
+       replacing a Glib GDateTime implementation. This makes the
+       earliest date recordable 1 January 1400CE instead of 1 January
+       1CE. We doubt any users will be affected.
+
+       The CuteCash front end has been removed. The code we need from
+       GOffice has been brought into the GnuCash code base so GOffice
+       is no longer a dependency.
+
+       Rob Gowin, in addition to creating the CMake-based build system
+       partway through the 2.6 release cycle, has added to it a dist
+       function that allows us to distribute tarballs that will build
+       with either CMake or Autotools... but look for Autotools to be
+       dropped soon.
+
+       Of interest mostly to developers, we've reorganized the code
+       into a core library directory, libgnucash, and
+       applications-specific directory, gnucash.
+
+
+
 2.6.17 - 2 July 2017
 
 The following bugs are fixed:
diff --git a/README.dependencies b/README.dependencies
index 8109bf0..56753b1 100644
--- a/README.dependencies
+++ b/README.dependencies
@@ -62,11 +62,9 @@ Libraries/Deps
 --------------
   required		Version
   --------		_______
-glib2			2.28.0
-gtk+2			2.24.0
+glib2			2.40.0
+gtk+3			3.14.0
 guile			1.8.5 or 2.0.0
-libgnomecanvas		2.0
-[lib]goffice		0.7.0
 libxml2			2.5.10
 libxslt
 ICU                                             International Compnents for
@@ -75,7 +73,8 @@ boost			1.50.0                  locale and regex libs must be
                                                 built with ICU support.
 swig			2.0.10			Only required to build from git
 						or SVN.
-webkit			1.0
+webkit			webkitgtk-3.0 (Windows)
+                        webkit2gtk-3.0 (Everything Else)
 
   optional
   --------
diff --git a/configure.ac b/configure.ac
index 3df34c4..beafb19 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@ dnl Process this file with autoconf to produce a configure script.
 
 # Autoconf initialization
 AC_PREREQ(2.60)
-AC_INIT([GnuCash], [2.6.99], [gnucash-devel at gnucash.org])
+AC_INIT([GnuCash], [2.7.0], [gnucash-devel at gnucash.org])
 AC_CONFIG_HEADERS(config.h)
 AC_CONFIG_SRCDIR(libgnucash/engine/Transaction.h)
 AC_CONFIG_MACRO_DIR([macros])

commit 350dd690fd97ae302a1878b035f8206bfa386c7d
Author: John Ralls <jralls at ceridwen.us>
Date:   Wed Sep 6 11:43:43 2017 -0700

    Install the current, 2015, and 2016 ChangeLogs.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 94f74c1..2bee494 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -504,6 +504,8 @@ SET(gnucash_DOCS
     ChangeLog.2012
     ChangeLog.2013
     ChangeLog.2014
+    ChangeLog.2015
+    ChangeLog.2016
     DOCUMENTERS
     HACKING
     LICENSE
@@ -652,8 +654,10 @@ IF (BUILDING_FROM_VCS)
     COMMAND ${GIT_EXECUTABLE} log --format=\"%ad %aN %n%n%x09* %s%d%n\" --date=short --since=2016-01-01 > ${CMAKE_BINARY_DIR}/ChangeLog
     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
   )
+  INSTALL(FILES ${CMAKE_BINARY_DIR}/ChangeLog DESTINATION share/doc/gnucash)
 ELSE()
   FILE(COPY ChangeLog DESTINATION ChangeLog)
+  INSTALL(FILES ChangeLog DESTINATION share/doc/gnucash)
 ENDIF()
 
 #Link LICENSE to COPYING so that people expecting to find it,



Summary of changes:
 CMakeLists.txt                                     |    6 +-
 ChangeLog                                          | 6078 +++++++++++++++-----
 NEWS                                               |   75 +
 README.dependencies                                |    9 +-
 configure.ac                                       |    3 +-
 data/accounts/CMakeLists.txt                       |    4 +-
 data/accounts/Makefile.am                          |    1 +
 data/accounts/{cs => ca}/CMakeLists.txt            |    6 +-
 data/accounts/{sk => ca}/Makefile.am               |    3 +-
 .../{es_ES => ca}/acctchrt_brokerage.gnucash-xea   |   62 +-
 .../{es_ES => ca}/acctchrt_carloan.gnucash-xea     |   34 +-
 .../{es_MX => ca}/acctchrt_cdmoneymkt.gnucash-xea  |   42 +-
 .../{es_ES => ca}/acctchrt_childcare.gnucash-xea   |   17 +-
 .../{es_ES => ca}/acctchrt_common.gnucash-xea      |  252 +-
 .../{es_ES => ca}/acctchrt_currency.gnucash-xea    |   26 +-
 .../{es_ES => ca}/acctchrt_eduloan.gnucash-xea     |   34 +-
 .../{es_MX => ca}/acctchrt_fixedassets.gnucash-xea |   25 +-
 .../{es_ES => ca}/acctchrt_homeloan.gnucash-xea    |   33 +-
 .../{es_ES => ca}/acctchrt_homeown.gnucash-xea     |   34 +-
 .../{es_MX => ca}/acctchrt_otherloan.gnucash-xea   |   34 +-
 .../{es_MX => ca}/acctchrt_renter.gnucash-xea      |   25 +-
 .../{es_MX => ca}/acctchrt_retiremt.gnucash-xea    |   40 +-
 .../{es_ES => ca}/acctchrt_spouseinc.gnucash-xea   |   41 +-
 .../acctchrt_spouseretire.gnucash-xea              |   38 +-
 gnucash/gnome-utils/dialog-options.c               |    5 +
 gnucash/report/standard-reports/CMakeLists.txt     |    1 +
 gnucash/report/standard-reports/Makefile.am        |    1 +
 .../standard-reports/income-gst-statement.scm      | 1804 ++++++
 po/POTFILES.in                                     |    1 +
 29 files changed, 6938 insertions(+), 1796 deletions(-)
 copy data/accounts/{cs => ca}/CMakeLists.txt (81%)
 copy data/accounts/{sk => ca}/Makefile.am (94%)
 copy data/accounts/{es_ES => ca}/acctchrt_brokerage.gnucash-xea (76%)
 copy data/accounts/{es_ES => ca}/acctchrt_carloan.gnucash-xea (73%)
 copy data/accounts/{es_MX => ca}/acctchrt_cdmoneymkt.gnucash-xea (73%)
 copy data/accounts/{es_ES => ca}/acctchrt_childcare.gnucash-xea (75%)
 copy data/accounts/{es_ES => ca}/acctchrt_common.gnucash-xea (79%)
 copy data/accounts/{es_ES => ca}/acctchrt_currency.gnucash-xea (71%)
 copy data/accounts/{es_ES => ca}/acctchrt_eduloan.gnucash-xea (73%)
 copy data/accounts/{es_MX => ca}/acctchrt_fixedassets.gnucash-xea (79%)
 copy data/accounts/{es_ES => ca}/acctchrt_homeloan.gnucash-xea (75%)
 copy data/accounts/{es_ES => ca}/acctchrt_homeown.gnucash-xea (73%)
 copy data/accounts/{es_MX => ca}/acctchrt_otherloan.gnucash-xea (74%)
 copy data/accounts/{es_MX => ca}/acctchrt_renter.gnucash-xea (75%)
 copy data/accounts/{es_MX => ca}/acctchrt_retiremt.gnucash-xea (74%)
 copy data/accounts/{es_ES => ca}/acctchrt_spouseinc.gnucash-xea (78%)
 copy data/accounts/{es_MX => ca}/acctchrt_spouseretire.gnucash-xea (75%)
 create mode 100644 gnucash/report/standard-reports/income-gst-statement.scm



More information about the gnucash-changes mailing list