gnucash master: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Sun Nov 29 20:42:08 EST 2015


Updated	 via  https://github.com/Gnucash/gnucash/commit/039a4336 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/01784926 (commit)
	from  https://github.com/Gnucash/gnucash/commit/1c57e9c6 (commit)



commit 039a4336e2ac0c695c0b82a9b344571910de037a
Author: John Ralls <jralls at ceridwen.us>
Date:   Sun Nov 29 17:11:29 2015 -0800

    Convert XML Backend to compile as C++.

diff --git a/po/POTFILES.in b/po/POTFILES.in
index 3c6067b..8484bf7 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -62,40 +62,40 @@ src/backend/sql/gnc-slots-sql.cpp
 src/backend/sql/gnc-tax-table-sql.cpp
 src/backend/sql/gnc-transaction-sql.cpp
 src/backend/sql/gnc-vendor-sql.cpp
-src/backend/xml/gnc-account-xml-v2.c
-src/backend/xml/gnc-address-xml-v2.c
-src/backend/xml/gnc-backend-xml.c
-src/backend/xml/gnc-bill-term-xml-v2.c
-src/backend/xml/gnc-book-xml-v2.c
-src/backend/xml/gnc-budget-xml-v2.c
-src/backend/xml/gnc-commodity-xml-v2.c
-src/backend/xml/gnc-customer-xml-v2.c
-src/backend/xml/gnc-employee-xml-v2.c
-src/backend/xml/gnc-entry-xml-v2.c
-src/backend/xml/gnc-freqspec-xml-v2.c
-src/backend/xml/gnc-invoice-xml-v2.c
-src/backend/xml/gnc-job-xml-v2.c
-src/backend/xml/gnc-lot-xml-v2.c
-src/backend/xml/gnc-order-xml-v2.c
-src/backend/xml/gnc-owner-xml-v2.c
-src/backend/xml/gnc-pricedb-xml-v2.c
-src/backend/xml/gnc-recurrence-xml-v2.c
-src/backend/xml/gnc-schedxaction-xml-v2.c
-src/backend/xml/gnc-tax-table-xml-v2.c
-src/backend/xml/gnc-transaction-xml-v2.c
-src/backend/xml/gnc-vendor-xml-v2.c
-src/backend/xml/gnc-xml-helper.c
-src/backend/xml/io-example-account.c
-src/backend/xml/io-gncxml-gen.c
+src/backend/xml/gnc-account-xml-v2.cpp
+src/backend/xml/gnc-address-xml-v2.cpp
+src/backend/xml/gnc-backend-xml.cpp
+src/backend/xml/gnc-bill-term-xml-v2.cpp
+src/backend/xml/gnc-book-xml-v2.cpp
+src/backend/xml/gnc-budget-xml-v2.cpp
+src/backend/xml/gnc-commodity-xml-v2.cpp
+src/backend/xml/gnc-customer-xml-v2.cpp
+src/backend/xml/gnc-employee-xml-v2.cpp
+src/backend/xml/gnc-entry-xml-v2.cpp
+src/backend/xml/gnc-freqspec-xml-v2.cpp
+src/backend/xml/gnc-invoice-xml-v2.cpp
+src/backend/xml/gnc-job-xml-v2.cpp
+src/backend/xml/gnc-lot-xml-v2.cpp
+src/backend/xml/gnc-order-xml-v2.cpp
+src/backend/xml/gnc-owner-xml-v2.cpp
+src/backend/xml/gnc-pricedb-xml-v2.cpp
+src/backend/xml/gnc-recurrence-xml-v2.cpp
+src/backend/xml/gnc-schedxaction-xml-v2.cpp
+src/backend/xml/gnc-tax-table-xml-v2.cpp
+src/backend/xml/gnc-transaction-xml-v2.cpp
+src/backend/xml/gnc-vendor-xml-v2.cpp
+src/backend/xml/gnc-xml-helper.cpp
+src/backend/xml/io-example-account.cpp
+src/backend/xml/io-gncxml-gen.cpp
 src/backend/xml/io-gncxml-v1.cpp
-src/backend/xml/io-gncxml-v2.c
-src/backend/xml/io-utils.c
-src/backend/xml/sixtp.c
+src/backend/xml/io-gncxml-v2.cpp
+src/backend/xml/io-utils.cpp
+src/backend/xml/sixtp.cpp
 src/backend/xml/sixtp-dom-generators.cpp
 src/backend/xml/sixtp-dom-parsers.cpp
-src/backend/xml/sixtp-stack.c
-src/backend/xml/sixtp-to-dom-parser.c
-src/backend/xml/sixtp-utils.c
+src/backend/xml/sixtp-stack.cpp
+src/backend/xml/sixtp-to-dom-parser.cpp
+src/backend/xml/sixtp-utils.cpp
 src/bin/gnucash-bin.c
 src/business/business-gnome/business-gnome.scm
 src/business/business-gnome/business-gnome-utils.c
diff --git a/src/backend/xml/Makefile.am b/src/backend/xml/Makefile.am
index 184b0ea..8e61544 100644
--- a/src/backend/xml/Makefile.am
+++ b/src/backend/xml/Makefile.am
@@ -19,42 +19,42 @@ AM_CPPFLAGS = \
   ${BOOST_CPPFLAGS}
 
 libgnc_backend_xml_utils_la_SOURCES = \
-  gnc-account-xml-v2.c \
-  gnc-address-xml-v2.c \
-  gnc-bill-term-xml-v2.c \
-  gnc-book-xml-v2.c \
-  gnc-budget-xml-v2.c \
-  gnc-commodity-xml-v2.c \
-  gnc-customer-xml-v2.c \
-  gnc-employee-xml-v2.c \
-  gnc-entry-xml-v2.c \
-  gnc-freqspec-xml-v2.c \
-  gnc-invoice-xml-v2.c \
-  gnc-job-xml-v2.c \
-  gnc-lot-xml-v2.c \
-  gnc-order-xml-v2.c \
-  gnc-owner-xml-v2.c \
-  gnc-pricedb-xml-v2.c \
-  gnc-recurrence-xml-v2.c \
-  gnc-schedxaction-xml-v2.c \
-  gnc-tax-table-xml-v2.c \
-  gnc-transaction-xml-v2.c \
-  gnc-vendor-xml-v2.c \
-  gnc-xml-helper.c \
-  io-example-account.c \
-  io-gncxml-gen.c \
+  gnc-account-xml-v2.cpp \
+  gnc-address-xml-v2.cpp \
+  gnc-bill-term-xml-v2.cpp \
+  gnc-book-xml-v2.cpp \
+  gnc-budget-xml-v2.cpp \
+  gnc-commodity-xml-v2.cpp \
+  gnc-customer-xml-v2.cpp \
+  gnc-employee-xml-v2.cpp \
+  gnc-entry-xml-v2.cpp \
+  gnc-freqspec-xml-v2.cpp \
+  gnc-invoice-xml-v2.cpp \
+  gnc-job-xml-v2.cpp \
+  gnc-lot-xml-v2.cpp \
+  gnc-order-xml-v2.cpp \
+  gnc-owner-xml-v2.cpp \
+  gnc-pricedb-xml-v2.cpp \
+  gnc-recurrence-xml-v2.cpp \
+  gnc-schedxaction-xml-v2.cpp \
+  gnc-tax-table-xml-v2.cpp \
+  gnc-transaction-xml-v2.cpp \
+  gnc-vendor-xml-v2.cpp \
+  gnc-xml-helper.cpp \
+  io-example-account.cpp \
+  io-gncxml-gen.cpp \
   io-gncxml-v1.cpp \
-  io-gncxml-v2.c \
-  io-utils.c \
+  io-gncxml-v2.cpp \
+  io-utils.cpp \
   sixtp-dom-generators.cpp \
   sixtp-dom-parsers.cpp \
-  sixtp-stack.c \
-  sixtp-to-dom-parser.c \
-  sixtp-utils.c \
-  sixtp.c
+  sixtp-stack.cpp \
+  sixtp-to-dom-parser.cpp \
+  sixtp-utils.cpp \
+  sixtp.cpp
 
 libgncmod_backend_xml_la_SOURCES = \
-  gnc-backend-xml.c
+  gnc-backend-xml.cpp
 
 noinst_HEADERS = \
   gnc-backend-xml.h \
diff --git a/src/backend/xml/gnc-account-xml-v2.c b/src/backend/xml/gnc-account-xml-v2.cpp
similarity index 91%
rename from src/backend/xml/gnc-account-xml-v2.c
rename to src/backend/xml/gnc-account-xml-v2.cpp
index 25f6f1e..f189779 100644
--- a/src/backend/xml/gnc-account-xml-v2.c
+++ b/src/backend/xml/gnc-account-xml-v2.cpp
@@ -22,12 +22,16 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include <AccountP.h>
+#include <Account.h>
+}
 
 #include "gnc-xml-helper.h"
 #include "sixtp.h"
@@ -42,8 +46,6 @@
 #include "io-gncxml-v2.h"
 
 #include "sixtp-dom-parsers.h"
-#include "AccountP.h"
-#include "Account.h"
 
 static QofLogModule log_module = GNC_MOD_IO;
 
@@ -154,7 +156,7 @@ gnc_account_dom_tree_create(Account *act,
 
         for (n = lots; n; n = n->next)
         {
-            GNCLot * lot = n->data;
+            GNCLot * lot = static_cast<decltype(lot)>(n->data);
             xmlAddChild(toaddto, gnc_lot_dom_tree_create(lot));
         }
     }
@@ -189,7 +191,7 @@ set_string(xmlNodePtr node, Account* act,
 static gboolean
 account_name_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
 
     return set_string(node, pdata->account, xaccAccountSetName);
 }
@@ -197,7 +199,7 @@ account_name_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_id_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     GncGUID *guid;
 
     guid = dom_tree_to_guid(node);
@@ -213,7 +215,7 @@ account_id_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_type_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     GNCAccountType type = ACCT_TYPE_INVALID;
     char *string;
 
@@ -229,7 +231,7 @@ account_type_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_commodity_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     gnc_commodity *ref;
 
 //    ref = dom_tree_to_commodity_ref_no_engine(node, pdata->book);
@@ -242,7 +244,7 @@ account_commodity_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_commodity_scu_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     gint64 val;
 
     dom_tree_to_integer(node, &val);
@@ -254,7 +256,7 @@ account_commodity_scu_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_hidden_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     gboolean val;
 
     dom_tree_to_boolean(node, &val);
@@ -266,7 +268,7 @@ account_hidden_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_placeholder_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     gboolean val;
 
     dom_tree_to_boolean(node, &val);
@@ -278,7 +280,7 @@ account_placeholder_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_non_standard_scu_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
 
     xaccAccountSetNonStdSCU(pdata->account, TRUE);
 
@@ -292,7 +294,7 @@ account_non_standard_scu_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 deprecated_account_currency_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     gnc_commodity *ref;
 
     PWARN("Account %s: Obsolete xml tag 'act:currency' will not be preserved.",
@@ -306,7 +308,7 @@ deprecated_account_currency_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 deprecated_account_currency_scu_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     PWARN("Account %s: Obsolete xml tag 'act:currency-scu' will not be preserved.",
           xaccAccountGetName( pdata->account ));
     return TRUE;
@@ -315,7 +317,7 @@ deprecated_account_currency_scu_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 deprecated_account_security_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     gnc_commodity *ref, *orig = xaccAccountGetCommodity(pdata->account);
 
     PWARN("Account %s: Obsolete xml tag 'act:security' will not be preserved.",
@@ -340,7 +342,7 @@ deprecated_account_security_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 deprecated_account_security_scu_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     gint64 val;
 
     PWARN("Account %s: Obsolete xml tag 'act:security-scu' will not be preserved.",
@@ -359,14 +361,14 @@ deprecated_account_security_scu_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_slots_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     return dom_tree_create_instance_slots (node, QOF_INSTANCE (pdata->account));
 }
 
 static gboolean
 account_parent_handler (xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     Account *parent;
     GncGUID *gid;
 
@@ -390,7 +392,7 @@ account_parent_handler (xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_code_handler(xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
 
     return set_string(node, pdata->account, xaccAccountSetCode);
 }
@@ -398,7 +400,7 @@ account_code_handler(xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_description_handler(xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
 
     return set_string(node, pdata->account, xaccAccountSetDescription);
 }
@@ -406,7 +408,7 @@ account_description_handler(xmlNodePtr node, gpointer act_pdata)
 static gboolean
 account_lots_handler(xmlNodePtr node, gpointer act_pdata)
 {
-    struct account_pdata *pdata = act_pdata;
+    struct account_pdata *pdata = static_cast<decltype(pdata)>(act_pdata);
     xmlNodePtr mark;
 
     g_return_val_if_fail(node, FALSE);
@@ -468,7 +470,7 @@ gnc_account_end_handler(gpointer data_for_children,
     Account *acc, *parent, *root;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
     int type;
 
 
diff --git a/src/backend/xml/gnc-address-xml-v2.c b/src/backend/xml/gnc-address-xml-v2.cpp
similarity index 90%
rename from src/backend/xml/gnc-address-xml-v2.c
rename to src/backend/xml/gnc-address-xml-v2.cpp
index 40eb112..9295da3 100644
--- a/src/backend/xml/gnc-address-xml-v2.c
+++ b/src/backend/xml/gnc-address-xml-v2.cpp
@@ -21,13 +21,14 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
-
+}
 #include "gnc-xml-helper.h"
 
 #include "sixtp.h"
@@ -114,7 +115,7 @@ set_string(xmlNodePtr node, GncAddress* addr,
 static gboolean
 address_name_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
 
     return set_string(node, pdata->address, gncAddressSetName);
 }
@@ -122,7 +123,7 @@ address_name_handler (xmlNodePtr node, gpointer addr_pdata)
 static gboolean
 address_addr1_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
 
     return set_string(node, pdata->address, gncAddressSetAddr1);
 }
@@ -130,7 +131,7 @@ address_addr1_handler (xmlNodePtr node, gpointer addr_pdata)
 static gboolean
 address_addr2_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
 
     return set_string(node, pdata->address, gncAddressSetAddr2);
 }
@@ -138,7 +139,7 @@ address_addr2_handler (xmlNodePtr node, gpointer addr_pdata)
 static gboolean
 address_addr3_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
 
     return set_string(node, pdata->address, gncAddressSetAddr3);
 }
@@ -146,7 +147,7 @@ address_addr3_handler (xmlNodePtr node, gpointer addr_pdata)
 static gboolean
 address_addr4_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
 
     return set_string(node, pdata->address, gncAddressSetAddr4);
 }
@@ -154,7 +155,7 @@ address_addr4_handler (xmlNodePtr node, gpointer addr_pdata)
 static gboolean
 address_phone_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
 
     return set_string(node, pdata->address, gncAddressSetPhone);
 }
@@ -162,7 +163,7 @@ address_phone_handler (xmlNodePtr node, gpointer addr_pdata)
 static gboolean
 address_fax_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
 
     return set_string(node, pdata->address, gncAddressSetFax);
 }
@@ -170,7 +171,7 @@ address_fax_handler (xmlNodePtr node, gpointer addr_pdata)
 static gboolean
 address_email_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
 
     return set_string(node, pdata->address, gncAddressSetEmail);
 }
@@ -178,7 +179,7 @@ address_email_handler (xmlNodePtr node, gpointer addr_pdata)
 static gboolean
 address_slots_handler (xmlNodePtr node, gpointer addr_pdata)
 {
-    struct address_pdata *pdata = addr_pdata;
+    struct address_pdata *pdata = static_cast<decltype(pdata)>(addr_pdata);
     return dom_tree_create_instance_slots (node, QOF_INSTANCE (pdata->address));
 }
 
diff --git a/src/backend/xml/gnc-address-xml-v2.h b/src/backend/xml/gnc-address-xml-v2.h
index ff7d128..6c86484 100644
--- a/src/backend/xml/gnc-address-xml-v2.h
+++ b/src/backend/xml/gnc-address-xml-v2.h
@@ -22,9 +22,10 @@
 
 #ifndef GNC_ADDRESS_XML_V2_H
 #define GNC_ADDRESS_XML_V2_H
-
+extern "C"
+{
 #include "gncAddress.h"
-
+}
 gboolean   gnc_dom_tree_to_address (xmlNodePtr node, GncAddress *address);
 xmlNodePtr gnc_address_to_dom_tree (const char *tag, GncAddress *addr);
 void gnc_address_xml_initialize (void);
diff --git a/src/backend/xml/gnc-backend-xml.c b/src/backend/xml/gnc-backend-xml.cpp
similarity index 99%
rename from src/backend/xml/gnc-backend-xml.c
rename to src/backend/xml/gnc-backend-xml.cpp
index 2eff9a7..b9b032d 100644
--- a/src/backend/xml/gnc-backend-xml.c
+++ b/src/backend/xml/gnc-backend-xml.cpp
@@ -27,7 +27,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an ordinary Unix filesystem file.
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <platform.h>
@@ -76,10 +77,16 @@ typedef int ssize_t;
 #include "gnc-engine.h"
 
 #include "gnc-uri-utils.h"
-
-#include "io-gncxml.h"
 #include "io-gncxml-v2.h"
 #include "gnc-backend-xml.h"
+
+#ifndef HAVE_STRPTIME
+# include "strptime.h"
+#endif
+}
+
+#include "gnc-xml-helper.h"
+#include "io-gncxml.h"
 #include "gnc-prefs.h"
 
 #include "gnc-address-xml-v2.h"
@@ -94,10 +101,6 @@ typedef int ssize_t;
 #include "gnc-tax-table-xml-v2.h"
 #include "gnc-vendor-xml-v2.h"
 
-#ifndef HAVE_STRPTIME
-# include "strptime.h"
-#endif
-
 static QofLogModule log_module = GNC_MOD_BACKEND;
 
 static gboolean save_may_clobber_data (QofBackend *bend);
diff --git a/src/backend/xml/gnc-backend-xml.h b/src/backend/xml/gnc-backend-xml.h
index cf26c01..73a1c29 100644
--- a/src/backend/xml/gnc-backend-xml.h
+++ b/src/backend/xml/gnc-backend-xml.h
@@ -30,12 +30,15 @@
 
 #ifndef GNC_BACKEND_XML_H_
 #define GNC_BACKEND_XML_H_
-
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 #include "qof.h"
 #include <gmodule.h>
-
 #include "qofbackend-p.h"
 
+
 typedef enum
 {
     XML_RETAIN_NONE,
@@ -83,5 +86,7 @@ void gnc_module_init_backend_xml(void);
 G_MODULE_EXPORT
 void qof_backend_module_init(void);
 #endif
-
+#ifdef __cplusplus
+}
+#endif
 #endif /* GNC_BACKEND_XML_H_ */
diff --git a/src/backend/xml/gnc-bill-term-xml-v2.c b/src/backend/xml/gnc-bill-term-xml-v2.cpp
similarity index 92%
rename from src/backend/xml/gnc-bill-term-xml-v2.c
rename to src/backend/xml/gnc-bill-term-xml-v2.cpp
index 6e04d68..b0f66d6 100644
--- a/src/backend/xml/gnc-bill-term-xml-v2.c
+++ b/src/backend/xml/gnc-bill-term-xml-v2.cpp
@@ -21,13 +21,19 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include "gncBillTermP.h"
+#include "gncInvoice.h"
+#include "qof.h"
+}
+
 #include "gnc-xml-helper.h"
 
 #include "sixtp.h"
@@ -40,11 +46,7 @@
 #include "gnc-xml.h"
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
-
-#include "gncBillTermP.h"
-#include "gncInvoice.h"
 #include "gnc-bill-term-xml-v2.h"
-#include "qof.h"
 
 #include "xml-helpers.h"
 
@@ -167,21 +169,21 @@ set_numeric (xmlNodePtr node, GncBillTerm *term,
 static gboolean
 days_duedays_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_int (node, pdata->term, gncBillTermSetDueDays);
 }
 
 static gboolean
 days_discdays_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_int (node, pdata->term, gncBillTermSetDiscountDays);
 }
 
 static gboolean
 days_discount_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_numeric (node, pdata->term, gncBillTermSetDiscount);
 }
 
@@ -211,28 +213,28 @@ dom_tree_to_days_data (xmlNodePtr node, struct billterm_pdata *pdata)
 static gboolean
 prox_dueday_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_int (node, pdata->term, gncBillTermSetDueDays);
 }
 
 static gboolean
 prox_discday_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_int (node, pdata->term, gncBillTermSetDiscountDays);
 }
 
 static gboolean
 prox_discount_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_numeric (node, pdata->term, gncBillTermSetDiscount);
 }
 
 static gboolean
 prox_cutoff_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_int (node, pdata->term, gncBillTermSetCutoff);
 }
 
@@ -298,7 +300,7 @@ set_string (xmlNodePtr node, GncBillTerm *term,
 static gboolean
 billterm_guid_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     GncGUID *guid;
     GncBillTerm *term;
 
@@ -324,21 +326,21 @@ billterm_guid_handler (xmlNodePtr node, gpointer billterm_pdata)
 static gboolean
 billterm_name_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_string (node, pdata->term, gncBillTermSetName);
 }
 
 static gboolean
 billterm_desc_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_string (node, pdata->term, gncBillTermSetDescription);
 }
 
 static gboolean
 billterm_refcount_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     gint64 val;
 
     dom_tree_to_integer(node, &val);
@@ -349,7 +351,7 @@ billterm_refcount_handler (xmlNodePtr node, gpointer billterm_pdata)
 static gboolean
 billterm_invisible_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     gint64 val;
 
     dom_tree_to_integer(node, &val);
@@ -361,21 +363,21 @@ billterm_invisible_handler (xmlNodePtr node, gpointer billterm_pdata)
 static gboolean
 billterm_parent_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_parent_child (node, pdata, gncBillTermSetParent);
 }
 
 static gboolean
 billterm_child_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return set_parent_child (node, pdata, gncBillTermSetChild);
 }
 
 static gboolean
 billterm_days_data_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
 
     g_return_val_if_fail (node, FALSE);
     g_return_val_if_fail (gncBillTermGetType (pdata->term) == 0, FALSE);
@@ -387,7 +389,7 @@ billterm_days_data_handler (xmlNodePtr node, gpointer billterm_pdata)
 static gboolean
 billterm_prox_data_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
 
     g_return_val_if_fail (node, FALSE);
     g_return_val_if_fail (gncBillTermGetType (pdata->term) == 0, FALSE);
@@ -399,7 +401,7 @@ billterm_prox_data_handler (xmlNodePtr node, gpointer billterm_pdata)
 static gboolean
 billterm_slots_handler (xmlNodePtr node, gpointer billterm_pdata)
 {
-    struct billterm_pdata *pdata = billterm_pdata;
+    struct billterm_pdata *pdata = static_cast<decltype(pdata)>(billterm_pdata);
     return dom_tree_create_instance_slots (node, QOF_INSTANCE(pdata->term));
 }
 
@@ -454,7 +456,7 @@ gnc_billterm_end_handler(gpointer data_for_children,
     GncBillTerm *term;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
 
     if (parent_data)
@@ -491,7 +493,7 @@ billterm_sixtp_parser_create(void)
 static void
 do_count (QofInstance *term_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     (*count)++;
 }
 
@@ -508,7 +510,7 @@ xml_add_billterm (QofInstance *term_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncBillTerm *term = (GncBillTerm *) term_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
@@ -573,7 +575,7 @@ static void
 billterm_scrub_cb (QofInstance *term_p, gpointer list_p)
 {
     GncBillTerm *term = GNC_BILLTERM(term_p);
-    GList **list = list_p;
+    GList **list = static_cast<decltype(list)>(list_p);
 
     if (billterm_is_grandchild(term))
     {
@@ -613,7 +615,7 @@ billterm_scrub_cb (QofInstance *term_p, gpointer list_p)
 static void
 billterm_scrub_invoices (QofInstance * invoice_p, gpointer ht_p)
 {
-    GHashTable *ht = ht_p;
+    GHashTable *ht = static_cast<decltype(ht)>(ht_p);
     GncInvoice *invoice = GNC_INVOICE(invoice_p);
     GncBillTerm *term, *new_bt;
     gint32 count;
@@ -644,7 +646,7 @@ billterm_scrub_invoices (QofInstance * invoice_p, gpointer ht_p)
 static void
 billterm_scrub_cust (QofInstance * cust_p, gpointer ht_p)
 {
-    GHashTable *ht = ht_p;
+    GHashTable *ht = static_cast<decltype(ht)>(ht_p);
     GncCustomer *cust = GNC_CUSTOMER(cust_p);
     GncBillTerm *term;
     gint32 count;
@@ -669,7 +671,7 @@ billterm_scrub_cust (QofInstance * cust_p, gpointer ht_p)
 static void
 billterm_scrub_vendor (QofInstance * vendor_p, gpointer ht_p)
 {
-    GHashTable *ht = ht_p;
+    GHashTable *ht = static_cast<decltype(ht)>(ht_p);
     GncVendor *vendor = GNC_VENDOR(vendor_p);
     GncBillTerm *term;
     gint32 count;
@@ -694,7 +696,7 @@ billterm_scrub_vendor (QofInstance * vendor_p, gpointer ht_p)
 static void
 billterm_reset_refcount (gpointer key, gpointer value, gpointer notused)
 {
-    GncBillTerm *term = key;
+    GncBillTerm *term = static_cast<decltype(term)>(key);
     gint32 count = GPOINTER_TO_INT(value);
 
     if (count != gncBillTermGetRefcount(term) && !gncBillTermGetInvisible(term))
@@ -725,7 +727,7 @@ billterm_scrub (QofBook *book)
     for (node = list; node; node = node->next)
     {
         gchar termstr[GUID_ENCODING_LENGTH+1];
-        term = node->data;
+        term = static_cast<decltype(term)>(node->data);
 
         guid_to_string_buff(qof_instance_get_guid(QOF_INSTANCE(term)), termstr);
         PWARN ("deleting grandchild billterm: %s\n", termstr);
diff --git a/src/backend/xml/gnc-bill-term-xml-v2.h b/src/backend/xml/gnc-bill-term-xml-v2.h
index 45233b9..41f771b 100644
--- a/src/backend/xml/gnc-bill-term-xml-v2.h
+++ b/src/backend/xml/gnc-bill-term-xml-v2.h
@@ -23,8 +23,11 @@
 
 #ifndef GNC_BILLTERM_XML_V2_H
 #define GNC_BILLTERM_XML_V2_H
-
+extern "C"
+{
 #include "gncBillTerm.h"
+}
+
 void gnc_billterm_xml_initialize (void);
 GncBillTerm *gnc_billterm_xml_find_or_create(QofBook *book, GncGUID *guid);
 
diff --git a/src/backend/xml/gnc-book-xml-v2.c b/src/backend/xml/gnc-book-xml-v2.cpp
similarity index 96%
rename from src/backend/xml/gnc-book-xml-v2.c
rename to src/backend/xml/gnc-book-xml-v2.cpp
index 851aefa..e3d2718 100644
--- a/src/backend/xml/gnc-book-xml-v2.c
+++ b/src/backend/xml/gnc-book-xml-v2.cpp
@@ -22,12 +22,15 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include "qof.h"
+}
 
 #include "gnc-xml-helper.h"
 
@@ -44,7 +47,6 @@
 #include "io-utils.h"
 
 #include "sixtp-dom-parsers.h"
-#include "qof.h"
 
 /* non-static because it's used in io-gncxml-v2.c */
 const gchar *gnc_v2_book_version_string = "2.0.0";
@@ -158,7 +160,7 @@ write_book_parts(FILE *out, QofBook *book)
     if (ferror(out) || fprintf(out, "\n") < 0)
         return FALSE;
 
- 
+
     slotsnode = qof_instance_slots_to_dom_tree(book_slots_string,
                                              QOF_INSTANCE(book));
     if (slotsnode)
@@ -179,7 +181,7 @@ write_book_parts(FILE *out, QofBook *book)
 static gboolean
 book_id_handler(xmlNodePtr node, gpointer book_pdata)
 {
-    QofBook *book = book_pdata;
+    QofBook *book = static_cast<decltype(book)>(book_pdata);
     GncGUID *guid;
 
     guid = dom_tree_to_guid(node);
@@ -192,7 +194,7 @@ book_id_handler(xmlNodePtr node, gpointer book_pdata)
 static gboolean
 book_slots_handler (xmlNodePtr node, gpointer book_pdata)
 {
-    QofBook *book = book_pdata;
+    QofBook *book = static_cast<decltype(book)>(book_pdata);
     gboolean success;
 
     /* the below works only because the get is gaurenteed to return
@@ -220,7 +222,7 @@ gnc_book_end_handler(gpointer data_for_children,
 {
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
 
     if (parent_data) return TRUE;
@@ -249,7 +251,7 @@ gnc_book_id_end_handler(gpointer data_for_children,
     gboolean successful;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data) return TRUE;
     if (!tag) return TRUE;
@@ -271,7 +273,7 @@ gnc_book_slots_end_handler(gpointer data_for_children,
     gboolean successful;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data) return TRUE;
     if (!tag) return TRUE;
diff --git a/src/backend/xml/gnc-budget-xml-v2.c b/src/backend/xml/gnc-budget-xml-v2.cpp
similarity index 98%
rename from src/backend/xml/gnc-budget-xml-v2.c
rename to src/backend/xml/gnc-budget-xml-v2.cpp
index 07aadae..2730a12 100644
--- a/src/backend/xml/gnc-budget-xml-v2.c
+++ b/src/backend/xml/gnc-budget-xml-v2.cpp
@@ -21,12 +21,14 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org
  */
 
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+}
 
 #include "gnc-xml-helper.h"
 #include "sixtp.h"
@@ -176,7 +178,7 @@ gnc_budget_end_handler(gpointer data_for_children,
     GncBudget *bgt;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data)
     {
diff --git a/src/backend/xml/gnc-commodity-xml-v2.c b/src/backend/xml/gnc-commodity-xml-v2.cpp
similarity index 98%
rename from src/backend/xml/gnc-commodity-xml-v2.c
rename to src/backend/xml/gnc-commodity-xml-v2.cpp
index 1d7206c..16b1217 100644
--- a/src/backend/xml/gnc-commodity-xml-v2.c
+++ b/src/backend/xml/gnc-commodity-xml-v2.cpp
@@ -21,14 +21,17 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <string.h>
+#include "AccountP.h"
+#include "Account.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -39,10 +42,6 @@
 #include "gnc-xml.h"
 #include "io-gncxml-gen.h"
 
-#include "sixtp-dom-parsers.h"
-#include "AccountP.h"
-#include "Account.h"
-
 static QofLogModule log_module = GNC_MOD_IO;
 
 const gchar *commodity_version_string = "2.0.0";
@@ -123,7 +122,7 @@ gnc_commodity_dom_tree_create(const gnc_commodity *com)
 
 struct com_char_handler
 {
-    gchar *tag;
+    const char *tag;
     void(*func)(gnc_commodity *com, const char*val);
 };
 
@@ -254,7 +253,7 @@ gnc_commodity_end_handler(gpointer data_for_children,
     xmlNodePtr achild;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data)
     {
diff --git a/src/backend/xml/gnc-customer-xml-v2.c b/src/backend/xml/gnc-customer-xml-v2.cpp
similarity index 91%
rename from src/backend/xml/gnc-customer-xml-v2.c
rename to src/backend/xml/gnc-customer-xml-v2.cpp
index faf8e90..c86e380 100644
--- a/src/backend/xml/gnc-customer-xml-v2.c
+++ b/src/backend/xml/gnc-customer-xml-v2.cpp
@@ -21,15 +21,23 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "gnc-xml-helper.h"
+#include "gncBillTermP.h"
+#include "gncCustomerP.h"
+#include "gncTaxTableP.h"
+}
 
+#include "gnc-xml-helper.h"
+#include "gnc-customer-xml-v2.h"
+#include "gnc-address-xml-v2.h"
+#include "gnc-bill-term-xml-v2.h"
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -41,13 +49,6 @@
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 
-#include "gncBillTermP.h"
-#include "gncCustomerP.h"
-#include "gncTaxTableP.h"
-#include "gnc-customer-xml-v2.h"
-#include "gnc-address-xml-v2.h"
-#include "gnc-bill-term-xml-v2.h"
-
 #include "xml-helpers.h"
 
 #define _GNC_MOD_NAME	GNC_ID_CUSTOMER
@@ -178,7 +179,7 @@ set_boolean(xmlNodePtr node, GncCustomer* cust,
 static gboolean
 customer_name_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
 
     return set_string(node, pdata->customer, gncCustomerSetName);
 }
@@ -186,7 +187,7 @@ customer_name_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_guid_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     GncGUID *guid;
     GncCustomer *cust;
 
@@ -212,7 +213,7 @@ customer_guid_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_id_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
 
     return set_string(node, pdata->customer, gncCustomerSetID);
 }
@@ -220,7 +221,7 @@ customer_id_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_notes_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
 
     return set_string(node, pdata->customer, gncCustomerSetNotes);
 }
@@ -228,7 +229,7 @@ customer_notes_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_terms_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     GncGUID *guid;
     GncBillTerm *term;
 
@@ -245,7 +246,7 @@ customer_terms_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_addr_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
 
     return gnc_dom_tree_to_address (node, gncCustomerGetAddr(pdata->customer));
 }
@@ -253,7 +254,7 @@ customer_addr_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_shipaddr_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
 
     return gnc_dom_tree_to_address (node,
                                     gncCustomerGetShipAddr(pdata->customer));
@@ -263,7 +264,7 @@ customer_shipaddr_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_taxincluded_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     GncTaxIncluded type;
     char *str;
     gboolean ret;
@@ -283,14 +284,14 @@ customer_taxincluded_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_active_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     return set_boolean (node, pdata->customer, gncCustomerSetActive);
 }
 
 static gboolean
 customer_discount_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     gnc_numeric *val;
 
     val = dom_tree_to_gnc_numeric(node);
@@ -305,7 +306,7 @@ customer_discount_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_credit_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     gnc_numeric *val;
 
     val = dom_tree_to_gnc_numeric(node);
@@ -320,7 +321,7 @@ customer_credit_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_currency_handler (xmlNodePtr node, gpointer customer_pdata)
 {
-    struct customer_pdata *pdata = customer_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(customer_pdata);
     gnc_commodity *com;
 
     com = dom_tree_to_commodity_ref(node, pdata->book);
@@ -334,7 +335,7 @@ customer_currency_handler (xmlNodePtr node, gpointer customer_pdata)
 static gboolean
 customer_taxtable_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     GncGUID *guid;
     GncTaxTable *taxtable;
 
@@ -359,14 +360,14 @@ customer_taxtable_handler (xmlNodePtr node, gpointer cust_pdata)
 static gboolean
 customer_taxtableoverride_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     return set_boolean (node, pdata->customer, gncCustomerSetTaxTableOverride);
 }
 
 static gboolean
 customer_slots_handler (xmlNodePtr node, gpointer cust_pdata)
 {
-    struct customer_pdata *pdata = cust_pdata;
+    struct customer_pdata *pdata = static_cast<decltype(pdata)>(cust_pdata);
     return dom_tree_create_instance_slots(node, QOF_INSTANCE(pdata->customer));
 }
 
@@ -425,7 +426,7 @@ gnc_customer_end_handler(gpointer data_for_children,
     GncCustomer *cust;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
 
     if (parent_data)
@@ -475,7 +476,7 @@ customer_should_be_saved (GncCustomer *customer)
 static void
 do_count (QofInstance * cust_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     if (customer_should_be_saved ((GncCustomer *)cust_p))
         (*count)++;
 }
@@ -493,7 +494,7 @@ xml_add_customer (QofInstance * cust_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncCustomer *cust = (GncCustomer *) cust_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
diff --git a/src/backend/xml/gnc-employee-xml-v2.c b/src/backend/xml/gnc-employee-xml-v2.cpp
similarity index 91%
rename from src/backend/xml/gnc-employee-xml-v2.c
rename to src/backend/xml/gnc-employee-xml-v2.cpp
index d7cb7ec..8cd8f38 100644
--- a/src/backend/xml/gnc-employee-xml-v2.c
+++ b/src/backend/xml/gnc-employee-xml-v2.cpp
@@ -21,15 +21,17 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include "gncEmployeeP.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -41,7 +43,6 @@
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 
-#include "gncEmployeeP.h"
 #include "gnc-employee-xml-v2.h"
 #include "gnc-address-xml-v2.h"
 
@@ -149,7 +150,7 @@ set_string(xmlNodePtr node, GncEmployee* employee,
 static gboolean
 employee_username_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
 
     return set_string(node, pdata->employee, gncEmployeeSetUsername);
 }
@@ -157,7 +158,7 @@ employee_username_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_guid_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
     GncGUID *guid;
     GncEmployee *employee;
 
@@ -185,7 +186,7 @@ employee_guid_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_id_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
 
     return set_string(node, pdata->employee, gncEmployeeSetID);
 }
@@ -193,7 +194,7 @@ employee_id_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_language_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
 
     return set_string(node, pdata->employee, gncEmployeeSetLanguage);
 }
@@ -201,7 +202,7 @@ employee_language_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_acl_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
 
     return set_string(node, pdata->employee, gncEmployeeSetAcl);
 }
@@ -209,7 +210,7 @@ employee_acl_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_addr_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
 
     return gnc_dom_tree_to_address (node, gncEmployeeGetAddr(pdata->employee));
 }
@@ -217,7 +218,7 @@ employee_addr_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_active_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
     gint64 val;
     gboolean ret;
 
@@ -231,7 +232,7 @@ employee_active_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_workday_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
     gnc_numeric *val;
 
     val = dom_tree_to_gnc_numeric(node);
@@ -245,7 +246,7 @@ employee_workday_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_rate_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
     gnc_numeric *val;
 
     val = dom_tree_to_gnc_numeric(node);
@@ -259,7 +260,7 @@ employee_rate_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_currency_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
     gnc_commodity *com;
 
     com = dom_tree_to_commodity_ref(node, pdata->book);
@@ -273,7 +274,7 @@ employee_currency_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_ccard_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
     GncGUID *guid;
     Account *ccard_acc;
 
@@ -292,7 +293,7 @@ employee_ccard_handler (xmlNodePtr node, gpointer employee_pdata)
 static gboolean
 employee_slots_handler (xmlNodePtr node, gpointer employee_pdata)
 {
-    struct employee_pdata *pdata = employee_pdata;
+    struct employee_pdata *pdata = static_cast<decltype(pdata)>(employee_pdata);
     return dom_tree_create_instance_slots (node, QOF_INSTANCE(pdata->employee));
 }
 
@@ -347,7 +348,7 @@ gnc_employee_end_handler(gpointer data_for_children,
     GncEmployee *employee;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
 
     if (parent_data)
@@ -397,7 +398,7 @@ employee_should_be_saved (GncEmployee *employee)
 static void
 do_count (QofInstance * employee_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     if (employee_should_be_saved ((GncEmployee *) employee_p))
         (*count)++;
 }
@@ -415,7 +416,7 @@ xml_add_employee (QofInstance * employee_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncEmployee *employee = (GncEmployee *) employee_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
diff --git a/src/backend/xml/gnc-entry-xml-v2.c b/src/backend/xml/gnc-entry-xml-v2.cpp
similarity index 90%
rename from src/backend/xml/gnc-entry-xml-v2.c
rename to src/backend/xml/gnc-entry-xml-v2.cpp
index a892fb2..2d7b018 100644
--- a/src/backend/xml/gnc-entry-xml-v2.c
+++ b/src/backend/xml/gnc-entry-xml-v2.cpp
@@ -21,15 +21,21 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "gnc-xml-helper.h"
+#include "gncEntryP.h"
+#include "gncOrderP.h"
+#include "gncInvoiceP.h"
+#include "gncTaxTableP.h"
+}
 
+#include "gnc-xml-helper.h"
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -40,11 +46,6 @@
 #include "gnc-xml.h"
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
-
-#include "gncEntryP.h"
-#include "gncOrderP.h"
-#include "gncInvoiceP.h"
-#include "gncTaxTableP.h"
 #include "gnc-entry-xml-v2.h"
 #include "gnc-owner-xml-v2.h"
 
@@ -321,7 +322,7 @@ set_taxtable (xmlNodePtr node, struct entry_pdata *pdata,
 static gboolean
 entry_guid_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     GncGUID *guid;
     GncEntry *entry;
 
@@ -347,7 +348,7 @@ entry_guid_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_date_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_timespec(node, pdata->entry, gncEntrySetDate);
 }
@@ -355,7 +356,7 @@ entry_date_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_dateentered_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_timespec(node, pdata->entry, gncEntrySetDateEntered);
 }
@@ -363,7 +364,7 @@ entry_dateentered_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_description_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_string(node, pdata->entry, gncEntrySetDescription);
 }
@@ -371,7 +372,7 @@ entry_description_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_action_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_string(node, pdata->entry, gncEntrySetAction);
 }
@@ -379,7 +380,7 @@ entry_action_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_notes_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_string(node, pdata->entry, gncEntrySetNotes);
 }
@@ -387,7 +388,7 @@ entry_notes_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_qty_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_numeric(node, pdata->entry, gncEntrySetQuantity);
 }
@@ -397,14 +398,14 @@ entry_qty_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_invacct_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_account (node, pdata, gncEntrySetInvAccount);
 }
 
 static gboolean
 entry_iprice_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_numeric(node, pdata->entry, gncEntrySetInvPrice);
 }
@@ -412,7 +413,7 @@ entry_iprice_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_idiscount_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_numeric(node, pdata->entry, gncEntrySetInvDiscount);
 }
@@ -420,7 +421,7 @@ entry_idiscount_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_idisctype_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     GncAmountType type;
     char *str;
     gboolean ret;
@@ -440,7 +441,7 @@ entry_idisctype_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_idischow_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     GncDiscountHow how;
     char *str;
     gboolean ret;
@@ -460,21 +461,21 @@ entry_idischow_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_itaxable_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_boolean (node, pdata->entry, gncEntrySetInvTaxable);
 }
 
 static gboolean
 entry_itaxincluded_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_boolean (node, pdata->entry, gncEntrySetInvTaxIncluded);
 }
 
 static gboolean
 entry_itaxtable_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_taxtable (node, pdata, gncEntrySetInvTaxTable);
 }
 
@@ -483,14 +484,14 @@ entry_itaxtable_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_billacct_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_account (node, pdata, gncEntrySetBillAccount);
 }
 
 static gboolean
 entry_bprice_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return set_numeric(node, pdata->entry, gncEntrySetBillPrice);
 }
@@ -498,35 +499,35 @@ entry_bprice_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_btaxable_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_boolean (node, pdata->entry, gncEntrySetBillTaxable);
 }
 
 static gboolean
 entry_btaxincluded_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_boolean (node, pdata->entry, gncEntrySetBillTaxIncluded);
 }
 
 static gboolean
 entry_btaxtable_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_taxtable (node, pdata, gncEntrySetBillTaxTable);
 }
 
 static gboolean
 entry_billable_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     return set_boolean (node, pdata->entry, gncEntrySetBillable);
 }
 
 static gboolean
 entry_billto_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     GncOwner billto;
     gboolean ret;
 
@@ -541,7 +542,7 @@ entry_billto_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_billpayment_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     GncEntryPaymentType type;
     char *str;
     gboolean ret;
@@ -563,7 +564,7 @@ entry_billpayment_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_order_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     GncGUID *guid;
     GncOrder *order;
 
@@ -588,7 +589,7 @@ entry_order_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_invoice_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     GncGUID *guid;
     GncInvoice *invoice;
 
@@ -613,7 +614,7 @@ entry_invoice_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_bill_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     GncGUID *guid;
     GncInvoice *invoice;
 
@@ -640,7 +641,7 @@ entry_bill_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_acct_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     /* XXX: try to figure out if this is an 'invoice' or a 'bill' --
      * we have to wait until the end!
      */
@@ -651,7 +652,7 @@ entry_acct_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_price_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
     gboolean res;
 
     /* just set both.. Don't worry about extra data if it's wrong */
@@ -664,7 +665,7 @@ entry_price_handler (xmlNodePtr node, gpointer entry_pdata)
 static gboolean
 entry_slots_handler (xmlNodePtr node, gpointer entry_pdata)
 {
-    struct entry_pdata *pdata = entry_pdata;
+    struct entry_pdata *pdata = static_cast<decltype(pdata)>(entry_pdata);
 
     return dom_tree_create_instance_slots(node, QOF_INSTANCE (pdata->entry));
 }
@@ -761,7 +762,7 @@ gnc_entry_end_handler(gpointer data_for_children,
     GncEntry *entry;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
 
     if (parent_data)
@@ -798,7 +799,7 @@ entry_sixtp_parser_create(void)
 static void
 do_count (QofInstance * entry_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     (*count)++;
 }
 
@@ -815,7 +816,7 @@ xml_add_entry (QofInstance * entry_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncEntry *entry = (GncEntry *) entry_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
diff --git a/src/backend/xml/gnc-freqspec-xml-v2.c b/src/backend/xml/gnc-freqspec-xml-v2.cpp
similarity index 90%
rename from src/backend/xml/gnc-freqspec-xml-v2.c
rename to src/backend/xml/gnc-freqspec-xml-v2.cpp
index 815c83c..967f60e 100644
--- a/src/backend/xml/gnc-freqspec-xml-v2.c
+++ b/src/backend/xml/gnc-freqspec-xml-v2.cpp
@@ -22,15 +22,18 @@
  *                                                                  *
  *******************************************************************/
 
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <string.h>
-
-#include "gnc-xml-helper.h"
 #include "qof.h"
+#include "SchedXaction.h"
+#include "FreqSpec.h"
+}
 
+#include "gnc-xml-helper.h"
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -43,14 +46,12 @@
 #include "io-gncxml-v2.h"
 
 #include "sixtp-dom-parsers.h"
-#include "SchedXaction.h"
-#include "FreqSpec.h"
 
 const gchar *freqspec_version_string = "1.0.0";
 
 struct freqTypeTuple
 {
-    char         *str;
+    const char         *str;
     FreqType        ft;
 };
 
@@ -63,12 +64,12 @@ struct freqTypeTuple freqTypeStrs[] =
     { "monthly",          MONTHLY },
     { "month_relative",   MONTH_RELATIVE },
     { "composite",        COMPOSITE },
-    { NULL,               -1 },
+    { NULL,               static_cast<FreqType>(-1) },
 };
 
 struct uiFreqTypeTuple
 {
-    char        *str;
+    const char        *str;
     UIFreqType        uift;
 };
 
@@ -86,7 +87,7 @@ struct uiFreqTypeTuple uiFreqTypeStrs[] =
     { "tri_anually",  UIFREQ_TRI_ANUALLY },
     { "semi_yearly",  UIFREQ_SEMI_YEARLY },
     { "yearly",       UIFREQ_YEARLY },
-    { NULL,           -1 }
+    { NULL,           static_cast<UIFreqType>(-1) }
 };
 
 /**
@@ -135,17 +136,16 @@ static
 gboolean
 fs_uift_handler( xmlNodePtr node, gpointer data)
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     int            i;
     char        *nodeTxt;
-    char            *tmp;
 
     nodeTxt = dom_tree_to_text( node );
 
     g_return_val_if_fail( nodeTxt, FALSE );
-    for ( i = 0; (tmp = uiFreqTypeStrs[i].str) != NULL; i++ )
+    for ( i = 0; uiFreqTypeStrs[i].str != NULL; i++ )
     {
-        if ( g_strcmp0( nodeTxt, tmp ) == 0 )
+        if ( g_strcmp0( nodeTxt, uiFreqTypeStrs[i].str ) == 0 )
         {
             fspd->uift = uiFreqTypeStrs[i].uift;
             g_free( nodeTxt );
@@ -160,7 +160,7 @@ static
 gboolean
 fs_date_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     GDate                *foo;
     foo = dom_tree_to_gdate( node );
     if ( foo == NULL )
@@ -174,7 +174,7 @@ static
 gboolean
 fs_interval_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean        ret;
     gint64          foo;
 
@@ -191,7 +191,7 @@ static
 gboolean
 fs_offset_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean        ret;
     gint64          foo;
 
@@ -206,7 +206,7 @@ static
 gboolean
 fs_day_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean        ret;
     gint64          foo;
 
@@ -221,7 +221,7 @@ static
 gboolean
 fs_weekday_handler( xmlNodePtr node, gpointer data)
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean        ret;
     gint64          foo;
     ret = dom_tree_to_integer( node, &foo );
@@ -235,7 +235,7 @@ static
 gboolean
 fs_occurrence_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean        ret;
     gint64          foo;
     ret = dom_tree_to_integer( node, &foo );
@@ -249,7 +249,7 @@ static
 gboolean
 fs_weekend_adj_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean        ret;
     gint64          foo;
     ret = dom_tree_to_integer( node, &foo );
@@ -263,7 +263,7 @@ static
 gboolean
 fs_subelement_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     GList *recurrences;
 
     recurrences = dom_tree_freqSpec_to_recurrences(node, fspd->book);
@@ -304,7 +304,7 @@ struct dom_tree_handler fs_union_dom_handlers[] =
 static gboolean
 fs_none_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean	successful;
     successful = dom_tree_generic_parse( node,
                                          fs_union_dom_handlers,
@@ -316,7 +316,7 @@ static
 gboolean
 fs_once_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean        successful;
 
     successful = dom_tree_generic_parse( node,
@@ -332,7 +332,7 @@ fs_once_handler( xmlNodePtr node, gpointer data )
 static gboolean
 fs_daily_handler(xmlNodePtr node, gpointer data)
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     GDate offset_date;
     gboolean        successful;
     successful = dom_tree_generic_parse(node, fs_union_dom_handlers, fspd );
@@ -350,7 +350,7 @@ static
 gboolean
 fs_weekly_handler( xmlNodePtr node, gpointer data )
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     GDate offset_date;
     gboolean        successful;
     successful = dom_tree_generic_parse( node,
@@ -370,7 +370,7 @@ static
 gboolean
 fs_monthly_handler( xmlNodePtr node, gpointer data)
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     GDate offset_date;
     gboolean        successful;
     successful = dom_tree_generic_parse( node,
@@ -391,7 +391,9 @@ fs_monthly_handler( xmlNodePtr node, gpointer data)
     }
     else
     {
-        recurrenceSet(fspd->recurrence, fspd->interval, PERIOD_MONTH, &offset_date, fspd->weekend_adj);
+        recurrenceSet(fspd->recurrence, fspd->interval,
+                      PERIOD_MONTH, &offset_date,
+                      static_cast<WeekendAdjust>(fspd->weekend_adj));
     }
 
     return successful;
@@ -416,7 +418,7 @@ static
 gboolean
 fs_composite_handler( xmlNodePtr node, gpointer data)
 {
-    fsParseData *fspd = data;
+    fsParseData *fspd = static_cast<decltype(fspd)>(data);
     gboolean        successful;
     successful = dom_tree_generic_parse( node,
                                          fs_union_dom_handlers,
diff --git a/src/backend/xml/gnc-invoice-xml-v2.c b/src/backend/xml/gnc-invoice-xml-v2.cpp
similarity index 91%
rename from src/backend/xml/gnc-invoice-xml-v2.c
rename to src/backend/xml/gnc-invoice-xml-v2.cpp
index 319b2e8..447f483 100644
--- a/src/backend/xml/gnc-invoice-xml-v2.c
+++ b/src/backend/xml/gnc-invoice-xml-v2.cpp
@@ -21,32 +21,33 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "gnc-xml-helper.h"
+#include "gncBillTermP.h"
+#include "gncInvoiceP.h"
+}
 
+#include "gnc-xml-helper.h"
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
 #include "sixtp-utils.h"
 #include "sixtp-dom-parsers.h"
 #include "sixtp-dom-generators.h"
+#include "gnc-invoice-xml-v2.h"
+#include "gnc-owner-xml-v2.h"
+#include "gnc-bill-term-xml-v2.h"
 
 #include "gnc-xml.h"
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 
-#include "gncBillTermP.h"
-#include "gncInvoiceP.h"
-#include "gnc-invoice-xml-v2.h"
-#include "gnc-owner-xml-v2.h"
-#include "gnc-bill-term-xml-v2.h"
-
 #define _GNC_MOD_NAME	GNC_ID_INVOICE
 
 static QofLogModule log_module = GNC_MOD_IO;
@@ -197,7 +198,7 @@ set_timespec(xmlNodePtr node, GncInvoice* invoice,
 static gboolean
 invoice_guid_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     GncGUID *guid;
     GncInvoice *invoice;
 
@@ -223,7 +224,7 @@ invoice_guid_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_id_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
 
     return set_string(node, pdata->invoice, gncInvoiceSetID);
 }
@@ -231,7 +232,7 @@ invoice_id_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_owner_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     GncOwner owner;
     gboolean ret;
 
@@ -245,7 +246,7 @@ invoice_owner_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_opened_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
 
     return set_timespec (node, pdata->invoice, gncInvoiceSetDateOpened);
 }
@@ -253,7 +254,7 @@ invoice_opened_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_posted_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
 
     return set_timespec (node, pdata->invoice, gncInvoiceSetDatePosted);
 }
@@ -261,7 +262,7 @@ invoice_posted_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_billing_id_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
 
     return set_string(node, pdata->invoice, gncInvoiceSetBillingID);
 }
@@ -269,7 +270,7 @@ invoice_billing_id_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_notes_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
 
     return set_string(node, pdata->invoice, gncInvoiceSetNotes);
 }
@@ -277,7 +278,7 @@ invoice_notes_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_active_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     gint64 val;
     gboolean ret;
 
@@ -291,7 +292,7 @@ invoice_active_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_terms_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     GncGUID *guid;
     GncBillTerm *term;
 
@@ -308,7 +309,7 @@ invoice_terms_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_posttxn_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     GncGUID *guid;
     Transaction *txn;
 
@@ -325,7 +326,7 @@ invoice_posttxn_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_postlot_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     GncGUID *guid;
     GNCLot *lot;
 
@@ -342,7 +343,7 @@ invoice_postlot_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_postacc_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     GncGUID *guid;
     Account *acc;
 
@@ -359,7 +360,7 @@ invoice_postacc_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_currency_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     gnc_commodity *com;
 
     com = dom_tree_to_commodity_ref(node, pdata->book);
@@ -373,7 +374,7 @@ invoice_currency_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_billto_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     GncOwner owner;
     gboolean ret;
 
@@ -387,7 +388,7 @@ invoice_billto_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_tochargeamt_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     gnc_numeric* num = dom_tree_to_gnc_numeric(node);
     g_return_val_if_fail(num, FALSE);
 
@@ -399,7 +400,7 @@ invoice_tochargeamt_handler (xmlNodePtr node, gpointer invoice_pdata)
 static gboolean
 invoice_slots_handler (xmlNodePtr node, gpointer invoice_pdata)
 {
-    struct invoice_pdata *pdata = invoice_pdata;
+    struct invoice_pdata *pdata = static_cast<decltype(pdata)>(invoice_pdata);
     return dom_tree_create_instance_slots (node, QOF_INSTANCE (pdata->invoice));
 }
 
@@ -459,7 +460,7 @@ gnc_invoice_end_handler(gpointer data_for_children,
     GncInvoice *invoice;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data)
     {
@@ -508,7 +509,7 @@ invoice_should_be_saved (GncInvoice *invoice)
 static void
 do_count (QofInstance * invoice_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     if (invoice_should_be_saved ((GncInvoice *)invoice_p))
         (*count)++;
 }
@@ -526,7 +527,7 @@ xml_add_invoice (QofInstance * invoice_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncInvoice *invoice = (GncInvoice *) invoice_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
diff --git a/src/backend/xml/gnc-job-xml-v2.c b/src/backend/xml/gnc-job-xml-v2.cpp
similarity index 92%
rename from src/backend/xml/gnc-job-xml-v2.c
rename to src/backend/xml/gnc-job-xml-v2.cpp
index 72b86a9..ebac13b 100644
--- a/src/backend/xml/gnc-job-xml-v2.c
+++ b/src/backend/xml/gnc-job-xml-v2.cpp
@@ -21,15 +21,17 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include "gncJobP.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -41,7 +43,6 @@
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 
-#include "gncJobP.h"
 #include "gnc-job-xml-v2.h"
 #include "gnc-owner-xml-v2.h"
 #include "xml-helpers.h"
@@ -119,7 +120,7 @@ set_string(xmlNodePtr node, GncJob* job,
 static gboolean
 job_name_handler (xmlNodePtr node, gpointer job_pdata)
 {
-    struct job_pdata *pdata = job_pdata;
+    struct job_pdata *pdata = static_cast<decltype(pdata)>(job_pdata);
 
     return set_string(node, pdata->job, gncJobSetName);
 }
@@ -127,7 +128,7 @@ job_name_handler (xmlNodePtr node, gpointer job_pdata)
 static gboolean
 job_guid_handler (xmlNodePtr node, gpointer job_pdata)
 {
-    struct job_pdata *pdata = job_pdata;
+    struct job_pdata *pdata = static_cast<decltype(pdata)>(job_pdata);
     GncGUID *guid;
     GncJob *job;
 
@@ -153,7 +154,7 @@ job_guid_handler (xmlNodePtr node, gpointer job_pdata)
 static gboolean
 job_id_handler (xmlNodePtr node, gpointer job_pdata)
 {
-    struct job_pdata *pdata = job_pdata;
+    struct job_pdata *pdata = static_cast<decltype(pdata)>(job_pdata);
 
     return set_string(node, pdata->job, gncJobSetID);
 }
@@ -161,7 +162,7 @@ job_id_handler (xmlNodePtr node, gpointer job_pdata)
 static gboolean
 job_reference_handler (xmlNodePtr node, gpointer job_pdata)
 {
-    struct job_pdata *pdata = job_pdata;
+    struct job_pdata *pdata = static_cast<decltype(pdata)>(job_pdata);
 
     return set_string(node, pdata->job, gncJobSetReference);
 }
@@ -169,7 +170,7 @@ job_reference_handler (xmlNodePtr node, gpointer job_pdata)
 static gboolean
 job_owner_handler (xmlNodePtr node, gpointer job_pdata)
 {
-    struct job_pdata *pdata = job_pdata;
+    struct job_pdata *pdata = static_cast<decltype(pdata)>(job_pdata);
     GncOwner owner;
     gboolean ret;
 
@@ -183,7 +184,7 @@ job_owner_handler (xmlNodePtr node, gpointer job_pdata)
 static gboolean
 job_active_handler (xmlNodePtr node, gpointer job_pdata)
 {
-    struct job_pdata *pdata = job_pdata;
+    struct job_pdata *pdata = static_cast<decltype(pdata)>(job_pdata);
     gint64 val;
     gboolean ret;
 
@@ -197,7 +198,7 @@ job_active_handler (xmlNodePtr node, gpointer job_pdata)
 static gboolean
 job_slots_handler (xmlNodePtr node, gpointer job_pdata)
 {
-    struct job_pdata *pdata = job_pdata;
+    struct job_pdata *pdata = static_cast<decltype(pdata)>(job_pdata);
 
     return dom_tree_create_instance_slots (node, QOF_INSTANCE (pdata->job));
 }
@@ -248,7 +249,7 @@ gnc_job_end_handler(gpointer data_for_children,
     GncJob *job;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data)
     {
@@ -297,7 +298,7 @@ job_should_be_saved (GncJob *job)
 static void
 do_count (QofInstance * job_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     if (job_should_be_saved ((GncJob *)job_p))
         (*count)++;
 }
@@ -315,7 +316,7 @@ xml_add_job (QofInstance * job_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncJob *job = (GncJob *) job_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
diff --git a/src/backend/xml/gnc-lot-xml-v2.c b/src/backend/xml/gnc-lot-xml-v2.cpp
similarity index 96%
rename from src/backend/xml/gnc-lot-xml-v2.c
rename to src/backend/xml/gnc-lot-xml-v2.cpp
index 40eaf37..a4a45e4 100644
--- a/src/backend/xml/gnc-lot-xml-v2.c
+++ b/src/backend/xml/gnc-lot-xml-v2.cpp
@@ -22,15 +22,18 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include "gnc-lot.h"
+#include "gnc-lot-p.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -42,8 +45,6 @@
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 #include "sixtp-dom-parsers.h"
-#include "gnc-lot.h"
-#include "gnc-lot-p.h"
 
 static QofLogModule log_module = GNC_MOD_IO;
 
@@ -83,7 +84,7 @@ struct lot_pdata
 static gboolean
 lot_id_handler (xmlNodePtr node, gpointer p)
 {
-    struct lot_pdata *pdata = p;
+    struct lot_pdata *pdata = static_cast<decltype(pdata)>(p);
     GncGUID *guid;
 
     ENTER("(lot=%p)", pdata->lot);
@@ -99,7 +100,7 @@ lot_id_handler (xmlNodePtr node, gpointer p)
 static gboolean
 lot_slots_handler (xmlNodePtr node, gpointer p)
 {
-    struct lot_pdata *pdata = p;
+    struct lot_pdata *pdata = static_cast<decltype(pdata)>(p);
     gboolean success;
 
     ENTER("(lot=%p)", pdata->lot);
@@ -127,7 +128,7 @@ gnc_lot_end_handler(gpointer data_for_children,
     GNCLot *lot;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data)
     {
diff --git a/src/backend/xml/gnc-order-xml-v2.c b/src/backend/xml/gnc-order-xml-v2.cpp
similarity index 92%
rename from src/backend/xml/gnc-order-xml-v2.c
rename to src/backend/xml/gnc-order-xml-v2.cpp
index 0adb39b..7b26d79 100644
--- a/src/backend/xml/gnc-order-xml-v2.c
+++ b/src/backend/xml/gnc-order-xml-v2.cpp
@@ -21,15 +21,17 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include "gncOrderP.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -41,8 +43,6 @@
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 
-#include "gncOrderP.h"
-
 #include "gnc-order-xml-v2.h"
 #include "gnc-owner-xml-v2.h"
 
@@ -144,7 +144,7 @@ set_timespec(xmlNodePtr node, GncOrder* order,
 static gboolean
 order_guid_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
     GncGUID *guid;
     GncOrder *order;
 
@@ -170,7 +170,7 @@ order_guid_handler (xmlNodePtr node, gpointer order_pdata)
 static gboolean
 order_id_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
 
     return set_string(node, pdata->order, gncOrderSetID);
 }
@@ -178,7 +178,7 @@ order_id_handler (xmlNodePtr node, gpointer order_pdata)
 static gboolean
 order_owner_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
     GncOwner owner;
     gboolean ret;
 
@@ -192,7 +192,7 @@ order_owner_handler (xmlNodePtr node, gpointer order_pdata)
 static gboolean
 order_opened_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
 
     return set_timespec (node, pdata->order, gncOrderSetDateOpened);
 }
@@ -200,7 +200,7 @@ order_opened_handler (xmlNodePtr node, gpointer order_pdata)
 static gboolean
 order_closed_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
 
     return set_timespec (node, pdata->order, gncOrderSetDateClosed);
 }
@@ -208,7 +208,7 @@ order_closed_handler (xmlNodePtr node, gpointer order_pdata)
 static gboolean
 order_notes_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
 
     return set_string(node, pdata->order, gncOrderSetNotes);
 }
@@ -216,7 +216,7 @@ order_notes_handler (xmlNodePtr node, gpointer order_pdata)
 static gboolean
 order_reference_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
 
     return set_string(node, pdata->order, gncOrderSetReference);
 }
@@ -224,7 +224,7 @@ order_reference_handler (xmlNodePtr node, gpointer order_pdata)
 static gboolean
 order_active_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
     gint64 val;
     gboolean ret;
 
@@ -238,7 +238,7 @@ order_active_handler (xmlNodePtr node, gpointer order_pdata)
 static gboolean
 order_slots_handler (xmlNodePtr node, gpointer order_pdata)
 {
-    struct order_pdata *pdata = order_pdata;
+    struct order_pdata *pdata = static_cast<decltype(pdata)>(order_pdata);
 
     return dom_tree_create_instance_slots(node, QOF_INSTANCE (pdata->order));
 }
@@ -291,7 +291,7 @@ gnc_order_end_handler(gpointer data_for_children,
     GncOrder *order;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data)
     {
@@ -340,7 +340,7 @@ order_should_be_saved (GncOrder *order)
 static void
 do_count (QofInstance * order_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     if (order_should_be_saved ((GncOrder *) order_p))
         (*count)++;
 }
@@ -358,7 +358,7 @@ xml_add_order (QofInstance * order_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncOrder *order = (GncOrder *) order_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
diff --git a/src/backend/xml/gnc-owner-xml-v2.c b/src/backend/xml/gnc-owner-xml-v2.cpp
similarity index 97%
rename from src/backend/xml/gnc-owner-xml-v2.c
rename to src/backend/xml/gnc-owner-xml-v2.cpp
index ef76abf..5cfd0f0 100644
--- a/src/backend/xml/gnc-owner-xml-v2.c
+++ b/src/backend/xml/gnc-owner-xml-v2.cpp
@@ -21,15 +21,20 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include "gncCustomerP.h"
+#include "gncJobP.h"
+#include "gncVendorP.h"
+#include "gncEmployeeP.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -42,10 +47,6 @@
 #include "io-gncxml-v2.h"
 
 #include "gnc-owner-xml-v2.h"
-#include "gncCustomerP.h"
-#include "gncJobP.h"
-#include "gncVendorP.h"
-#include "gncEmployeeP.h"
 
 static QofLogModule log_module = GNC_MOD_IO;
 
@@ -101,7 +102,7 @@ struct owner_pdata
 static gboolean
 owner_type_handler (xmlNodePtr node, gpointer owner_pdata)
 {
-    struct owner_pdata *pdata = owner_pdata;
+    struct owner_pdata *pdata = static_cast<decltype(pdata)>(owner_pdata);
     char* txt = dom_tree_to_text(node);
     g_return_val_if_fail(txt, FALSE);
 
@@ -127,7 +128,7 @@ owner_type_handler (xmlNodePtr node, gpointer owner_pdata)
 static gboolean
 owner_id_handler (xmlNodePtr node, gpointer owner_pdata)
 {
-    struct owner_pdata *pdata = owner_pdata;
+    struct owner_pdata *pdata = static_cast<decltype(pdata)>(owner_pdata);
     GncGUID *guid;
 
     guid = dom_tree_to_guid(node);
diff --git a/src/backend/xml/gnc-owner-xml-v2.h b/src/backend/xml/gnc-owner-xml-v2.h
index b1017dc..c90d7cc 100644
--- a/src/backend/xml/gnc-owner-xml-v2.h
+++ b/src/backend/xml/gnc-owner-xml-v2.h
@@ -22,10 +22,11 @@
 
 #ifndef GNC_OWNER_XML_V2_H
 #define GNC_OWNER_XML_V2_H
-
+extern "C"
+{
 #include "gncOwner.h"
 #include "qof.h"
-
+}
 gboolean   gnc_dom_tree_to_owner (xmlNodePtr node, GncOwner *owner,
                                   QofBook *book);
 xmlNodePtr gnc_owner_to_dom_tree (const char *tag, const GncOwner *addr);
diff --git a/src/backend/xml/gnc-pricedb-xml-v2.c b/src/backend/xml/gnc-pricedb-xml-v2.cpp
similarity index 96%
rename from src/backend/xml/gnc-pricedb-xml-v2.c
rename to src/backend/xml/gnc-pricedb-xml-v2.cpp
index 710fa01..06fb251 100644
--- a/src/backend/xml/gnc-pricedb-xml-v2.c
+++ b/src/backend/xml/gnc-pricedb-xml-v2.cpp
@@ -20,10 +20,14 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
  *******************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <string.h>
+#include "gnc-pricedb.h"
+#include "gnc-pricedb-p.h"
+}
 
 #include "gnc-xml.h"
 #include "sixtp.h"
@@ -34,9 +38,6 @@
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 
-#include "gnc-pricedb.h"
-#include "gnc-pricedb-p.h"
-
 /* This static indicates the debugging module that this .o belongs to.  */
 static QofLogModule log_module = GNC_MOD_IO;
 
@@ -154,8 +155,8 @@ price_parse_xml_end_handler(gpointer data_for_children,
     xmlNodePtr price_xml = (xmlNodePtr) data_for_children;
     xmlNodePtr child;
     GNCPrice *p = NULL;
-    gxpf_data *gdata = global_data;
-    QofBook *book = gdata->bookdata;
+    gxpf_data *gdata = static_cast<decltype(gdata)>(global_data);
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     /* we haven't been handed the *top* level node yet... */
     if (parent_data) return TRUE;
@@ -263,8 +264,8 @@ pricedb_start_handler(GSList* sibling_data,
                       const gchar *tag,
                       gchar **attrs)
 {
-    gxpf_data *gdata = global_data;
-    QofBook *book = gdata->bookdata;
+    gxpf_data *gdata = static_cast<decltype(gdata)>(global_data);
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
     GNCPriceDB *db = gnc_pricedb_get_db(book);
     g_return_val_if_fail(db, FALSE);
     gnc_pricedb_set_bulk_update(db, TRUE);
@@ -283,8 +284,8 @@ pricedb_after_child_handler(gpointer data_for_children,
                             const gchar *child_tag,
                             sixtp_child_result *child_result)
 {
-    gxpf_data *gdata = global_data;
-    sixtp_gdv2 *gd = gdata->parsedata;
+    gxpf_data *gdata = static_cast<decltype(gdata)>(global_data);
+    sixtp_gdv2 *gd = static_cast<decltype(gd)>(gdata->parsedata);
     GNCPriceDB *db = (GNCPriceDB *) * result;
 
     g_return_val_if_fail(db, FALSE);
@@ -300,7 +301,7 @@ pricedb_after_child_handler(gpointer data_for_children,
         g_return_val_if_fail(p, FALSE);
         gnc_pricedb_add_price(db, p);
         gd->counter.prices_loaded++;
-        run_callback(gd, "prices");
+        sixtp_run_callback(gd, "prices");
         return TRUE;
     }
     else
@@ -328,7 +329,7 @@ pricedb_v2_end_handler(
     GSList* sibling_data, gpointer parent_data, gpointer global_data,
     gpointer *result, const gchar *tag)
 {
-    GNCPriceDB *db = *result;
+    GNCPriceDB *db = static_cast<decltype(db)>(*result);
     gxpf_data *gdata = (gxpf_data*)global_data;
 
     if (parent_data)
diff --git a/src/backend/xml/gnc-recurrence-xml-v2.c b/src/backend/xml/gnc-recurrence-xml-v2.cpp
similarity index 99%
rename from src/backend/xml/gnc-recurrence-xml-v2.c
rename to src/backend/xml/gnc-recurrence-xml-v2.cpp
index 8304d3c..a935235 100644
--- a/src/backend/xml/gnc-recurrence-xml-v2.c
+++ b/src/backend/xml/gnc-recurrence-xml-v2.cpp
@@ -21,15 +21,18 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org
  */
 
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <string.h>
+#include "qof.h"
+#include "Recurrence.h"
+}
 
 #include "gnc-xml.h"
 #include "gnc-xml-helper.h"
-#include "qof.h"
 
 #include "sixtp.h"
 #include "sixtp-utils.h"
@@ -38,7 +41,6 @@
 #include "sixtp-dom-parsers.h"
 #include "sixtp-dom-generators.h"
 #include "io-gncxml-v2.h"
-#include "Recurrence.h"
 
 static QofLogModule log_module = GNC_MOD_IO;
 
diff --git a/src/backend/xml/gnc-schedxaction-xml-v2.c b/src/backend/xml/gnc-schedxaction-xml-v2.cpp
similarity index 93%
rename from src/backend/xml/gnc-schedxaction-xml-v2.c
rename to src/backend/xml/gnc-schedxaction-xml-v2.cpp
index 46aa150..ea0ee92 100644
--- a/src/backend/xml/gnc-schedxaction-xml-v2.c
+++ b/src/backend/xml/gnc-schedxaction-xml-v2.cpp
@@ -20,16 +20,17 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
  *******************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <string.h>
 
 #include "SX-book.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -208,7 +209,7 @@ static
 gboolean
 sx_id_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     GncGUID        *tmp = dom_tree_to_guid( node );
 
@@ -223,7 +224,7 @@ static
 gboolean
 sx_name_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gchar *tmp = dom_tree_to_text( node );
     g_debug("sx named [%s]", tmp);
@@ -236,7 +237,7 @@ sx_name_handler( xmlNodePtr node, gpointer sx_pdata )
 static gboolean
 sx_enabled_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gchar *tmp = dom_tree_to_text( node );
 
@@ -248,7 +249,7 @@ sx_enabled_handler( xmlNodePtr node, gpointer sx_pdata )
 static gboolean
 sx_autoCreate_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gchar *tmp = dom_tree_to_text( node );
 
@@ -260,7 +261,7 @@ sx_autoCreate_handler( xmlNodePtr node, gpointer sx_pdata )
 static gboolean
 sx_notify_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gchar *tmp = dom_tree_to_text( node );
 
@@ -272,7 +273,7 @@ sx_notify_handler( xmlNodePtr node, gpointer sx_pdata )
 static gboolean
 sx_advCreate_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gint64 advCreate;
 
@@ -288,7 +289,7 @@ sx_advCreate_handler( xmlNodePtr node, gpointer sx_pdata )
 static gboolean
 sx_advRemind_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gint64 advRemind;
 
@@ -319,7 +320,7 @@ static
 gboolean
 sx_instcount_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gint64 instanceNum;
 
@@ -336,7 +337,7 @@ static
 gboolean
 sx_start_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
 
     return sx_set_date( node, sx, xaccSchedXactionSetStartDate );
@@ -346,7 +347,7 @@ static
 gboolean
 sx_last_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
 
     return sx_set_date( node, sx, xaccSchedXactionSetLastOccurDate );
@@ -356,7 +357,7 @@ static
 gboolean
 sx_end_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
 
     return sx_set_date( node, sx, xaccSchedXactionSetEndDate );
@@ -413,7 +414,7 @@ _fixup_recurrence_start_dates(const GDate *sx_start_date, GList *schedule)
 static gboolean
 sx_freqspec_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     GList *schedule;
     gchar* debug_str;
@@ -455,7 +456,7 @@ struct dom_tree_handler sx_recurrence_list_handlers[] =
 static gboolean
 sx_recurrence_handler(xmlNodePtr node, gpointer _pdata)
 {
-    struct sx_pdata *parsing_data = _pdata;
+    struct sx_pdata *parsing_data = static_cast<decltype(parsing_data)>(_pdata);
     GList *schedule = NULL;
     gchar* debug_str;
 
@@ -532,7 +533,7 @@ static
 gboolean
 sx_defer_inst_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     SXTmpStateData *tsd;
 
@@ -559,7 +560,7 @@ static
 gboolean
 sx_numOccur_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gint64 numOccur;
 
@@ -578,7 +579,7 @@ static
 gboolean
 sx_templ_acct_handler( xmlNodePtr node, gpointer sx_pdata)
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     GncGUID *templ_acct_guid = dom_tree_to_guid(node);
     Account *account;
@@ -600,7 +601,7 @@ static
 gboolean
 sx_remOccur_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
     gint64        remOccur;
 
@@ -618,7 +619,7 @@ static
 gboolean
 sx_slots_handler( xmlNodePtr node, gpointer sx_pdata )
 {
-    struct sx_pdata *pdata = sx_pdata;
+    struct sx_pdata *pdata = static_cast<decltype(pdata)>(sx_pdata);
     SchedXaction *sx = pdata->sx;
 
     return dom_tree_create_instance_slots(node, QOF_INSTANCE(sx));
@@ -671,11 +672,11 @@ gnc_schedXaction_end_handler(gpointer data_for_children,
 
     g_return_val_if_fail( tree, FALSE );
 
-    sx = xaccSchedXactionMalloc( gdata->bookdata );
+    sx = xaccSchedXactionMalloc(static_cast<QofBook*>(gdata->bookdata) );
 
     memset(&sx_pdata, 0, sizeof(sx_pdata));
     sx_pdata.sx = sx;
-    sx_pdata.book = gdata->bookdata;
+    sx_pdata.book = static_cast<decltype(sx_pdata.book)>(gdata->bookdata);
 
     g_assert( sx_dom_handlers != NULL );
 
@@ -733,7 +734,7 @@ gnc_schedXaction_end_handler(gpointer data_for_children,
     {
         Account *ra = NULL;
         Account *acct = NULL;
-        sixtp_gdv2 *sixdata = gdata->parsedata;
+        sixtp_gdv2 *sixdata = static_cast<decltype(sixdata)>(gdata->parsedata);
         QofBook *book;
         gchar guidstr[GUID_ENCODING_LENGTH+1];
 
@@ -786,7 +787,7 @@ static
 gboolean
 tt_act_handler( xmlNodePtr node, gpointer data )
 {
-    gnc_template_xaction_data *txd = data;
+    gnc_template_xaction_data *txd = static_cast<decltype(txd)>(data);
     Account *acc;
     gnc_commodity *com;
 
@@ -837,7 +838,7 @@ static
 gboolean
 tt_trn_handler( xmlNodePtr node, gpointer data )
 {
-    gnc_template_xaction_data *txd = data;
+    gnc_template_xaction_data *txd = static_cast<decltype(txd)>(data);
     Transaction        *trn;
 
     trn = dom_tree_to_transaction( node, txd->book );
@@ -871,9 +872,9 @@ gnc_template_transaction_end_handler(gpointer data_for_children,
                                      const gchar *tag)
 {
     gboolean   successful = FALSE;
-    xmlNodePtr tree = data_for_children;
-    gxpf_data  *gdata = global_data;
-    QofBook    *book = gdata->bookdata;
+    xmlNodePtr tree = static_cast<decltype(tree)>(data_for_children);
+    gxpf_data  *gdata = static_cast<decltype(gdata)>(global_data);
+    QofBook    *book = static_cast<decltype(book)>(gdata->bookdata);
     GList      *n;
     gnc_template_xaction_data txd;
 
diff --git a/src/backend/xml/gnc-tax-table-xml-v2.c b/src/backend/xml/gnc-tax-table-xml-v2.cpp
similarity index 92%
rename from src/backend/xml/gnc-tax-table-xml-v2.c
rename to src/backend/xml/gnc-tax-table-xml-v2.cpp
index 2a7daa6..618c007 100644
--- a/src/backend/xml/gnc-tax-table-xml-v2.c
+++ b/src/backend/xml/gnc-tax-table-xml-v2.cpp
@@ -21,15 +21,18 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include "gncEntry.h"
+#include "gncTaxTableP.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -41,8 +44,6 @@
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 
-#include "gncEntry.h"
-#include "gncTaxTableP.h"
 #include "gnc-tax-table-xml-v2.h"
 
 #define _GNC_MOD_NAME	GNC_ID_TAXTABLE
@@ -126,7 +127,7 @@ taxtable_dom_tree_create (GncTaxTable *table)
     entries = xmlNewChild (ret, NULL, BAD_CAST taxtable_entries_string, NULL);
     for (list = gncTaxTableGetEntries (table); list; list = list->next)
     {
-        GncTaxTableEntry *entry = list->data;
+        GncTaxTableEntry *entry = static_cast<decltype(entry)>(list->data);
         xmlAddChild(entries, ttentry_dom_tree_create (entry));
     }
 
@@ -147,7 +148,7 @@ struct ttentry_pdata
 static gboolean
 ttentry_acct_handler (xmlNodePtr node, gpointer ttentry_pdata)
 {
-    struct ttentry_pdata *pdata = ttentry_pdata;
+    struct ttentry_pdata *pdata = static_cast<decltype(pdata)>(ttentry_pdata);
     GncGUID *guid;
     Account * acc;
 
@@ -162,9 +163,9 @@ ttentry_acct_handler (xmlNodePtr node, gpointer ttentry_pdata)
 }
 
 static gboolean
-ttentry_type_handler (xmlNodePtr node, gpointer taxtable_pdata)
+ttentry_type_handler (xmlNodePtr node, gpointer ttentry_pdata)
 {
-    struct ttentry_pdata *pdata = taxtable_pdata;
+    struct ttentry_pdata *pdata = static_cast<decltype(pdata)>(ttentry_pdata);
     GncAmountType type;
     char *str;
     gboolean ret;
@@ -184,7 +185,7 @@ ttentry_type_handler (xmlNodePtr node, gpointer taxtable_pdata)
 static gboolean
 ttentry_amount_handler (xmlNodePtr node, gpointer ttentry_pdata)
 {
-    struct ttentry_pdata *pdata = ttentry_pdata;
+    struct ttentry_pdata *pdata = static_cast<decltype(pdata)>(ttentry_pdata);
     gnc_numeric* num = dom_tree_to_gnc_numeric(node);
     g_return_val_if_fail(num, FALSE);
 
@@ -266,7 +267,7 @@ set_parent_child (xmlNodePtr node, struct taxtable_pdata *pdata,
 static gboolean
 taxtable_guid_handler (xmlNodePtr node, gpointer taxtable_pdata)
 {
-    struct taxtable_pdata *pdata = taxtable_pdata;
+    struct taxtable_pdata *pdata = static_cast<decltype(pdata)>(taxtable_pdata);
     GncGUID *guid;
     GncTaxTable *table;
 
@@ -292,7 +293,7 @@ taxtable_guid_handler (xmlNodePtr node, gpointer taxtable_pdata)
 static gboolean
 taxtable_name_handler (xmlNodePtr node, gpointer taxtable_pdata)
 {
-    struct taxtable_pdata *pdata = taxtable_pdata;
+    struct taxtable_pdata *pdata = static_cast<decltype(pdata)>(taxtable_pdata);
     char* txt = dom_tree_to_text(node);
     g_return_val_if_fail(txt, FALSE);
 
@@ -304,7 +305,7 @@ taxtable_name_handler (xmlNodePtr node, gpointer taxtable_pdata)
 static gboolean
 taxtable_refcount_handler (xmlNodePtr node, gpointer taxtable_pdata)
 {
-    struct taxtable_pdata *pdata = taxtable_pdata;
+    struct taxtable_pdata *pdata = static_cast<decltype(pdata)>(taxtable_pdata);
     gint64 val;
 
     dom_tree_to_integer(node, &val);
@@ -315,7 +316,7 @@ taxtable_refcount_handler (xmlNodePtr node, gpointer taxtable_pdata)
 static gboolean
 taxtable_invisible_handler (xmlNodePtr node, gpointer taxtable_pdata)
 {
-    struct taxtable_pdata *pdata = taxtable_pdata;
+    struct taxtable_pdata *pdata = static_cast<decltype(pdata)>(taxtable_pdata);
     gint64 val;
 
     dom_tree_to_integer(node, &val);
@@ -327,21 +328,21 @@ taxtable_invisible_handler (xmlNodePtr node, gpointer taxtable_pdata)
 static gboolean
 taxtable_parent_handler (xmlNodePtr node, gpointer taxtable_pdata)
 {
-    struct taxtable_pdata *pdata = taxtable_pdata;
+    struct taxtable_pdata *pdata = static_cast<decltype(pdata)>(taxtable_pdata);
     return set_parent_child (node, pdata, gncTaxTableSetParent);
 }
 
 static gboolean
 taxtable_child_handler (xmlNodePtr node, gpointer taxtable_pdata)
 {
-    struct taxtable_pdata *pdata = taxtable_pdata;
+    struct taxtable_pdata *pdata = static_cast<decltype(pdata)>(taxtable_pdata);
     return set_parent_child (node, pdata, gncTaxTableSetChild);
 }
 
 static gboolean
 taxtable_entries_handler (xmlNodePtr node, gpointer taxtable_pdata)
 {
-    struct taxtable_pdata *pdata = taxtable_pdata;
+    struct taxtable_pdata *pdata = static_cast<decltype(pdata)>(taxtable_pdata);
     xmlNodePtr mark;
 
     g_return_val_if_fail (node, FALSE);
@@ -371,7 +372,7 @@ taxtable_entries_handler (xmlNodePtr node, gpointer taxtable_pdata)
 static gboolean
 taxtable_slots_handler (xmlNodePtr node, gpointer taxtable_pdata)
 {
-    struct taxtable_pdata *pdata = taxtable_pdata;
+    struct taxtable_pdata *pdata = static_cast<decltype(pdata)>(taxtable_pdata);
 
     return dom_tree_create_instance_slots(node, QOF_INSTANCE (pdata->table));
 }
@@ -423,7 +424,7 @@ gnc_taxtable_end_handler(gpointer data_for_children,
     GncTaxTable *table;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data)
     {
@@ -459,7 +460,7 @@ taxtable_sixtp_parser_create(void)
 static void
 do_count (QofInstance * table_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     (*count)++;
 }
 
@@ -476,7 +477,7 @@ xml_add_taxtable (QofInstance * table_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncTaxTable *table = (GncTaxTable *) table_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
@@ -542,7 +543,7 @@ static void
 taxtable_scrub_cb (QofInstance * table_p, gpointer list_p)
 {
     GncTaxTable *table = GNC_TAXTABLE(table_p);
-    GList **list = list_p;
+    GList **list = static_cast<decltype(list)>(list_p);
 
     if (taxtable_is_grandchild(table) || gncTaxTableGetEntries(table) == NULL)
         *list = g_list_prepend(*list, table);
@@ -554,7 +555,7 @@ taxtable_scrub_cb (QofInstance * table_p, gpointer list_p)
 static void
 taxtable_scrub_entries (QofInstance * entry_p, gpointer ht_p)
 {
-    GHashTable *ht = ht_p;
+    GHashTable *ht = static_cast<decltype(ht)>(ht_p);
     GncEntry *entry = GNC_ENTRY(entry_p);
     GncTaxTable *table, *new_tt;
     gint32 count;
@@ -607,7 +608,7 @@ taxtable_scrub_entries (QofInstance * entry_p, gpointer ht_p)
 static void
 taxtable_scrub_cust (QofInstance * cust_p, gpointer ht_p)
 {
-    GHashTable *ht = ht_p;
+    GHashTable *ht = static_cast<decltype(ht)>(ht_p);
     GncCustomer *cust = GNC_CUSTOMER(cust_p);
     GncTaxTable *table;
     gint32 count;
@@ -624,7 +625,7 @@ taxtable_scrub_cust (QofInstance * cust_p, gpointer ht_p)
 static void
 taxtable_scrub_vendor (QofInstance * vendor_p, gpointer ht_p)
 {
-    GHashTable *ht = ht_p;
+    GHashTable *ht = static_cast<decltype(ht)>(ht_p);
     GncVendor *vendor = GNC_VENDOR(vendor_p);
     GncTaxTable *table;
     gint32 count;
@@ -641,7 +642,7 @@ taxtable_scrub_vendor (QofInstance * vendor_p, gpointer ht_p)
 static void
 taxtable_reset_refcount (gpointer key, gpointer value, gpointer notused)
 {
-    GncTaxTable *table = key;
+    GncTaxTable *table = static_cast<decltype(table)>(key);
     gint32 count = GPOINTER_TO_INT(value);
 
     if (count != gncTaxTableGetRefcount(table) && !gncTaxTableGetInvisible(table))
@@ -671,7 +672,7 @@ taxtable_scrub (QofBook *book)
     for (node = list; node; node = node->next)
     {
         gchar guidstr[GUID_ENCODING_LENGTH+1];
-        table = node->data;
+        table = static_cast<decltype(table)>(node->data);
 
         guid_to_string_buff(qof_instance_get_guid(QOF_INSTANCE(table)),guidstr);
         PINFO ("deleting grandchild taxtable: %s\n", guidstr);
diff --git a/src/backend/xml/gnc-transaction-xml-v2.c b/src/backend/xml/gnc-transaction-xml-v2.cpp
similarity index 91%
rename from src/backend/xml/gnc-transaction-xml-v2.c
rename to src/backend/xml/gnc-transaction-xml-v2.cpp
index 40f871c..1fb6820 100644
--- a/src/backend/xml/gnc-transaction-xml-v2.c
+++ b/src/backend/xml/gnc-transaction-xml-v2.cpp
@@ -21,12 +21,18 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
  *******************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <string.h>
-
+#include "AccountP.h"
+#include "Transaction.h"
+#include "TransactionP.h"
+#include "gnc-lot.h"
+#include "gnc-lot-p.h"
+}
 #include "gnc-xml-helper.h"
 
 #include "sixtp.h"
@@ -41,11 +47,6 @@
 #include "io-gncxml-gen.h"
 
 #include "sixtp-dom-parsers.h"
-#include "AccountP.h"
-#include "Transaction.h"
-#include "TransactionP.h"
-#include "gnc-lot.h"
-#include "gnc-lot-p.h"
 
 const gchar *transaction_version_string = "2.0.0";
 
@@ -143,7 +144,7 @@ add_trans_splits(xmlNodePtr node, Transaction *trn)
 
     for (n = xaccTransGetSplitList(trn); n; n = n->next)
     {
-        Split *s = n->data;
+        Split *s = static_cast<decltype(s)>(n->data);
         xmlAddChild(toaddto, split_to_dom_tree("trn:split", s));
     }
 }
@@ -232,7 +233,7 @@ set_spl_gnc_num(xmlNodePtr node, Split* spl,
 static gboolean
 spl_id_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     GncGUID *tmp = dom_tree_to_guid(node);
     g_return_val_if_fail(tmp, FALSE);
 
@@ -245,21 +246,21 @@ spl_id_handler(xmlNodePtr node, gpointer data)
 static gboolean
 spl_memo_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     return set_spl_string(node, pdata->split, xaccSplitSetMemo);
 }
 
 static gboolean
 spl_action_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     return set_spl_string(node, pdata->split, xaccSplitSetAction);
 }
 
 static gboolean
 spl_reconciled_state_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     gchar *tmp = dom_tree_to_text(node);
     g_return_val_if_fail(tmp, FALSE);
 
@@ -273,7 +274,7 @@ spl_reconciled_state_handler(xmlNodePtr node, gpointer data)
 static gboolean
 spl_reconcile_date_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     Timespec ts;
 
     ts = dom_tree_to_timespec(node);
@@ -287,14 +288,14 @@ spl_reconcile_date_handler(xmlNodePtr node, gpointer data)
 static gboolean
 spl_value_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     return set_spl_gnc_num(node, pdata->split, xaccSplitSetValue);
 }
 
 static gboolean
 spl_quantity_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     return set_spl_gnc_num(node, pdata->split, xaccSplitSetAmount);
 }
 
@@ -303,7 +304,7 @@ gboolean gnc_transaction_xml_v2_testing = FALSE;
 static gboolean
 spl_account_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     GncGUID *id = dom_tree_to_guid(node);
     Account *account;
 
@@ -329,7 +330,7 @@ spl_account_handler(xmlNodePtr node, gpointer data)
 static gboolean
 spl_lot_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     GncGUID *id = dom_tree_to_guid(node);
     GNCLot *lot;
 
@@ -353,7 +354,7 @@ spl_lot_handler(xmlNodePtr node, gpointer data)
 static gboolean
 spl_slots_handler(xmlNodePtr node, gpointer data)
 {
-    struct split_pdata *pdata = data;
+    struct split_pdata *pdata = static_cast<decltype(pdata)>(data);
     gboolean successful;
 
     successful = dom_tree_create_instance_slots(node,
@@ -447,7 +448,7 @@ set_tran_date(xmlNodePtr node, Transaction *trn,
 static gboolean
 trn_id_handler(xmlNodePtr node, gpointer trans_pdata)
 {
-    struct trans_pdata *pdata = trans_pdata;
+    struct trans_pdata *pdata = static_cast<decltype(pdata)>(trans_pdata);
     Transaction *trn = pdata->trans;
     GncGUID *tmp = dom_tree_to_guid(node);
 
@@ -463,7 +464,7 @@ trn_id_handler(xmlNodePtr node, gpointer trans_pdata)
 static gboolean
 trn_currency_handler(xmlNodePtr node, gpointer trans_pdata)
 {
-    struct trans_pdata *pdata = trans_pdata;
+    struct trans_pdata *pdata = static_cast<decltype(pdata)>(trans_pdata);
     Transaction *trn = pdata->trans;
     gnc_commodity *ref;
 
@@ -476,7 +477,7 @@ trn_currency_handler(xmlNodePtr node, gpointer trans_pdata)
 static gboolean
 trn_num_handler(xmlNodePtr node, gpointer trans_pdata)
 {
-    struct trans_pdata *pdata = trans_pdata;
+    struct trans_pdata *pdata = static_cast<decltype(pdata)>(trans_pdata);
     Transaction *trn = pdata->trans;
 
     return set_tran_string(node, trn, xaccTransSetNum);
@@ -485,7 +486,7 @@ trn_num_handler(xmlNodePtr node, gpointer trans_pdata)
 static gboolean
 trn_date_posted_handler(xmlNodePtr node, gpointer trans_pdata)
 {
-    struct trans_pdata *pdata = trans_pdata;
+    struct trans_pdata *pdata = static_cast<decltype(pdata)>(trans_pdata);
     Transaction *trn = pdata->trans;
 
     return set_tran_date(node, trn, xaccTransSetDatePostedTS);
@@ -494,7 +495,7 @@ trn_date_posted_handler(xmlNodePtr node, gpointer trans_pdata)
 static gboolean
 trn_date_entered_handler(xmlNodePtr node, gpointer trans_pdata)
 {
-    struct trans_pdata *pdata = trans_pdata;
+    struct trans_pdata *pdata = static_cast<decltype(pdata)>(trans_pdata);
     Transaction *trn = pdata->trans;
 
     return set_tran_date(node, trn, xaccTransSetDateEnteredTS);
@@ -503,7 +504,7 @@ trn_date_entered_handler(xmlNodePtr node, gpointer trans_pdata)
 static gboolean
 trn_description_handler(xmlNodePtr node, gpointer trans_pdata)
 {
-    struct trans_pdata *pdata = trans_pdata;
+    struct trans_pdata *pdata = static_cast<decltype(pdata)>(trans_pdata);
     Transaction *trn = pdata->trans;
 
     return set_tran_string(node, trn, xaccTransSetDescription);
@@ -512,7 +513,7 @@ trn_description_handler(xmlNodePtr node, gpointer trans_pdata)
 static gboolean
 trn_slots_handler(xmlNodePtr node, gpointer trans_pdata)
 {
-    struct trans_pdata *pdata = trans_pdata;
+    struct trans_pdata *pdata = static_cast<decltype(pdata)>(trans_pdata);
     Transaction *trn = pdata->trans;
     gboolean successful;
 
@@ -526,7 +527,7 @@ trn_slots_handler(xmlNodePtr node, gpointer trans_pdata)
 static gboolean
 trn_splits_handler(xmlNodePtr node, gpointer trans_pdata)
 {
-    struct trans_pdata *pdata = trans_pdata;
+    struct trans_pdata *pdata = static_cast<decltype(pdata)>(trans_pdata);
     Transaction *trn = pdata->trans;
     xmlNodePtr mark;
 
@@ -596,7 +597,8 @@ gnc_transaction_end_handler(gpointer data_for_children,
 
     g_return_val_if_fail(tree, FALSE);
 
-    trn = dom_tree_to_transaction(tree, gdata->bookdata);
+    trn = dom_tree_to_transaction(tree,
+                                  static_cast<QofBook*>(gdata->bookdata));
     if (trn != NULL)
     {
         gdata->cb(tag, gdata->parsedata, trn);
diff --git a/src/backend/xml/gnc-vendor-xml-v2.c b/src/backend/xml/gnc-vendor-xml-v2.cpp
similarity index 92%
rename from src/backend/xml/gnc-vendor-xml-v2.c
rename to src/backend/xml/gnc-vendor-xml-v2.cpp
index 5ab47f1..41d3f13 100644
--- a/src/backend/xml/gnc-vendor-xml-v2.c
+++ b/src/backend/xml/gnc-vendor-xml-v2.cpp
@@ -21,15 +21,19 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include "gncBillTermP.h"
+#include "gncVendorP.h"
+#include "gncTaxTableP.h"
+}
 
 #include "gnc-xml-helper.h"
-
 #include "sixtp.h"
 #include "sixtp-utils.h"
 #include "sixtp-parsers.h"
@@ -41,9 +45,6 @@
 #include "io-gncxml-gen.h"
 #include "io-gncxml-v2.h"
 
-#include "gncBillTermP.h"
-#include "gncVendorP.h"
-#include "gncTaxTableP.h"
 #include "gnc-vendor-xml-v2.h"
 #include "gnc-address-xml-v2.h"
 #include "xml-helpers.h"
@@ -163,7 +164,7 @@ set_boolean(xmlNodePtr node, GncVendor* vendor,
 static gboolean
 vendor_name_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
 
     return set_string(node, pdata->vendor, gncVendorSetName);
 }
@@ -171,7 +172,7 @@ vendor_name_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_guid_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
     GncGUID *guid;
     GncVendor *vendor;
 
@@ -197,7 +198,7 @@ vendor_guid_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_id_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
 
     return set_string(node, pdata->vendor, gncVendorSetID);
 }
@@ -205,7 +206,7 @@ vendor_id_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_notes_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
 
     return set_string(node, pdata->vendor, gncVendorSetNotes);
 }
@@ -213,7 +214,7 @@ vendor_notes_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_terms_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
     GncGUID *guid;
     GncBillTerm *term;
 
@@ -230,7 +231,7 @@ vendor_terms_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_addr_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
 
     return gnc_dom_tree_to_address (node, gncVendorGetAddr(pdata->vendor));
 }
@@ -238,7 +239,7 @@ vendor_addr_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_taxincluded_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
     GncTaxIncluded type;
     char *str;
     gboolean ret;
@@ -258,14 +259,14 @@ vendor_taxincluded_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_active_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
     return set_boolean (node, pdata->vendor, gncVendorSetActive);
 }
 
 static gboolean
 vendor_currency_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
     gnc_commodity *com;
 
     com = dom_tree_to_commodity_ref(node, pdata->book);
@@ -279,7 +280,7 @@ vendor_currency_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_taxtable_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
     GncGUID *guid;
     GncTaxTable *taxtable;
 
@@ -304,14 +305,14 @@ vendor_taxtable_handler (xmlNodePtr node, gpointer vendor_pdata)
 static gboolean
 vendor_taxtableoverride_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
     return set_boolean (node, pdata->vendor, gncVendorSetTaxTableOverride);
 }
 
 static gboolean
 vendor_slots_handler (xmlNodePtr node, gpointer vendor_pdata)
 {
-    struct vendor_pdata *pdata = vendor_pdata;
+    struct vendor_pdata *pdata = static_cast<decltype(pdata)>(vendor_pdata);
     return dom_tree_create_instance_slots(node, QOF_INSTANCE(pdata->vendor));
 
 }
@@ -368,7 +369,7 @@ gnc_vendor_end_handler(gpointer data_for_children,
     GncVendor *vendor;
     xmlNodePtr tree = (xmlNodePtr)data_for_children;
     gxpf_data *gdata = (gxpf_data*)global_data;
-    QofBook *book = gdata->bookdata;
+    QofBook *book = static_cast<decltype(book)>(gdata->bookdata);
 
     if (parent_data)
     {
@@ -417,7 +418,7 @@ vendor_should_be_saved (GncVendor *vendor)
 static void
 do_count (QofInstance * vendor_p, gpointer count_p)
 {
-    int *count = count_p;
+    int *count = static_cast<decltype(count)>(count_p);
     if (vendor_should_be_saved ((GncVendor *)vendor_p))
         (*count)++;
 }
@@ -435,7 +436,7 @@ xml_add_vendor (QofInstance * vendor_p, gpointer out_p)
 {
     xmlNodePtr node;
     GncVendor *vendor = (GncVendor *) vendor_p;
-    FILE *out = out_p;
+    FILE *out = static_cast<decltype(out)>(out_p);
 
     if (ferror(out))
         return;
diff --git a/src/backend/xml/gnc-xml-helper.c b/src/backend/xml/gnc-xml-helper.cpp
similarity index 99%
rename from src/backend/xml/gnc-xml-helper.c
rename to src/backend/xml/gnc-xml-helper.cpp
index 1f22eab..4dfb050 100644
--- a/src/backend/xml/gnc-xml-helper.c
+++ b/src/backend/xml/gnc-xml-helper.cpp
@@ -21,8 +21,11 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include <glib.h>
+}
+
 #include "gnc-xml-helper.h"
 
 xmlChar*
@@ -47,4 +50,3 @@ checked_char_cast (gchar *val)
 	    *end = '?';
     return (xmlChar*)(val);
 }
-
diff --git a/src/backend/xml/gnc-xml-helper.h b/src/backend/xml/gnc-xml-helper.h
index 303da28..db9657d 100644
--- a/src/backend/xml/gnc-xml-helper.h
+++ b/src/backend/xml/gnc-xml-helper.h
@@ -24,7 +24,8 @@
 
 #ifndef GNC_XML_HELPER_H
 #define GNC_XML_HELPER_H
-
+extern "C"
+{
 #include <libxml/xmlversion.h>
 
 #  include <libxml/SAX.h>
@@ -32,6 +33,7 @@
 #  include <libxml/parser.h>
 #  include <libxml/xmlmemory.h>
 #  include <libxml/parserInternals.h>
+}
 #  ifndef xmlChildrenNode
 #    define xmlChildrenNode children
 #  endif /* ifndef xmlChildrenNode */
diff --git a/src/backend/xml/gnc-xml.h b/src/backend/xml/gnc-xml.h
index b516db0..58080b0 100644
--- a/src/backend/xml/gnc-xml.h
+++ b/src/backend/xml/gnc-xml.h
@@ -25,10 +25,14 @@
 #ifndef GNC_XML_H
 #define GNC_XML_H
 
+extern "C"
+{
 #include "SchedXaction.h"
 #include "gnc-engine.h"
 #include "gnc-pricedb.h"
 #include "gnc-budget.h"
+}
+
 #include "gnc-xml-helper.h"
 #include "sixtp.h"
 
diff --git a/src/backend/xml/gncmod-backend-xml.c b/src/backend/xml/gncmod-backend-xml.cpp
similarity index 99%
rename from src/backend/xml/gncmod-backend-xml.c
rename to src/backend/xml/gncmod-backend-xml.cpp
index d646b8a..4c8b68c 100644
--- a/src/backend/xml/gncmod-backend-xml.c
+++ b/src/backend/xml/gncmod-backend-xml.cpp
@@ -24,7 +24,8 @@
  *                                                                  *
 \********************************************************************/
 
-
+extern "C"
+{
 #include <stdio.h>
 #include <gmodule.h>
 /* #include <glib-gobject.h> */
@@ -45,6 +46,7 @@ int libgncmod_backend_file_gnc_module_age      = 0;
 static GNCModule engine;
 
 
+
 char *
 libgncmod_backend_file_gnc_module_path(void)
 {
@@ -79,3 +81,4 @@ libgncmod_backend_file_gnc_module_end(int refcount)
 
     return unload;
 }
+} //extern "C"
diff --git a/src/backend/xml/io-example-account.c b/src/backend/xml/io-example-account.cpp
similarity index 99%
rename from src/backend/xml/io-example-account.c
rename to src/backend/xml/io-example-account.cpp
index 21369b5..e72e7b0 100644
--- a/src/backend/xml/io-example-account.c
+++ b/src/backend/xml/io-example-account.cpp
@@ -21,7 +21,8 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <platform.h>
@@ -43,9 +44,17 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
+#include "gnc-engine.h"
+#include "Scrub.h"
+#include "TransLog.h"
+#include "platform.h"
+#if COMPILER(MSVC)
+# define g_fopen fopen
+#endif
+}
+
 #include "sixtp.h"
 
-#include "gnc-engine.h"
 #include "gnc-xml.h"
 #include "io-example-account.h"
 #include "io-gncxml-gen.h"
@@ -54,12 +63,6 @@
 #include "sixtp-dom-parsers.h"
 #include "sixtp-parsers.h"
 
-#include "Scrub.h"
-#include "TransLog.h"
-#include "platform.h"
-#if COMPILER(MSVC)
-# define g_fopen fopen
-#endif
 
 static QofLogModule log_module = GNC_MOD_IO;
 
diff --git a/src/backend/xml/io-example-account.h b/src/backend/xml/io-example-account.h
index 914f308..9725836 100644
--- a/src/backend/xml/io-example-account.h
+++ b/src/backend/xml/io-example-account.h
@@ -24,10 +24,12 @@
 
 #ifndef IO_EXAMPLE_ACCOUNT_H
 #define IO_EXAMPLE_ACCOUNT_H
-
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 #include <glib.h>
 
-#include "sixtp.h"
 #include "gnc-engine.h"
 
 struct GncExampleAccount_struct
@@ -52,7 +54,9 @@ GncExampleAccount *gnc_read_example_account(const gchar *filename);
 
 void gnc_free_example_account_list(GSList *list);
 GSList* gnc_load_example_account_list(const char *dirname);
-
+#ifdef __cplusplus
+}
+#endif
 /* gboolean gnc_is_example_account_xml(const gchar *name); */
 
 #endif /* IO_EXAMPLE_ACCOUNT_H */
diff --git a/src/backend/xml/io-gncxml-gen.c b/src/backend/xml/io-gncxml-gen.cpp
similarity index 99%
rename from src/backend/xml/io-gncxml-gen.c
rename to src/backend/xml/io-gncxml-gen.cpp
index 0ca1ccd..19ebe18 100644
--- a/src/backend/xml/io-gncxml-gen.c
+++ b/src/backend/xml/io-gncxml-gen.cpp
@@ -21,8 +21,10 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
+}
 
 #include "io-gncxml-gen.h"
 
diff --git a/src/backend/xml/io-gncxml-gen.h b/src/backend/xml/io-gncxml-gen.h
index adfdd8f..2412b72 100644
--- a/src/backend/xml/io-gncxml-gen.h
+++ b/src/backend/xml/io-gncxml-gen.h
@@ -24,8 +24,11 @@
 
 #ifndef IO_GNCXML_GEN_H
 #define IO_GNCXML_GEN_H
-
+extern "C"
+{
 #include <glib.h>
+}
+
 #include "sixtp.h"
 
 typedef gboolean (*gxpf_callback)(const char *tag, gpointer parsedata,
diff --git a/src/backend/xml/io-gncxml-v1.cpp b/src/backend/xml/io-gncxml-v1.cpp
index c0d74d4..0c58c05 100644
--- a/src/backend/xml/io-gncxml-v1.cpp
+++ b/src/backend/xml/io-gncxml-v1.cpp
@@ -43,14 +43,15 @@ extern "C"
 #include <TransLog.h>
 #include <gnc-pricedb.h>
 #include <gnc-pricedb-p.h>
-#include "io-gncxml.h"
+}
 
+#include "io-gncxml.h"
 #include "sixtp.h"
 #include "sixtp-dom-parsers.h"
 #include "sixtp-stack.h"
 #include "sixtp-parsers.h"
 #include "sixtp-utils.h"
-}
+
 #include <kvp_frame.hpp>
 
 /* from Transaction-xml-parser-v1.c */
diff --git a/src/backend/xml/io-gncxml-v2.c b/src/backend/xml/io-gncxml-v2.cpp
similarity index 96%
rename from src/backend/xml/io-gncxml-v2.c
rename to src/backend/xml/io-gncxml-v2.cpp
index 37c5cc6..ce1165b 100644
--- a/src/backend/xml/io-gncxml-v2.c
+++ b/src/backend/xml/io-gncxml-v2.cpp
@@ -18,7 +18,8 @@
  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <platform.h>
@@ -44,15 +45,6 @@
 #include "Transaction.h"
 #include "TransactionP.h"
 #include "TransLog.h"
-#include "sixtp-dom-parsers.h"
-#include "io-gncxml-v2.h"
-#include "io-gncxml-gen.h"
-
-#include "sixtp.h"
-#include "sixtp-parsers.h"
-#include "sixtp-utils.h"
-#include "gnc-xml.h"
-#include "io-utils.h"
 #ifdef G_OS_WIN32
 # include <io.h>
 # define close _close
@@ -64,6 +56,16 @@
 # define g_fopen fopen
 # define g_open _open
 #endif
+}
+
+#include "sixtp.h"
+#include "sixtp-parsers.h"
+#include "sixtp-utils.h"
+#include "gnc-xml.h"
+#include "io-utils.h"
+#include "sixtp-dom-parsers.h"
+#include "io-gncxml-v2.h"
+#include "io-gncxml-gen.h"
 
 /* Do not treat -Wstrict-aliasing warnings as errors because of problems of the
  * G_LOCK* macros as declared by glib.  See
@@ -110,15 +112,6 @@ static FILE *try_gz_open (const char *filename, const char *perms, gboolean use_
 static gboolean is_gzipped_file(const gchar *name);
 static gboolean wait_for_gzip(FILE *file);
 
-void
-run_callback(sixtp_gdv2 *data, const char *type)
-{
-    if (data->countCallback)
-    {
-        data->countCallback(data, type);
-    }
-}
-
 static void
 clear_up_account_commodity(
     gnc_commodity_table *tbl, Account *act,
@@ -241,7 +234,7 @@ add_account_local(sixtp_gdv2 *data, Account *act)
     }
 
     data->counter.accounts_loaded++;
-    run_callback(data, "account");
+    sixtp_run_callback(data, "account");
 
     return FALSE;
 }
@@ -250,7 +243,7 @@ static gboolean
 add_book_local(sixtp_gdv2 *data, QofBook *book)
 {
     data->counter.books_loaded++;
-    run_callback(data, "book");
+    sixtp_run_callback(data, "book");
 
     return FALSE;
 }
@@ -265,7 +258,7 @@ add_commodity_local(sixtp_gdv2 *data, gnc_commodity *com)
     gnc_commodity_table_insert(table, com);
 
     data->counter.commodities_loaded++;
-    run_callback(data, "commodities");
+    sixtp_run_callback(data, "commodities");
 
     return TRUE;
 }
@@ -286,7 +279,7 @@ add_transaction_local(sixtp_gdv2 *data, Transaction *trn)
     xaccTransCommitEdit (trn);
 
     data->counter.transactions_loaded++;
-    run_callback(data, "transaction");
+    sixtp_run_callback(data, "transaction");
     return TRUE;
 }
 
@@ -297,7 +290,7 @@ add_schedXaction_local(sixtp_gdv2 *data, SchedXaction *sx)
     sxes = gnc_book_get_schedxactions(data->book);
     gnc_sxes_add_sx(sxes, sx);
     data->counter.schedXactions_loaded++;
-    run_callback(data, "schedXactions");
+    sixtp_run_callback(data, "schedXactions");
     return TRUE;
 }
 
@@ -354,8 +347,8 @@ add_pricedb_local(sixtp_gdv2 *data, GNCPriceDB *db)
 static void
 do_counter_cb (const char *type, gpointer data_p, gpointer be_data_p)
 {
-    GncXmlDataType_t *data = data_p;
-    struct file_backend *be_data = be_data_p;
+    GncXmlDataType_t *data = static_cast<decltype(data)>(data_p);
+    struct file_backend *be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail (type && data && be_data);
     g_return_if_fail (data->version == GNC_FILE_BACKEND_VERS);
@@ -542,8 +535,8 @@ static const char *BUDGET_TAG = "gnc:budget";
 static void
 add_item_cb (const char *type, gpointer data_p, gpointer be_data_p)
 {
-    GncXmlDataType_t *data = data_p;
-    struct file_backend *be_data = be_data_p;
+    GncXmlDataType_t *data = static_cast<decltype(data)>(data_p);
+    struct file_backend *be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail (type && data && be_data);
     g_return_if_fail (data->version == GNC_FILE_BACKEND_VERS);
@@ -633,8 +626,8 @@ generic_callback(const char *tag, gpointer globaldata, gpointer data)
 static void
 add_parser_cb (const char *type, gpointer data_p, gpointer be_data_p)
 {
-    GncXmlDataType_t *data = data_p;
-    struct file_backend *be_data = be_data_p;
+    GncXmlDataType_t *data = static_cast<decltype(data)>(data_p);
+    struct file_backend *be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail (type && data && be_data);
     g_return_if_fail (data->version == GNC_FILE_BACKEND_VERS);
@@ -653,8 +646,8 @@ add_parser_cb (const char *type, gpointer data_p, gpointer be_data_p)
 static void
 scrub_cb (const char *type, gpointer data_p, gpointer be_data_p)
 {
-    GncXmlDataType_t *data = data_p;
-    struct file_backend *be_data = be_data_p;
+    GncXmlDataType_t *data = static_cast<decltype(data)>(data_p);
+    struct file_backend *be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail (type && data && be_data);
     g_return_if_fail (data->version == GNC_FILE_BACKEND_VERS);
@@ -960,8 +953,8 @@ static void write_budget (QofInstance *ent, gpointer data);
 static void
 write_counts_cb (const char *type, gpointer data_p, gpointer be_data_p)
 {
-    GncXmlDataType_t *data = data_p;
-    struct file_backend *be_data = be_data_p;
+    GncXmlDataType_t *data = static_cast<decltype(data)>(data_p);
+    struct file_backend *be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail (type && data && be_data);
     g_return_if_fail (data->version == GNC_FILE_BACKEND_VERS);
@@ -975,8 +968,8 @@ write_counts_cb (const char *type, gpointer data_p, gpointer be_data_p)
 static void
 write_data_cb (const char *type, gpointer data_p, gpointer be_data_p)
 {
-    GncXmlDataType_t *data = data_p;
-    struct file_backend *be_data = be_data_p;
+    GncXmlDataType_t *data = static_cast<decltype(data)>(data_p);
+    struct file_backend *be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail (type && data && be_data);
     g_return_if_fail (data->version == GNC_FILE_BACKEND_VERS);
@@ -1090,12 +1083,12 @@ write_commodities(FILE *out, QofBook *book, sixtp_gdv2 *gd)
         GList *comms, *lp2;
         xmlNodePtr comnode;
 
-        comms = gnc_commodity_table_get_commodities(tbl, lp->data);
+        comms = gnc_commodity_table_get_commodities(tbl, static_cast<const char*>(lp->data));
         comms = g_list_sort(comms, compare_commodity_ids);
 
         for (lp2 = comms; lp2; lp2 = lp2->next)
         {
-            comnode = gnc_commodity_dom_tree_create(lp2->data);
+            comnode = gnc_commodity_dom_tree_create(static_cast<const gnc_commodity*>(lp2->data));
             if (comnode == NULL)
                 continue;
 
@@ -1108,7 +1101,7 @@ write_commodities(FILE *out, QofBook *book, sixtp_gdv2 *gd)
 
             xmlFreeNode(comnode);
             gd->counter.commodities_loaded++;
-            run_callback(gd, "commodities");
+            sixtp_run_callback(gd, "commodities");
         }
 
         g_list_free (comms);
@@ -1160,7 +1153,7 @@ write_pricedb(FILE *out, QofBook *book, sixtp_gdv2 *gd)
         if (ferror(out))
             break;
         gd->counter.prices_loaded += 1;
-        run_callback(gd, "prices");
+        sixtp_run_callback(gd, "prices");
     }
 
     xmlOutputBufferClose(outbuf);
@@ -1178,7 +1171,7 @@ write_pricedb(FILE *out, QofBook *book, sixtp_gdv2 *gd)
 static int
 xml_add_trn_data(Transaction *t, gpointer data)
 {
-    struct file_backend *be_data = data;
+    struct file_backend *be_data = static_cast<decltype(be_data)>(data);
     xmlNodePtr node;
 
     node = gnc_transaction_dom_tree_create(t);
@@ -1190,7 +1183,7 @@ xml_add_trn_data(Transaction *t, gpointer data)
         return -1;
 
     be_data->gd->counter.transactions_loaded++;
-    run_callback(be_data->gd, "transaction");
+    sixtp_run_callback(be_data->gd, "transaction");
     return 0;
 }
 
@@ -1244,14 +1237,14 @@ write_schedXactions( FILE *out, QofBook *book, sixtp_gdv2 *gd)
 
     do
     {
-        tmpSX = schedXactions->data;
+        tmpSX = static_cast<decltype(tmpSX)>(schedXactions->data);
         node = gnc_schedXaction_dom_tree_create( tmpSX );
         xmlElemDump( out, NULL, node );
         xmlFreeNode(node);
         if (ferror(out) || fprintf(out, "\n") < 0)
             return FALSE;
         gd->counter.schedXactions_loaded++;
-        run_callback(gd, "schedXactions");
+        sixtp_run_callback(gd, "schedXactions");
     }
     while ( (schedXactions = schedXactions->next) );
 
@@ -1262,7 +1255,7 @@ static void
 write_budget (QofInstance *ent, gpointer data)
 {
     xmlNodePtr node;
-    struct file_backend* be = data;
+    struct file_backend* be = static_cast<decltype(be)>(data);
 
     GncBudget *bgt = GNC_BUDGET(ent);
 
@@ -1276,7 +1269,7 @@ write_budget (QofInstance *ent, gpointer data)
         return;
 
     be->gd->counter.budgets_loaded++;
-    run_callback(be->gd, "budgets");
+    sixtp_run_callback(be->gd, "budgets");
 }
 
 gboolean
@@ -1290,8 +1283,8 @@ gnc_xml2_write_namespace_decl (FILE *out, const char *name_space)
 static void
 do_write_namespace_cb (const char *type, gpointer data_p, gpointer file_p)
 {
-    GncXmlDataType_t *data = data_p;
-    FILE *out = file_p;
+    GncXmlDataType_t *data = static_cast<decltype(data)>(data_p);
+    FILE *out = static_cast<decltype(out)>(file_p);
 
     g_return_if_fail (type && data && out);
     g_return_if_fail (data->version == GNC_FILE_BACKEND_VERS);
@@ -1608,7 +1601,7 @@ wait_for_gzip(FILE *file)
     G_LOCK(threads);
     if (threads)
     {
-        GThread *thread = g_hash_table_lookup(threads, file);
+        GThread *thread = static_cast<decltype(thread)>(g_hash_table_lookup(threads, file));
         if (thread)
         {
             g_hash_table_remove(threads, file);
@@ -1947,7 +1940,7 @@ gnc_xml2_find_ambiguous(const gchar *filename, GList *encodings,
             conv_list = NULL;
             for (iter = iconv_list; iter; iter = iter->next)
             {
-                iconv_item = iter->data;
+                iconv_item = static_cast<decltype(iconv_item)>(iter->data);
                 utf8 = g_convert_with_iconv(word, -1, iconv_item->iconv,
                                             NULL, NULL, &error);
                 if (utf8)
@@ -2130,7 +2123,7 @@ parse_with_subst_push_handler (xmlParserCtxtPtr xml_context,
                 error = NULL;
 
                 word = g_strndup(start, len);
-                repl = g_hash_table_lookup(push_data->subst, word);
+                repl = static_cast<decltype(repl)>(g_hash_table_lookup(push_data->subst, word));
                 g_free(word);
                 if (repl)
                 {
diff --git a/src/backend/xml/io-gncxml-v2.h b/src/backend/xml/io-gncxml-v2.h
index cf819b2..37510af 100644
--- a/src/backend/xml/io-gncxml-v2.h
+++ b/src/backend/xml/io-gncxml-v2.h
@@ -30,48 +30,16 @@
 
 #ifndef IO_GNCXML_V2_H
 #define IO_GNCXML_V2_H
-
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 #include <glib.h>
 
 #include "gnc-engine.h"
 #include "gnc-backend-xml.h"
 
-#include "sixtp.h"
-
-typedef struct
-{
-    int accounts_total;
-    int accounts_loaded;
-
-    int books_total;
-    int books_loaded;
-
-    int commodities_total;
-    int commodities_loaded;
-
-    int transactions_total;
-    int transactions_loaded;
-
-    int prices_total;
-    int prices_loaded;
 
-    int schedXactions_total;
-    int schedXactions_loaded;
-
-    int budgets_total;
-    int budgets_loaded;
-} load_counter;
-
-typedef struct sixtp_gdv2 sixtp_gdv2;
-typedef void (*countCallbackFn)(sixtp_gdv2 *gd, const char *type);
-struct sixtp_gdv2
-{
-    QofBook *book;
-    load_counter counter;
-    countCallbackFn countCallback;
-    QofBePercentageFunc gui_display_fn;
-    gboolean exporting;
-};
 
 /**
  * Struct used to pass in a new data type for XML storage.  This contains
@@ -98,18 +66,6 @@ struct sixtp_gdv2
  */
 #define GNC_FILE_BACKEND	"gnc:file:2"
 #define GNC_FILE_BACKEND_VERS	2
-typedef struct
-{
-    int		version;	/* backend version number */
-    const char *	type_name;	/* The XML tag for this type */
-
-    sixtp *	(*create_parser) (void);
-    gboolean	(*add_item)(sixtp_gdv2 *, gpointer obj);
-    int	      (*get_count) (QofBook *);
-    gboolean	(*write) (FILE*, QofBook*);
-    void		(*scrub) (QofBook *);
-    gboolean	(*ns) (FILE*);
-} GncXmlDataType_t;
 
 /**
  * Struct used to pass the account group/accounts and trasnactions in
@@ -124,9 +80,6 @@ typedef struct
     QofBook *book;
 } gnc_template_xaction_data;
 
-/** Call after loading each record */
-void run_callback(sixtp_gdv2 *data, const char *type);
-
 /** read in an account group from a file */
 gboolean qof_session_load_from_xml_file_v2(FileBackend *, QofBook *, QofBookFileType);
 
@@ -188,5 +141,7 @@ gint gnc_xml2_find_ambiguous(
  */
 gboolean gnc_xml2_parse_with_subst (
     FileBackend *fbe, QofBook *book, GHashTable *subst);
-
+#ifdef __cplusplus
+}
+#endif
 #endif /* __IO_GNCXML_V2_H__ */
diff --git a/src/backend/xml/io-utils.c b/src/backend/xml/io-utils.cpp
similarity index 94%
rename from src/backend/xml/io-utils.c
rename to src/backend/xml/io-utils.cpp
index 5eba18d..d2b959c 100644
--- a/src/backend/xml/io-utils.c
+++ b/src/backend/xml/io-utils.cpp
@@ -21,17 +21,18 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <stdio.h>
 
 #include <glib.h>
+}
 
 #include "gnc-xml.h"
-#include "gnc-xml.h"
 #include "io-utils.h"
-
+#include "sixtp.h"
 /*
   <!-- Local variables: -->
   <!-- mode: C          -->
@@ -68,7 +69,7 @@ write_one_account(FILE *out,
         return FALSE;
 
     gd->counter.accounts_loaded++;
-    run_callback(gd, "account");
+    sixtp_run_callback(gd, "account");
     return TRUE;
 }
 
@@ -86,7 +87,8 @@ write_account_tree(FILE *out, Account *root, sixtp_gdv2 *gd)
     descendants = gnc_account_get_descendants(root);
     for (node = descendants; node; node = g_list_next(node))
     {
-        if (!write_one_account(out, node->data, gd, allow_incompat))
+        if (!write_one_account(out, static_cast<Account*>(node->data),
+                               gd, allow_incompat))
         {
             success = FALSE;
             break;
diff --git a/src/backend/xml/io-utils.h b/src/backend/xml/io-utils.h
index cf5c6e8..9832385 100644
--- a/src/backend/xml/io-utils.h
+++ b/src/backend/xml/io-utils.h
@@ -24,11 +24,13 @@
 
 #ifndef IO_UTILS_H
 #define IO_UTILS_H
-
+extern "C"
+{
 #include <stdio.h>
+#include "qof.h"
+}
 
 #include "io-gncxml-v2.h"
-#include "qof.h"
 
 gboolean write_account_tree(FILE *out, Account *root, sixtp_gdv2 *gd);
 gboolean write_accounts(FILE *out, QofBook *book, sixtp_gdv2 *gd);
diff --git a/src/backend/xml/sixtp-dom-generators.cpp b/src/backend/xml/sixtp-dom-generators.cpp
index b0086c1..f01d9f2 100644
--- a/src/backend/xml/sixtp-dom-generators.cpp
+++ b/src/backend/xml/sixtp-dom-generators.cpp
@@ -27,12 +27,12 @@ extern "C"
 #include "config.h"
 #include <glib.h>
 
-#include "gnc-xml-helper.h"
 #include <gnc-date.h>
+}
 
+#include "gnc-xml-helper.h"
 #include "sixtp-dom-generators.h"
 #include "sixtp-utils.h"
-}
 
 #include <kvp_frame.hpp>
 
@@ -369,4 +369,3 @@ qof_instance_slots_to_dom_tree(const char *tag, const QofInstance* inst)
     frame->for_each_slot(add_kvp_slot, static_cast<void*>(ret));
     return ret;
 }
-
diff --git a/src/backend/xml/sixtp-dom-generators.h b/src/backend/xml/sixtp-dom-generators.h
index 18b5ff2..83bca84 100644
--- a/src/backend/xml/sixtp-dom-generators.h
+++ b/src/backend/xml/sixtp-dom-generators.h
@@ -24,18 +24,16 @@
 #ifndef SIXTP_DOM_GENERATORS_H
 #define SIXTP_DOM_GENERATORS_H
 
-#ifdef __cplusplus
 extern "C"
 {
-#endif
 #include <glib.h>
 
-#include "gnc-xml-helper.h"
-
-#include "sixtp-dom-generators.h"
 #include "gnc-commodity.h"
 #include "qof.h"
 #include "Recurrence.h"
+}
+
+#include "gnc-xml-helper.h"
 
 xmlNodePtr text_to_dom_tree(const char *tag, const char *str);
 xmlNodePtr int_to_dom_tree(const char *tag, gint64 val);
@@ -54,7 +52,4 @@ xmlNodePtr recurrence_to_dom_tree(const gchar *tag, const Recurrence *r);
 
 gchar* double_to_string(double value);
 
-#ifdef __cplusplus
-}
-#endif
 #endif /* _SIXTP_DOM_GENERATORS_H_ */
diff --git a/src/backend/xml/sixtp-dom-parsers.cpp b/src/backend/xml/sixtp-dom-parsers.cpp
index f9354d3..14a15fd 100644
--- a/src/backend/xml/sixtp-dom-parsers.cpp
+++ b/src/backend/xml/sixtp-dom-parsers.cpp
@@ -29,10 +29,10 @@ extern "C"
 
 #include "gnc-xml-helper.h"
 #include <gnc-engine.h>
-#include "sixtp-utils.h"
-#include "sixtp-dom-parsers.h"
 }
 
+#include "sixtp-utils.h"
+#include "sixtp-dom-parsers.h"
 #include <kvp_frame.hpp>
 
 static QofLogModule log_module = GNC_MOD_IO;
@@ -302,10 +302,7 @@ string_to_binary(const gchar *str,  void **v, guint64 *data_len)
 
 static KvpValue* dom_tree_to_kvp_value(xmlNodePtr node);
 //needed for test access as well as internal use.
-extern "C"
-{
-    KvpFrame* dom_tree_to_kvp_frame(xmlNodePtr node);
-}
+KvpFrame* dom_tree_to_kvp_frame(xmlNodePtr node);
 
 static KvpValue*
 dom_tree_to_list_kvp_value(xmlNodePtr node)
diff --git a/src/backend/xml/sixtp-dom-parsers.h b/src/backend/xml/sixtp-dom-parsers.h
index f96db25..ca4a142 100644
--- a/src/backend/xml/sixtp-dom-parsers.h
+++ b/src/backend/xml/sixtp-dom-parsers.h
@@ -23,18 +23,16 @@
 
 #ifndef SIXTP_DOM_PARSERS_H
 #define SIXTP_DOM_PARSERS_H
-#ifdef __cplusplus
 extern "C"
 {
-#endif
-
 #include <glib.h>
 
-#include "gnc-xml-helper.h"
-
 #include "gnc-commodity.h"
 #include "qof.h"
 #include "gnc-budget.h"
+}
+
+#include "gnc-xml-helper.h"
 
 GncGUID* dom_tree_to_guid(xmlNodePtr node);
 
@@ -78,7 +76,4 @@ gboolean dom_tree_generic_parse(xmlNodePtr node,
                                 struct dom_tree_handler *handlers,
                                 gpointer data);
 
-#ifdef __cplusplus
-}
-#endif
 #endif /* _SIXTP_DOM_PARSERS_H_ */
diff --git a/src/backend/xml/sixtp-stack.c b/src/backend/xml/sixtp-stack.cpp
similarity index 99%
rename from src/backend/xml/sixtp-stack.c
rename to src/backend/xml/sixtp-stack.cpp
index 0cc694b..86ab4f0 100644
--- a/src/backend/xml/sixtp-stack.c
+++ b/src/backend/xml/sixtp-stack.cpp
@@ -20,9 +20,10 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
  ********************************************************************/
-
+extern "C"
+{
 #include "config.h"
-
+}
 #include "sixtp.h"
 #include "sixtp-stack.h"
 
diff --git a/src/backend/xml/sixtp-stack.h b/src/backend/xml/sixtp-stack.h
index 4b59adb..bf5e06a 100644
--- a/src/backend/xml/sixtp-stack.h
+++ b/src/backend/xml/sixtp-stack.h
@@ -23,8 +23,10 @@
 
 #ifndef SIXTP_STACK_H
 #define SIXTP_STACK_H
-
+extern "C"
+{
 #include <glib.h>
+}
 
 #include "sixtp.h"
 
diff --git a/src/backend/xml/sixtp-to-dom-parser.c b/src/backend/xml/sixtp-to-dom-parser.cpp
similarity index 98%
rename from src/backend/xml/sixtp-to-dom-parser.c
rename to src/backend/xml/sixtp-to-dom-parser.cpp
index 8f7f532..03be767 100644
--- a/src/backend/xml/sixtp-to-dom-parser.c
+++ b/src/backend/xml/sixtp-to-dom-parser.cpp
@@ -20,12 +20,14 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
  ********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 
 #include <ctype.h>
+}
 
 #include "sixtp-parsers.h"
 #include "sixtp-utils.h"
@@ -84,7 +86,7 @@ dom_fail_handler(gpointer data_for_children,
                  gpointer *result,
                  const gchar *tag)
 {
-    if (*result) xmlFreeNode(*result);
+    if (*result) xmlFreeNode(static_cast<xmlNodePtr>(*result));
 }
 
 static gboolean dom_chars_handler(
diff --git a/src/backend/xml/sixtp-utils.c b/src/backend/xml/sixtp-utils.cpp
similarity index 99%
rename from src/backend/xml/sixtp-utils.c
rename to src/backend/xml/sixtp-utils.cpp
index 84474d8..c831bcb 100644
--- a/src/backend/xml/sixtp-utils.c
+++ b/src/backend/xml/sixtp-utils.cpp
@@ -22,7 +22,8 @@
  ********************************************************************/
 
 #define __EXTENSIONS__
-
+extern "C"
+{
 #include "config.h"
 
 #include <ctype.h>
@@ -31,8 +32,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "sixtp.h"
-#include "sixtp-utils.h"
 #include <time.h>
 #include <errno.h>
 
@@ -42,6 +41,10 @@
 #endif
 #include <gnc-date.h>
 #endif
+}
+
+#include "sixtp.h"
+#include "sixtp-utils.h"
 
 static QofLogModule log_module = GNC_MOD_IO;
 
diff --git a/src/backend/xml/sixtp-utils.h b/src/backend/xml/sixtp-utils.h
index 86ccc9b..88ccfbf 100644
--- a/src/backend/xml/sixtp-utils.h
+++ b/src/backend/xml/sixtp-utils.h
@@ -23,9 +23,10 @@
 
 #ifndef SIXTP_UTILS_H
 #define SIXTP_UTILS_H
-
+extern "C"
+{
 #include "qof.h"
-
+}
 #include "sixtp.h"
 
 typedef struct
diff --git a/src/backend/xml/sixtp.c b/src/backend/xml/sixtp.cpp
similarity index 96%
rename from src/backend/xml/sixtp.c
rename to src/backend/xml/sixtp.cpp
index 0377274..8886d10 100644
--- a/src/backend/xml/sixtp.c
+++ b/src/backend/xml/sixtp.cpp
@@ -20,7 +20,8 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
  ********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -34,6 +35,7 @@
 typedef int ssize_t;
 # define g_fopen fopen
 #endif
+}
 
 #include "sixtp.h"
 #include "sixtp-parsers.h"
@@ -175,7 +177,7 @@ sixtp_set_any(sixtp *tochange, int cleanup, ...)
 
     do
     {
-        type = va_arg(ap, sixtp_handler_type);
+        type = static_cast<decltype(type)>(va_arg(ap, int));
 
         switch (type)
         {
@@ -397,17 +399,20 @@ sixtp_sax_start_handler(void *user_data,
 
     /* Use an extended lookup so we can get *our* copy of the key.
        Since we've strduped it, we know its lifetime... */
-    lookup_success = g_hash_table_lookup_extended(current_parser->child_parsers,
-                     name,
-                     (gpointer) & next_parser_tag,
-                     (gpointer) & next_parser);
+    lookup_success =
+        g_hash_table_lookup_extended(current_parser->child_parsers,
+                                     name,
+                                     reinterpret_cast<void**>(&next_parser_tag),
+                                     reinterpret_cast<void**>(&next_parser));
+
 
     if (!lookup_success)
     {
         /* magic catch all value */
         lookup_success = g_hash_table_lookup_extended(
                              current_parser->child_parsers, SIXTP_MAGIC_CATCHER,
-                             (gpointer) & next_parser_tag, (gpointer) & next_parser);
+                             reinterpret_cast<void**>(&next_parser_tag),
+                             reinterpret_cast<void**>(&next_parser));
         if (!lookup_success)
         {
             g_critical("Tag <%s> not allowed in current context.",
@@ -427,8 +432,7 @@ sixtp_sax_start_handler(void *user_data,
             /* we're not in the top level node */
             sixtp_stack_frame *parent_frame =
                 (sixtp_stack_frame *) pdata->stack->next->data;
-            parent_data_from_children = parent_frame->data_from_children;
-            parent_data_from_children = parent_frame->data_for_children;
+            parent_data_from_children = static_cast<decltype(parent_data_from_children)>(parent_frame->data_from_children);
         }
 
         pdata->parsing_ok &=
@@ -582,8 +586,7 @@ sixtp_sax_end_handler(void *user_data, const xmlChar *name)
             /* we're not in the top level node */
             sixtp_stack_frame *parent_frame =
                 (sixtp_stack_frame *) pdata->stack->next->data;
-            parent_data_from_children = parent_frame->data_from_children;
-            parent_data_from_children = parent_frame->data_for_children;
+            parent_data_from_children = static_cast<decltype(parent_data_from_children)>(parent_frame->data_for_children);
         }
 
         pdata->parsing_ok &=
@@ -765,7 +768,7 @@ static int
 sixtp_parser_read(void *context, char *buffer, int len)
 {
     int ret;
-    
+
     ret = fread(&buffer[0], sizeof(char), len, (FILE *) context);
     if (ret < 0)
         g_warning("Error reading XML file");
@@ -780,8 +783,8 @@ sixtp_parse_fd(sixtp *sixtp,
                gpointer *parse_result)
 {
     gboolean ret;
-    xmlParserCtxtPtr context = xmlCreateIOParserCtxt( NULL, NULL, 
-                                                     sixtp_parser_read, NULL /*no close */, fd, 
+    xmlParserCtxtPtr context = xmlCreateIOParserCtxt( NULL, NULL,
+                                                     sixtp_parser_read, NULL /*no close */, fd,
                                                      XML_CHAR_ENCODING_NONE);
     ret = sixtp_parse_file_common(sixtp, context, data_for_top_level,
                                   global_data, parse_result);
@@ -989,4 +992,13 @@ gnc_is_our_first_xml_chunk(char *chunk, gboolean *with_encoding)
     return GNC_BOOK_NOT_OURS;
 }
 
+void
+sixtp_run_callback(sixtp_gdv2 *data, const char *type)
+{
+    if (data->countCallback)
+    {
+        data->countCallback(data, type);
+    }
+}
+
 /************************* END OF FILE *********************************/
diff --git a/src/backend/xml/sixtp.h b/src/backend/xml/sixtp.h
index 49eb034..62df636 100644
--- a/src/backend/xml/sixtp.h
+++ b/src/backend/xml/sixtp.h
@@ -23,16 +23,52 @@
 
 #ifndef SIXTP_H
 #define SIXTP_H
-
+extern "C"
+{
 #include <glib.h>
 #include <stdio.h>
 
 #include <stdarg.h>
-
-#include "gnc-xml-helper.h"
 #include "gnc-engine.h"
+}
+#include "gnc-xml-helper.h"
 #include "gnc-backend-xml.h"
 
+typedef struct sixtp_gdv2 sixtp_gdv2;
+typedef void (*countCallbackFn)(sixtp_gdv2 *gd, const char *type);
+
+typedef struct
+{
+    int accounts_total;
+    int accounts_loaded;
+
+    int books_total;
+    int books_loaded;
+
+    int commodities_total;
+    int commodities_loaded;
+
+    int transactions_total;
+    int transactions_loaded;
+
+    int prices_total;
+    int prices_loaded;
+
+    int schedXactions_total;
+    int schedXactions_loaded;
+
+    int budgets_total;
+    int budgets_loaded;
+} load_counter;
+
+struct sixtp_gdv2
+{
+    QofBook *book;
+    load_counter counter;
+    countCallbackFn countCallback;
+    QofBePercentageFunc gui_display_fn;
+    gboolean exporting;
+};
 typedef struct _sixtp_child_result sixtp_child_result;
 
 typedef gboolean (*sixtp_start_handler)(GSList* sibling_data,
@@ -44,23 +80,23 @@ typedef gboolean (*sixtp_start_handler)(GSList* sibling_data,
                                         gchar **attrs);
 
 typedef gboolean (*sixtp_before_child_handler)(gpointer data_for_children,
-        GSList* data_from_children,
-        GSList* sibling_data,
-        gpointer parent_data,
-        gpointer global_data,
-        gpointer *result,
-        const gchar *tag,
-        const gchar *child_tag);
+                                               GSList* data_from_children,
+                                               GSList* sibling_data,
+                                               gpointer parent_data,
+                                               gpointer global_data,
+                                               gpointer *result,
+                                               const gchar *tag,
+                                               const gchar *child_tag);
 
 typedef gboolean (*sixtp_after_child_handler)(gpointer data_for_children,
-        GSList* data_from_children,
-        GSList* sibling_data,
-        gpointer parent_data,
-        gpointer global_data,
-        gpointer *result,
-        const gchar *tag,
-        const gchar *child_tag,
-        sixtp_child_result *child_result);
+                                              GSList* data_from_children,
+                                              GSList* sibling_data,
+                                              gpointer parent_data,
+                                              gpointer global_data,
+                                              gpointer *result,
+                                              const gchar *tag,
+                                              const gchar *child_tag,
+                                              sixtp_child_result *child_result);
 
 typedef gboolean (*sixtp_end_handler)(gpointer data_for_children,
                                       GSList* data_from_children,
@@ -71,11 +107,11 @@ typedef gboolean (*sixtp_end_handler)(gpointer data_for_children,
                                       const gchar *tag);
 
 typedef gboolean (*sixtp_characters_handler)(GSList *sibling_data,
-        gpointer parent_data,
-        gpointer global_data,
-        gpointer *result,
-        const char *text,
-        int length);
+                                             gpointer parent_data,
+                                             gpointer global_data,
+                                             gpointer *result,
+                                             const char *text,
+                                             int length);
 
 typedef void (*sixtp_result_handler)(sixtp_child_result *result);
 
@@ -163,9 +199,23 @@ typedef struct sixtp_sax_data
     sixtp *bad_xml_parser;
 } sixtp_sax_data;
 
+typedef struct
+{
+    int		version;	/* backend version number */
+    const char *	type_name;	/* The XML tag for this type */
+
+    sixtp *	(*create_parser) (void);
+    gboolean	(*add_item)(sixtp_gdv2 *, gpointer obj);
+    int	      (*get_count) (QofBook *);
+    gboolean	(*write) (FILE*, QofBook*);
+    void		(*scrub) (QofBook *);
+    gboolean	(*ns) (FILE*);
+} GncXmlDataType_t;
+
+
 
 gboolean is_child_result_from_node_named(sixtp_child_result *cr,
-        const char *tag);
+                                         const char *tag);
 void sixtp_child_free_data(sixtp_child_result *result);
 void sixtp_child_result_destroy(sixtp_child_result *r);
 void sixtp_child_result_print(sixtp_child_result *cr, FILE *f);
@@ -216,6 +266,7 @@ QofBookFileType gnc_is_our_xml_file(const char *filename,
                                     gboolean *with_encoding);
 
 QofBookFileType gnc_is_our_first_xml_chunk(char *chunk, gboolean *with_encoding);
-
+/** Call after loading each record */
+void sixtp_run_callback(sixtp_gdv2 *data, const char *type);
 
 #endif /* _SIXTP_H_ */
diff --git a/src/backend/xml/test/Makefile.am b/src/backend/xml/test/Makefile.am
index 4ebda5e..abbd231 100644
--- a/src/backend/xml/test/Makefile.am
+++ b/src/backend/xml/test/Makefile.am
@@ -4,33 +4,40 @@ SUBDIRS = test-files
 test_date_converting_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-date-converting.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-date-converting.cpp
 
 test_dom_converters1_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-dom-converters1.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-dom-converters1.cpp
 
 test_kvp_frames_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
   test-kvp-frames.cpp
 
+test_load_backend_SOURCES = \
+test-load-backend.cpp
+test_load_xml2_SOURCES = \
+test-load-xml2.cpp
+test_save_in_lang_SOURCES = \
+test-save-in-lang.cpp
+
 # the xml backend is now a GModule - this test does
 # not load it as a module and cannot link to it
 # and remain portable.
@@ -38,151 +45,151 @@ test_kvp_frames_SOURCES = \
 test_load_example_account_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/io-example-account.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-gen.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-utils.c \
-  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-load-example-account.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/io-example-account.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-gen.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-utils.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-load-example-account.cpp
 
 test_string_converters_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-string-converters.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-string-converters.cpp
 
 test_xml_account_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-gen.c \
-  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-utils.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-xml-account.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-gen.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-utils.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-xml-account.cpp
 
 test_xml_commodity_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-gen.c \
-  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-utils.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-xml-commodity.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-gen.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-utils.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-xml-commodity.cpp
 
 test_xml_pricedb_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-gen.c \
-  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-utils.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-xml-pricedb.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-gen.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-utils.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-xml-pricedb.cpp
 
 test_xml_transaction_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-gen.c \
-  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-utils.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-xml-transaction.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-gen.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-utils.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-xml-transaction.cpp
 
 test_xml2_is_file_SOURCES = \
   ${top_srcdir}/src/backend/xml/sixtp-dom-parsers.cpp \
   ${top_srcdir}/src/backend/xml/sixtp-dom-generators.cpp \
-  ${top_srcdir}/src/backend/xml/sixtp-utils.c \
-  ${top_srcdir}/src/backend/xml/sixtp.c \
-  ${top_srcdir}/src/backend/xml/sixtp-stack.c \
-  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.c \
-  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-gen.c \
-  ${top_srcdir}/src/backend/xml/io-gncxml-v2.c \
-  ${top_srcdir}/src/backend/xml/io-utils.c \
-  ${top_srcdir}/src/backend/xml/gnc-xml-helper.c \
-  test-xml2-is-file.c
+  ${top_srcdir}/src/backend/xml/sixtp-utils.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-stack.cpp \
+  ${top_srcdir}/src/backend/xml/sixtp-to-dom-parser.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-account-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-budget-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-lot-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-recurrence-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-schedxaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-freqspec-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-transaction-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-commodity-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-book-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-pricedb-xml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-gen.cpp \
+  ${top_srcdir}/src/backend/xml/io-gncxml-v2.cpp \
+  ${top_srcdir}/src/backend/xml/io-utils.cpp \
+  ${top_srcdir}/src/backend/xml/gnc-xml-helper.cpp \
+  test-xml2-is-file.cpp
 
 TESTS = \
   test-date-converting \
@@ -271,8 +278,8 @@ AM_CPPFLAGS = \
 
 EXTRA_DIST = \
   grab-types.pl \
-  test-dom-parser1.c \
+  test-dom-parser1.cpp \
   test-real-data.sh \
-  test-xml2-is-file.c
+  test-xml2-is-file.cpp
 
 AM_CPPFLAGS += -DG_LOG_DOMAIN=\"gnc.backend.xml\"
diff --git a/src/backend/xml/test/test-date-converting.c b/src/backend/xml/test/test-date-converting.cpp
similarity index 99%
rename from src/backend/xml/test/test-date-converting.c
rename to src/backend/xml/test/test-date-converting.cpp
index 9821410..5ae3834 100644
--- a/src/backend/xml/test/test-date-converting.c
+++ b/src/backend/xml/test/test-date-converting.cpp
@@ -18,15 +18,17 @@
  *                                                                  *
 \********************************************************************/
 
-
+extern "C"
+{
 #include "config.h"
 
 #include "test-stuff.h"
 #include "test-engine-stuff.h"
-#include "test-file-stuff.h"
 
 #include <stdlib.h>
+}
 
+#include "test-file-stuff.h"
 #include "sixtp-utils.h"
 #include "sixtp-dom-generators.h"
 
diff --git a/src/backend/xml/test/test-dom-converters1.c b/src/backend/xml/test/test-dom-converters1.cpp
similarity index 96%
rename from src/backend/xml/test/test-dom-converters1.c
rename to src/backend/xml/test/test-dom-converters1.cpp
index ff47955..e7335df 100644
--- a/src/backend/xml/test/test-dom-converters1.c
+++ b/src/backend/xml/test/test-dom-converters1.cpp
@@ -21,7 +21,8 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <stdlib.h>
@@ -33,16 +34,17 @@
 #include "test-engine-stuff.h"
 #include "test-file-stuff.h"
 #include "cashobjects.h"
-#include "gnc-xml-helper.h"
 #include "gnc-engine.h"
+#include "gnc-commodity.h"
+}
+
+#include "gnc-xml-helper.h"
 #include "sixtp.h"
 #include "sixtp-parsers.h"
 #include "sixtp-utils.h"
 #include "sixtp-dom-parsers.h"
 #include "sixtp-dom-generators.h"
 
-#include "gnc-commodity.h"
-
 #define GNC_V2_STRING "gnc-v2"
 const gchar *gnc_v2_xml_version_string = GNC_V2_STRING;
 
@@ -172,10 +174,10 @@ test_dom_tree_to_timespec(void)
     }
 }
 
-static gchar *
+static const char *
 test_gnc_nums_internal(gnc_numeric to_test)
 {
-    gchar *ret = NULL;
+    const char *ret = NULL;
     gnc_numeric *to_compare = NULL;
     xmlNodePtr to_gen = NULL;
 
@@ -219,18 +221,16 @@ test_dom_tree_to_gnc_numeric(void)
 
     for (i = 0; i < 20; i++)
     {
-        gchar *message = NULL;
 
-        message = test_gnc_nums_internal(get_random_gnc_numeric(GNC_DENOM_AUTO));
+        const char *message =
+            test_gnc_nums_internal(get_random_gnc_numeric(GNC_DENOM_AUTO));
 
         do_test_args(message == NULL, "dom_tree_to_gnc_numeric",
                      __FILE__, __LINE__, message);
     }
 
     {
-        gchar *message = NULL;
-
-        message = test_gnc_nums_internal
+        const char *message = test_gnc_nums_internal
                   (gnc_numeric_create(18768786810LL, 100000));
 
         do_test_args(message == NULL, "gnc_num 18768786810/100000",
diff --git a/src/backend/xml/test/test-dom-parser1.c b/src/backend/xml/test/test-dom-parser1.cpp
similarity index 99%
rename from src/backend/xml/test/test-dom-parser1.c
rename to src/backend/xml/test/test-dom-parser1.cpp
index 8f9dae1..d236d39 100644
--- a/src/backend/xml/test/test-dom-parser1.c
+++ b/src/backend/xml/test/test-dom-parser1.cpp
@@ -17,7 +17,8 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <stdlib.h>
@@ -26,6 +27,7 @@
 #include <glib.h>
 
 #include "test-stuff.h"
+}
 
 #include "gnc-xml-helper.h"
 #include "sixtp.h"
diff --git a/src/backend/xml/test/test-file-stuff.cpp b/src/backend/xml/test/test-file-stuff.cpp
index 86017e0..dc71d1e 100644
--- a/src/backend/xml/test/test-file-stuff.cpp
+++ b/src/backend/xml/test/test-file-stuff.cpp
@@ -20,8 +20,6 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-#include <kvp_frame.hpp>
-
 extern "C"
 {
 #include "config.h"
@@ -37,10 +35,13 @@ extern "C"
 #include <glib/gstdio.h>
 
 #include "gnc-engine.h"
+#include "test-stuff.h"
+}
+
+#include "test-file-stuff.h"
+#include <kvp_frame.hpp>
 #include "sixtp-dom-parsers.h"
 #include "sixtp-parsers.h"
-#include "test-file-stuff.h"
-#include "test-stuff.h"
 #include "io-gncxml-gen.h"
 #include "sixtp-utils.h"
 /*
@@ -49,7 +50,6 @@ extern "C"
 /***********************************************************************/
 
 extern KvpFrame* dom_tree_to_kvp_frame(xmlNodePtr node);
-}
 
 static int
 files_return(int ret, const char* msg)
@@ -118,7 +118,7 @@ print_dom_tree(gpointer data_for_children, GSList* data_from_children,
 }
 
 gboolean
-check_dom_tree_version(xmlNodePtr node, gchar *verstr)
+check_dom_tree_version(xmlNodePtr node,  const char *verstr)
 {
     char *verteststr;
 
diff --git a/src/backend/xml/test/test-file-stuff.h b/src/backend/xml/test/test-file-stuff.h
index b7bc8ee..53f77d0 100644
--- a/src/backend/xml/test/test-file-stuff.h
+++ b/src/backend/xml/test/test-file-stuff.h
@@ -24,14 +24,13 @@
 
 #ifndef TEST_FILE_STUFF_H
 #define TEST_FILE_STUFF_H
-#ifdef __cplusplus
 extern "C"
 {
-#endif
 #include <glib.h>
 
 #include <gnc-commodity.h>
 #include <gnc-engine.h>
+}
 #include <gnc-xml-helper.h>
 #include <io-gncxml-gen.h>
 #include <sixtp.h>
@@ -51,7 +50,7 @@ gboolean print_dom_tree(gpointer data_for_children, GSList* data_from_children,
                         const gchar *tag);
 
 /**/
-gboolean check_dom_tree_version(xmlNodePtr node, gchar *verstr);
+gboolean check_dom_tree_version(xmlNodePtr node,  const char *verstr);
 gboolean equals_node_val_vs_string(xmlNodePtr node, const gchar* str);
 gboolean equals_node_val_vs_guid(xmlNodePtr node, const GncGUID *id);
 gboolean equals_node_val_vs_commodity(xmlNodePtr node,
@@ -65,7 +64,4 @@ void
 test_files_in_dir(int argc, char **argv, gxpf_callback cb,
                   sixtp *parser, const char *parser_tag,
                   QofBook *book);
-#ifdef __cplusplus
-}
-#endif
 #endif
diff --git a/src/backend/xml/test/test-kvp-frames.cpp b/src/backend/xml/test/test-kvp-frames.cpp
index dca51d1..7d6a596 100644
--- a/src/backend/xml/test/test-kvp-frames.cpp
+++ b/src/backend/xml/test/test-kvp-frames.cpp
@@ -8,17 +8,17 @@ extern "C"
 
 #include "test-stuff.h"
 #include "test-engine-stuff.h"
-#include "test-file-stuff.h"
 
 #include "qof.h"
+}
 
+#include "test-file-stuff.h"
 #include "sixtp-dom-generators.h"
 #include "sixtp-dom-parsers.h"
 
 #define GNC_V2_STRING "gnc-v2"
 const gchar *gnc_v2_xml_version_string = GNC_V2_STRING;
 extern KvpFrame* dom_tree_to_kvp_frame(xmlNodePtr node);
-}
 
 static void
 test_kvp_get_slot(int run,
diff --git a/src/backend/xml/test/test-load-backend.c b/src/backend/xml/test/test-load-backend.cpp
similarity index 99%
rename from src/backend/xml/test/test-load-backend.c
rename to src/backend/xml/test/test-load-backend.cpp
index e6f985d..d531c5b 100644
--- a/src/backend/xml/test/test-load-backend.c
+++ b/src/backend/xml/test/test-load-backend.cpp
@@ -24,11 +24,13 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-
+extern "C"
+{
 #include "config.h"
 #include "qof.h"
 #include "cashobjects.h"
 #include "test-stuff.h"
+}
 
 #define GNC_LIB_NAME "gncmod-backend-xml"
 
diff --git a/src/backend/xml/test/test-load-example-account.c b/src/backend/xml/test/test-load-example-account.cpp
similarity index 99%
rename from src/backend/xml/test/test-load-example-account.c
rename to src/backend/xml/test/test-load-example-account.cpp
index 984cf01..1c0411c 100644
--- a/src/backend/xml/test/test-load-example-account.c
+++ b/src/backend/xml/test/test-load-example-account.cpp
@@ -20,10 +20,10 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-
+extern "C"
+{
 #include "config.h"
 #include <glib.h>
-#include <libguile.h>
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -34,13 +34,15 @@
 
 #include "gnc-module.h"
 #include "gnc-engine.h"
-#include "io-gncxml-v2.h"
-
-#include "io-example-account.h"
-
 #include "test-stuff.h"
 #include "test-engine-stuff.h"
+}
+
+#include <libguile.h>
 #include "test-file-stuff.h"
+#include "io-gncxml-v2.h"
+
+#include "io-example-account.h"
 
 static const gchar *da_ending = ".gnucash-xea";
 
diff --git a/src/backend/xml/test/test-load-xml2.c b/src/backend/xml/test/test-load-xml2.cpp
similarity index 94%
rename from src/backend/xml/test/test-load-xml2.c
rename to src/backend/xml/test/test-load-xml2.cpp
index 34592ca..838fc09 100644
--- a/src/backend/xml/test/test-load-xml2.c
+++ b/src/backend/xml/test/test-load-xml2.cpp
@@ -25,7 +25,8 @@
 /* @file test-load-xml2.c
  * @brief test the loading of a version-2 gnucash XML file
  */
-
+extern "C"
+{
 #include "config.h"
 #include <stdlib.h>
 #include <sys/types.h>
@@ -40,14 +41,16 @@
 #include <cashobjects.h>
 #include <TransLog.h>
 #include <gnc-engine.h>
-#include "../gnc-backend-xml.h"
-#include "../io-gncxml-v2.h"
 #include <gnc-prefs.h>
 
 #include <test-stuff.h>
 #include <unittest-support.h>
 #include <test-engine-stuff.h>
-#include <test-file-stuff.h>
+}
+
+#include "../gnc-backend-xml.h"
+#include "../io-gncxml-v2.h"
+#include "test-file-stuff.h"
 
 #define GNC_LIB_NAME "gncmod-backend-xml"
 
@@ -81,9 +84,9 @@ test_load_file(const char *filename)
     QofBook *book;
     Account *root;
     gboolean ignore_lock;
-    gchar *logdomain = "backend.xml";
-    guint loglevel = G_LOG_LEVEL_WARNING;
-    TestErrorStruct check = { loglevel, logdomain, NULL };
+    const char *logdomain = "backend.xml";
+    GLogLevelFlags loglevel = static_cast<decltype(loglevel)>(G_LOG_LEVEL_WARNING);
+    TestErrorStruct check = { loglevel, const_cast<char*>(logdomain), NULL };
     g_log_set_handler (logdomain, loglevel,
                        (GLogFunc)test_checked_handler, &check);
 
diff --git a/src/backend/xml/test/test-save-in-lang.c b/src/backend/xml/test/test-save-in-lang.cpp
similarity index 99%
rename from src/backend/xml/test/test-save-in-lang.c
rename to src/backend/xml/test/test-save-in-lang.cpp
index 31d3a77..89f6873 100644
--- a/src/backend/xml/test/test-save-in-lang.c
+++ b/src/backend/xml/test/test-save-in-lang.cpp
@@ -17,7 +17,8 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 #include <glib.h>
 #include <glib/gstdio.h>
@@ -35,7 +36,7 @@
 
 #include "gnc-engine.h"
 #include "TransLog.h"
-
+}
 #include "io-gncxml-v2.h"
 
 const char *possible_envs[] =
diff --git a/src/backend/xml/test/test-string-converters.c b/src/backend/xml/test/test-string-converters.cpp
similarity index 85%
rename from src/backend/xml/test/test-string-converters.c
rename to src/backend/xml/test/test-string-converters.cpp
index c2814b7..0653810 100644
--- a/src/backend/xml/test/test-string-converters.c
+++ b/src/backend/xml/test/test-string-converters.cpp
@@ -17,24 +17,26 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <stdlib.h>
-
-#include "sixtp-dom-parsers.h"
-#include "sixtp-dom-generators.h"
-
 #include "gnc-engine.h"
 
 #include "test-stuff.h"
 #include "test-engine-stuff.h"
 #include "test-file-stuff.h"
+}
+
+#include "sixtp-dom-parsers.h"
+#include "sixtp-dom-generators.h"
+
 
 #define GNC_V2_STRING "gnc-v2"
 const gchar *gnc_v2_xml_version_string = GNC_V2_STRING;
 
-static char *test_strings[] =
+static const char *test_strings[] =
 {
     "FooBar",
     "<Ugly crap>",
@@ -47,16 +49,13 @@ static char *test_strings[] =
 static void
 test_string_converters(void)
 {
-    char *mark;
     int i;
 
-    for (i = 0, mark = test_strings[i]; mark; i++, mark = test_strings[i])
+    for (i = 0; test_strings[i]; ++i)
     {
-        xmlNodePtr test_node;
-        gchar *backout;
-        test_node = text_to_dom_tree("test-string", mark);
-
-        backout = dom_tree_to_text(test_node);
+        const char *mark = test_strings[i];
+        xmlNodePtr test_node = text_to_dom_tree("test-string", mark);
+        char *backout = dom_tree_to_text(test_node);
 
         do_test_args(
             g_strcmp0(backout, mark) == 0,
@@ -67,12 +66,11 @@ test_string_converters(void)
 static void
 test_bad_string (void)
 {
-    gchar *badstr = "foo\abar";
-    gchar *sanitized = "foo?bar";
-    gchar *backout;
+    const char *badstr = "foo\abar";
+    const char *sanitized = "foo?bar";
     xmlNodePtr test_node = text_to_dom_tree ("test-string", badstr);
 
-    backout = dom_tree_to_text (test_node);
+    char *backout = dom_tree_to_text (test_node);
     do_test_args (g_strcmp0 (backout, sanitized) == 0,
 		  "string sanitizing", __FILE__, __LINE__,
 		  "with string %s", badstr);
diff --git a/src/backend/xml/test/test-xml-account.c b/src/backend/xml/test/test-xml-account.cpp
similarity index 95%
rename from src/backend/xml/test/test-xml-account.c
rename to src/backend/xml/test/test-xml-account.cpp
index 8055489..75ac7c2 100644
--- a/src/backend/xml/test/test-xml-account.c
+++ b/src/backend/xml/test/test-xml-account.cpp
@@ -21,28 +21,30 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <glib/gstdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-
-#include "../gnc-xml-helper.h"
-#include "../gnc-xml.h"
 #include <gnc-engine.h>
 #include <cashobjects.h>
-#include "../sixtp-parsers.h"
-#include "../sixtp-dom-parsers.h"
 
 #include <test-stuff.h>
 #include <test-engine-stuff.h>
-#include <test-file-stuff.h>
 #include <unittest-support.h>
 
 #include "Account.h"
 #include "Scrub.h"
+}
+
+#include "../gnc-xml-helper.h"
+#include "../gnc-xml.h"
+#include "../sixtp-parsers.h"
+#include "../sixtp-dom-parsers.h"
+#include "test-file-stuff.h"
 
 static QofBook *sixbook;
 
@@ -88,7 +90,7 @@ node_and_account_equal(xmlNodePtr node, Account *act)
         else if (g_strcmp0((char*)mark->name, "act:type") == 0)
         {
             gchar *txt;
-            int type;
+            GNCAccountType type;
 
             txt = dom_tree_to_text(mark);
 
@@ -208,7 +210,7 @@ typedef struct act_data_struct act_data;
 static gboolean
 test_add_account(const char *tag, gpointer globaldata, gpointer data)
 {
-    Account *account = data;
+    Account *account = static_cast<decltype(account)>(data);
     act_data *gdata = (act_data*)globaldata;
     gnc_commodity * com;
     gnc_commodity * new_com;
@@ -320,10 +322,11 @@ test_generation()
     {
         /* empty some things. */
         Account *act;
-        gchar *msg = "xaccAccountSetCommodity: assertion `GNC_IS_COMMODITY(com)' failed";
-        gchar *logdomain = "gnc.engine";
-        guint loglevel = G_LOG_LEVEL_CRITICAL;
-        TestErrorStruct check = { loglevel, logdomain, msg };
+        const char *msg = "xaccAccountSetCommodity: assertion `GNC_IS_COMMODITY(com)' failed";
+        const char *logdomain = "gnc.engine";
+        GLogLevelFlags loglevel = static_cast<decltype(loglevel)>(G_LOG_LEVEL_CRITICAL);
+        TestErrorStruct check = { loglevel, const_cast<char*>(logdomain),
+                                  const_cast<char*>(msg) };
         g_log_set_handler (logdomain, loglevel,
                            (GLogFunc)test_checked_handler, &check);
 
diff --git a/src/backend/xml/test/test-xml-commodity.c b/src/backend/xml/test/test-xml-commodity.cpp
similarity index 98%
rename from src/backend/xml/test/test-xml-commodity.c
rename to src/backend/xml/test/test-xml-commodity.cpp
index cc6677b..049f972 100644
--- a/src/backend/xml/test/test-xml-commodity.c
+++ b/src/backend/xml/test/test-xml-commodity.cpp
@@ -17,7 +17,8 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -26,26 +27,24 @@
 #include <unistd.h>
 
 #include "gnc-module.h"
-#include "gnc-xml-helper.h"
-#include "gnc-xml.h"
 #include "qof.h"
+#include "test-stuff.h"
+#include "test-engine-stuff.h"
 
+#include "Account.h"
+}
+
+#include "gnc-xml-helper.h"
+#include "gnc-xml.h"
 #include "sixtp-parsers.h"
 #include "sixtp-utils.h"
-
 #include "sixtp-dom-parsers.h"
-
 #include "io-gncxml-gen.h"
-
-#include "test-stuff.h"
-#include "test-engine-stuff.h"
 #include "test-file-stuff.h"
 
-#include "Account.h"
-
 static QofBook *book;
 
-static gchar*
+static const char*
 node_and_commodity_equal(xmlNodePtr node, const gnc_commodity *com)
 {
     xmlNodePtr mark;
@@ -180,7 +179,6 @@ test_generation(void)
         xmlNodePtr test_node;
         gchar *filename1;
         int fd;
-        gchar *compare_msg;
 
         ran_com = get_random_commodity(book);
 
@@ -192,9 +190,8 @@ test_generation(void)
             gnc_commodity_destroy(ran_com);
             continue;
         }
-
-        if ((compare_msg = node_and_commodity_equal(test_node, ran_com)) !=
-                NULL)
+        auto compare_msg = node_and_commodity_equal(test_node, ran_com);
+        if (compare_msg != nullptr)
         {
             failure_args("commodity_xml", __FILE__, __LINE__,
                          "node and commodity were not equal: %s", compare_msg);
diff --git a/src/backend/xml/test/test-xml-pricedb.c b/src/backend/xml/test/test-xml-pricedb.cpp
similarity index 94%
rename from src/backend/xml/test/test-xml-pricedb.c
rename to src/backend/xml/test/test-xml-pricedb.cpp
index 4bc97b1..708edee 100644
--- a/src/backend/xml/test/test-xml-pricedb.c
+++ b/src/backend/xml/test/test-xml-pricedb.cpp
@@ -21,7 +21,8 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -29,19 +30,21 @@
 #include <stdlib.h>
 #include <unistd.h>
 
-#include "gnc-xml-helper.h"
-#include "gnc-xml.h"
 #include "cashobjects.h"
 #include "gnc-engine.h"
 #include "gnc-pricedb.h"
 
-#include "sixtp-parsers.h"
-#include "sixtp-dom-parsers.h"
-
 #include "test-stuff.h"
 #include "test-engine-stuff.h"
-#include "test-file-stuff.h"
+}
+
+#include "gnc-xml-helper.h"
+#include "gnc-xml.h"
+#include "sixtp.h"
+#include "sixtp-parsers.h"
+#include "sixtp-dom-parsers.h"
 #include "io-gncxml-v2.h"
+#include "test-file-stuff.h"
 
 static QofSession *session;
 static int iter;
@@ -49,10 +52,11 @@ static int iter;
 static gboolean
 test_add_pricedb (const char *tag, gpointer globaldata, gpointer data)
 {
-    sixtp_gdv2 *gdata = globaldata;
-    GNCPriceDB *db = gnc_pricedb_get_db (gdata->book);
+    sixtp_gdv2 *gdata = static_cast<decltype(gdata)>(globaldata);
+    GNCPriceDB *db1 = static_cast<decltype(db1)>(data);
+    GNCPriceDB *db2 = gnc_pricedb_get_db (gdata->book);
 
-    do_test_args (gnc_pricedb_equal(data, db),
+    do_test_args (gnc_pricedb_equal(db1, db2),
                   "gnc_pricedb_sixtp_parser_create",
                   __FILE__, __LINE__, "%d", iter);
 
diff --git a/src/backend/xml/test/test-xml-transaction.c b/src/backend/xml/test/test-xml-transaction.cpp
similarity index 92%
rename from src/backend/xml/test/test-xml-transaction.c
rename to src/backend/xml/test/test-xml-transaction.cpp
index 3d58da2..02f7a5f 100644
--- a/src/backend/xml/test/test-xml-transaction.c
+++ b/src/backend/xml/test/test-xml-transaction.cpp
@@ -21,7 +21,8 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -33,24 +34,25 @@
 #include <dirent.h>
 #include <sys/stat.h>
 
-#include "../gnc-xml-helper.h"
-#include "../gnc-xml.h"
 #include <gnc-engine.h>
 #include <cashobjects.h>
-#include "../sixtp-parsers.h"
-
-#include "../sixtp-dom-parsers.h"
 #include <TransLog.h>
-#include "../io-gncxml-gen.h"
 
 #include <test-stuff.h>
 #include <test-engine-stuff.h>
-#include <test-file-stuff.h>
 #include <unittest-support.h>
 
 #include <AccountP.h>
 #include <Transaction.h>
 #include <TransactionP.h>
+}
+
+#include "../gnc-xml-helper.h"
+#include "../gnc-xml.h"
+#include "../sixtp-parsers.h"
+#include "../sixtp-dom-parsers.h"
+#include "../io-gncxml-gen.h"
+#include <test-file-stuff.h>
 
 static QofBook *book;
 
@@ -102,7 +104,7 @@ find_appropriate_node(xmlNodePtr node, Split *spl)
     return NULL;
 }
 
-static char *
+static const char *
 equals_node_val_vs_split_internal(xmlNodePtr node, Split* spl)
 {
     xmlNodePtr mark;
@@ -199,12 +201,11 @@ equals_node_val_vs_split_internal(xmlNodePtr node, Split* spl)
     return NULL;
 }
 
-static char *
+static const char *
 equals_node_val_vs_splits(xmlNodePtr node, const Transaction *trn)
 {
     xmlNodePtr spl_node;
     Split *spl_mark;
-    char *msg;
     int i;
 
     g_return_val_if_fail(node, FALSE);
@@ -224,7 +225,7 @@ equals_node_val_vs_splits(xmlNodePtr node, const Transaction *trn)
             return "no matching split found";
         }
 
-        msg = equals_node_val_vs_split_internal(spl_node, spl_mark);
+        const char *msg = equals_node_val_vs_split_internal(spl_node, spl_mark);
         if (msg != NULL)
         {
             return msg;
@@ -234,7 +235,7 @@ equals_node_val_vs_splits(xmlNodePtr node, const Transaction *trn)
     return NULL;
 }
 
-static gchar*
+static const char*
 node_and_transaction_equal(xmlNodePtr node, Transaction *trn)
 {
     xmlNodePtr mark;
@@ -315,7 +316,7 @@ node_and_transaction_equal(xmlNodePtr node, Transaction *trn)
         }
         else if (g_strcmp0((char*)mark->name, "trn:splits") == 0)
         {
-            char *msg = equals_node_val_vs_splits (mark, trn);
+            const char *msg = equals_node_val_vs_splits (mark, trn);
             if (msg != NULL)
             {
                 return msg;
@@ -350,8 +351,8 @@ typedef struct tran_data_struct tran_data;
 static gboolean
 test_add_transaction(const char *tag, gpointer globaldata, gpointer data)
 {
-    Transaction *trans = data;
-    tran_data *gdata = (tran_data*)globaldata;
+    Transaction *trans = static_cast<decltype(trans)>(data);
+    tran_data *gdata = static_cast<decltype(gdata)>(globaldata);
     gboolean retval = TRUE;
 
     xaccTransBeginEdit (trans);
@@ -379,7 +380,6 @@ test_transaction(void)
         Transaction *ran_trn;
         xmlNodePtr test_node;
         gnc_commodity *com, *new_com;
-        gchar *compare_msg;
         gchar *filename1;
         int fd;
 
@@ -401,7 +401,7 @@ test_transaction(void)
             GList * node = list;
             for ( ; node; node = node->next)
             {
-                Split * s = node->data;
+                Split * s = static_cast<decltype(s)>(node->data);
                 Account * a = xaccMallocAccount(book);
 
                 xaccAccountBeginEdit (a);
@@ -423,9 +423,8 @@ test_transaction(void)
             really_get_rid_of_transaction(ran_trn);
             continue;
         }
-
-        if ((compare_msg = node_and_transaction_equal(test_node, ran_trn)) !=
-                NULL)
+        auto compare_msg = node_and_transaction_equal(test_node, ran_trn);
+        if (compare_msg != nullptr)
         {
             failure_args("transaction_xml", __FILE__, __LINE__,
                          "node and transaction were not equal: %s",
@@ -454,7 +453,7 @@ test_transaction(void)
             GList * node = xaccTransGetSplitList (ran_trn);
             for ( ; node; node = node->next)
             {
-                Split * s = node->data;
+                Split * s = static_cast<decltype(s)>(node->data);
                 Account * a1 = xaccSplitGetAccount(s);
                 Account * a2 = xaccMallocAccount(book);
 
@@ -469,10 +468,11 @@ test_transaction(void)
             sixtp *parser;
             tran_data data;
 
-            gchar *msg = "[xaccAccountScrubCommodity()] Account \"\" does not have a commodity!";
-            gchar *logdomain = "gnc.engine.scrub";
-            guint loglevel = G_LOG_LEVEL_CRITICAL;
-            TestErrorStruct check = { loglevel, logdomain, msg };
+            const char *msg = "[xaccAccountScrubCommodity()] Account \"\" does not have a commodity!";
+            const char *logdomain = "gnc.engine.scrub";
+            GLogLevelFlags loglevel = static_cast<decltype(loglevel)>(G_LOG_LEVEL_CRITICAL);
+            TestErrorStruct check = { loglevel, const_cast<char*>(logdomain),
+                                      const_cast<char*>(msg) };
             g_log_set_handler (logdomain, loglevel,
                                (GLogFunc)test_checked_handler, &check);
             data.trn = ran_trn;
@@ -487,11 +487,11 @@ test_transaction(void)
                              __FILE__, __LINE__, "%d", i);
             }
             else
-                really_get_rid_of_transaction (data.new_trn);
-
-            /* no handling of circular data structures.  We'll do that later */
-            /* sixtp_destroy(parser); */
+                really_get_rid_of_transaction(data.new_trn);
         }
+        /* no handling of circular data structures.  We'll do that later */
+        /* sixtp_destroy(parser); */
+
 
         g_unlink(filename1);
         g_free(filename1);
diff --git a/src/backend/xml/test/test-xml2-is-file.c b/src/backend/xml/test/test-xml2-is-file.cpp
similarity index 93%
rename from src/backend/xml/test/test-xml2-is-file.c
rename to src/backend/xml/test/test-xml2-is-file.cpp
index a21ece9..3cab137 100644
--- a/src/backend/xml/test/test-xml2-is-file.c
+++ b/src/backend/xml/test/test-xml2-is-file.cpp
@@ -17,15 +17,17 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
  *                                                                  *
 \********************************************************************/
-
+extern "C"
+{
 #include "config.h"
 #include <stdlib.h>
 #include <string.h>
 
-#include "io-gncxml-v2.h"
-
 #include "test-stuff.h"
 #include "test-engine-stuff.h"
+}
+
+#include "io-gncxml-v2.h"
 #include "test-file-stuff.h"
 
 #define FILENAME "Money95bank_fr.gml2"
@@ -34,14 +36,13 @@ int
 main(int argc, char **argv)
 {
     const char *directory = g_getenv("GNC_TEST_FILES");
-    char *filename;
 
     if (!directory)
     {
         directory = "test-files/xml2";
     }
 
-    filename = malloc(strlen(directory) + 1 + strlen(FILENAME) + 1);
+    char *filename = static_cast<decltype(filename)>(malloc(strlen(directory) + 1 + strlen(FILENAME) + 1));
     sprintf(filename, "%s/%s", directory, FILENAME);
     do_test(gnc_is_xml_data_file_v2(filename, NULL), "gnc_is_xml_data_file_v2");
 
diff --git a/src/gnome-utils/assistant-xml-encoding.c b/src/gnome-utils/assistant-xml-encoding.c
index 6179dfb..5f20b10 100644
--- a/src/gnome-utils/assistant-xml-encoding.c
+++ b/src/gnome-utils/assistant-xml-encoding.c
@@ -1403,4 +1403,3 @@ gxi_selected_enc_activated_cb (GtkTreeView *view, GtkTreePath *path,
         return;
     gxi_remove_encoding (data, model, &iter);
 }
-

commit 0178492663ab84560951c5e1214503c96d2fa5e7
Author: John Ralls <jralls at ceridwen.us>
Date:   Sat Nov 28 13:40:55 2015 -0800

    Convert SQL & DBI backends to compile as C++.

diff --git a/po/POTFILES.in b/po/POTFILES.in
index 2bd15cc..3c6067b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -38,30 +38,30 @@ src/app-utils/option-util.c
 src/app-utils/prefs.scm
 src/app-utils/QuickFill.c
 src/app-utils/simple-obj.scm
-src/backend/dbi/gnc-backend-dbi.c
-src/backend/sql/escape.c
-src/backend/sql/gnc-account-sql.c
-src/backend/sql/gnc-address-sql.c
-src/backend/sql/gnc-backend-sql.c
-src/backend/sql/gnc-bill-term-sql.c
-src/backend/sql/gnc-book-sql.c
-src/backend/sql/gnc-budget-sql.c
-src/backend/sql/gnc-commodity-sql.c
-src/backend/sql/gnc-customer-sql.c
-src/backend/sql/gnc-employee-sql.c
-src/backend/sql/gnc-entry-sql.c
-src/backend/sql/gnc-invoice-sql.c
-src/backend/sql/gnc-job-sql.c
-src/backend/sql/gnc-lots-sql.c
-src/backend/sql/gnc-order-sql.c
-src/backend/sql/gnc-owner-sql.c
-src/backend/sql/gnc-price-sql.c
-src/backend/sql/gnc-recurrence-sql.c
-src/backend/sql/gnc-schedxaction-sql.c
+src/backend/dbi/gnc-backend-dbi.cpp
+src/backend/sql/escape.cpp
+src/backend/sql/gnc-account-sql.cpp
+src/backend/sql/gnc-address-sql.cpp
+src/backend/sql/gnc-backend-sql.cpp
+src/backend/sql/gnc-bill-term-sql.cpp
+src/backend/sql/gnc-book-sql.cpp
+src/backend/sql/gnc-budget-sql.cpp
+src/backend/sql/gnc-commodity-sql.cpp
+src/backend/sql/gnc-customer-sql.cpp
+src/backend/sql/gnc-employee-sql.cpp
+src/backend/sql/gnc-entry-sql.cpp
+src/backend/sql/gnc-invoice-sql.cpp
+src/backend/sql/gnc-job-sql.cpp
+src/backend/sql/gnc-lots-sql.cpp
+src/backend/sql/gnc-order-sql.cpp
+src/backend/sql/gnc-owner-sql.cpp
+src/backend/sql/gnc-price-sql.cpp
+src/backend/sql/gnc-recurrence-sql.cpp
+src/backend/sql/gnc-schedxaction-sql.cpp
 src/backend/sql/gnc-slots-sql.cpp
-src/backend/sql/gnc-tax-table-sql.c
-src/backend/sql/gnc-transaction-sql.c
-src/backend/sql/gnc-vendor-sql.c
+src/backend/sql/gnc-tax-table-sql.cpp
+src/backend/sql/gnc-transaction-sql.cpp
+src/backend/sql/gnc-vendor-sql.cpp
 src/backend/xml/gnc-account-xml-v2.c
 src/backend/xml/gnc-address-xml-v2.c
 src/backend/xml/gnc-backend-xml.c
diff --git a/src/backend/dbi/Makefile.am b/src/backend/dbi/Makefile.am
index 193df03..708cd36 100644
--- a/src/backend/dbi/Makefile.am
+++ b/src/backend/dbi/Makefile.am
@@ -20,7 +20,7 @@ AM_CPPFLAGS = \
   ${WARN_CFLAGS}
 
 libgncmod_backend_dbi_la_SOURCES = \
-  gnc-backend-dbi.c
+  gnc-backend-dbi.cpp
 
 noinst_HEADERS = \
   gnc-backend-dbi.h \
diff --git a/src/backend/dbi/gnc-backend-dbi-priv.h b/src/backend/dbi/gnc-backend-dbi-priv.h
index 8037e22..cbd3feb 100644
--- a/src/backend/dbi/gnc-backend-dbi-priv.h
+++ b/src/backend/dbi/gnc-backend-dbi-priv.h
@@ -22,8 +22,14 @@
 /* Private structures and variables for gnc-backend-dbi.c and its unit tests */
 #ifndef GNC_BACKEND_DBI_PRIV_H
 #define GNC_BACKEND_DBI_PRIV_H
-
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 #include <dbi/dbi.h>
+#ifdef __cplusplus
+}
+#endif
 #include "gnc-backend-sql.h"
 
 /**
diff --git a/src/backend/dbi/gnc-backend-dbi.c b/src/backend/dbi/gnc-backend-dbi.cpp
similarity index 99%
rename from src/backend/dbi/gnc-backend-dbi.c
rename to src/backend/dbi/gnc-backend-dbi.cpp
index 68f0de8..ebb4a41 100644
--- a/src/backend/dbi/gnc-backend-dbi.c
+++ b/src/backend/dbi/gnc-backend-dbi.cpp
@@ -25,7 +25,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db using libdbi
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <platform.h>
@@ -37,8 +38,6 @@
 #include <glib.h>
 #include <glib/gstdio.h>
 
-#include "gnc-backend-dbi-priv.h"
-
 #include "qof.h"
 #include "qofquery-p.h"
 #include "qofquerycore-p.h"
@@ -53,8 +52,6 @@
 #include <gnc-path.h>
 #include "gnc-locale-utils.h"
 
-#include "gnc-backend-dbi.h"
-
 #include "gnc-prefs.h"
 
 #ifdef S_SPLINT_S
@@ -79,6 +76,11 @@ static dbi_inst dbi_instance = NULL;
 
 /* For direct access to dbi data structs, sadly needed for datetime */
 #include <dbi/dbi-dev.h>
+}
+
+#include "gnc-backend-dbi.h"
+#include "gnc-backend-dbi-priv.h"
+
 
 #define GNC_HOST_NAME_MAX 255
 #define TRANSACTION_NAME "trans"
@@ -226,8 +228,8 @@ gnc_dbi_verify_conn( GncDbiSqlConnection* dbi_conn )
 static void
 create_tables_cb( const gchar* type, gpointer data_p, gpointer be_p )
 {
-    GncSqlObjectBackend* pData = data_p;
-    GncDbiBackend* be = be_p;
+    GncSqlObjectBackend* pData = static_cast<decltype(pData)>(data_p);
+    GncDbiBackend* be = static_cast<decltype(be)>(be_p);
 
     g_return_if_fail( type != NULL && data_p != NULL && be_p != NULL );
     g_return_if_fail( pData->version == GNC_SQL_BACKEND_VERSION );
@@ -239,13 +241,13 @@ create_tables_cb( const gchar* type, gpointer data_p, gpointer be_p )
 }
 
 static void
-sqlite3_error_fn( dbi_conn conn, /*@ unused @*/ void* user_data )
+sqlite3_error_fn(dbi_conn conn, void* user_data)
 {
     const gchar* msg;
-
-    (void)dbi_conn_error( conn, &msg );
+    GncDbiSqlConnection *db_conn = static_cast<decltype(db_conn)>(conn);
+    (void)dbi_conn_error(db_conn, &msg);
     PERR( "DBI error: %s\n", msg );
-    gnc_dbi_set_error( conn, ERR_BACKEND_MISC, 0, FALSE );
+    gnc_dbi_set_error(db_conn, ERR_BACKEND_MISC, 0, FALSE);
 }
 
 static void
@@ -258,7 +260,7 @@ gnc_dbi_sqlite3_session_begin( QofBackend *qbe, QofSession *session,
     gchar* dirname = NULL;
     gchar* basename = NULL;
     gchar *filepath = NULL;
-    gchar *msg = " ";
+    const char *msg = nullptr;
     gboolean file_exists;
     GncDbiTestResult dbi_test_result = GNC_DBI_PASS;
 
@@ -270,8 +272,9 @@ gnc_dbi_sqlite3_session_begin( QofBackend *qbe, QofSession *session,
 
     /* Remove uri type if present */
     filepath = gnc_uri_get_path ( book_id );
-    file_exists = g_file_test( filepath,
-                               G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS );
+    GFileTest ftest = static_cast<decltype(ftest)>(
+        G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS) ;
+    file_exists = g_file_test( filepath, ftest);
     if ( !create && !file_exists )
     {
         qof_backend_set_error( qbe, ERR_FILEIO_FILE_NOT_FOUND );
@@ -1669,7 +1672,7 @@ gnc_dbi_safe_sync_all( QofBackend *qbe, QofBook *book )
     for ( iter = index_list; iter != NULL; iter = g_slist_next( iter) )
     {
         const char *errmsg;
-        conn->provider->drop_index (conn->conn, iter->data);
+        conn->provider->drop_index (conn->conn, static_cast<char*>(iter->data));
         if ( DBI_ERROR_NONE != dbi_conn_error( conn->conn, &errmsg ) )
         {
             qof_backend_set_error( qbe, ERR_BACKEND_SERVER_ERR );
@@ -2590,7 +2593,7 @@ add_columns_ddl( GncSqlConnection* conn,
 static void
 append_sqlite3_col_def( GString* ddl, GncSqlColumnInfo* info )
 {
-    gchar* type_name;
+    const char* type_name = nullptr;
 
     if ( info->type == BCT_INT )
     {
@@ -2669,7 +2672,7 @@ conn_create_table_ddl_sqlite3( GncSqlConnection* conn,
 static void
 append_mysql_col_def( GString* ddl, GncSqlColumnInfo* info )
 {
-    gchar* type_name;
+    const char* type_name = nullptr;
 
     if ( info->type == BCT_INT )
     {
@@ -2760,7 +2763,7 @@ conn_create_table_ddl_mysql( GncSqlConnection* conn, const gchar* table_name,
 static void
 append_pgsql_col_def( GString* ddl, GncSqlColumnInfo* info )
 {
-    gchar* type_name;
+    const char* type_name = nullptr;
 
     if ( info->type == BCT_INT )
     {
diff --git a/src/backend/dbi/gnc-backend-dbi.h b/src/backend/dbi/gnc-backend-dbi.h
index f228134..ecb0d22 100644
--- a/src/backend/dbi/gnc-backend-dbi.h
+++ b/src/backend/dbi/gnc-backend-dbi.h
@@ -28,7 +28,10 @@
 
 #ifndef GNC_BACKEND_DBI_H_
 #define GNC_BACKEND_DBI_H_
-
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 #include <gmodule.h>
 
 /** Initialization function which can be used when this module is
@@ -45,5 +48,7 @@ void gnc_module_finalize_backend_dbi(void);
 G_MODULE_EXPORT void qof_backend_module_init(void);
 G_MODULE_EXPORT void qof_backend_module_finalize(void);
 #endif
-
+#ifdef __cplusplus
+}
+#endif
 #endif /* GNC_BACKEND_DBI_H_ */
diff --git a/src/backend/dbi/test/Makefile.am b/src/backend/dbi/test/Makefile.am
index 3e2c2ee..a963b98 100644
--- a/src/backend/dbi/test/Makefile.am
+++ b/src/backend/dbi/test/Makefile.am
@@ -58,10 +58,10 @@ gnc_dbd_dir_override = GNC_DBD_DIR="@GNC_DBD_DIR@"
 endif
 
 test_backend_dbi_SOURCES = \
-    test-backend-dbi.c \
+    test-backend-dbi.cpp \
     test-backend-dbi-basic.cpp \
     test-dbi-stuff.cpp \
-    test-dbi-business-stuff.c
+    test-dbi-business-stuff.cpp
 
 test_backend_dbi_LDFLAGS="-ldbi"
 test_backend_dbi_CPPFLAGS = \
diff --git a/src/backend/dbi/test/test-backend-dbi-basic.cpp b/src/backend/dbi/test/test-backend-dbi-basic.cpp
index 5225b44..47bbce4 100644
--- a/src/backend/dbi/test/test-backend-dbi-basic.cpp
+++ b/src/backend/dbi/test/test-backend-dbi-basic.cpp
@@ -37,8 +37,6 @@ extern "C"
 #include <qof.h>
 #include <unittest-support.h>
 #include <test-stuff.h>
-#include <test-dbi-stuff.h>
-#include <test-dbi-business-stuff.h>
 /* For cleaning up the database */
 #include <dbi/dbi.h>
 #include <gnc-uri-utils.h>
@@ -51,12 +49,14 @@ extern "C"
 #include "gncAddress.h"
 #include "gncCustomer.h"
 #include "gncInvoice.h"
-/* For test_conn_index_functions */
-#include "../gnc-backend-dbi-priv.h"
 /* For version_control */
 #include <gnc-prefs.h>
 #include <qofsession-p.h>
 }
+/* For test_conn_index_functions */
+#include "test-dbi-stuff.h"
+#include "test-dbi-business-stuff.h"
+#include "../gnc-backend-dbi-priv.h"
 
 #if LIBDBI_VERSION >= 900
 #define HAVE_LIBDBI_R 1
@@ -66,7 +66,7 @@ static dbi_inst dbi_instance = NULL;
 #endif
 
 static const gchar* suitename = "/backend/dbi";
-extern "C" void test_suite_gnc_backend_dbi (void);
+void test_suite_gnc_backend_dbi (void);
 
 typedef struct
 {
@@ -616,7 +616,7 @@ create_dbi_test_suite (const char *dbm_name, const char *url)
 
 }
 
-extern "C" void
+void
 test_suite_gnc_backend_dbi (void)
 {
     dbi_driver driver = NULL;
diff --git a/src/backend/dbi/test/test-backend-dbi.c b/src/backend/dbi/test/test-backend-dbi.cpp
similarity index 99%
rename from src/backend/dbi/test/test-backend-dbi.c
rename to src/backend/dbi/test/test-backend-dbi.cpp
index 6b493f4..282dace 100644
--- a/src/backend/dbi/test/test-backend-dbi.c
+++ b/src/backend/dbi/test/test-backend-dbi.cpp
@@ -20,12 +20,13 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
 
-
+extern "C"
+{
 #include "config.h"
 #include <glib.h>
 #include "qof.h"
 #include "cashobjects.h"
-
+}
 extern void test_suite_gnc_backend_dbi ();
 
 #define GNC_LIB_NAME "gncmod-backend-dbi"
diff --git a/src/backend/dbi/test/test-dbi-business-stuff.c b/src/backend/dbi/test/test-dbi-business-stuff.cpp
similarity index 99%
rename from src/backend/dbi/test/test-dbi-business-stuff.c
rename to src/backend/dbi/test/test-dbi-business-stuff.cpp
index de1932d..6657189 100644
--- a/src/backend/dbi/test/test-dbi-business-stuff.c
+++ b/src/backend/dbi/test/test-dbi-business-stuff.cpp
@@ -22,14 +22,13 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-
+extern "C"
+{
 #include "config.h"
 #include "qof.h"
 #include "cashobjects.h"
 #include "test-engine-stuff.h"
 #include "test-stuff.h"
-#include "test-dbi-stuff.h"
-#include "test-dbi-business-stuff.h"
 #include <unittest-support.h>
 
 #include "Account.h"
@@ -40,6 +39,10 @@
 #include "gncInvoice.h"
 #include "gncEmployee.h"
 #include "gncVendor.h"
+}
+
+#include "test-dbi-stuff.h"
+#include "test-dbi-business-stuff.h"
 
 G_GNUC_UNUSED static QofLogModule log_module = "test-dbi";
 
@@ -188,4 +191,3 @@ compare_business_books( QofBook* book_1, QofBook* book_2 )
     compare_jobs( book_1, book_2 );
     compare_vendors( book_1, book_2 );
 }
-
diff --git a/src/backend/dbi/test/test-dbi-stuff.cpp b/src/backend/dbi/test/test-dbi-stuff.cpp
index f9e4899..f053c26 100644
--- a/src/backend/dbi/test/test-dbi-stuff.cpp
+++ b/src/backend/dbi/test/test-dbi-stuff.cpp
@@ -37,10 +37,10 @@ extern "C"
 #include <gnc-commodity.h>
 #include <SX-book.h>
 #include <gnc-lot.h>
-#include "../gnc-backend-dbi-priv.h"
 }
 
 #include <kvp_frame.hpp>
+#include "../gnc-backend-dbi-priv.h"
 
 G_GNUC_UNUSED static QofLogModule log_module = "test-dbi";
 
diff --git a/src/backend/sql/Makefile.am b/src/backend/sql/Makefile.am
index 845fffa..20463e2 100644
--- a/src/backend/sql/Makefile.am
+++ b/src/backend/sql/Makefile.am
@@ -21,29 +21,29 @@ AM_CPPFLAGS = \
   ${BOOST_CPPFLAGS}
 
 libgnc_backend_sql_la_SOURCES = \
-  gnc-backend-sql.c \
-  gnc-account-sql.c \
-  gnc-address-sql.c \
-  gnc-bill-term-sql.c \
-  gnc-book-sql.c \
-  gnc-budget-sql.c \
-  gnc-commodity-sql.c \
-  gnc-customer-sql.c \
-  gnc-employee-sql.c \
-  gnc-entry-sql.c \
-  gnc-invoice-sql.c \
-  gnc-job-sql.c \
-  gnc-lots-sql.c \
-  gnc-order-sql.c \
-  gnc-owner-sql.c \
-  gnc-price-sql.c \
-  gnc-recurrence-sql.c \
-  gnc-schedxaction-sql.c \
+  gnc-backend-sql.cpp \
+  gnc-account-sql.cpp \
+  gnc-address-sql.cpp \
+  gnc-bill-term-sql.cpp \
+  gnc-book-sql.cpp \
+  gnc-budget-sql.cpp \
+  gnc-commodity-sql.cpp \
+  gnc-customer-sql.cpp \
+  gnc-employee-sql.cpp \
+  gnc-entry-sql.cpp \
+  gnc-invoice-sql.cpp \
+  gnc-job-sql.cpp \
+  gnc-lots-sql.cpp \
+  gnc-order-sql.cpp \
+  gnc-owner-sql.cpp \
+  gnc-price-sql.cpp \
+  gnc-recurrence-sql.cpp \
+  gnc-schedxaction-sql.cpp \
   gnc-slots-sql.cpp \
-  gnc-tax-table-sql.c \
-  gnc-transaction-sql.c \
-  gnc-vendor-sql.c \
-  escape.c
+  gnc-tax-table-sql.cpp \
+  gnc-transaction-sql.cpp \
+  gnc-vendor-sql.cpp \
+  escape.cpp
 
 noinst_HEADERS = \
   gnc-account-sql.h \
diff --git a/src/backend/sql/escape.c b/src/backend/sql/escape.cpp
similarity index 94%
rename from src/backend/sql/escape.c
rename to src/backend/sql/escape.cpp
index 198b714..a51e283 100644
--- a/src/backend/sql/escape.c
+++ b/src/backend/sql/escape.cpp
@@ -93,7 +93,8 @@ sqlEscapeString (sqlEscape *b, const char *str)
     /* get more space, if needed */
     if (len >= b->esc_buflen)
     {
-        b->escape = g_realloc(b->escape, len + 100);
+        b->escape = static_cast<decltype(b->escape)>(g_realloc(b->escape,
+                                                               len + 100));
         b->esc_buflen = len + 100;
     }
 
@@ -137,7 +138,7 @@ sqlEscape_new (void)
 {
     sqlEscape *b = g_new (sqlEscape, 1);
 
-    b->escape = g_malloc (INITIAL_BUFSZ);
+    b->escape = static_cast<decltype(b->escape)>(g_malloc (INITIAL_BUFSZ));
     b->esc_buflen = INITIAL_BUFSZ;
     return (b);
 }
diff --git a/src/backend/sql/gnc-account-sql.c b/src/backend/sql/gnc-account-sql.cpp
similarity index 98%
rename from src/backend/sql/gnc-account-sql.c
rename to src/backend/sql/gnc-account-sql.cpp
index cf887dd..019d9d1 100644
--- a/src/backend/sql/gnc-account-sql.c
+++ b/src/backend/sql/gnc-account-sql.cpp
@@ -25,7 +25,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -35,6 +36,10 @@
 #include "AccountP.h"
 #include "gnc-commodity.h"
 
+#if defined( S_SPLINT_S )
+#include "splint-defs.h"
+#endif
+}
 #include "gnc-backend-sql.h"
 
 #include "gnc-account-sql.h"
@@ -42,10 +47,6 @@
 #include "gnc-slots-sql.h"
 #include "gnc-transaction-sql.h"
 
-#if defined( S_SPLINT_S )
-#include "splint-defs.h"
-#endif
-
 static QofLogModule log_module = G_LOG_DOMAIN;
 
 #define TABLE_NAME "accounts"
@@ -184,7 +185,8 @@ load_single_account( GncSqlBackend* be, GncSqlRow* row,
     if ( gnc_account_get_parent( pAccount ) == NULL
             && pAccount != gnc_book_get_root_account( be->book ) )
     {
-        account_parent_guid_struct* s = g_malloc( (gsize)sizeof(account_parent_guid_struct) );
+        account_parent_guid_struct* s = static_cast<decltype(s)>(
+            g_malloc(sizeof(account_parent_guid_struct)));
         g_assert( s != NULL );
 
         s->pAccount = pAccount;
@@ -336,7 +338,7 @@ gnc_sql_save_account( GncSqlBackend* be, QofInstance* inst )
     gboolean is_infant;
     gboolean is_ok = FALSE;
     gnc_commodity* commodity;
-    gint op;
+    E_DB_OPERATION op;
 
     g_return_val_if_fail( be != NULL, FALSE );
     g_return_val_if_fail( inst != NULL, FALSE );
diff --git a/src/backend/sql/gnc-account-sql.h b/src/backend/sql/gnc-account-sql.h
index aa3a36a..06e6daa 100644
--- a/src/backend/sql/gnc-account-sql.h
+++ b/src/backend/sql/gnc-account-sql.h
@@ -30,8 +30,10 @@
 #define GNC_ACCOUNT_SQL_H
 
 #include "gnc-backend-sql.h"
+extern "C"
+{
 #include "qof.h"
-
+}
 void gnc_sql_init_account_handler( void );
 gboolean gnc_sql_save_account( GncSqlBackend* be, QofInstance* inst );
 
diff --git a/src/backend/sql/gnc-address-sql.c b/src/backend/sql/gnc-address-sql.cpp
similarity index 98%
rename from src/backend/sql/gnc-address-sql.c
rename to src/backend/sql/gnc-address-sql.cpp
index a3f3994..7fc1b1f 100644
--- a/src/backend/sql/gnc-address-sql.c
+++ b/src/backend/sql/gnc-address-sql.cpp
@@ -27,7 +27,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -37,7 +38,7 @@
 #include "gnc-engine.h"
 
 #include "gncAddress.h"
-
+}
 #include "gnc-backend-sql.h"
 #include "gnc-address-sql.h"
 
@@ -205,7 +206,7 @@ add_gvalue_address_to_slist( const GncSqlBackend* be, QofIdTypeConst obj_name,
 
     if ( G_VALUE_TYPE(&value) != 0 )
     {
-        addr = g_value_get_object( &value );
+        addr = static_cast<decltype(addr)>(g_value_get_object(&value));
         for ( subtable_row = col_table; subtable_row->col_name != NULL; subtable_row++ )
         {
             subfield_value = g_new0( GValue, 1 );
diff --git a/src/backend/sql/gnc-backend-sql.c b/src/backend/sql/gnc-backend-sql.cpp
similarity index 97%
rename from src/backend/sql/gnc-backend-sql.c
rename to src/backend/sql/gnc-backend-sql.cpp
index 6733f86..956cf1d 100644
--- a/src/backend/sql/gnc-backend-sql.c
+++ b/src/backend/sql/gnc-backend-sql.cpp
@@ -25,7 +25,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include <stdlib.h>
 #include "config.h"
 
@@ -45,7 +46,14 @@
 #include <gncBillTerm.h>
 #include <gncTaxTable.h>
 #include <gncInvoice.h>
+#include "gnc-prefs.h"
+#include "gnc-pricedb.h"
 
+
+#if defined( S_SPLINT_S )
+#include "splint-defs.h"
+#endif
+}
 #include "gnc-backend-sql.h"
 
 #include "gnc-account-sql.h"
@@ -54,7 +62,6 @@
 #include "gnc-commodity-sql.h"
 #include "gnc-lots-sql.h"
 #include "gnc-price-sql.h"
-#include "gnc-pricedb.h"
 #include "gnc-recurrence-sql.h"
 #include "gnc-schedxaction-sql.h"
 #include "gnc-slots-sql.h"
@@ -72,12 +79,6 @@
 #include "gnc-tax-table-sql.h"
 #include "gnc-vendor-sql.h"
 
-#include "gnc-prefs.h"
-
-#if defined( S_SPLINT_S )
-#include "splint-defs.h"
-#endif
-
 static void gnc_sql_init_object_handlers( void );
 static void update_progress( GncSqlBackend* be );
 static void finish_progress( GncSqlBackend* be );
@@ -151,8 +152,8 @@ gnc_sql_init( /*@ unused @*/ GncSqlBackend* be )
 static void
 create_tables_cb( const gchar* type, gpointer data_p, gpointer be_p )
 {
-    GncSqlObjectBackend* pData = data_p;
-    GncSqlBackend* be = be_p;
+    GncSqlObjectBackend* pData = static_cast<decltype(pData)>(data_p);
+    GncSqlBackend* be = static_cast<decltype(be)>(be_p);
 
     g_return_if_fail( type != NULL && data_p != NULL && be_p != NULL );
     g_return_if_fail( pData->version == GNC_SQL_BACKEND_VERSION );
@@ -182,8 +183,8 @@ gnc_sql_set_load_order( const gchar** load_order )
 static void
 initial_load_cb( const gchar* type, gpointer data_p, gpointer be_p )
 {
-    GncSqlObjectBackend* pData = data_p;
-    GncSqlBackend* be = be_p;
+    GncSqlObjectBackend* pData = static_cast<decltype(pData)>(data_p);
+    GncSqlBackend* be = static_cast<decltype(be)>(be_p);
     gint i;
 
     g_return_if_fail( type != NULL && data_p != NULL && be_p != NULL );
@@ -212,7 +213,7 @@ initial_load_cb( const gchar* type, gpointer data_p, gpointer be_p )
 
 void
 gnc_sql_push_commodity_for_postload_processing (GncSqlBackend *be,
-						gpointer *comm)
+						gpointer comm)
 {
     post_load_commodities = g_list_prepend(post_load_commodities, comm);
 }
@@ -246,7 +247,9 @@ gnc_sql_load( GncSqlBackend* be, /*@ dependent @*/ QofBook *book, QofBackendLoad
         /* Load any initial stuff. Some of this needs to happen in a certain order */
         for ( i = 0; fixed_load_order[i] != NULL; i++ )
         {
-            pData = qof_object_lookup_backend( fixed_load_order[i], GNC_SQL_BACKEND );
+            pData = static_cast<decltype(pData)>(qof_object_lookup_backend(
+                                                     fixed_load_order[i],
+                                                     GNC_SQL_BACKEND));
             if ( pData->initial_load != NULL )
             {
                 update_progress( be );
@@ -257,7 +260,10 @@ gnc_sql_load( GncSqlBackend* be, /*@ dependent @*/ QofBook *book, QofBackendLoad
         {
             for ( i = 0; other_load_order[i] != NULL; i++ )
             {
-                pData = qof_object_lookup_backend( other_load_order[i], GNC_SQL_BACKEND );
+                pData =
+                    static_cast<decltype(pData)>(qof_object_lookup_backend(
+                                                          other_load_order[i],
+                                                          GNC_SQL_BACKEND));
                 if ( pData->initial_load != NULL )
                 {
                     update_progress( be );
@@ -408,7 +414,7 @@ write_schedXactions( GncSqlBackend* be )
 
     for ( ; schedXactions != NULL && is_ok; schedXactions = schedXactions->next )
     {
-        tmpSX = schedXactions->data;
+        tmpSX = static_cast<decltype(tmpSX)>(schedXactions->data);
         is_ok = gnc_sql_save_schedxaction( be, QOF_INSTANCE( tmpSX ) );
     }
     update_progress( be );
@@ -419,8 +425,8 @@ write_schedXactions( GncSqlBackend* be )
 static void
 write_cb( const gchar* type, gpointer data_p, gpointer be_p )
 {
-    GncSqlObjectBackend* pData = data_p;
-    GncSqlBackend* be = (GncSqlBackend*)be_p;
+    GncSqlObjectBackend* pData = static_cast<decltype(pData)>(data_p);
+    GncSqlBackend* be = static_cast<decltype(be)>(be_p);
 
     g_return_if_fail( type != NULL && data_p != NULL && be_p != NULL );
     g_return_if_fail( pData->version == GNC_SQL_BACKEND_VERSION );
@@ -546,8 +552,8 @@ gnc_sql_rollback_edit( GncSqlBackend *be, QofInstance *inst )
 static void
 commit_cb( const gchar* type, gpointer data_p, gpointer be_data_p )
 {
-    GncSqlObjectBackend* pData = data_p;
-    sql_backend* be_data = be_data_p;
+    GncSqlObjectBackend* pData = static_cast<decltype(pData)>(data_p);
+    sql_backend* be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail( type != NULL && pData != NULL && be_data != NULL );
     g_return_if_fail( pData->version == GNC_SQL_BACKEND_VERSION );
@@ -684,7 +690,7 @@ handle_and_term( QofQueryTerm* pTerm, GString* sql )
         for ( name = pParamPath; name != NULL; name = name->next )
         {
             if ( name != pParamPath ) g_string_append( sql, "." );
-            g_string_append( sql, name->data );
+            g_string_append(sql, static_cast<char*>(name->data));
         }
 
         if ( guid_data->options == QOF_GUID_MATCH_ANY )
@@ -695,7 +701,8 @@ handle_and_term( QofQueryTerm* pTerm, GString* sql )
         for ( guid_entry = guid_data->guids; guid_entry != NULL; guid_entry = guid_entry->next )
         {
             if ( guid_entry != guid_data->guids ) g_string_append( sql, "." );
-            (void)guid_to_string_buff( guid_entry->data, val );
+            (void)guid_to_string_buff(static_cast<GncGUID*>(guid_entry->data),
+                                      val);
             g_string_append( sql, "'" );
             g_string_append( sql, val );
             g_string_append( sql, "'" );
@@ -715,7 +722,7 @@ handle_and_term( QofQueryTerm* pTerm, GString* sql )
     for ( name = pParamPath; name != NULL; name = name->next )
     {
         if ( name != pParamPath ) g_string_append( sql, "." );
-        g_string_append( sql, name->data );
+        g_string_append(sql, static_cast<char*>(name->data) );
     }
 
     if ( pPredData->how == QOF_COMPARE_LT )
@@ -811,8 +818,8 @@ handle_and_term( QofQueryTerm* pTerm, GString* sql )
 static void
 compile_query_cb( const gchar* type, gpointer data_p, gpointer be_data_p )
 {
-    GncSqlObjectBackend* pData = data_p;
-    sql_backend* be_data = be_data_p;
+    GncSqlObjectBackend* pData = static_cast<decltype(pData)>(data_p);
+    sql_backend* be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail( type != NULL && pData != NULL && be_data != NULL );
     g_return_if_fail( pData->version == GNC_SQL_BACKEND_VERSION );
@@ -849,7 +856,8 @@ gnc_sql_compile_query( QofBackend* pBEnd, QofQuery* pQuery )
 //gnc_sql_compile_query_to_sql( be, pQuery );
     searchObj = qof_query_get_search_for( pQuery );
 
-    pQueryInfo = g_malloc( (gsize)sizeof( gnc_sql_query_info ) );
+    pQueryInfo = static_cast<decltype(pQueryInfo)>(
+        g_malloc(sizeof(gnc_sql_query_info)));
     g_assert( pQueryInfo != NULL );
     pQueryInfo->pCompiledQuery = NULL;
     pQueryInfo->searchObj = searchObj;
@@ -927,8 +935,8 @@ gnc_sql_compile_query_to_sql( GncSqlBackend* be, QofQuery* query )
 static void
 free_query_cb( const gchar* type, gpointer data_p, gpointer be_data_p )
 {
-    GncSqlObjectBackend* pData = data_p;
-    sql_backend* be_data = be_data_p;
+    GncSqlObjectBackend* pData = static_cast<decltype(pData)>(data_p);
+    sql_backend* be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail( type != NULL && pData != NULL && be_data != NULL );
     g_return_if_fail( pData->version == GNC_SQL_BACKEND_VERSION );
@@ -980,8 +988,8 @@ gnc_sql_free_query( QofBackend* pBEnd, gpointer pQuery )
 static void
 run_query_cb( const gchar* type, gpointer data_p, gpointer be_data_p )
 {
-    GncSqlObjectBackend* pData = data_p;
-    sql_backend* be_data = be_data_p;
+    GncSqlObjectBackend* pData = static_cast<decltype(pData)>(data_p);
+    sql_backend* be_data = static_cast<decltype(be_data)>(be_data_p);
 
     g_return_if_fail( type != NULL && pData != NULL && be_data != NULL );
     g_return_if_fail( pData->version == GNC_SQL_BACKEND_VERSION );
@@ -1125,14 +1133,14 @@ gnc_sql_get_integer_value( const GValue* value )
 
 /* ----------------------------------------------------------------- */
 /*@ null @*/ static gpointer
-get_autoinc_id()
+get_autoinc_id(void *object, const QofParam* param)
 {
     // Just need a 0 to force a new autoinc value
     return (gpointer)0;
 }
 
 static void
-set_autoinc_id()
+set_autoinc_id(void* object, void *item)
 {
     // Nowhere to put the ID
 }
@@ -1380,7 +1388,8 @@ add_gvalue_int_to_slist( const GncSqlBackend* be, QofIdTypeConst obj_name,
 
     if ( table_row->gobj_param_name != NULL )
     {
-        g_object_get_property( pObject, table_row->gobj_param_name, value );
+        g_object_get_property(G_OBJECT(pObject), table_row->gobj_param_name,
+                              value );
     }
     else
     {
@@ -1688,7 +1697,7 @@ add_gvalue_double_to_slist( const GncSqlBackend* be, QofIdTypeConst obj_name,
     getter = gnc_sql_get_getter( obj_name, table_row );
     if ( getter != NULL )
     {
-        pDouble = (*getter)( pObject, NULL );
+        pDouble = static_cast<decltype(pDouble)>((*getter)(pObject, NULL ));
     }
     if ( pDouble != NULL )
     {
@@ -1798,7 +1807,7 @@ add_gvalue_guid_to_slist( const GncSqlBackend* be, QofIdTypeConst obj_name,
         getter = gnc_sql_get_getter( obj_name, table_row );
         if ( getter != NULL )
         {
-            guid = (*getter)( pObject, NULL );
+            guid = static_cast<decltype(guid)>((*getter)( pObject, NULL ));
         }
     }
     (void)g_value_init( value, G_TYPE_STRING );
@@ -1848,7 +1857,7 @@ gnc_sql_add_gvalue_objectref_guid_to_slist( const GncSqlBackend* be, QofIdTypeCo
         getter = gnc_sql_get_getter( obj_name, table_row );
         if ( getter != NULL )
         {
-            inst = (*getter)( pObject, NULL );
+            inst = static_cast<decltype(inst)>((*getter)( pObject, NULL ));
         }
     }
     if ( inst != NULL )
@@ -2084,7 +2093,7 @@ load_date( const GncSqlBackend* be, GncSqlRow* row,
             {
                 gchar buf[5];
                 GDateDay day;
-                guint month;
+                GDateMonth month;
                 GDateYear year;
 
                 strncpy( buf, &s[0], 4 );
@@ -2092,7 +2101,7 @@ load_date( const GncSqlBackend* be, GncSqlRow* row,
                 year = (GDateYear)atoi( buf );
                 strncpy( buf, &s[4], 2 );
                 buf[2] = '\0';
-                month = (guint)atoi( buf );
+                month = static_cast<decltype(month)>(atoi( buf ));
                 strncpy( buf, &s[6], 2 );
                 day = (GDateDay)atoi( buf );
 
@@ -2373,7 +2382,8 @@ get_handler( const GncSqlColumnTableEntry* table_row )
 
     if ( g_columnTypeHash != NULL )
     {
-        pHandler = g_hash_table_lookup( g_columnTypeHash, table_row->col_type );
+        pHandler = static_cast<decltype(pHandler)>(
+            g_hash_table_lookup(g_columnTypeHash, table_row->col_type));
         g_assert( pHandler != NULL );
     }
     else
@@ -3049,7 +3059,7 @@ gnc_sql_commit_standard_item( GncSqlBackend* be, QofInstance* inst, const gchar*
 {
     const GncGUID* guid;
     gboolean is_infant;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_ok;
 
     is_infant = qof_instance_get_infant( inst );
diff --git a/src/backend/sql/gnc-backend-sql.h b/src/backend/sql/gnc-backend-sql.h
index e9795f1..53fa0fe 100644
--- a/src/backend/sql/gnc-backend-sql.h
+++ b/src/backend/sql/gnc-backend-sql.h
@@ -38,11 +38,12 @@
 
 #ifndef GNC_BACKEND_SQL_H
 #define GNC_BACKEND_SQL_H
-
+extern "C"
+{
 #include "qof.h"
 #include "qofbackend-p.h"
 #include <gmodule.h>
-
+}
 typedef struct GncSqlConnection GncSqlConnection;
 
 /**
@@ -89,7 +90,7 @@ void gnc_sql_load( GncSqlBackend* be, /*@ dependent @*/ QofBook *book, QofBacken
  * @param comm The commodity item to be committed.
  */
 void gnc_sql_push_commodity_for_postload_processing (GncSqlBackend *be,
-						     gpointer *comm);
+						     gpointer comm);
 
 /**
  * Save the contents of a book to an SQL database.
diff --git a/src/backend/sql/gnc-bill-term-sql.c b/src/backend/sql/gnc-bill-term-sql.cpp
similarity index 98%
rename from src/backend/sql/gnc-bill-term-sql.c
rename to src/backend/sql/gnc-bill-term-sql.cpp
index eaf7243..31c4f9d 100644
--- a/src/backend/sql/gnc-bill-term-sql.c
+++ b/src/backend/sql/gnc-bill-term-sql.cpp
@@ -27,20 +27,22 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "gnc-backend-sql.h"
-#include "gnc-slots-sql.h"
-
 #include "gncBillTermP.h"
 #include "gncInvoice.h"
-#include "gnc-bill-term-sql.h"
 #include "qof.h"
+}
+
+#include "gnc-backend-sql.h"
+#include "gnc-slots-sql.h"
+#include "gnc-bill-term-sql.h"
 
 #define _GNC_MOD_NAME	GNC_ID_BILLTERM
 
@@ -193,7 +195,8 @@ load_single_billterm( GncSqlBackend* be, GncSqlRow* row,
        GncGUID so that after they are all loaded, the parents can be fixed up. */
     if ( gncBillTermGetParent( pBillTerm ) == NULL )
     {
-        billterm_parent_guid_struct* s = g_malloc( (gsize)sizeof(billterm_parent_guid_struct) );
+        billterm_parent_guid_struct* s = static_cast<decltype(s)>(
+            g_malloc(sizeof(billterm_parent_guid_struct)));
         g_assert( s != NULL );
 
         s->billterm = pBillTerm;
diff --git a/src/backend/sql/gnc-bill-term-sql.h b/src/backend/sql/gnc-bill-term-sql.h
index 1f68ce5..172b1e1 100644
--- a/src/backend/sql/gnc-bill-term-sql.h
+++ b/src/backend/sql/gnc-bill-term-sql.h
@@ -31,8 +31,10 @@
 #define GNC_BILLTERM_SQL_H
 
 #include "gnc-backend-sql.h"
+extern "C"
+{
 #include "qof.h"
-
+}
 #define CT_BILLTERMREF "billterm"
 
 void gnc_billterm_sql_initialize( void );
diff --git a/src/backend/sql/gnc-book-sql.c b/src/backend/sql/gnc-book-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-book-sql.c
rename to src/backend/sql/gnc-book-sql.cpp
index a9e312d..2c504be 100644
--- a/src/backend/sql/gnc-book-sql.c
+++ b/src/backend/sql/gnc-book-sql.cpp
@@ -25,18 +25,14 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 
 #include "qof.h"
 
-#include "gnc-backend-sql.h"
-
-#include "gnc-book-sql.h"
-#include "gnc-slots-sql.h"
-
 #include "gnc-engine.h"
 #include "SX-book.h"
 #include "SX-book-p.h"
@@ -44,6 +40,11 @@
 #if defined( S_SPLINT_S )
 #include "splint-defs.h"
 #endif
+}
+#include "gnc-backend-sql.h"
+#include "gnc-book-sql.h"
+#include "gnc-slots-sql.h"
+
 
 #define BOOK_TABLE "books"
 #define TABLE_VERSION 1
diff --git a/src/backend/sql/gnc-book-sql.h b/src/backend/sql/gnc-book-sql.h
index 0690258..ad9c4ae 100644
--- a/src/backend/sql/gnc-book-sql.h
+++ b/src/backend/sql/gnc-book-sql.h
@@ -30,8 +30,10 @@
 #define GNC_BOOK_SQL_H
 
 #include "gnc-backend-sql.h"
+extern "C"
+{
 #include "qof.h"
-
+}
 void gnc_sql_init_book_handler( void );
 gboolean gnc_sql_save_book( GncSqlBackend* be, QofInstance* inst );
 
diff --git a/src/backend/sql/gnc-budget-sql.c b/src/backend/sql/gnc-budget-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-budget-sql.c
rename to src/backend/sql/gnc-budget-sql.cpp
index cd4db4a..da94857 100644
--- a/src/backend/sql/gnc-budget-sql.c
+++ b/src/backend/sql/gnc-budget-sql.cpp
@@ -25,26 +25,24 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 
 #include "qof.h"
-
-#include "gnc-backend-sql.h"
-
 #include "Recurrence.h"
-
-#include "gnc-budget-sql.h"
-#include "gnc-slots-sql.h"
-#include "gnc-recurrence-sql.h"
-
 #include "gnc-budget.h"
 
 #if defined( S_SPLINT_S )
 #include "splint-defs.h"
 #endif
+}
+#include "gnc-backend-sql.h"
+#include "gnc-budget-sql.h"
+#include "gnc-slots-sql.h"
+#include "gnc-recurrence-sql.h"
 
 #define BUDGET_TABLE "budgets"
 #define TABLE_VERSION 1
@@ -394,7 +392,7 @@ save_budget( GncSqlBackend* be, QofInstance* inst )
 {
     GncBudget* pBudget = GNC_BUDGET(inst);
     const GncGUID* guid;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     gboolean is_ok;
 
diff --git a/src/backend/sql/gnc-commodity-sql.c b/src/backend/sql/gnc-commodity-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-commodity-sql.c
rename to src/backend/sql/gnc-commodity-sql.cpp
index 9e3bccb..63f7020 100644
--- a/src/backend/sql/gnc-commodity-sql.c
+++ b/src/backend/sql/gnc-commodity-sql.cpp
@@ -25,16 +25,17 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 
 #include "qof.h"
-
-#include "gnc-backend-sql.h"
 #include "gnc-commodity.h"
+}
 
+#include "gnc-backend-sql.h"
 #include "gnc-commodity-sql.h"
 #include "gnc-slots-sql.h"
 
@@ -189,7 +190,7 @@ do_commit_commodity( GncSqlBackend* be, QofInstance* inst, gboolean force_insert
 {
     const GncGUID* guid;
     gboolean is_infant;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_ok;
 
     is_infant = qof_instance_get_infant( inst );
diff --git a/src/backend/sql/gnc-commodity-sql.h b/src/backend/sql/gnc-commodity-sql.h
index a8b0af7..2f698cb 100644
--- a/src/backend/sql/gnc-commodity-sql.h
+++ b/src/backend/sql/gnc-commodity-sql.h
@@ -30,8 +30,10 @@
 #define GNC_COMMODITY_SQL_H
 
 #include "gnc-backend-sql.h"
+extern "C"
+{
 #include "gnc-commodity.h"
-
+}
 void gnc_sql_init_commodity_handler( void );
 gboolean gnc_sql_save_commodity( GncSqlBackend* be, gnc_commodity* pCommodity );
 void gnc_sql_commit_commodity (gnc_commodity* pCommodity);
diff --git a/src/backend/sql/gnc-customer-sql.c b/src/backend/sql/gnc-customer-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-customer-sql.c
rename to src/backend/sql/gnc-customer-sql.cpp
index 6bacd94..ed62cad 100644
--- a/src/backend/sql/gnc-customer-sql.c
+++ b/src/backend/sql/gnc-customer-sql.cpp
@@ -27,19 +27,21 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "gnc-backend-sql.h"
-#include "gnc-slots-sql.h"
-
 #include "gncBillTermP.h"
 #include "gncCustomerP.h"
 #include "gncTaxTableP.h"
+}
+
+#include "gnc-backend-sql.h"
+#include "gnc-slots-sql.h"
 #include "gnc-customer-sql.h"
 #include "gnc-address-sql.h"
 #include "gnc-bill-term-sql.h"
diff --git a/src/backend/sql/gnc-employee-sql.c b/src/backend/sql/gnc-employee-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-employee-sql.c
rename to src/backend/sql/gnc-employee-sql.cpp
index 3e09f1c..a4a4e65 100644
--- a/src/backend/sql/gnc-employee-sql.c
+++ b/src/backend/sql/gnc-employee-sql.cpp
@@ -27,7 +27,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -35,15 +36,16 @@
 #include <string.h>
 
 #include "gnc-commodity.h"
+#include "gncEmployeeP.h"
+}
 
 #include "gnc-backend-sql.h"
 #include "gnc-slots-sql.h"
 #include "gnc-commodity-sql.h"
-
-#include "gncEmployeeP.h"
 #include "gnc-employee-sql.h"
 #include "gnc-address-sql.h"
 
+
 #define _GNC_MOD_NAME	GNC_ID_EMPLOYEE
 
 static QofLogModule log_module = G_LOG_DOMAIN;
@@ -158,7 +160,7 @@ save_employee( GncSqlBackend* be, QofInstance* inst )
 {
     GncEmployee* emp;
     const GncGUID* guid;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     gboolean is_ok = TRUE;
 
diff --git a/src/backend/sql/gnc-entry-sql.c b/src/backend/sql/gnc-entry-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-entry-sql.c
rename to src/backend/sql/gnc-entry-sql.cpp
index a76b63b..4b8d9e4 100644
--- a/src/backend/sql/gnc-entry-sql.c
+++ b/src/backend/sql/gnc-entry-sql.cpp
@@ -27,20 +27,21 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "gnc-backend-sql.h"
-#include "gnc-slots-sql.h"
-
 #include "gncEntryP.h"
 #include "gncOrderP.h"
 #include "gncInvoiceP.h"
 #include "gncTaxTableP.h"
+}
+#include "gnc-backend-sql.h"
+#include "gnc-slots-sql.h"
 #include "gnc-bill-term-sql.h"
 #include "gnc-entry-sql.h"
 #include "gnc-invoice-sql.h"
diff --git a/src/backend/sql/gnc-invoice-sql.c b/src/backend/sql/gnc-invoice-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-invoice-sql.c
rename to src/backend/sql/gnc-invoice-sql.cpp
index fc99e68..aa606b0 100644
--- a/src/backend/sql/gnc-invoice-sql.c
+++ b/src/backend/sql/gnc-invoice-sql.cpp
@@ -27,7 +27,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -36,12 +37,12 @@
 
 #include "gnc-commodity.h"
 
+#include "gncBillTermP.h"
+#include "gncInvoiceP.h"
+}
 #include "gnc-backend-sql.h"
 #include "gnc-commodity-sql.h"
 #include "gnc-slots-sql.h"
-
-#include "gncBillTermP.h"
-#include "gncInvoiceP.h"
 #include "gnc-invoice-sql.h"
 #include "gnc-owner-sql.h"
 #include "gnc-bill-term-sql.h"
@@ -181,7 +182,7 @@ save_invoice( GncSqlBackend* be, QofInstance* inst )
 {
     const GncGUID* guid;
     GncInvoice* invoice;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     gboolean is_ok = TRUE;
 
diff --git a/src/backend/sql/gnc-job-sql.c b/src/backend/sql/gnc-job-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-job-sql.c
rename to src/backend/sql/gnc-job-sql.cpp
index f290290..8470416 100644
--- a/src/backend/sql/gnc-job-sql.c
+++ b/src/backend/sql/gnc-job-sql.cpp
@@ -27,17 +27,19 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include "gncJobP.h"
+}
+
 #include "gnc-backend-sql.h"
 #include "gnc-slots-sql.h"
-
-#include "gncJobP.h"
 #include "gnc-job-sql.h"
 #include "gnc-owner-sql.h"
 
diff --git a/src/backend/sql/gnc-lots-sql.c b/src/backend/sql/gnc-lots-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-lots-sql.c
rename to src/backend/sql/gnc-lots-sql.cpp
index 22c4a70..087f008 100644
--- a/src/backend/sql/gnc-lots-sql.c
+++ b/src/backend/sql/gnc-lots-sql.cpp
@@ -26,6 +26,8 @@
  * restoring data to/from an SQL db
  */
 
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -34,15 +36,15 @@
 #include "Account.h"
 #include "gnc-lot.h"
 
+#if defined( S_SPLINT_S )
+#include "splint-defs.h"
+#endif
+}
 #include "gnc-backend-sql.h"
 #include "gnc-slots-sql.h"
 
 #include "gnc-lots-sql.h"
 
-#if defined( S_SPLINT_S )
-#include "splint-defs.h"
-#endif
-
 /*@ unused @*/ static QofLogModule log_module = G_LOG_DOMAIN;
 
 #define TABLE_NAME "lots"
diff --git a/src/backend/sql/gnc-order-sql.c b/src/backend/sql/gnc-order-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-order-sql.c
rename to src/backend/sql/gnc-order-sql.cpp
index a7bc177..5b5d555 100644
--- a/src/backend/sql/gnc-order-sql.c
+++ b/src/backend/sql/gnc-order-sql.cpp
@@ -28,17 +28,17 @@
  * restoring data to/from an SQL database
  */
 
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
-
+#include "gncOrderP.h"
+}
 #include "gnc-backend-sql.h"
 #include "gnc-slots-sql.h"
-
-#include "gncOrderP.h"
-
 #include "gnc-order-sql.h"
 #include "gnc-owner-sql.h"
 
diff --git a/src/backend/sql/gnc-owner-sql.c b/src/backend/sql/gnc-owner-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-owner-sql.c
rename to src/backend/sql/gnc-owner-sql.cpp
index 2e779f0..3c1c3ad 100644
--- a/src/backend/sql/gnc-owner-sql.c
+++ b/src/backend/sql/gnc-owner-sql.cpp
@@ -27,20 +27,20 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
-
-#include "gnc-backend-sql.h"
-
-#include "gnc-owner-sql.h"
 #include "gncCustomerP.h"
 #include "gncJobP.h"
 #include "gncEmployeeP.h"
 #include "gncVendorP.h"
+}
+#include "gnc-backend-sql.h"
+#include "gnc-owner-sql.h"
 
 static QofLogModule log_module = G_LOG_DOMAIN;
 
diff --git a/src/backend/sql/gnc-price-sql.c b/src/backend/sql/gnc-price-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-price-sql.c
rename to src/backend/sql/gnc-price-sql.cpp
index ae72c4f..a1fa71b 100644
--- a/src/backend/sql/gnc-price-sql.c
+++ b/src/backend/sql/gnc-price-sql.cpp
@@ -25,7 +25,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -33,15 +34,16 @@
 #include "qof.h"
 #include "gnc-pricedb.h"
 
+#if defined( S_SPLINT_S )
+#include "splint-defs.h"
+#endif
+}
 #include "gnc-backend-sql.h"
 
 #include "gnc-commodity-sql.h"
 #include "gnc-price-sql.h"
 #include "gnc-slots-sql.h"
 
-#if defined( S_SPLINT_S )
-#include "splint-defs.h"
-#endif
 
 /*@ unused @*/ static QofLogModule log_module = G_LOG_DOMAIN;
 
@@ -158,7 +160,7 @@ static gboolean
 save_price( GncSqlBackend* be, QofInstance* inst )
 {
     GNCPrice* pPrice = GNC_PRICE(inst);
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     gboolean is_ok = TRUE;
 
diff --git a/src/backend/sql/gnc-recurrence-sql.c b/src/backend/sql/gnc-recurrence-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-recurrence-sql.c
rename to src/backend/sql/gnc-recurrence-sql.cpp
index 7b12d34..af2df18 100644
--- a/src/backend/sql/gnc-recurrence-sql.c
+++ b/src/backend/sql/gnc-recurrence-sql.cpp
@@ -25,7 +25,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -34,13 +35,13 @@
 #include "gnc-engine.h"
 #include "Recurrence.h"
 
-#include "gnc-backend-sql.h"
-
-#include "gnc-recurrence-sql.h"
-
 #if defined( S_SPLINT_S )
 #include "splint-defs.h"
 #endif
+}
+
+#include "gnc-backend-sql.h"
+#include "gnc-recurrence-sql.h"
 
 G_GNUC_UNUSED static QofLogModule log_module = G_LOG_DOMAIN;
 
diff --git a/src/backend/sql/gnc-recurrence-sql.h b/src/backend/sql/gnc-recurrence-sql.h
index 586a868..24caa2a 100644
--- a/src/backend/sql/gnc-recurrence-sql.h
+++ b/src/backend/sql/gnc-recurrence-sql.h
@@ -28,10 +28,12 @@
 
 #ifndef GNC_RECURRENCE_SQL_H
 #define GNC_RECURRENCE_SQL_H
-
+extern "C"
+{
 #include <glib.h>
 #include "Recurrence.h"
 #include "guid.h"
+}
 #include "gnc-backend-sql.h"
 
 gboolean gnc_sql_recurrence_save( GncSqlBackend* be, const GncGUID* guid, const Recurrence* pRecurrence );
diff --git a/src/backend/sql/gnc-schedxaction-sql.c b/src/backend/sql/gnc-schedxaction-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-schedxaction-sql.c
rename to src/backend/sql/gnc-schedxaction-sql.cpp
index 058cd3b..15efc4a 100644
--- a/src/backend/sql/gnc-schedxaction-sql.c
+++ b/src/backend/sql/gnc-schedxaction-sql.cpp
@@ -25,28 +25,28 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 
 #include "qof.h"
-
-#include "gnc-backend-sql.h"
-
-#include "gnc-schedxaction-sql.h"
-#include "gnc-slots-sql.h"
-
 #include "SchedXaction.h"
 #include "SX-book.h"
 #include "Recurrence.h"
 
-#include "gnc-recurrence-sql.h"
-#include "gnc-transaction-sql.h"
-
 #ifdef S_SPLINT_S
 #include "splint-defs.h"
 #endif
+}
+
+#include "gnc-backend-sql.h"
+#include "gnc-schedxaction-sql.h"
+#include "gnc-slots-sql.h"
+#include "gnc-recurrence-sql.h"
+#include "gnc-transaction-sql.h"
+
 
 #define SCHEDXACTION_TABLE "schedxactions"
 #define TABLE_VERSION 1
@@ -167,7 +167,7 @@ gnc_sql_save_schedxaction( GncSqlBackend* be, QofInstance* inst )
 {
     SchedXaction* pSx;
     const GncGUID* guid;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     gboolean is_ok;
 
diff --git a/src/backend/sql/gnc-schedxaction-sql.h b/src/backend/sql/gnc-schedxaction-sql.h
index 64ced7b..bed1a1e 100644
--- a/src/backend/sql/gnc-schedxaction-sql.h
+++ b/src/backend/sql/gnc-schedxaction-sql.h
@@ -28,8 +28,10 @@
 
 #ifndef GNC_SCHEDXACTION_SQL_H
 #define GNC_SCHEDXACTION_SQL_H
-
+extern "C"
+{
 #include "qof.h"
+}
 #include "gnc-backend-sql.h"
 
 void gnc_sql_init_schedxaction_handler( void );
diff --git a/src/backend/sql/gnc-slots-sql.cpp b/src/backend/sql/gnc-slots-sql.cpp
index cefb48b..dfbe95d 100644
--- a/src/backend/sql/gnc-slots-sql.cpp
+++ b/src/backend/sql/gnc-slots-sql.cpp
@@ -33,14 +33,13 @@ extern "C"
 
 #include <qof.h>
 #include <gnc-engine.h>
-#include "gnc-backend-sql.h"
-
-#include "gnc-slots-sql.h"
 
 #ifdef S_SPLINT_S
 #include "splint-defs.h"
 #endif
 }
+#include "gnc-backend-sql.h"
+#include "gnc-slots-sql.h"
 
 #include <kvp_frame.hpp>
 
diff --git a/src/backend/sql/gnc-slots-sql.h b/src/backend/sql/gnc-slots-sql.h
index 28b6cb4..6a413cd 100644
--- a/src/backend/sql/gnc-slots-sql.h
+++ b/src/backend/sql/gnc-slots-sql.h
@@ -28,14 +28,12 @@
 
 #ifndef GNC_SLOTS_SQL_H
 #define GNC_SLOTS_SQL_H
-#ifdef __cplusplus
 extern "C"
 {
-#endif
-
 #include <glib.h>
 #include "guid.h"
 #include "qof.h"
+}
 #include "gnc-backend-sql.h"
 
 /**
@@ -91,7 +89,4 @@ void gnc_sql_slots_load_for_sql_subquery( GncSqlBackend* be, const gchar* subque
 
 void gnc_sql_init_slots_handler( void );
 
-#ifdef __cplusplus
-}
-#endif
 #endif /* GNC_SLOTS_SQL_H */
diff --git a/src/backend/sql/gnc-tax-table-sql.c b/src/backend/sql/gnc-tax-table-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-tax-table-sql.c
rename to src/backend/sql/gnc-tax-table-sql.cpp
index bb5f068..d0512b1 100644
--- a/src/backend/sql/gnc-tax-table-sql.c
+++ b/src/backend/sql/gnc-tax-table-sql.cpp
@@ -27,19 +27,20 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "gnc-backend-sql.h"
-#include "gnc-slots-sql.h"
-
 #include "gncEntry.h"
 #include "gncTaxTableP.h"
+}
 
+#include "gnc-backend-sql.h"
+#include "gnc-slots-sql.h"
 #include "gnc-tax-table-sql.h"
 
 #define _GNC_MOD_NAME	GNC_ID_TAXTABLE
@@ -274,7 +275,8 @@ load_single_taxtable( GncSqlBackend* be, GncSqlRow* row,
        GncGUID so that after they are all loaded, the parents can be fixed up. */
     if ( gncTaxTableGetParent( tt ) == NULL )
     {
-        taxtable_parent_guid_struct* s = g_malloc( (gsize)sizeof(taxtable_parent_guid_struct) );
+        taxtable_parent_guid_struct* s = static_cast<decltype(s)>(
+            g_malloc(sizeof(taxtable_parent_guid_struct)));
         g_assert( s != NULL );
 
         s->tt = tt;
@@ -423,7 +425,7 @@ save_taxtable( GncSqlBackend* be, QofInstance* inst )
 {
     GncTaxTable* tt;
     const GncGUID* guid;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     gboolean is_ok;
 
@@ -565,4 +567,3 @@ gnc_taxtable_sql_initialize( void )
     gnc_sql_register_col_type_handler( CT_TAXTABLEREF, &taxtable_guid_handler );
 }
 /* ========================== END OF FILE ===================== */
-
diff --git a/src/backend/sql/gnc-transaction-sql.c b/src/backend/sql/gnc-transaction-sql.cpp
similarity index 97%
rename from src/backend/sql/gnc-transaction-sql.c
rename to src/backend/sql/gnc-transaction-sql.cpp
index 0b4eb40..f20bfa4 100644
--- a/src/backend/sql/gnc-transaction-sql.c
+++ b/src/backend/sql/gnc-transaction-sql.cpp
@@ -25,7 +25,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL db
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib/gi18n.h>
@@ -38,13 +39,7 @@
 #include "Transaction.h"
 #include "gnc-lot.h"
 #include "engine-helpers.h"
-
-#include "gnc-backend-sql.h"
-#include "gnc-transaction-sql.h"
 #include "gnc-commodity.h"
-#include "gnc-commodity-sql.h"
-#include "gnc-slots-sql.h"
-
 #include "gnc-engine.h"
 
 #include "escape.h"
@@ -52,6 +47,12 @@
 #ifdef S_SPLINT_S
 #include "splint-defs.h"
 #endif
+}
+
+#include "gnc-backend-sql.h"
+#include "gnc-transaction-sql.h"
+#include "gnc-commodity-sql.h"
+#include "gnc-slots-sql.h"
 
 #define SIMPLE_QUERY_COMPILATION 1
 #define LOAD_TRANSACTIONS_AS_NEEDED 0
@@ -594,7 +595,7 @@ delete_splits( GncSqlBackend* be, Transaction* pTx )
 static gboolean
 commit_split( GncSqlBackend* be, QofInstance* inst )
 {
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     gboolean is_ok;
     GncGUID *guid = (GncGUID*)qof_instance_get_guid(inst);
@@ -670,11 +671,11 @@ static gboolean
 save_transaction( GncSqlBackend* be, Transaction* pTx, gboolean do_save_splits )
 {
     const GncGUID* guid;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     QofInstance* inst;
     gboolean is_ok = TRUE;
-    gchar* err = NULL;
+    const char* err = NULL;
 
     g_return_val_if_fail( be != NULL, FALSE );
     g_return_val_if_fail( pTx != NULL, FALSE );
@@ -754,11 +755,11 @@ save_transaction( GncSqlBackend* be, Transaction* pTx, gboolean do_save_splits )
     }
     if (! is_ok )
     {
-        G_GNUC_UNUSED gchar *message1 = "Transaction %s dated %s in account %s not saved due to %s.%s";
-        G_GNUC_UNUSED gchar *message2 = "\nDatabase may be corrupted, check your data carefully.";
         Split* split = xaccTransGetSplit( pTx, 0);
         Account *acc = xaccSplitGetAccount( split );
         /* FIXME: This needs to be implemented
+        const char *message1 = "Transaction %s dated %s in account %s not saved due to %s.%s";
+        const char *message2 = "\nDatabase may be corrupted, check your data carefully.";
         qof_error_format_secondary_text( GTK_MESSAGE_DIALOG( msg ),
         					  message1,
         					 xaccTransGetDescription( pTx ),
@@ -931,7 +932,8 @@ convert_query_term_to_sql( const GncSqlBackend* be, const gchar* fieldName, QofQ
             gchar guid_buf[GUID_ENCODING_LENGTH+1];
 
             if ( guid_entry != guid_data->guids ) g_string_append( sql, "," );
-            (void)guid_to_string_buff( guid_entry->data, guid_buf );
+            (void)guid_to_string_buff(static_cast<GncGUID*>(guid_entry->data),
+                                      guid_buf );
             g_string_append_printf( sql, "'%s'", guid_buf );
         }
         g_string_append( sql, "))" );
@@ -1085,7 +1087,8 @@ compile_split_query( GncSqlBackend* be, QofQuery* query )
     g_return_val_if_fail( be != NULL, NULL );
     g_return_val_if_fail( query != NULL, NULL );
 
-    query_info = g_malloc( (gsize)sizeof(split_query_info_t) );
+    query_info = static_cast<decltype(query_info)>(
+        g_malloc(sizeof(split_query_info_t)));
     g_assert( query_info != NULL );
     query_info->has_been_run = FALSE;
 
@@ -1117,18 +1120,20 @@ compile_split_query( GncSqlBackend* be, QofQuery* query )
 
                 term = (QofQueryTerm*)andTerm->data;
                 paramPath = qof_query_term_get_param_path( term );
-
-                if ( strcmp( paramPath->data, QOF_PARAM_BOOK ) == 0 ) continue;
+                const char *path = static_cast<decltype(path)>(paramPath->data);
+                const char *next_path =
+                    static_cast<decltype(next_path)>(paramPath->next->data);
+                if (strcmp(path, QOF_PARAM_BOOK) == 0) continue;
 
 #if SIMPLE_QUERY_COMPILATION
-                if ( strcmp( paramPath->data, SPLIT_ACCOUNT ) != 0
-                        || strcmp( paramPath->next->data, QOF_PARAM_GUID ) != 0 ) continue;
+                if ( strcmp(path, SPLIT_ACCOUNT) != 0 ||
+                     strcmp(next_path, QOF_PARAM_GUID) != 0 ) continue;
 #endif
 
                 if ( need_AND ) g_string_append( sql, " AND " );
 
-                if ( strcmp( paramPath->data, SPLIT_ACCOUNT ) == 0
-                        && strcmp( paramPath->next->data, QOF_PARAM_GUID ) == 0 )
+                if ( strcmp(path, SPLIT_ACCOUNT) == 0 &&
+                     strcmp(next_path, QOF_PARAM_GUID) == 0 )
                 {
                     convert_query_term_to_sql( be, "s.account_guid", term, sql );
 #if SIMPLE_QUERY_COMPILATION
@@ -1136,12 +1141,12 @@ compile_split_query( GncSqlBackend* be, QofQuery* query )
 #endif
 
                 }
-                else if ( strcmp( paramPath->data, SPLIT_RECONCILE ) == 0 )
+                else if ( strcmp(path, SPLIT_RECONCILE) == 0 )
                 {
                     convert_query_term_to_sql( be, "s.reconcile_state", term, sql );
 
                 }
-                else if ( strcmp( paramPath->data, SPLIT_TRANS ) == 0 )
+                else if ( strcmp(path, SPLIT_TRANS) == 0 )
                 {
 #if TX_GUID_CHECK
                     if ( !has_tx_guid_check )
@@ -1150,11 +1155,11 @@ compile_split_query( GncSqlBackend* be, QofQuery* query )
                         has_tx_guid_check = TRUE;
                     }
 #endif
-                    if ( strcmp( paramPath->next->data, TRANS_DATE_POSTED ) == 0 )
+                    if (strcmp(next_path, TRANS_DATE_POSTED) == 0 )
                     {
                         convert_query_term_to_sql( be, "t.post_date", term, sql );
                     }
-                    else if ( strcmp( paramPath->next->data, TRANS_DESCRIPTION ) == 0 )
+                    else if (strcmp(next_path, TRANS_DESCRIPTION) == 0 )
                     {
                         convert_query_term_to_sql( be, "t.description", term, sql );
                     }
@@ -1164,7 +1169,7 @@ compile_split_query( GncSqlBackend* be, QofQuery* query )
                     }
 
                 }
-                else if ( strcmp( paramPath->data, SPLIT_VALUE ) == 0 )
+                else if ( strcmp(path, SPLIT_VALUE) == 0 )
                 {
                     convert_query_term_to_sql( be, "s.value_num/s.value_denom", term, sql );
 
@@ -1180,7 +1185,7 @@ compile_split_query( GncSqlBackend* be, QofQuery* query )
                     while ( paramPath->next != NULL )
                     {
                         g_string_append( name, "." );
-                        g_string_append( name, paramPath->next->data );
+                        g_string_append( name, next_path );
                         paramPath = paramPath->next;
                     }
                     PERR( "Unknown SPLIT query field: %s\n", name->str );
@@ -1323,7 +1328,7 @@ load_single_acct_balances( const GncSqlBackend* be, GncSqlRow* row )
     g_return_val_if_fail( be != NULL, NULL );
     g_return_val_if_fail( row != NULL, NULL );
 
-    bal = g_malloc( (gsize)sizeof(single_acct_balance_t) );
+    bal = static_cast<decltype(bal)>(g_malloc(sizeof(single_acct_balance_t)));
     g_assert( bal != NULL );
 
     bal->be = be;
diff --git a/src/backend/sql/gnc-transaction-sql.h b/src/backend/sql/gnc-transaction-sql.h
index 668d63c..2901059 100644
--- a/src/backend/sql/gnc-transaction-sql.h
+++ b/src/backend/sql/gnc-transaction-sql.h
@@ -30,10 +30,12 @@
 #define GNC_TRANSACTION_SQL_H
 
 #include "gnc-backend-sql.h"
+extern "C"
+{
 #include "Transaction.h"
 #include "qof.h"
 #include "Account.h"
-
+}
 void gnc_sql_init_transaction_handler( void );
 
 /**
diff --git a/src/backend/sql/gnc-vendor-sql.c b/src/backend/sql/gnc-vendor-sql.cpp
similarity index 99%
rename from src/backend/sql/gnc-vendor-sql.c
rename to src/backend/sql/gnc-vendor-sql.cpp
index 23ede09..9711a2f 100644
--- a/src/backend/sql/gnc-vendor-sql.c
+++ b/src/backend/sql/gnc-vendor-sql.cpp
@@ -27,7 +27,8 @@
  * This file implements the top-level QofBackend API for saving/
  * restoring data to/from an SQL database
  */
-
+extern "C"
+{
 #include "config.h"
 
 #include <glib.h>
@@ -35,19 +36,18 @@
 #include <string.h>
 
 #include "gnc-commodity.h"
-
-#include "gnc-backend-sql.h"
-#include "gnc-commodity-sql.h"
-#include "gnc-slots-sql.h"
-
-#include "gnc-commodity.h"
 #include "gncBillTermP.h"
 #include "gncVendorP.h"
 #include "gncTaxTableP.h"
+}
+
 #include "gnc-vendor-sql.h"
 #include "gnc-address-sql.h"
 #include "gnc-bill-term-sql.h"
 #include "gnc-tax-table-sql.h"
+#include "gnc-backend-sql.h"
+#include "gnc-commodity-sql.h"
+#include "gnc-slots-sql.h"
 
 #define _GNC_MOD_NAME	GNC_ID_VENDOR
 
@@ -155,7 +155,7 @@ save_vendor( GncSqlBackend* be, QofInstance* inst )
 {
     GncVendor* v;
     const GncGUID* guid;
-    gint op;
+    E_DB_OPERATION op;
     gboolean is_infant;
     gboolean is_ok = TRUE;
 
diff --git a/src/backend/sql/test/Makefile.am b/src/backend/sql/test/Makefile.am
index a4726c1..cfa3516 100644
--- a/src/backend/sql/test/Makefile.am
+++ b/src/backend/sql/test/Makefile.am
@@ -4,7 +4,7 @@ include $(top_srcdir)/test-templates/Makefile.decl
 MODULEPATH = src/backend/sql
 
 test_column_types_SOURCES = \
-  test-column-types.c
+  test-column-types.cpp
 
 check_PROGRAMS = \
   test-column-types \
@@ -53,8 +53,8 @@ AM_CPPFLAGS += -DG_LOG_DOMAIN=\"gnc.backend.sql\"
 #test_sqlbedir = ${top_srcdir}/${MODULEPATH}/test
 
 test_sqlbe_SOURCES = \
-	test-sqlbe.c \
-	utest-gnc-backend-sql.c
+	test-sqlbe.cpp \
+	utest-gnc-backend-sql.cpp
 
 #test_sqlbe_HEADERS = \
 #	$(top_srcdir)/$(MODULEPATH)/gnc-backend-sql.h
diff --git a/src/backend/sql/test/test-column-types.c b/src/backend/sql/test/test-column-types.cpp
similarity index 96%
rename from src/backend/sql/test/test-column-types.c
rename to src/backend/sql/test/test-column-types.cpp
index d092b9e..ca5d576 100644
--- a/src/backend/sql/test/test-column-types.c
+++ b/src/backend/sql/test/test-column-types.cpp
@@ -1,5 +1,5 @@
 /***************************************************************************
- *            test-column-types.c
+ *            test-column-types.cpp
  *
  *  Tests the basic SQL column types
  *
@@ -23,12 +23,13 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  *  02110-1301, USA.
  */
-
+extern "C"
+{
 #include "config.h"
 #include "qof.h"
 #include "cashobjects.h"
 #include "test-stuff.h"
-
+}
 #include "gnc-backend-sql.h"
 
 int main( int argc, char ** argv )
diff --git a/src/backend/sql/test/test-sqlbe.c b/src/backend/sql/test/test-sqlbe.cpp
similarity index 99%
rename from src/backend/sql/test/test-sqlbe.c
rename to src/backend/sql/test/test-sqlbe.cpp
index 328e102..9690455 100644
--- a/src/backend/sql/test/test-sqlbe.c
+++ b/src/backend/sql/test/test-sqlbe.cpp
@@ -20,11 +20,12 @@
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 \********************************************************************/
 
-
+extern "C"
+{
 #include "config.h"
 #include <glib.h>
 #include "qof.h"
-
+}
 extern void test_suite_gnc_backend_sql ();
 
 int
diff --git a/src/backend/sql/test/utest-gnc-backend-sql.c b/src/backend/sql/test/utest-gnc-backend-sql.cpp
similarity index 74%
rename from src/backend/sql/test/utest-gnc-backend-sql.c
rename to src/backend/sql/test/utest-gnc-backend-sql.cpp
index b15f3ea..0757883 100644
--- a/src/backend/sql/test/utest-gnc-backend-sql.c
+++ b/src/backend/sql/test/utest-gnc-backend-sql.cpp
@@ -20,10 +20,13 @@
  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
  * Boston, MA  02110-1301,  USA       gnu at gnu.org                   *
 ********************************************************************/
+extern "C"
+{
 #include "config.h"
 #include <string.h>
 #include <glib.h>
 #include <unittest-support.h>
+}
 /* Add specific headers for this class */
 #include "../gnc-backend-sql.h"
 
@@ -195,12 +198,14 @@ test_gnc_sql_commit_edit (void)
     QofInstance *inst;
     guint dirty_called = 0;
     GncSqlConnection conn;
-    gchar *msg1 = "[gnc_sql_commit_edit()] gnc_sql_commit_edit(): Unknown object type 'null'\n";
-    gchar *msg2 = "[gnc_sql_commit_edit()] gnc_sql_commit_edit(): Unknown object type 'Book'\n";
-    guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
-    gchar *logdomain = "gnc.backend.sql";
-    TestErrorStruct check1 = { loglevel, logdomain, msg1, 0 };
-    TestErrorStruct check2 = { loglevel, logdomain, msg2, 0 };
+    const char *msg1 = "[gnc_sql_commit_edit()] gnc_sql_commit_edit(): Unknown object type 'null'\n";
+    const char *msg2 = "[gnc_sql_commit_edit()] gnc_sql_commit_edit(): Unknown object type 'Book'\n";
+    GLogLevelFlags loglevel = static_cast<decltype(loglevel)>(G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL);
+    const char *logdomain = "gnc.backend.sql";
+    TestErrorStruct check1 = { loglevel, const_cast<char*>(logdomain),
+                               const_cast<char*>(msg1), 0 };
+    TestErrorStruct check2 = { loglevel, const_cast<char*>(logdomain),
+                               const_cast<char*>(msg2), 0 };
     guint hdlr1;
 
     test_add_error (&check1);
@@ -215,7 +220,7 @@ test_gnc_sql_commit_edit (void)
     conn.beginTransaction = fake_connection_function;
     conn.rollbackTransaction = fake_connection_function;
     conn.commitTransaction = fake_connection_function;
-    inst  = g_object_new (QOF_TYPE_INSTANCE, NULL);
+    inst  = static_cast<decltype(inst)>(g_object_new (QOF_TYPE_INSTANCE, NULL));
     qof_instance_init_data (inst, QOF_ID_NULL, be.book);
     be.loading = FALSE;
     qof_book_set_dirty_cb (be.book, test_dirty_cb, &dirty_called);
@@ -581,20 +586,20 @@ static void
 test_gnc_sql_convert_timespec_to_string ()
 {
     GncSqlBackend be = {{
-            NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-            NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-            0, NULL, 0, "", NULL
+            nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
+            nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
+            nullptr, nullptr, ERR_BACKEND_NO_ERR, nullptr, 0, nullptr, nullptr
         },
-        NULL, NULL, FALSE, FALSE, FALSE, 0, 0, NULL,
+        nullptr, nullptr, FALSE, FALSE, FALSE, 0, 0, nullptr,
         "%4d-%02d-%02d %02d:%02d:%02d"
     };
-    gchar *date[numtests] = {"1995-03-11 19:17:26",
-                             "2001-04-20 11:44:07",
-                             "1964-02-29 09:15:23",
-                             "1959-04-02 00:00:00",
-                             "2043-11-22 05:32:45",
-                             "2153-12-18 01:15:30"
-                            };
+    const char *date[numtests] = {"1995-03-11 19:17:26",
+                                  "2001-04-20 11:44:07",
+                                  "1964-02-29 09:15:23",
+                                  "1959-04-02 00:00:00",
+                                  "2043-11-22 05:32:45",
+                                  "2153-12-18 01:15:30"
+    };
     int i;
     for (i = 0; i < numtests; i++)
     {
@@ -941,107 +946,107 @@ void
 test_suite_gnc_backend_sql (void)
 {
 
-// GNC_TEST_ADD (suitename, "gnc sql init", Fixture, NULL, test_gnc_sql_init,  teardown);
-// GNC_TEST_ADD (suitename, "create tables cb", Fixture, NULL, test_create_tables_cb,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql set load order", Fixture, NULL, test_gnc_sql_set_load_order,  teardown);
-// GNC_TEST_ADD (suitename, "initial load cb", Fixture, NULL, test_initial_load_cb,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql load", Fixture, NULL, test_gnc_sql_load,  teardown);
-// GNC_TEST_ADD (suitename, "write account tree", Fixture, NULL, test_write_account_tree,  teardown);
-// GNC_TEST_ADD (suitename, "write accounts", Fixture, NULL, test_write_accounts,  teardown);
-// GNC_TEST_ADD (suitename, "write tx", Fixture, NULL, test_write_tx,  teardown);
-// GNC_TEST_ADD (suitename, "write transactions", Fixture, NULL, test_write_transactions,  teardown);
-// GNC_TEST_ADD (suitename, "write template transactions", Fixture, NULL, test_write_template_transactions,  teardown);
-// GNC_TEST_ADD (suitename, "write schedXactions", Fixture, NULL, test_write_schedXactions,  teardown);
-// GNC_TEST_ADD (suitename, "write cb", Fixture, NULL, test_write_cb,  teardown);
-// GNC_TEST_ADD (suitename, "update progress", Fixture, NULL, test_update_progress,  teardown);
-// GNC_TEST_ADD (suitename, "finish progress", Fixture, NULL, test_finish_progress,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql sync all", Fixture, NULL, test_gnc_sql_sync_all,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql begin edit", Fixture, NULL, test_gnc_sql_begin_edit,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql rollback edit", Fixture, NULL, test_gnc_sql_rollback_edit,  teardown);
-// GNC_TEST_ADD (suitename, "commit cb", Fixture, NULL, test_commit_cb,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql init", Fixture, nullptr, test_gnc_sql_init,  teardown);
+// GNC_TEST_ADD (suitename, "create tables cb", Fixture, nullptr, test_create_tables_cb,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql set load order", Fixture, nullptr, test_gnc_sql_set_load_order,  teardown);
+// GNC_TEST_ADD (suitename, "initial load cb", Fixture, nullptr, test_initial_load_cb,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql load", Fixture, nullptr, test_gnc_sql_load,  teardown);
+// GNC_TEST_ADD (suitename, "write account tree", Fixture, nullptr, test_write_account_tree,  teardown);
+// GNC_TEST_ADD (suitename, "write accounts", Fixture, nullptr, test_write_accounts,  teardown);
+// GNC_TEST_ADD (suitename, "write tx", Fixture, nullptr, test_write_tx,  teardown);
+// GNC_TEST_ADD (suitename, "write transactions", Fixture, nullptr, test_write_transactions,  teardown);
+// GNC_TEST_ADD (suitename, "write template transactions", Fixture, nullptr, test_write_template_transactions,  teardown);
+// GNC_TEST_ADD (suitename, "write schedXactions", Fixture, nullptr, test_write_schedXactions,  teardown);
+// GNC_TEST_ADD (suitename, "write cb", Fixture, nullptr, test_write_cb,  teardown);
+// GNC_TEST_ADD (suitename, "update progress", Fixture, nullptr, test_update_progress,  teardown);
+// GNC_TEST_ADD (suitename, "finish progress", Fixture, nullptr, test_finish_progress,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql sync all", Fixture, nullptr, test_gnc_sql_sync_all,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql begin edit", Fixture, nullptr, test_gnc_sql_begin_edit,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql rollback edit", Fixture, nullptr, test_gnc_sql_rollback_edit,  teardown);
+// GNC_TEST_ADD (suitename, "commit cb", Fixture, nullptr, test_commit_cb,  teardown);
     GNC_TEST_ADD_FUNC (suitename, "gnc sql commit edit", test_gnc_sql_commit_edit);
-// GNC_TEST_ADD (suitename, "handle and term", Fixture, NULL, test_handle_and_term,  teardown);
-// GNC_TEST_ADD (suitename, "compile query cb", Fixture, NULL, test_compile_query_cb,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql compile query", Fixture, NULL, test_gnc_sql_compile_query,  teardown);
-// GNC_TEST_ADD (suitename, "convert search obj", Fixture, NULL, test_convert_search_obj,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql compile query to sql", Fixture, NULL, test_gnc_sql_compile_query_to_sql,  teardown);
-// GNC_TEST_ADD (suitename, "free query cb", Fixture, NULL, test_free_query_cb,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql free query", Fixture, NULL, test_gnc_sql_free_query,  teardown);
-// GNC_TEST_ADD (suitename, "run query cb", Fixture, NULL, test_run_query_cb,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql run query", Fixture, NULL, test_gnc_sql_run_query,  teardown);
-// GNC_TEST_ADD (suitename, "business core sql init", Fixture, NULL, test_business_core_sql_init,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql init object handlers", Fixture, NULL, test_gnc_sql_init_object_handlers,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql get integer value", Fixture, NULL, test_gnc_sql_get_integer_value,  teardown);
-// GNC_TEST_ADD (suitename, "get autoinc id", Fixture, NULL, test_get_autoinc_id,  teardown);
-// GNC_TEST_ADD (suitename, "set autoinc id", Fixture, NULL, test_set_autoinc_id,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql get getter", Fixture, NULL, test_gnc_sql_get_getter,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql add colname to list", Fixture, NULL, test_gnc_sql_add_colname_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql add subtable colnames to list", Fixture, NULL, test_gnc_sql_add_subtable_colnames_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "create column info", Fixture, NULL, test_create_column_info,  teardown);
-// GNC_TEST_ADD (suitename, "load string", Fixture, NULL, test_load_string,  teardown);
-// GNC_TEST_ADD (suitename, "add string col info to list", Fixture, NULL, test_add_string_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue string to slist", Fixture, NULL, test_add_gvalue_string_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "load int", Fixture, NULL, test_load_int,  teardown);
-// GNC_TEST_ADD (suitename, "add int col info to list", Fixture, NULL, test_add_int_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue int to slist", Fixture, NULL, test_add_gvalue_int_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "load boolean", Fixture, NULL, test_load_boolean,  teardown);
-// GNC_TEST_ADD (suitename, "add boolean col info to list", Fixture, NULL, test_add_boolean_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue boolean to slist", Fixture, NULL, test_add_gvalue_boolean_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "load int64", Fixture, NULL, test_load_int64,  teardown);
-// GNC_TEST_ADD (suitename, "add int64 col info to list", Fixture, NULL, test_add_int64_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue int64 to slist", Fixture, NULL, test_add_gvalue_int64_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "load double", Fixture, NULL, test_load_double,  teardown);
-// GNC_TEST_ADD (suitename, "add double col info to list", Fixture, NULL, test_add_double_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue double to slist", Fixture, NULL, test_add_gvalue_double_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "load guid", Fixture, NULL, test_load_guid,  teardown);
-// GNC_TEST_ADD (suitename, "add guid col info to list", Fixture, NULL, test_add_guid_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue guid to slist", Fixture, NULL, test_add_gvalue_guid_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql add gvalue objectref guid to slist", Fixture, NULL, test_gnc_sql_add_gvalue_objectref_guid_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql add objectref guid col info to list", Fixture, NULL, test_gnc_sql_add_objectref_guid_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "handle and term", Fixture, nullptr, test_handle_and_term,  teardown);
+// GNC_TEST_ADD (suitename, "compile query cb", Fixture, nullptr, test_compile_query_cb,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql compile query", Fixture, nullptr, test_gnc_sql_compile_query,  teardown);
+// GNC_TEST_ADD (suitename, "convert search obj", Fixture, nullptr, test_convert_search_obj,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql compile query to sql", Fixture, nullptr, test_gnc_sql_compile_query_to_sql,  teardown);
+// GNC_TEST_ADD (suitename, "free query cb", Fixture, nullptr, test_free_query_cb,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql free query", Fixture, nullptr, test_gnc_sql_free_query,  teardown);
+// GNC_TEST_ADD (suitename, "run query cb", Fixture, nullptr, test_run_query_cb,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql run query", Fixture, nullptr, test_gnc_sql_run_query,  teardown);
+// GNC_TEST_ADD (suitename, "business core sql init", Fixture, nullptr, test_business_core_sql_init,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql init object handlers", Fixture, nullptr, test_gnc_sql_init_object_handlers,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql get integer value", Fixture, nullptr, test_gnc_sql_get_integer_value,  teardown);
+// GNC_TEST_ADD (suitename, "get autoinc id", Fixture, nullptr, test_get_autoinc_id,  teardown);
+// GNC_TEST_ADD (suitename, "set autoinc id", Fixture, nullptr, test_set_autoinc_id,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql get getter", Fixture, nullptr, test_gnc_sql_get_getter,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql add colname to list", Fixture, nullptr, test_gnc_sql_add_colname_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql add subtable colnames to list", Fixture, nullptr, test_gnc_sql_add_subtable_colnames_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "create column info", Fixture, nullptr, test_create_column_info,  teardown);
+// GNC_TEST_ADD (suitename, "load string", Fixture, nullptr, test_load_string,  teardown);
+// GNC_TEST_ADD (suitename, "add string col info to list", Fixture, nullptr, test_add_string_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue string to slist", Fixture, nullptr, test_add_gvalue_string_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "load int", Fixture, nullptr, test_load_int,  teardown);
+// GNC_TEST_ADD (suitename, "add int col info to list", Fixture, nullptr, test_add_int_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue int to slist", Fixture, nullptr, test_add_gvalue_int_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "load boolean", Fixture, nullptr, test_load_boolean,  teardown);
+// GNC_TEST_ADD (suitename, "add boolean col info to list", Fixture, nullptr, test_add_boolean_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue boolean to slist", Fixture, nullptr, test_add_gvalue_boolean_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "load int64", Fixture, nullptr, test_load_int64,  teardown);
+// GNC_TEST_ADD (suitename, "add int64 col info to list", Fixture, nullptr, test_add_int64_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue int64 to slist", Fixture, nullptr, test_add_gvalue_int64_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "load double", Fixture, nullptr, test_load_double,  teardown);
+// GNC_TEST_ADD (suitename, "add double col info to list", Fixture, nullptr, test_add_double_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue double to slist", Fixture, nullptr, test_add_gvalue_double_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "load guid", Fixture, nullptr, test_load_guid,  teardown);
+// GNC_TEST_ADD (suitename, "add guid col info to list", Fixture, nullptr, test_add_guid_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue guid to slist", Fixture, nullptr, test_add_gvalue_guid_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql add gvalue objectref guid to slist", Fixture, nullptr, test_gnc_sql_add_gvalue_objectref_guid_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql add objectref guid col info to list", Fixture, nullptr, test_gnc_sql_add_objectref_guid_col_info_to_list,  teardown);
     GNC_TEST_ADD_FUNC (suitename, "gnc sql convert timespec to string", test_gnc_sql_convert_timespec_to_string);
-// GNC_TEST_ADD (suitename, "load timespec", Fixture, NULL, test_load_timespec,  teardown);
-// GNC_TEST_ADD (suitename, "add timespec col info to list", Fixture, NULL, test_add_timespec_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue timespec to slist", Fixture, NULL, test_add_gvalue_timespec_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "load date", Fixture, NULL, test_load_date,  teardown);
-// GNC_TEST_ADD (suitename, "add date col info to list", Fixture, NULL, test_add_date_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue date to slist", Fixture, NULL, test_add_gvalue_date_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "load numeric", Fixture, NULL, test_load_numeric,  teardown);
-// GNC_TEST_ADD (suitename, "add numeric col info to list", Fixture, NULL, test_add_numeric_col_info_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add numeric colname to list", Fixture, NULL, test_add_numeric_colname_to_list,  teardown);
-// GNC_TEST_ADD (suitename, "add gvalue numeric to slist", Fixture, NULL, test_add_gvalue_numeric_to_slist,  teardown);
-// GNC_TEST_ADD (suitename, "get handler", Fixture, NULL, test_get_handler,  teardown);
-// GNC_TEST_ADD (suitename, "register standard col type handlers", Fixture, NULL, test_register_standard_col_type_handlers,  teardown);
-// GNC_TEST_ADD (suitename, " retrieve guid ", Fixture, NULL, test__retrieve_guid_,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql load guid", Fixture, NULL, test_gnc_sql_load_guid,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql load tx guid", Fixture, NULL, test_gnc_sql_load_tx_guid,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql load object", Fixture, NULL, test_gnc_sql_load_object,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql create select statement", Fixture, NULL, test_gnc_sql_create_select_statement,  teardown);
-// GNC_TEST_ADD (suitename, "create single col select statement", Fixture, NULL, test_create_single_col_select_statement,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql execute select statement", Fixture, NULL, test_gnc_sql_execute_select_statement,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql create statement from sql", Fixture, NULL, test_gnc_sql_create_statement_from_sql,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql execute select sql", Fixture, NULL, test_gnc_sql_execute_select_sql,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql execute nonselect sql", Fixture, NULL, test_gnc_sql_execute_nonselect_sql,  teardown);
-// GNC_TEST_ADD (suitename, "execute statement get count", Fixture, NULL, test_execute_statement_get_count,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql append guid list to sql", Fixture, NULL, test_gnc_sql_append_guid_list_to_sql,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql object is it in db", Fixture, NULL, test_gnc_sql_object_is_it_in_db,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql do db operation", Fixture, NULL, test_gnc_sql_do_db_operation,  teardown);
-// GNC_TEST_ADD (suitename, "create gslist from values", Fixture, NULL, test_create_gslist_from_values,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql get sql value", Fixture, NULL, test_gnc_sql_get_sql_value,  teardown);
-// GNC_TEST_ADD (suitename, "free gvalue list", Fixture, NULL, test_free_gvalue_list,  teardown);
-// GNC_TEST_ADD (suitename, "build insert statement", Fixture, NULL, test_build_insert_statement,  teardown);
-// GNC_TEST_ADD (suitename, "build update statement", Fixture, NULL, test_build_update_statement,  teardown);
-// GNC_TEST_ADD (suitename, "build delete statement", Fixture, NULL, test_build_delete_statement,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql commit standard item", Fixture, NULL, test_gnc_sql_commit_standard_item,  teardown);
-// GNC_TEST_ADD (suitename, "do create table", Fixture, NULL, test_do_create_table,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql create table", Fixture, NULL, test_gnc_sql_create_table,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql create temp table", Fixture, NULL, test_gnc_sql_create_temp_table,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql create index", Fixture, NULL, test_gnc_sql_create_index,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql get table version", Fixture, NULL, test_gnc_sql_get_table_version,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql upgrade table", Fixture, NULL, test_gnc_sql_upgrade_table,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql add columns to table", Fixture, NULL, test_gnc_sql_add_columns_to_table,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql init version info", Fixture, NULL, test_gnc_sql_init_version_info,  teardown);
-// GNC_TEST_ADD (suitename, "reset version info", Fixture, NULL, test_reset_version_info,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql finalize version info", Fixture, NULL, test_gnc_sql_finalize_version_info,  teardown);
-// GNC_TEST_ADD (suitename, "gnc sql set table version", Fixture, NULL, test_gnc_sql_set_table_version,  teardown);
+// GNC_TEST_ADD (suitename, "load timespec", Fixture, nullptr, test_load_timespec,  teardown);
+// GNC_TEST_ADD (suitename, "add timespec col info to list", Fixture, nullptr, test_add_timespec_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue timespec to slist", Fixture, nullptr, test_add_gvalue_timespec_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "load date", Fixture, nullptr, test_load_date,  teardown);
+// GNC_TEST_ADD (suitename, "add date col info to list", Fixture, nullptr, test_add_date_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue date to slist", Fixture, nullptr, test_add_gvalue_date_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "load numeric", Fixture, nullptr, test_load_numeric,  teardown);
+// GNC_TEST_ADD (suitename, "add numeric col info to list", Fixture, nullptr, test_add_numeric_col_info_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add numeric colname to list", Fixture, nullptr, test_add_numeric_colname_to_list,  teardown);
+// GNC_TEST_ADD (suitename, "add gvalue numeric to slist", Fixture, nullptr, test_add_gvalue_numeric_to_slist,  teardown);
+// GNC_TEST_ADD (suitename, "get handler", Fixture, nullptr, test_get_handler,  teardown);
+// GNC_TEST_ADD (suitename, "register standard col type handlers", Fixture, nullptr, test_register_standard_col_type_handlers,  teardown);
+// GNC_TEST_ADD (suitename, " retrieve guid ", Fixture, nullptr, test__retrieve_guid_,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql load guid", Fixture, nullptr, test_gnc_sql_load_guid,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql load tx guid", Fixture, nullptr, test_gnc_sql_load_tx_guid,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql load object", Fixture, nullptr, test_gnc_sql_load_object,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql create select statement", Fixture, nullptr, test_gnc_sql_create_select_statement,  teardown);
+// GNC_TEST_ADD (suitename, "create single col select statement", Fixture, nullptr, test_create_single_col_select_statement,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql execute select statement", Fixture, nullptr, test_gnc_sql_execute_select_statement,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql create statement from sql", Fixture, nullptr, test_gnc_sql_create_statement_from_sql,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql execute select sql", Fixture, nullptr, test_gnc_sql_execute_select_sql,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql execute nonselect sql", Fixture, nullptr, test_gnc_sql_execute_nonselect_sql,  teardown);
+// GNC_TEST_ADD (suitename, "execute statement get count", Fixture, nullptr, test_execute_statement_get_count,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql append guid list to sql", Fixture, nullptr, test_gnc_sql_append_guid_list_to_sql,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql object is it in db", Fixture, nullptr, test_gnc_sql_object_is_it_in_db,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql do db operation", Fixture, nullptr, test_gnc_sql_do_db_operation,  teardown);
+// GNC_TEST_ADD (suitename, "create gslist from values", Fixture, nullptr, test_create_gslist_from_values,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql get sql value", Fixture, nullptr, test_gnc_sql_get_sql_value,  teardown);
+// GNC_TEST_ADD (suitename, "free gvalue list", Fixture, nullptr, test_free_gvalue_list,  teardown);
+// GNC_TEST_ADD (suitename, "build insert statement", Fixture, nullptr, test_build_insert_statement,  teardown);
+// GNC_TEST_ADD (suitename, "build update statement", Fixture, nullptr, test_build_update_statement,  teardown);
+// GNC_TEST_ADD (suitename, "build delete statement", Fixture, nullptr, test_build_delete_statement,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql commit standard item", Fixture, nullptr, test_gnc_sql_commit_standard_item,  teardown);
+// GNC_TEST_ADD (suitename, "do create table", Fixture, nullptr, test_do_create_table,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql create table", Fixture, nullptr, test_gnc_sql_create_table,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql create temp table", Fixture, nullptr, test_gnc_sql_create_temp_table,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql create index", Fixture, nullptr, test_gnc_sql_create_index,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql get table version", Fixture, nullptr, test_gnc_sql_get_table_version,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql upgrade table", Fixture, nullptr, test_gnc_sql_upgrade_table,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql add columns to table", Fixture, nullptr, test_gnc_sql_add_columns_to_table,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql init version info", Fixture, nullptr, test_gnc_sql_init_version_info,  teardown);
+// GNC_TEST_ADD (suitename, "reset version info", Fixture, nullptr, test_reset_version_info,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql finalize version info", Fixture, nullptr, test_gnc_sql_finalize_version_info,  teardown);
+// GNC_TEST_ADD (suitename, "gnc sql set table version", Fixture, nullptr, test_gnc_sql_set_table_version,  teardown);
 
 }



Summary of changes:
 po/POTFILES.in                                     | 108 ++++----
 src/backend/dbi/Makefile.am                        |   2 +-
 src/backend/dbi/gnc-backend-dbi-priv.h             |   8 +-
 .../dbi/{gnc-backend-dbi.c => gnc-backend-dbi.cpp} |  39 +--
 src/backend/dbi/gnc-backend-dbi.h                  |   9 +-
 src/backend/dbi/test/Makefile.am                   |   4 +-
 src/backend/dbi/test/test-backend-dbi-basic.cpp    |  12 +-
 .../{test-backend-dbi.c => test-backend-dbi.cpp}   |   5 +-
 ...usiness-stuff.c => test-dbi-business-stuff.cpp} |  10 +-
 src/backend/dbi/test/test-dbi-stuff.cpp            |   2 +-
 src/backend/sql/Makefile.am                        |  44 ++--
 src/backend/sql/{escape.c => escape.cpp}           |   5 +-
 .../sql/{gnc-account-sql.c => gnc-account-sql.cpp} |  16 +-
 src/backend/sql/gnc-account-sql.h                  |   4 +-
 .../sql/{gnc-address-sql.c => gnc-address-sql.cpp} |   7 +-
 .../sql/{gnc-backend-sql.c => gnc-backend-sql.cpp} |  90 ++++---
 src/backend/sql/gnc-backend-sql.h                  |   7 +-
 .../{gnc-bill-term-sql.c => gnc-bill-term-sql.cpp} |  15 +-
 src/backend/sql/gnc-bill-term-sql.h                |   4 +-
 .../sql/{gnc-book-sql.c => gnc-book-sql.cpp}       |  13 +-
 src/backend/sql/gnc-book-sql.h                     |   4 +-
 .../sql/{gnc-budget-sql.c => gnc-budget-sql.cpp}   |  18 +-
 .../{gnc-commodity-sql.c => gnc-commodity-sql.cpp} |   9 +-
 src/backend/sql/gnc-commodity-sql.h                |   4 +-
 .../{gnc-customer-sql.c => gnc-customer-sql.cpp}   |  10 +-
 .../{gnc-employee-sql.c => gnc-employee-sql.cpp}   |  10 +-
 .../sql/{gnc-entry-sql.c => gnc-entry-sql.cpp}     |   9 +-
 .../sql/{gnc-invoice-sql.c => gnc-invoice-sql.cpp} |  11 +-
 src/backend/sql/{gnc-job-sql.c => gnc-job-sql.cpp} |   8 +-
 .../sql/{gnc-lots-sql.c => gnc-lots-sql.cpp}       |  10 +-
 .../sql/{gnc-order-sql.c => gnc-order-sql.cpp}     |   8 +-
 .../sql/{gnc-owner-sql.c => gnc-owner-sql.cpp}     |  10 +-
 .../sql/{gnc-price-sql.c => gnc-price-sql.cpp}     |  12 +-
 ...gnc-recurrence-sql.c => gnc-recurrence-sql.cpp} |  11 +-
 src/backend/sql/gnc-recurrence-sql.h               |   4 +-
 ...schedxaction-sql.c => gnc-schedxaction-sql.cpp} |  22 +-
 src/backend/sql/gnc-schedxaction-sql.h             |   4 +-
 src/backend/sql/gnc-slots-sql.cpp                  |   5 +-
 src/backend/sql/gnc-slots-sql.h                    |   7 +-
 .../{gnc-tax-table-sql.c => gnc-tax-table-sql.cpp} |  15 +-
 ...c-transaction-sql.c => gnc-transaction-sql.cpp} |  59 +++--
 src/backend/sql/gnc-transaction-sql.h              |   4 +-
 .../sql/{gnc-vendor-sql.c => gnc-vendor-sql.cpp}   |  16 +-
 src/backend/sql/test/Makefile.am                   |   6 +-
 .../{test-column-types.c => test-column-types.cpp} |   7 +-
 .../sql/test/{test-sqlbe.c => test-sqlbe.cpp}      |   5 +-
 ...gnc-backend-sql.c => utest-gnc-backend-sql.cpp} | 241 ++++++++---------
 src/backend/xml/Makefile.am                        |  62 ++---
 ...gnc-account-xml-v2.c => gnc-account-xml-v2.cpp} |  46 ++--
 ...gnc-address-xml-v2.c => gnc-address-xml-v2.cpp} |  23 +-
 src/backend/xml/gnc-address-xml-v2.h               |   5 +-
 .../xml/{gnc-backend-xml.c => gnc-backend-xml.cpp} |  17 +-
 src/backend/xml/gnc-backend-xml.h                  |  11 +-
 ...bill-term-xml-v2.c => gnc-bill-term-xml-v2.cpp} |  64 ++---
 src/backend/xml/gnc-bill-term-xml-v2.h             |   5 +-
 .../xml/{gnc-book-xml-v2.c => gnc-book-xml-v2.cpp} |  18 +-
 .../{gnc-budget-xml-v2.c => gnc-budget-xml-v2.cpp} |   6 +-
 ...commodity-xml-v2.c => gnc-commodity-xml-v2.cpp} |  15 +-
 ...c-customer-xml-v2.c => gnc-customer-xml-v2.cpp} |  55 ++--
 ...c-employee-xml-v2.c => gnc-employee-xml-v2.cpp} |  37 +--
 .../{gnc-entry-xml-v2.c => gnc-entry-xml-v2.cpp}   |  79 +++---
 ...c-freqspec-xml-v2.c => gnc-freqspec-xml-v2.cpp} |  58 +++--
 ...gnc-invoice-xml-v2.c => gnc-invoice-xml-v2.cpp} |  55 ++--
 .../xml/{gnc-job-xml-v2.c => gnc-job-xml-v2.cpp}   |  27 +-
 .../xml/{gnc-lot-xml-v2.c => gnc-lot-xml-v2.cpp}   |  15 +-
 .../{gnc-order-xml-v2.c => gnc-order-xml-v2.cpp}   |  32 +--
 .../{gnc-owner-xml-v2.c => gnc-owner-xml-v2.cpp}   |  17 +-
 src/backend/xml/gnc-owner-xml-v2.h                 |   5 +-
 ...gnc-pricedb-xml-v2.c => gnc-pricedb-xml-v2.cpp} |  25 +-
 ...currence-xml-v2.c => gnc-recurrence-xml-v2.cpp} |   8 +-
 ...action-xml-v2.c => gnc-schedxaction-xml-v2.cpp} |  57 ++--
 ...tax-table-xml-v2.c => gnc-tax-table-xml-v2.cpp} |  53 ++--
 ...saction-xml-v2.c => gnc-transaction-xml-v2.cpp} |  56 ++--
 .../{gnc-vendor-xml-v2.c => gnc-vendor-xml-v2.cpp} |  41 +--
 .../xml/{gnc-xml-helper.c => gnc-xml-helper.cpp}   |   6 +-
 src/backend/xml/gnc-xml-helper.h                   |   4 +-
 src/backend/xml/gnc-xml.h                          |   4 +
 ...gncmod-backend-xml.c => gncmod-backend-xml.cpp} |   5 +-
 ...io-example-account.c => io-example-account.cpp} |  19 +-
 src/backend/xml/io-example-account.h               |  10 +-
 .../xml/{io-gncxml-gen.c => io-gncxml-gen.cpp}     |   4 +-
 src/backend/xml/io-gncxml-gen.h                    |   5 +-
 src/backend/xml/io-gncxml-v1.cpp                   |   5 +-
 .../xml/{io-gncxml-v2.c => io-gncxml-v2.cpp}       |  95 ++++---
 src/backend/xml/io-gncxml-v2.h                     |  59 +----
 src/backend/xml/{io-utils.c => io-utils.cpp}       |  12 +-
 src/backend/xml/io-utils.h                         |   6 +-
 src/backend/xml/sixtp-dom-generators.cpp           |   5 +-
 src/backend/xml/sixtp-dom-generators.h             |  11 +-
 src/backend/xml/sixtp-dom-parsers.cpp              |   9 +-
 src/backend/xml/sixtp-dom-parsers.h                |  11 +-
 src/backend/xml/{sixtp-stack.c => sixtp-stack.cpp} |   5 +-
 src/backend/xml/sixtp-stack.h                      |   4 +-
 ...xtp-to-dom-parser.c => sixtp-to-dom-parser.cpp} |   6 +-
 src/backend/xml/{sixtp-utils.c => sixtp-utils.cpp} |   9 +-
 src/backend/xml/sixtp-utils.h                      |   5 +-
 src/backend/xml/{sixtp.c => sixtp.cpp}             |  40 ++-
 src/backend/xml/sixtp.h                            | 101 ++++++--
 src/backend/xml/test/Makefile.am                   | 287 +++++++++++----------
 ...-date-converting.c => test-date-converting.cpp} |   6 +-
 ...-dom-converters1.c => test-dom-converters1.cpp} |  22 +-
 .../{test-dom-parser1.c => test-dom-parser1.cpp}   |   4 +-
 src/backend/xml/test/test-file-stuff.cpp           |  12 +-
 src/backend/xml/test/test-file-stuff.h             |   8 +-
 src/backend/xml/test/test-kvp-frames.cpp           |   4 +-
 .../{test-load-backend.c => test-load-backend.cpp} |   4 +-
 ...ple-account.c => test-load-example-account.cpp} |  14 +-
 .../test/{test-load-xml2.c => test-load-xml2.cpp}  |  17 +-
 .../{test-save-in-lang.c => test-save-in-lang.cpp} |   5 +-
 ...ing-converters.c => test-string-converters.cpp} |  32 ++-
 .../{test-xml-account.c => test-xml-account.cpp}   |  29 ++-
 ...test-xml-commodity.c => test-xml-commodity.cpp} |  27 +-
 .../{test-xml-pricedb.c => test-xml-pricedb.cpp}   |  24 +-
 ...-xml-transaction.c => test-xml-transaction.cpp} |  60 ++---
 .../{test-xml2-is-file.c => test-xml2-is-file.cpp} |  11 +-
 src/gnome-utils/assistant-xml-encoding.c           |   1 -
 116 files changed, 1495 insertions(+), 1337 deletions(-)
 rename src/backend/dbi/{gnc-backend-dbi.c => gnc-backend-dbi.cpp} (99%)
 rename src/backend/dbi/test/{test-backend-dbi.c => test-backend-dbi.cpp} (99%)
 rename src/backend/dbi/test/{test-dbi-business-stuff.c => test-dbi-business-stuff.cpp} (99%)
 rename src/backend/sql/{escape.c => escape.cpp} (94%)
 rename src/backend/sql/{gnc-account-sql.c => gnc-account-sql.cpp} (98%)
 rename src/backend/sql/{gnc-address-sql.c => gnc-address-sql.cpp} (98%)
 rename src/backend/sql/{gnc-backend-sql.c => gnc-backend-sql.cpp} (97%)
 rename src/backend/sql/{gnc-bill-term-sql.c => gnc-bill-term-sql.cpp} (98%)
 rename src/backend/sql/{gnc-book-sql.c => gnc-book-sql.cpp} (99%)
 rename src/backend/sql/{gnc-budget-sql.c => gnc-budget-sql.cpp} (99%)
 rename src/backend/sql/{gnc-commodity-sql.c => gnc-commodity-sql.cpp} (99%)
 rename src/backend/sql/{gnc-customer-sql.c => gnc-customer-sql.cpp} (99%)
 rename src/backend/sql/{gnc-employee-sql.c => gnc-employee-sql.cpp} (99%)
 rename src/backend/sql/{gnc-entry-sql.c => gnc-entry-sql.cpp} (99%)
 rename src/backend/sql/{gnc-invoice-sql.c => gnc-invoice-sql.cpp} (99%)
 rename src/backend/sql/{gnc-job-sql.c => gnc-job-sql.cpp} (99%)
 rename src/backend/sql/{gnc-lots-sql.c => gnc-lots-sql.cpp} (99%)
 rename src/backend/sql/{gnc-order-sql.c => gnc-order-sql.cpp} (99%)
 rename src/backend/sql/{gnc-owner-sql.c => gnc-owner-sql.cpp} (99%)
 rename src/backend/sql/{gnc-price-sql.c => gnc-price-sql.cpp} (99%)
 rename src/backend/sql/{gnc-recurrence-sql.c => gnc-recurrence-sql.cpp} (99%)
 rename src/backend/sql/{gnc-schedxaction-sql.c => gnc-schedxaction-sql.cpp} (99%)
 rename src/backend/sql/{gnc-tax-table-sql.c => gnc-tax-table-sql.cpp} (99%)
 rename src/backend/sql/{gnc-transaction-sql.c => gnc-transaction-sql.cpp} (97%)
 rename src/backend/sql/{gnc-vendor-sql.c => gnc-vendor-sql.cpp} (99%)
 rename src/backend/sql/test/{test-column-types.c => test-column-types.cpp} (96%)
 rename src/backend/sql/test/{test-sqlbe.c => test-sqlbe.cpp} (99%)
 rename src/backend/sql/test/{utest-gnc-backend-sql.c => utest-gnc-backend-sql.cpp} (74%)
 rename src/backend/xml/{gnc-account-xml-v2.c => gnc-account-xml-v2.cpp} (91%)
 rename src/backend/xml/{gnc-address-xml-v2.c => gnc-address-xml-v2.cpp} (90%)
 rename src/backend/xml/{gnc-backend-xml.c => gnc-backend-xml.cpp} (99%)
 rename src/backend/xml/{gnc-bill-term-xml-v2.c => gnc-bill-term-xml-v2.cpp} (92%)
 rename src/backend/xml/{gnc-book-xml-v2.c => gnc-book-xml-v2.cpp} (96%)
 rename src/backend/xml/{gnc-budget-xml-v2.c => gnc-budget-xml-v2.cpp} (98%)
 rename src/backend/xml/{gnc-commodity-xml-v2.c => gnc-commodity-xml-v2.cpp} (98%)
 rename src/backend/xml/{gnc-customer-xml-v2.c => gnc-customer-xml-v2.cpp} (91%)
 rename src/backend/xml/{gnc-employee-xml-v2.c => gnc-employee-xml-v2.cpp} (91%)
 rename src/backend/xml/{gnc-entry-xml-v2.c => gnc-entry-xml-v2.cpp} (90%)
 rename src/backend/xml/{gnc-freqspec-xml-v2.c => gnc-freqspec-xml-v2.cpp} (90%)
 rename src/backend/xml/{gnc-invoice-xml-v2.c => gnc-invoice-xml-v2.cpp} (91%)
 rename src/backend/xml/{gnc-job-xml-v2.c => gnc-job-xml-v2.cpp} (92%)
 rename src/backend/xml/{gnc-lot-xml-v2.c => gnc-lot-xml-v2.cpp} (96%)
 rename src/backend/xml/{gnc-order-xml-v2.c => gnc-order-xml-v2.cpp} (92%)
 rename src/backend/xml/{gnc-owner-xml-v2.c => gnc-owner-xml-v2.cpp} (97%)
 rename src/backend/xml/{gnc-pricedb-xml-v2.c => gnc-pricedb-xml-v2.cpp} (96%)
 rename src/backend/xml/{gnc-recurrence-xml-v2.c => gnc-recurrence-xml-v2.cpp} (99%)
 rename src/backend/xml/{gnc-schedxaction-xml-v2.c => gnc-schedxaction-xml-v2.cpp} (93%)
 rename src/backend/xml/{gnc-tax-table-xml-v2.c => gnc-tax-table-xml-v2.cpp} (92%)
 rename src/backend/xml/{gnc-transaction-xml-v2.c => gnc-transaction-xml-v2.cpp} (91%)
 rename src/backend/xml/{gnc-vendor-xml-v2.c => gnc-vendor-xml-v2.cpp} (92%)
 rename src/backend/xml/{gnc-xml-helper.c => gnc-xml-helper.cpp} (99%)
 rename src/backend/xml/{gncmod-backend-xml.c => gncmod-backend-xml.cpp} (99%)
 rename src/backend/xml/{io-example-account.c => io-example-account.cpp} (99%)
 rename src/backend/xml/{io-gncxml-gen.c => io-gncxml-gen.cpp} (99%)
 rename src/backend/xml/{io-gncxml-v2.c => io-gncxml-v2.cpp} (96%)
 rename src/backend/xml/{io-utils.c => io-utils.cpp} (94%)
 rename src/backend/xml/{sixtp-stack.c => sixtp-stack.cpp} (99%)
 rename src/backend/xml/{sixtp-to-dom-parser.c => sixtp-to-dom-parser.cpp} (98%)
 rename src/backend/xml/{sixtp-utils.c => sixtp-utils.cpp} (99%)
 rename src/backend/xml/{sixtp.c => sixtp.cpp} (96%)
 rename src/backend/xml/test/{test-date-converting.c => test-date-converting.cpp} (99%)
 rename src/backend/xml/test/{test-dom-converters1.c => test-dom-converters1.cpp} (96%)
 rename src/backend/xml/test/{test-dom-parser1.c => test-dom-parser1.cpp} (99%)
 rename src/backend/xml/test/{test-load-backend.c => test-load-backend.cpp} (99%)
 rename src/backend/xml/test/{test-load-example-account.c => test-load-example-account.cpp} (99%)
 rename src/backend/xml/test/{test-load-xml2.c => test-load-xml2.cpp} (94%)
 rename src/backend/xml/test/{test-save-in-lang.c => test-save-in-lang.cpp} (99%)
 rename src/backend/xml/test/{test-string-converters.c => test-string-converters.cpp} (85%)
 rename src/backend/xml/test/{test-xml-account.c => test-xml-account.cpp} (95%)
 rename src/backend/xml/test/{test-xml-commodity.c => test-xml-commodity.cpp} (98%)
 rename src/backend/xml/test/{test-xml-pricedb.c => test-xml-pricedb.cpp} (94%)
 rename src/backend/xml/test/{test-xml-transaction.c => test-xml-transaction.cpp} (92%)
 rename src/backend/xml/test/{test-xml2-is-file.c => test-xml2-is-file.cpp} (93%)



More information about the gnucash-changes mailing list