gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-exchange] branch master updated (8f738804 -> 6a373d1


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] branch master updated (8f738804 -> 6a373d1e)
Date: Sat, 17 Aug 2019 22:19:08 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a change to branch master
in repository exchange.

    from 8f738804 fix indent
     new cbf6281c prevent // from appearing in payto URIs
     new 4bf425c9 remove currency field from databases
     new 6a373d1e update ChangeLog

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 ChangeLog                                      |    4 +
 src/auditordb/plugin_auditordb_postgres.c      | 1472 +++++++++++-----------
 src/auditordb/test-auditor-db-postgres.conf    |    3 +
 src/auditordb/test_auditordb.c                 |    2 +-
 src/exchange-tools/taler-exchange-wire.c       |    6 +-
 src/exchange/taler-exchange-httpd.c            |    3 +
 src/exchange/taler-exchange-httpd_validation.c |    5 +-
 src/exchangedb/plugin_exchangedb_postgres.c    | 1564 +++++++++++-------------
 src/exchangedb/test-exchange-db-postgres.conf  |    2 +
 src/exchangedb/test_exchangedb.c               |   77 +-
 src/include/taler_exchangedb_plugin.h          |  156 ---
 src/include/taler_pq_lib.h                     |    8 +-
 src/include/taler_util.h                       |    3 +-
 src/json/json_wire.c                           |    1 -
 src/lib/testing_api_helpers.c                  |   10 +-
 src/pq/pq_query_helper.c                       |   76 +-
 src/pq/pq_result_helper.c                      |  229 ++--
 src/pq/test_pq.c                               |   44 +-
 src/util/util.c                                |    4 +-
 19 files changed, 1623 insertions(+), 2046 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 61ee3b6f..d218f4ec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat 17 Aug 2019 10:03:38 PM CEST
+    Remove "currency" field from exchange database, as we only
+    support one currency per exchange anyway. -CG
+
 Wed 26 Jun 2019 03:31:52 PM CEST
     Adding link signatures to prevent exchange from tracking
     users using coins falsely believed to have been recovered via /link,
diff --git a/src/auditordb/plugin_auditordb_postgres.c 
b/src/auditordb/plugin_auditordb_postgres.c
index 67a8d7a8..dfd8d64e 100644
--- a/src/auditordb/plugin_auditordb_postgres.c
+++ b/src/auditordb/plugin_auditordb_postgres.c
@@ -31,6 +31,25 @@
 
 
 /**
+ * Wrapper macro to add the currency from the plugin's state
+ * when fetching amounts from the database.
+ *
+ * @param field name of the database field to fetch amount from
+ * @param amountp[out] pointer to amount to set
+ */
+#define TALER_PQ_RESULT_SPEC_AMOUNT(field,amountp) 
TALER_PQ_result_spec_amount(field,pg->currency,amountp)
+
+/**
+ * Wrapper macro to add the currency from the plugin's state
+ * when fetching amounts from the database.  NBO variant.
+ *
+ * @param field name of the database field to fetch amount from
+ * @param amountp[out] pointer to amount to set
+ */
+#define TALER_PQ_RESULT_SPEC_AMOUNT_NBO(field,amountp) 
TALER_PQ_result_spec_amount_nbo(field,pg->currency,amountp)
+
+
+/**
  * Handle for a database session (per-thread, for transactions).
  */
 struct TALER_AUDITORDB_Session
@@ -60,6 +79,11 @@ struct PostgresClosure
    * the configuration.
    */
   char *connection_cfg_str;
+
+  /**
+   * Which currency should we assume all amounts to be in?
+   */
+  char *currency;
 };
 
 
@@ -196,43 +220,38 @@ postgres_create_tables (void *cls)
   struct GNUNET_PQ_ExecuteStatement es[] = {
     /* Table with list of exchanges we are auditing */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_exchanges"
-                           "(master_pub BYTEA PRIMARY KEY CHECK 
(LENGTH(master_pub)=32)"
-                           ",exchange_url VARCHAR NOT NULL"
-                           ")"),
+                            "(master_pub BYTEA PRIMARY KEY CHECK 
(LENGTH(master_pub)=32)"
+                            ",exchange_url VARCHAR NOT NULL"
+                            ")"),
     /* Table with list of signing keys of exchanges we are auditing */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_exchange_signkeys"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",ep_start INT8 NOT NULL"
-                           ",ep_expire INT8 NOT NULL"
-                           ",ep_end INT8 NOT NULL"
-                           ",exchange_pub BYTEA NOT NULL CHECK 
(LENGTH(exchange_pub)=32)"
-                           ",master_sig BYTEA NOT NULL CHECK 
(LENGTH(master_sig)=64)"
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",ep_start INT8 NOT NULL"
+                            ",ep_expire INT8 NOT NULL"
+                            ",ep_end INT8 NOT NULL"
+                            ",exchange_pub BYTEA NOT NULL CHECK 
(LENGTH(exchange_pub)=32)"
+                            ",master_sig BYTEA NOT NULL CHECK 
(LENGTH(master_sig)=64)"
                            ")"),
     /* Table with all of the denomination keys that the auditor
        is aware of. */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_denominations"
-                           "(denom_pub_hash BYTEA PRIMARY KEY CHECK 
(LENGTH(denom_pub_hash)=64)"
-                           ",master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",valid_from INT8 NOT NULL"
-                           ",expire_withdraw INT8 NOT NULL"
-                           ",expire_deposit INT8 NOT NULL"
-                           ",expire_legal INT8 NOT NULL"
-                           ",coin_val INT8 NOT NULL" /* value of this denom */
-                           ",coin_frac INT4 NOT NULL" /* fractional value of 
this denom */
-                           ",coin_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL" /* assuming same currency for fees */
-                           ",fee_withdraw_val INT8 NOT NULL"
-                           ",fee_withdraw_frac INT4 NOT NULL"
-                           ",fee_withdraw_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",fee_deposit_val INT8 NOT NULL"
-                           ",fee_deposit_frac INT4 NOT NULL"
-                           ",fee_deposit_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",fee_refresh_val INT8 NOT NULL"
-                           ",fee_refresh_frac INT4 NOT NULL"
-                           ",fee_refresh_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",fee_refund_val INT8 NOT NULL"
-                           ",fee_refund_frac INT4 NOT NULL"
-                           ",fee_refund_curr VARCHAR("TALER_CURRENCY_LEN_STR") 
NOT NULL"
-                           ")"),
+                            "(denom_pub_hash BYTEA PRIMARY KEY CHECK 
(LENGTH(denom_pub_hash)=64)"
+                            ",master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",valid_from INT8 NOT NULL"
+                            ",expire_withdraw INT8 NOT NULL"
+                            ",expire_deposit INT8 NOT NULL"
+                            ",expire_legal INT8 NOT NULL"
+                            ",coin_val INT8 NOT NULL" /* value of this denom */
+                            ",coin_frac INT4 NOT NULL" /* fractional value of 
this denom */
+                            ",fee_withdraw_val INT8 NOT NULL"
+                            ",fee_withdraw_frac INT4 NOT NULL"
+                            ",fee_deposit_val INT8 NOT NULL"
+                            ",fee_deposit_frac INT4 NOT NULL"
+                            ",fee_refresh_val INT8 NOT NULL"
+                            ",fee_refresh_frac INT4 NOT NULL"
+                            ",fee_refund_val INT8 NOT NULL"
+                            ",fee_refund_frac INT4 NOT NULL"
+                            ")"),
     /* Table indicating up to which transactions the auditor has
        processed the exchange database.  Used for SELECTing the
        statements to process.  The indices below include the last
@@ -241,38 +260,38 @@ postgres_create_tables (void *cls)
        strictly larger (and process in monotonically increasing
        order). */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_progress_reserve"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",last_reserve_in_serial_id INT8 NOT NULL DEFAULT 0"
-                           ",last_reserve_out_serial_id INT8 NOT NULL DEFAULT 
0"
-                           ",last_reserve_payback_serial_id INT8 NOT NULL 
DEFAULT 0"
-                           ",last_reserve_close_serial_id INT8 NOT NULL 
DEFAULT 0"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",last_reserve_in_serial_id INT8 NOT NULL DEFAULT 
0"
+                            ",last_reserve_out_serial_id INT8 NOT NULL DEFAULT 
0"
+                            ",last_reserve_payback_serial_id INT8 NOT NULL 
DEFAULT 0"
+                            ",last_reserve_close_serial_id INT8 NOT NULL 
DEFAULT 0"
+                            ")"),
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_progress_aggregation"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",last_wire_out_serial_id INT8 NOT NULL DEFAULT 0"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",last_wire_out_serial_id INT8 NOT NULL DEFAULT 0"
+                            ")"),
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_progress_deposit_confirmation"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",last_deposit_confirmation_serial_id INT8 NOT NULL 
DEFAULT 0"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",last_deposit_confirmation_serial_id INT8 NOT 
NULL DEFAULT 0"
+                            ")"),
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_progress_coin"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",last_withdraw_serial_id INT8 NOT NULL DEFAULT 0"
-                           ",last_deposit_serial_id INT8 NOT NULL DEFAULT 0"
-                           ",last_melt_serial_id INT8 NOT NULL DEFAULT 0"
-                           ",last_refund_serial_id INT8 NOT NULL DEFAULT 0"
-                           ",last_payback_serial_id INT8 NOT NULL DEFAULT 0"
-                           ",last_payback_refresh_serial_id INT8 NOT NULL 
DEFAULT 0"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",last_withdraw_serial_id INT8 NOT NULL DEFAULT 0"
+                            ",last_deposit_serial_id INT8 NOT NULL DEFAULT 0"
+                            ",last_melt_serial_id INT8 NOT NULL DEFAULT 0"
+                            ",last_refund_serial_id INT8 NOT NULL DEFAULT 0"
+                            ",last_payback_serial_id INT8 NOT NULL DEFAULT 0"
+                            ",last_payback_refresh_serial_id INT8 NOT NULL 
DEFAULT 0"
+                            ")"),
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS wire_auditor_progress"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                ",account_name TEXT NOT NULL"
-                           ",last_wire_reserve_in_serial_id INT8 NOT NULL 
DEFAULT 0"
-                           ",last_wire_wire_out_serial_id INT8 NOT NULL 
DEFAULT 0"
-                           ",last_timestamp INT8 NOT NULL"
-                ",wire_in_off BYTEA"
-                ",wire_out_off BYTEA"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",account_name TEXT NOT NULL"
+                            ",last_wire_reserve_in_serial_id INT8 NOT NULL 
DEFAULT 0"
+                            ",last_wire_wire_out_serial_id INT8 NOT NULL 
DEFAULT 0"
+                            ",last_timestamp INT8 NOT NULL"
+                            ",wire_in_off BYTEA"
+                            ",wire_out_off BYTEA"
+                            ")"),
     /* Table with all of the customer reserves and their respective
        balances that the auditor is aware of.
        "last_reserve_out_serial_id" marks the last withdrawal from
@@ -280,38 +299,33 @@ postgres_create_tables (void *cls)
        and "last_reserve_in_serial_id" is the last "reserve_in"
        operation about this reserve that the auditor is aware of. */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_reserves"
-                           "(reserve_pub BYTEA NOT NULL 
CHECK(LENGTH(reserve_pub)=32)"
-                           ",master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",reserve_balance_val INT8 NOT NULL"
-                           ",reserve_balance_frac INT4 NOT NULL"
-                           ",reserve_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",withdraw_fee_balance_val INT8 NOT NULL"
-                           ",withdraw_fee_balance_frac INT4 NOT NULL"
-                           ",withdraw_fee_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",expiration_date INT8 NOT NULL"
-                           ",auditor_reserves_rowid BIGSERIAL UNIQUE"
-                           ")"),
+                            "(reserve_pub BYTEA NOT NULL 
CHECK(LENGTH(reserve_pub)=32)"
+                            ",master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",reserve_balance_val INT8 NOT NULL"
+                            ",reserve_balance_frac INT4 NOT NULL"
+                            ",withdraw_fee_balance_val INT8 NOT NULL"
+                            ",withdraw_fee_balance_frac INT4 NOT NULL"
+                            ",expiration_date INT8 NOT NULL"
+                            ",auditor_reserves_rowid BIGSERIAL UNIQUE"
+                            ")"),
     GNUNET_PQ_make_try_execute ("CREATE INDEX auditor_reserves_by_reserve_pub "
-                               "ON auditor_reserves(reserve_pub)"),
+                                "ON auditor_reserves(reserve_pub)"),
     /* Table with the sum of the balances of all customer reserves
        (by exchange's master public key) */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_reserve_balance"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",reserve_balance_val INT8 NOT NULL"
-                           ",reserve_balance_frac INT4 NOT NULL"
-                           ",reserve_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",withdraw_fee_balance_val INT8 NOT NULL"
-                           ",withdraw_fee_balance_frac INT4 NOT NULL"
-                           ",withdraw_fee_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",reserve_balance_val INT8 NOT NULL"
+                            ",reserve_balance_frac INT4 NOT NULL"
+                            ",withdraw_fee_balance_val INT8 NOT NULL"
+                            ",withdraw_fee_balance_frac INT4 NOT NULL"
+                            ")"),
     /* Table with the sum of the balances of all wire fees
        (by exchange's master public key) */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_wire_fee_balance"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",wire_fee_balance_val INT8 NOT NULL"
-                           ",wire_fee_balance_frac INT4 NOT NULL"
-                           ",wire_fee_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",wire_fee_balance_val INT8 NOT NULL"
+                            ",wire_fee_balance_frac INT4 NOT NULL"
+                            ")"),
     /* Table with all of the outstanding denomination coins that the
        exchange is aware of and what the respective balances are
        (outstanding as well as issued overall which implies the
@@ -319,19 +333,16 @@ postgres_create_tables (void *cls)
        issued (withdraw, refresh-reveal) and the number of coins seen
        at the exchange (refresh-commit, deposit), not just the amounts. */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_denomination_pending"
-                           "(denom_pub_hash BYTEA PRIMARY KEY"
-                           " REFERENCES auditor_denominations (denom_pub_hash) 
ON DELETE CASCADE"
-                           ",denom_balance_val INT8 NOT NULL"
-                           ",denom_balance_frac INT4 NOT NULL"
-                           ",denom_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                ",num_issued INT8 NOT NULL"
-                           ",denom_risk_val INT8 NOT NULL"
-                           ",denom_risk_frac INT4 NOT NULL"
-                           ",denom_risk_curr VARCHAR("TALER_CURRENCY_LEN_STR") 
NOT NULL"
-                           ",payback_loss_val INT8 NOT NULL"
-                           ",payback_loss_frac INT4 NOT NULL"
-                           ",payback_loss_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ")"),
+                            "(denom_pub_hash BYTEA PRIMARY KEY"
+                            " REFERENCES auditor_denominations 
(denom_pub_hash) ON DELETE CASCADE"
+                            ",denom_balance_val INT8 NOT NULL"
+                            ",denom_balance_frac INT4 NOT NULL"
+                            ",num_issued INT8 NOT NULL"
+                            ",denom_risk_val INT8 NOT NULL"
+                            ",denom_risk_frac INT4 NOT NULL"
+                            ",payback_loss_val INT8 NOT NULL"
+                            ",payback_loss_frac INT4 NOT NULL"
+                            ")"),
     /* Table with the sum of the outstanding coins from
        "auditor_denomination_pending" (denom_pubs must belong to the
        respective's exchange's master public key); it represents the
@@ -339,26 +350,20 @@ postgres_create_tables (void *cls)
        unexpected historic_loss-style events where denomination keys are
        compromised) */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_balance_summary"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",denom_balance_val INT8 NOT NULL"
-                           ",denom_balance_frac INT4 NOT NULL"
-                           ",denom_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",deposit_fee_balance_val INT8 NOT NULL"
-                           ",deposit_fee_balance_frac INT4 NOT NULL"
-                           ",deposit_fee_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",melt_fee_balance_val INT8 NOT NULL"
-                           ",melt_fee_balance_frac INT4 NOT NULL"
-                           ",melt_fee_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",refund_fee_balance_val INT8 NOT NULL"
-                           ",refund_fee_balance_frac INT4 NOT NULL"
-                           ",refund_fee_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",risk_val INT8 NOT NULL"
-                           ",risk_frac INT4 NOT NULL"
-                           ",risk_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL"
-                           ",loss_val INT8 NOT NULL"
-                           ",loss_frac INT4 NOT NULL"
-                           ",loss_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",denom_balance_val INT8 NOT NULL"
+                            ",denom_balance_frac INT4 NOT NULL"
+                            ",deposit_fee_balance_val INT8 NOT NULL"
+                            ",deposit_fee_balance_frac INT4 NOT NULL"
+                            ",melt_fee_balance_val INT8 NOT NULL"
+                            ",melt_fee_balance_frac INT4 NOT NULL"
+                            ",refund_fee_balance_val INT8 NOT NULL"
+                            ",refund_fee_balance_frac INT4 NOT NULL"
+                            ",risk_val INT8 NOT NULL"
+                            ",risk_frac INT4 NOT NULL"
+                            ",loss_val INT8 NOT NULL"
+                            ",loss_frac INT4 NOT NULL"
+                            ")"),
     /* Table with historic profits; basically, when a denom_pub has
        expired and everything associated with it is garbage collected,
        the final profits end up in here; note that the "denom_pub" here
@@ -369,50 +374,46 @@ postgres_create_tables (void *cls)
        individually; the delta to the revenue_balance is from coins that
        were withdrawn but never deposited prior to expiration. */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_historic_denomination_revenue"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",denom_pub_hash BYTEA PRIMARY KEY CHECK 
(LENGTH(denom_pub_hash)=64)"
-                           ",revenue_timestamp INT8 NOT NULL"
-                           ",revenue_balance_val INT8 NOT NULL"
-                           ",revenue_balance_frac INT4 NOT NULL"
-                           ",revenue_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ",loss_balance_val INT8 NOT NULL"
-                           ",loss_balance_frac INT4 NOT NULL"
-                           ",loss_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",denom_pub_hash BYTEA PRIMARY KEY CHECK 
(LENGTH(denom_pub_hash)=64)"
+                            ",revenue_timestamp INT8 NOT NULL"
+                            ",revenue_balance_val INT8 NOT NULL"
+                            ",revenue_balance_frac INT4 NOT NULL"
+                            ",loss_balance_val INT8 NOT NULL"
+                            ",loss_balance_frac INT4 NOT NULL"
+                            ")"),
     /* Table with historic profits from reserves; we eventually
        GC "auditor_historic_reserve_revenue", and then store the totals
        in here (by time intervals). */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_historic_reserve_summary"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",start_date INT8 NOT NULL"
-                           ",end_date INT8 NOT NULL"
-                           ",reserve_profits_val INT8 NOT NULL"
-                           ",reserve_profits_frac INT4 NOT NULL"
-                           ",reserve_profits_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",start_date INT8 NOT NULL"
+                            ",end_date INT8 NOT NULL"
+                            ",reserve_profits_val INT8 NOT NULL"
+                            ",reserve_profits_frac INT4 NOT NULL"
+                            ")"),
     GNUNET_PQ_make_try_execute ("CREATE INDEX 
auditor_historic_reserve_summary_by_master_pub_start_date "
-                               "ON 
auditor_historic_reserve_summary(master_pub,start_date)"),
+                                "ON 
auditor_historic_reserve_summary(master_pub,start_date)"),
 
     /* Table with deposit confirmation sent to us by merchants;
        we must check that the exchange reported these properly. */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS deposit_confirmations "
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                ",serial_id BIGSERIAL UNIQUE"
-                           ",h_contract_terms BYTEA CHECK 
(LENGTH(h_contract_terms)=64)"
-                ",h_wire BYTEA CHECK (LENGTH(h_wire)=64)"
-                           ",timestamp INT8 NOT NULL"
-                           ",refund_deadline INT8 NOT NULL"
-                           ",amount_without_fee_val INT8 NOT NULL"
-                           ",amount_without_fee_frac INT4 NOT NULL"
-                           ",amount_without_fee_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
-                ",coin_pub BYTEA CHECK (LENGTH(coin_pub)=32)"
-                ",merchant_pub BYTEA CHECK (LENGTH(merchant_pub)=32)"
-                ",exchange_sig BYTEA CHECK (LENGTH(exchange_sig)=64)"
-                ",exchange_pub BYTEA CHECK (LENGTH(exchange_pub)=32)"
-                ",master_sig BYTEA CHECK (LENGTH(master_sig)=64)"
-                ",PRIMARY KEY (h_contract_terms, h_wire, coin_pub, "
-                "  merchant_pub, exchange_sig, exchange_pub, master_sig)"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",serial_id BIGSERIAL UNIQUE"
+                            ",h_contract_terms BYTEA CHECK 
(LENGTH(h_contract_terms)=64)"
+                            ",h_wire BYTEA CHECK (LENGTH(h_wire)=64)"
+                            ",timestamp INT8 NOT NULL"
+                            ",refund_deadline INT8 NOT NULL"
+                            ",amount_without_fee_val INT8 NOT NULL"
+                            ",amount_without_fee_frac INT4 NOT NULL"
+                            ",coin_pub BYTEA CHECK (LENGTH(coin_pub)=32)"
+                            ",merchant_pub BYTEA CHECK 
(LENGTH(merchant_pub)=32)"
+                            ",exchange_sig BYTEA CHECK 
(LENGTH(exchange_sig)=64)"
+                            ",exchange_pub BYTEA CHECK 
(LENGTH(exchange_pub)=32)"
+                            ",master_sig BYTEA CHECK (LENGTH(master_sig)=64)"
+                            ",PRIMARY KEY (h_contract_terms, h_wire, coin_pub, 
"
+                            "  merchant_pub, exchange_sig, exchange_pub, 
master_sig)"
+                            ")"),
     /* Table with historic business ledger; basically, when the exchange
        operator decides to use operating costs for anything but wire
        transfers to merchants, it goes in here.  This happens when the
@@ -426,25 +427,23 @@ postgres_create_tables (void *cls)
        (So this table for now just exists as a reminder of what we'll
        need in the long term.) */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_historic_ledger"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",purpose VARCHAR NOT NULL"
-                           ",timestamp INT8 NOT NULL"
-                           ",balance_val INT8 NOT NULL"
-                           ",balance_frac INT4 NOT NULL"
-                           ",balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") 
NOT NULL"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",purpose VARCHAR NOT NULL"
+                            ",timestamp INT8 NOT NULL"
+                            ",balance_val INT8 NOT NULL"
+                            ",balance_frac INT4 NOT NULL"
+                            ")"),
     GNUNET_PQ_make_try_execute ("CREATE INDEX 
history_ledger_by_master_pub_and_time "
-                               "ON 
auditor_historic_ledger(master_pub,timestamp)"),
+                                "ON 
auditor_historic_ledger(master_pub,timestamp)"),
     /* Table with the sum of the ledger, auditor_historic_revenue and
        the auditor_reserve_balance.  This is the
        final amount that the exchange should have in its bank account
        right now. */
     GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS 
auditor_predicted_result"
-                           "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
-                           ",balance_val INT8 NOT NULL"
-                           ",balance_frac INT4 NOT NULL"
-                           ",balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") 
NOT NULL"
-                           ")"),
+                            "(master_pub BYTEA CONSTRAINT master_pub_ref 
REFERENCES auditor_exchanges(master_pub) ON DELETE CASCADE"
+                            ",balance_val INT8 NOT NULL"
+                            ",balance_frac INT4 NOT NULL"
+                            ")"),
     GNUNET_PQ_EXECUTE_STATEMENT_END
   };
   PGconn *conn;
@@ -507,533 +506,470 @@ postgres_prepare (PGconn *db_conn)
                             6),
     /* Used in #postgres_insert_denomination_info() */
     GNUNET_PQ_make_prepare ("auditor_denominations_insert",
-                           "INSERT INTO auditor_denominations "
-                           "(denom_pub_hash"
-                           ",master_pub"
-                           ",valid_from"
-                           ",expire_withdraw"
-                           ",expire_deposit"
-                           ",expire_legal"
-                           ",coin_val"
-                           ",coin_frac"
-                           ",coin_curr"
-                           ",fee_withdraw_val"
-                           ",fee_withdraw_frac"
-                           ",fee_withdraw_curr"
-                           ",fee_deposit_val"
-                           ",fee_deposit_frac"
-                           ",fee_deposit_curr"
-                           ",fee_refresh_val"
-                           ",fee_refresh_frac"
-                           ",fee_refresh_curr"
-                           ",fee_refund_val"
-                           ",fee_refund_frac"
-                           ",fee_refund_curr"
-                           ") VALUES 
($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21);",
-                           21),
+                            "INSERT INTO auditor_denominations "
+                            "(denom_pub_hash"
+                            ",master_pub"
+                            ",valid_from"
+                            ",expire_withdraw"
+                            ",expire_deposit"
+                            ",expire_legal"
+                            ",coin_val"
+                            ",coin_frac"
+                            ",fee_withdraw_val"
+                            ",fee_withdraw_frac"
+                            ",fee_deposit_val"
+                            ",fee_deposit_frac"
+                            ",fee_refresh_val"
+                            ",fee_refresh_frac"
+                            ",fee_refund_val"
+                            ",fee_refund_frac"
+                            ") VALUES 
($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16);",
+                            16),
     /* Used in #postgres_insert_denomination_info() */
     GNUNET_PQ_make_prepare ("auditor_denominations_select",
-                           "SELECT"
-                           " denom_pub_hash"
-                           ",valid_from"
-                           ",expire_withdraw"
-                           ",expire_deposit"
-                           ",expire_legal"
-                           ",coin_val"
-                           ",coin_frac"
-                           ",coin_curr"
-                           ",fee_withdraw_val"
-                           ",fee_withdraw_frac"
-                           ",fee_withdraw_curr"
-                           ",fee_deposit_val"
-                           ",fee_deposit_frac"
-                           ",fee_deposit_curr"
-                           ",fee_refresh_val"
-                           ",fee_refresh_frac"
-                           ",fee_refresh_curr"
-                           ",fee_refund_val"
-                           ",fee_refund_frac"
-                           ",fee_refund_curr"
-                           " FROM auditor_denominations"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " denom_pub_hash"
+                            ",valid_from"
+                            ",expire_withdraw"
+                            ",expire_deposit"
+                            ",expire_legal"
+                            ",coin_val"
+                            ",coin_frac"
+                            ",fee_withdraw_val"
+                            ",fee_withdraw_frac"
+                            ",fee_deposit_val"
+                            ",fee_deposit_frac"
+                            ",fee_refresh_val"
+                            ",fee_refresh_frac"
+                            ",fee_refund_val"
+                            ",fee_refund_frac"
+                            " FROM auditor_denominations"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_deposit_confirmation() */
     GNUNET_PQ_make_prepare ("auditor_deposit_confirmation_insert",
-                           "INSERT INTO deposit_confirmations "
-                           "(master_pub"
-                           ",h_contract_terms"
-                           ",h_wire"
-                           ",timestamp"
-                           ",refund_deadline"
-                           ",amount_without_fee_val"
-                           ",amount_without_fee_frac"
-                           ",amount_without_fee_curr"
-                           ",coin_pub"
-                           ",merchant_pub"
-                           ",exchange_sig"
-                           ",exchange_pub"
-                           ",master_sig" /* master_sig could be normalized... 
*/
-                           ") VALUES 
($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13);",
-                           13),
+                            "INSERT INTO deposit_confirmations "
+                            "(master_pub"
+                            ",h_contract_terms"
+                            ",h_wire"
+                            ",timestamp"
+                            ",refund_deadline"
+                            ",amount_without_fee_val"
+                            ",amount_without_fee_frac"
+                            ",coin_pub"
+                            ",merchant_pub"
+                            ",exchange_sig"
+                            ",exchange_pub"
+                            ",master_sig" /* master_sig could be normalized... 
*/
+                            ") VALUES 
($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);",
+                            12),
     /* Used in #postgres_get_deposit_confirmations() */
     GNUNET_PQ_make_prepare ("auditor_deposit_confirmation_select",
-                           "SELECT"
-                " serial_id"
-                           ",h_contract_terms"
-                           ",h_wire"
-                           ",timestamp"
-                           ",refund_deadline"
-                           ",amount_without_fee_val"
-                           ",amount_without_fee_frac"
-                           ",amount_without_fee_curr"
-                           ",coin_pub"
-                           ",merchant_pub"
-                           ",exchange_sig"
-                           ",exchange_pub"
-                           ",master_sig" /* master_sig could be normalized... 
*/
-                " FROM deposit_confirmations"
-                " WHERE master_pub=$1"
-                " AND serial_id>$2",
-                           2),
+                            "SELECT"
+                            " serial_id"
+                            ",h_contract_terms"
+                            ",h_wire"
+                            ",timestamp"
+                            ",refund_deadline"
+                            ",amount_without_fee_val"
+                            ",amount_without_fee_frac"
+                            ",coin_pub"
+                            ",merchant_pub"
+                            ",exchange_sig"
+                            ",exchange_pub"
+                            ",master_sig" /* master_sig could be normalized... 
*/
+                            " FROM deposit_confirmations"
+                            " WHERE master_pub=$1"
+                            " AND serial_id>$2",
+                            2),
     /* Used in #postgres_update_auditor_progress_reserve() */
     GNUNET_PQ_make_prepare ("auditor_progress_update_reserve",
-                           "UPDATE auditor_progress_reserve SET "
-                           " last_reserve_in_serial_id=$1"
-                           ",last_reserve_out_serial_id=$2"
-                           ",last_reserve_payback_serial_id=$3"
-                           ",last_reserve_close_serial_id=$4"
-                           " WHERE master_pub=$5",
-                           5),
+                            "UPDATE auditor_progress_reserve SET "
+                            " last_reserve_in_serial_id=$1"
+                            ",last_reserve_out_serial_id=$2"
+                            ",last_reserve_payback_serial_id=$3"
+                            ",last_reserve_close_serial_id=$4"
+                            " WHERE master_pub=$5",
+                            5),
     /* Used in #postgres_get_auditor_progress_reserve() */
     GNUNET_PQ_make_prepare ("auditor_progress_select_reserve",
-                           "SELECT"
-                           " last_reserve_in_serial_id"
-                           ",last_reserve_out_serial_id"
-                           ",last_reserve_payback_serial_id"
-                           ",last_reserve_close_serial_id"
-                           " FROM auditor_progress_reserve"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " last_reserve_in_serial_id"
+                            ",last_reserve_out_serial_id"
+                            ",last_reserve_payback_serial_id"
+                            ",last_reserve_close_serial_id"
+                            " FROM auditor_progress_reserve"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_auditor_progress_reserve() */
     GNUNET_PQ_make_prepare ("auditor_progress_insert_reserve",
-                           "INSERT INTO auditor_progress_reserve "
-                           "(master_pub"
-                           ",last_reserve_in_serial_id"
-                           ",last_reserve_out_serial_id"
-                           ",last_reserve_payback_serial_id"
-                           ",last_reserve_close_serial_id"
-                           ") VALUES ($1,$2,$3,$4,$5);",
-                           5),
+                            "INSERT INTO auditor_progress_reserve "
+                            "(master_pub"
+                            ",last_reserve_in_serial_id"
+                            ",last_reserve_out_serial_id"
+                            ",last_reserve_payback_serial_id"
+                            ",last_reserve_close_serial_id"
+                            ") VALUES ($1,$2,$3,$4,$5);",
+                            5),
     /* Used in #postgres_update_auditor_progress_aggregation() */
     GNUNET_PQ_make_prepare ("auditor_progress_update_aggregation",
-                           "UPDATE auditor_progress_aggregation SET "
-                           " last_wire_out_serial_id=$1"
-                           " WHERE master_pub=$2",
-                           2),
+                            "UPDATE auditor_progress_aggregation SET "
+                            " last_wire_out_serial_id=$1"
+                            " WHERE master_pub=$2",
+                            2),
     /* Used in #postgres_get_auditor_progress_aggregation() */
     GNUNET_PQ_make_prepare ("auditor_progress_select_aggregation",
-                           "SELECT"
-                           " last_wire_out_serial_id"
-                           " FROM auditor_progress_aggregation"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " last_wire_out_serial_id"
+                            " FROM auditor_progress_aggregation"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_auditor_progress_aggregation() */
     GNUNET_PQ_make_prepare ("auditor_progress_insert_aggregation",
-                           "INSERT INTO auditor_progress_aggregation "
-                           "(master_pub"
-                           ",last_wire_out_serial_id"
-                           ") VALUES ($1,$2);",
-                           2),
+                            "INSERT INTO auditor_progress_aggregation "
+                            "(master_pub"
+                            ",last_wire_out_serial_id"
+                            ") VALUES ($1,$2);",
+                            2),
     /* Used in #postgres_update_auditor_progress_deposit_confirmation() */
     GNUNET_PQ_make_prepare ("auditor_progress_update_deposit_confirmation",
-                           "UPDATE auditor_progress_deposit_confirmation SET "
-                           " last_deposit_confirmation_serial_id=$1"
-                           " WHERE master_pub=$2",
-                           2),
+                            "UPDATE auditor_progress_deposit_confirmation SET "
+                            " last_deposit_confirmation_serial_id=$1"
+                            " WHERE master_pub=$2",
+                            2),
     /* Used in #postgres_get_auditor_progress_deposit_confirmation() */
     GNUNET_PQ_make_prepare ("auditor_progress_select_deposit_confirmation",
-                           "SELECT"
-                           " last_deposit_confirmation_serial_id"
-                           " FROM auditor_progress_deposit_confirmation"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " last_deposit_confirmation_serial_id"
+                            " FROM auditor_progress_deposit_confirmation"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_auditor_progress_deposit_confirmation() */
     GNUNET_PQ_make_prepare ("auditor_progress_insert_deposit_confirmation",
-                           "INSERT INTO auditor_progress_deposit_confirmation "
-                           "(master_pub"
-                           ",last_deposit_confirmation_serial_id"
-                           ") VALUES ($1,$2);",
-                           2),
+                            "INSERT INTO auditor_progress_deposit_confirmation 
"
+                            "(master_pub"
+                            ",last_deposit_confirmation_serial_id"
+                            ") VALUES ($1,$2);",
+                            2),
     /* Used in #postgres_update_auditor_progress_coin() */
     GNUNET_PQ_make_prepare ("auditor_progress_update_coin",
-                           "UPDATE auditor_progress_coin SET "
-                           " last_withdraw_serial_id=$1"
-                           ",last_deposit_serial_id=$2"
-                           ",last_melt_serial_id=$3"
-                           ",last_refund_serial_id=$4"
-                           ",last_payback_serial_id=$5"
-                           ",last_payback_refresh_serial_id=$6"
-                           " WHERE master_pub=$7",
-                           7),
+                            "UPDATE auditor_progress_coin SET "
+                            " last_withdraw_serial_id=$1"
+                            ",last_deposit_serial_id=$2"
+                            ",last_melt_serial_id=$3"
+                            ",last_refund_serial_id=$4"
+                            ",last_payback_serial_id=$5"
+                            ",last_payback_refresh_serial_id=$6"
+                            " WHERE master_pub=$7",
+                            7),
     /* Used in #postgres_get_auditor_progress_coin() */
     GNUNET_PQ_make_prepare ("auditor_progress_select_coin",
-                           "SELECT"
-                           " last_withdraw_serial_id"
-                           ",last_deposit_serial_id"
-                           ",last_melt_serial_id"
-                           ",last_refund_serial_id"
-                           ",last_payback_serial_id"
-                           ",last_payback_refresh_serial_id"
-                           " FROM auditor_progress_coin"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " last_withdraw_serial_id"
+                            ",last_deposit_serial_id"
+                            ",last_melt_serial_id"
+                            ",last_refund_serial_id"
+                            ",last_payback_serial_id"
+                            ",last_payback_refresh_serial_id"
+                            " FROM auditor_progress_coin"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_auditor_progress() */
     GNUNET_PQ_make_prepare ("auditor_progress_insert_coin",
-                           "INSERT INTO auditor_progress_coin "
-                           "(master_pub"
-                           ",last_withdraw_serial_id"
-                           ",last_deposit_serial_id"
-                           ",last_melt_serial_id"
-                           ",last_refund_serial_id"
-                           ",last_payback_serial_id"
-                           ",last_payback_refresh_serial_id"
-                           ") VALUES ($1,$2,$3,$4,$5,$6,$7);",
-                           7),
+                            "INSERT INTO auditor_progress_coin "
+                            "(master_pub"
+                            ",last_withdraw_serial_id"
+                            ",last_deposit_serial_id"
+                            ",last_melt_serial_id"
+                            ",last_refund_serial_id"
+                            ",last_payback_serial_id"
+                            ",last_payback_refresh_serial_id"
+                            ") VALUES ($1,$2,$3,$4,$5,$6,$7);",
+                            7),
     /* Used in #postgres_insert_wire_auditor_progress() */
     GNUNET_PQ_make_prepare ("wire_auditor_progress_insert",
-                           "INSERT INTO wire_auditor_progress "
-                           "(master_pub"
-                 ",account_name"
-                           ",last_wire_reserve_in_serial_id"
-                           ",last_wire_wire_out_serial_id"
-                ",last_timestamp"
-                ",wire_in_off"
-                ",wire_out_off"
-                           ") VALUES ($1,$2,$3,$4,$5,$6,$7);",
-                           7),
+                            "INSERT INTO wire_auditor_progress "
+                            "(master_pub"
+                            ",account_name"
+                            ",last_wire_reserve_in_serial_id"
+                            ",last_wire_wire_out_serial_id"
+                            ",last_timestamp"
+                            ",wire_in_off"
+                            ",wire_out_off"
+                            ") VALUES ($1,$2,$3,$4,$5,$6,$7);",
+                            7),
     /* Used in #postgres_update_wire_auditor_progress() */
     GNUNET_PQ_make_prepare ("wire_auditor_progress_update",
-                           "UPDATE wire_auditor_progress SET "
-                           " last_wire_reserve_in_serial_id=$1"
-                           ",last_wire_wire_out_serial_id=$2"
-                ",last_timestamp=$3"
-                ",wire_in_off=$4"
-                ",wire_out_off=$5"
-                           " WHERE master_pub=$6 AND account_name=$7",
-                           7),
+                            "UPDATE wire_auditor_progress SET "
+                            " last_wire_reserve_in_serial_id=$1"
+                            ",last_wire_wire_out_serial_id=$2"
+                            ",last_timestamp=$3"
+                            ",wire_in_off=$4"
+                            ",wire_out_off=$5"
+                            " WHERE master_pub=$6 AND account_name=$7",
+                            7),
     /* Used in #postgres_get_wire_auditor_progress() */
     GNUNET_PQ_make_prepare ("wire_auditor_progress_select",
-                           "SELECT"
-                           " last_wire_reserve_in_serial_id"
-                           ",last_wire_wire_out_serial_id"
-                ",last_timestamp"
-                ",wire_in_off"
-                ",wire_out_off"
-                           " FROM wire_auditor_progress"
-                           " WHERE master_pub=$1 AND account_name=$2;",
-                           2),
+                            "SELECT"
+                            " last_wire_reserve_in_serial_id"
+                            ",last_wire_wire_out_serial_id"
+                            ",last_timestamp"
+                            ",wire_in_off"
+                            ",wire_out_off"
+                            " FROM wire_auditor_progress"
+                            " WHERE master_pub=$1 AND account_name=$2;",
+                            2),
     /* Used in #postgres_insert_reserve_info() */
     GNUNET_PQ_make_prepare ("auditor_reserves_insert",
-                           "INSERT INTO auditor_reserves "
-                           "(reserve_pub"
-                           ",master_pub"
-                           ",reserve_balance_val"
-                           ",reserve_balance_frac"
-                           ",reserve_balance_curr"
-                           ",withdraw_fee_balance_val"
-                           ",withdraw_fee_balance_frac"
-                           ",withdraw_fee_balance_curr"
-                           ",expiration_date"
-                           ") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9);",
-                           9),
+                            "INSERT INTO auditor_reserves "
+                            "(reserve_pub"
+                            ",master_pub"
+                            ",reserve_balance_val"
+                            ",reserve_balance_frac"
+                            ",withdraw_fee_balance_val"
+                            ",withdraw_fee_balance_frac"
+                            ",expiration_date"
+                            ") VALUES ($1,$2,$3,$4,$5,$6,$7);",
+                            7),
     /* Used in #postgres_update_reserve_info() */
     GNUNET_PQ_make_prepare ("auditor_reserves_update",
-                           "UPDATE auditor_reserves SET"
-                           " reserve_balance_val=$1"
-                           ",reserve_balance_frac=$2"
-                           ",reserve_balance_curr=$3"
-                           ",withdraw_fee_balance_val=$4"
-                           ",withdraw_fee_balance_frac=$5"
-                           ",withdraw_fee_balance_curr=$6"
-                           ",expiration_date=$7"
-                           " WHERE reserve_pub=$8 AND master_pub=$9;",
-                           9),
+                            "UPDATE auditor_reserves SET"
+                            " reserve_balance_val=$1"
+                            ",reserve_balance_frac=$2"
+                            ",withdraw_fee_balance_val=$3"
+                            ",withdraw_fee_balance_frac=$4"
+                            ",expiration_date=$5"
+                            " WHERE reserve_pub=$6 AND master_pub=$7;",
+                            7),
     /* Used in #postgres_get_reserve_info() */
     GNUNET_PQ_make_prepare ("auditor_reserves_select",
-                           "SELECT"
-                           " reserve_balance_val"
-                           ",reserve_balance_frac"
-                           ",reserve_balance_curr"
-                           ",withdraw_fee_balance_val"
-                           ",withdraw_fee_balance_frac"
-                           ",withdraw_fee_balance_curr"
-                           ",expiration_date"
-                           ",auditor_reserves_rowid"
-                           " FROM auditor_reserves"
-                           " WHERE reserve_pub=$1 AND master_pub=$2;",
-                           2),
+                            "SELECT"
+                            " reserve_balance_val"
+                            ",reserve_balance_frac"
+                            ",withdraw_fee_balance_val"
+                            ",withdraw_fee_balance_frac"
+                            ",expiration_date"
+                            ",auditor_reserves_rowid"
+                            " FROM auditor_reserves"
+                            " WHERE reserve_pub=$1 AND master_pub=$2;",
+                            2),
     /* Used in #postgres_del_reserve_info() */
     GNUNET_PQ_make_prepare ("auditor_reserves_delete",
-                           "DELETE"
-                           " FROM auditor_reserves"
-                           " WHERE reserve_pub=$1 AND master_pub=$2;",
-                           2),
+                            "DELETE"
+                            " FROM auditor_reserves"
+                            " WHERE reserve_pub=$1 AND master_pub=$2;",
+                            2),
     /* Used in #postgres_insert_reserve_summary() */
     GNUNET_PQ_make_prepare ("auditor_reserve_balance_insert",
-                           "INSERT INTO auditor_reserve_balance"
-                           "(master_pub"
-                           ",reserve_balance_val"
-                           ",reserve_balance_frac"
-                           ",reserve_balance_curr"
-                           ",withdraw_fee_balance_val"
-                           ",withdraw_fee_balance_frac"
-                           ",withdraw_fee_balance_curr"
-                           ") VALUES ($1,$2,$3,$4,$5,$6,$7)",
-                           7),
+                            "INSERT INTO auditor_reserve_balance"
+                            "(master_pub"
+                            ",reserve_balance_val"
+                            ",reserve_balance_frac"
+                            ",withdraw_fee_balance_val"
+                            ",withdraw_fee_balance_frac"
+                            ") VALUES ($1,$2,$3,$4,$5)",
+                            5),
     /* Used in #postgres_update_reserve_summary() */
     GNUNET_PQ_make_prepare ("auditor_reserve_balance_update",
-                           "UPDATE auditor_reserve_balance SET"
-                           " reserve_balance_val=$1"
-                           ",reserve_balance_frac=$2"
-                           ",reserve_balance_curr=$3"
-                           ",withdraw_fee_balance_val=$4"
-                           ",withdraw_fee_balance_frac=$5"
-                           ",withdraw_fee_balance_curr=$6"
-                           " WHERE master_pub=$7;",
-                           7),
+                            "UPDATE auditor_reserve_balance SET"
+                            " reserve_balance_val=$1"
+                            ",reserve_balance_frac=$2"
+                            ",withdraw_fee_balance_val=$3"
+                            ",withdraw_fee_balance_frac=$4"
+                            " WHERE master_pub=$5;",
+                            5),
     /* Used in #postgres_get_reserve_summary() */
     GNUNET_PQ_make_prepare ("auditor_reserve_balance_select",
-                           "SELECT"
-                           " reserve_balance_val"
-                           ",reserve_balance_frac"
-                           ",reserve_balance_curr"
-                           ",withdraw_fee_balance_val"
-                           ",withdraw_fee_balance_frac"
-                           ",withdraw_fee_balance_curr"
-                           " FROM auditor_reserve_balance"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " reserve_balance_val"
+                            ",reserve_balance_frac"
+                            ",withdraw_fee_balance_val"
+                            ",withdraw_fee_balance_frac"
+                            " FROM auditor_reserve_balance"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_wire_fee_summary() */
     GNUNET_PQ_make_prepare ("auditor_wire_fee_balance_insert",
-                           "INSERT INTO auditor_wire_fee_balance"
-                           "(master_pub"
-                           ",wire_fee_balance_val"
-                           ",wire_fee_balance_frac"
-                           ",wire_fee_balance_curr"
-                           ") VALUES ($1,$2,$3,$4)",
-                           4),
+                            "INSERT INTO auditor_wire_fee_balance"
+                            "(master_pub"
+                            ",wire_fee_balance_val"
+                            ",wire_fee_balance_frac"
+                            ") VALUES ($1,$2,$3)",
+                            3),
     /* Used in #postgres_update_wire_fee_summary() */
     GNUNET_PQ_make_prepare ("auditor_wire_fee_balance_update",
-                           "UPDATE auditor_wire_fee_balance SET"
-                           " wire_fee_balance_val=$1"
-                           ",wire_fee_balance_frac=$2"
-                           ",wire_fee_balance_curr=$3"
-                           " WHERE master_pub=$4;",
-                           4),
+                            "UPDATE auditor_wire_fee_balance SET"
+                            " wire_fee_balance_val=$1"
+                            ",wire_fee_balance_frac=$2"
+                            " WHERE master_pub=$3;",
+                            3),
     /* Used in #postgres_get_wire_fee_summary() */
     GNUNET_PQ_make_prepare ("auditor_wire_fee_balance_select",
-                           "SELECT"
-                           " wire_fee_balance_val"
-                           ",wire_fee_balance_frac"
-                           ",wire_fee_balance_curr"
-                           " FROM auditor_wire_fee_balance"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " wire_fee_balance_val"
+                            ",wire_fee_balance_frac"
+                            " FROM auditor_wire_fee_balance"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_denomination_balance() */
     GNUNET_PQ_make_prepare ("auditor_denomination_pending_insert",
-                           "INSERT INTO auditor_denomination_pending "
-                           "(denom_pub_hash"
-                           ",denom_balance_val"
-                           ",denom_balance_frac"
-                           ",denom_balance_curr"
-                ",num_issued"
-                           ",denom_risk_val"
-                           ",denom_risk_frac"
-                           ",denom_risk_curr"
-                ",payback_loss_val"
-                           ",payback_loss_frac"
-                           ",payback_loss_curr"
-                           ") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11);",
-                           11),
+                            "INSERT INTO auditor_denomination_pending "
+                            "(denom_pub_hash"
+                            ",denom_balance_val"
+                            ",denom_balance_frac"
+                            ",num_issued"
+                            ",denom_risk_val"
+                            ",denom_risk_frac"
+                            ",payback_loss_val"
+                            ",payback_loss_frac"
+                            ") VALUES ($1,$2,$3,$4,$5,$6,$7,$8);",
+                            8),
     /* Used in #postgres_update_denomination_balance() */
     GNUNET_PQ_make_prepare ("auditor_denomination_pending_update",
-                           "UPDATE auditor_denomination_pending SET"
-                           " denom_balance_val=$1"
-                           ",denom_balance_frac=$2"
-                           ",denom_balance_curr=$3"
-                ",num_issued=$4"
-                           ",denom_risk_val=$5"
-                           ",denom_risk_frac=$6"
-                           ",denom_risk_curr=$7"
-                ",payback_loss_val=$8"
-                           ",payback_loss_frac=$9"
-                           ",payback_loss_curr=$10"
-                           " WHERE denom_pub_hash=$11",
-                           11),
+                            "UPDATE auditor_denomination_pending SET"
+                            " denom_balance_val=$1"
+                            ",denom_balance_frac=$2"
+                            ",num_issued=$3"
+                            ",denom_risk_val=$4"
+                            ",denom_risk_frac=$5"
+                            ",payback_loss_val=$6"
+                            ",payback_loss_frac=$7"
+                            " WHERE denom_pub_hash=$8",
+                            8),
     /* Used in #postgres_get_denomination_balance() */
     GNUNET_PQ_make_prepare ("auditor_denomination_pending_select",
-                           "SELECT"
-                           " denom_balance_val"
-                           ",denom_balance_frac"
-                           ",denom_balance_curr"
-                ",num_issued"
-                           ",denom_risk_val"
-                           ",denom_risk_frac"
-                           ",denom_risk_curr"
-                           ",payback_loss_val"
-                           ",payback_loss_frac"
-                           ",payback_loss_curr"
-                           " FROM auditor_denomination_pending"
-                           " WHERE denom_pub_hash=$1",
-                           1),
+                            "SELECT"
+                            " denom_balance_val"
+                            ",denom_balance_frac"
+                            ",num_issued"
+                            ",denom_risk_val"
+                            ",denom_risk_frac"
+                            ",payback_loss_val"
+                            ",payback_loss_frac"
+                            " FROM auditor_denomination_pending"
+                            " WHERE denom_pub_hash=$1",
+                            1),
     /* Used in #postgres_insert_balance_summary() */
     GNUNET_PQ_make_prepare ("auditor_balance_summary_insert",
-                           "INSERT INTO auditor_balance_summary "
-                           "(master_pub"
-                           ",denom_balance_val"
-                           ",denom_balance_frac"
-                           ",denom_balance_curr"
-                           ",deposit_fee_balance_val"
-                           ",deposit_fee_balance_frac"
-                           ",deposit_fee_balance_curr"
-                           ",melt_fee_balance_val"
-                           ",melt_fee_balance_frac"
-                           ",melt_fee_balance_curr"
-                           ",refund_fee_balance_val"
-                           ",refund_fee_balance_frac"
-                           ",refund_fee_balance_curr"
-                           ",risk_val"
-                ",risk_frac"
-                           ",risk_curr"
-                           ",loss_val"
-                           ",loss_frac"
-                           ",loss_curr"
-                           ") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,"
-                "          $11,$12,$13,$14,$15,$16,$17,$18,$19);",
-                           19),
+                            "INSERT INTO auditor_balance_summary "
+                            "(master_pub"
+                            ",denom_balance_val"
+                            ",denom_balance_frac"
+                            ",deposit_fee_balance_val"
+                            ",deposit_fee_balance_frac"
+                            ",melt_fee_balance_val"
+                            ",melt_fee_balance_frac"
+                            ",refund_fee_balance_val"
+                            ",refund_fee_balance_frac"
+                            ",risk_val"
+                            ",risk_frac"
+                            ",loss_val"
+                            ",loss_frac"
+                            ") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,"
+                            "          $11,$12,$13);",
+                            13),
     /* Used in #postgres_update_balance_summary() */
     GNUNET_PQ_make_prepare ("auditor_balance_summary_update",
-                           "UPDATE auditor_balance_summary SET"
-                           " denom_balance_val=$1"
-                           ",denom_balance_frac=$2"
-                           ",denom_balance_curr=$3"
-                           ",deposit_fee_balance_val=$4"
-                           ",deposit_fee_balance_frac=$5"
-                           ",deposit_fee_balance_curr=$6"
-                           ",melt_fee_balance_val=$7"
-                           ",melt_fee_balance_frac=$8"
-                           ",melt_fee_balance_curr=$9"
-                           ",refund_fee_balance_val=$10"
-                           ",refund_fee_balance_frac=$11"
-                           ",refund_fee_balance_curr=$12"
-                           ",risk_val=$13"
-                           ",risk_frac=$14"
-                           ",risk_curr=$15"
-                           ",loss_val=$16"
-                           ",loss_frac=$17"
-                           ",loss_curr=$18"
-                           " WHERE master_pub=$19;",
-                           19),
+                            "UPDATE auditor_balance_summary SET"
+                            " denom_balance_val=$1"
+                            ",denom_balance_frac=$2"
+                            ",deposit_fee_balance_val=$3"
+                            ",deposit_fee_balance_frac=$4"
+                            ",melt_fee_balance_val=$5"
+                            ",melt_fee_balance_frac=$6"
+                            ",refund_fee_balance_val=$7"
+                            ",refund_fee_balance_frac=$8"
+                            ",risk_val=$9"
+                            ",risk_frac=$10"
+                            ",loss_val=$11"
+                            ",loss_frac=$12"
+                            " WHERE master_pub=$13;",
+                            13),
     /* Used in #postgres_get_balance_summary() */
     GNUNET_PQ_make_prepare ("auditor_balance_summary_select",
-                           "SELECT"
-                           " denom_balance_val"
-                           ",denom_balance_frac"
-                           ",denom_balance_curr"
-                           ",deposit_fee_balance_val"
-                           ",deposit_fee_balance_frac"
-                           ",deposit_fee_balance_curr"
-                           ",melt_fee_balance_val"
-                           ",melt_fee_balance_frac"
-                           ",melt_fee_balance_curr"
-                           ",refund_fee_balance_val"
-                           ",refund_fee_balance_frac"
-                           ",refund_fee_balance_curr"
-                           ",risk_val"
-                           ",risk_frac"
-                           ",risk_curr"
-                           ",loss_val"
-                           ",loss_frac"
-                           ",loss_curr"
-                           " FROM auditor_balance_summary"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " denom_balance_val"
+                            ",denom_balance_frac"
+                            ",deposit_fee_balance_val"
+                            ",deposit_fee_balance_frac"
+                            ",melt_fee_balance_val"
+                            ",melt_fee_balance_frac"
+                            ",refund_fee_balance_val"
+                            ",refund_fee_balance_frac"
+                            ",risk_val"
+                            ",risk_frac"
+                            ",loss_val"
+                            ",loss_frac"
+                            " FROM auditor_balance_summary"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_historic_denom_revenue() */
     GNUNET_PQ_make_prepare ("auditor_historic_denomination_revenue_insert",
-                           "INSERT INTO auditor_historic_denomination_revenue"
-                           "(master_pub"
-                           ",denom_pub_hash"
-                           ",revenue_timestamp"
-                           ",revenue_balance_val"
-                           ",revenue_balance_frac"
-                           ",revenue_balance_curr"
-                           ",loss_balance_val"
-                           ",loss_balance_frac"
-                           ",loss_balance_curr"
-                           ") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9);",
-                9),
+                            "INSERT INTO auditor_historic_denomination_revenue"
+                            "(master_pub"
+                            ",denom_pub_hash"
+                            ",revenue_timestamp"
+                            ",revenue_balance_val"
+                            ",revenue_balance_frac"
+                            ",loss_balance_val"
+                            ",loss_balance_frac"
+                            ") VALUES ($1,$2,$3,$4,$5,$6,$7);",
+                            7),
     /* Used in #postgres_select_historic_denom_revenue() */
     GNUNET_PQ_make_prepare ("auditor_historic_denomination_revenue_select",
-                           "SELECT"
-                           " denom_pub_hash"
-                           ",revenue_timestamp"
-                           ",revenue_balance_val"
-                           ",revenue_balance_frac"
-                           ",revenue_balance_curr"
-                           ",loss_balance_val"
-                           ",loss_balance_frac"
-                           ",loss_balance_curr"
-                           " FROM auditor_historic_denomination_revenue"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " denom_pub_hash"
+                            ",revenue_timestamp"
+                            ",revenue_balance_val"
+                            ",revenue_balance_frac"
+                            ",loss_balance_val"
+                            ",loss_balance_frac"
+                            " FROM auditor_historic_denomination_revenue"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_historic_reserve_revenue() */
     GNUNET_PQ_make_prepare ("auditor_historic_reserve_summary_insert",
-                           "INSERT INTO auditor_historic_reserve_summary"
-                           "(master_pub"
-                           ",start_date"
-                           ",end_date"
-                           ",reserve_profits_val"
-                           ",reserve_profits_frac"
-                           ",reserve_profits_curr"
-                           ") VALUES ($1,$2,$3,$4,$5,$6);",
-                           6),
+                            "INSERT INTO auditor_historic_reserve_summary"
+                            "(master_pub"
+                            ",start_date"
+                            ",end_date"
+                            ",reserve_profits_val"
+                            ",reserve_profits_frac"
+                            ") VALUES ($1,$2,$3,$4,$5);",
+                            5),
     /* Used in #postgres_select_historic_reserve_revenue() */
     GNUNET_PQ_make_prepare ("auditor_historic_reserve_summary_select",
-                           "SELECT"
-                           " start_date"
-                           ",end_date"
-                           ",reserve_profits_val"
-                           ",reserve_profits_frac"
-                           ",reserve_profits_curr"
-                           " FROM auditor_historic_reserve_summary"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " start_date"
+                            ",end_date"
+                            ",reserve_profits_val"
+                            ",reserve_profits_frac"
+                            " FROM auditor_historic_reserve_summary"
+                            " WHERE master_pub=$1;",
+                            1),
     /* Used in #postgres_insert_predicted_result() */
     GNUNET_PQ_make_prepare ("auditor_predicted_result_insert",
-                           "INSERT INTO auditor_predicted_result"
-                           "(master_pub"
-                           ",balance_val"
-                           ",balance_frac"
-                           ",balance_curr"
-                           ") VALUES ($1,$2,$3,$4);",
-                           4),
+                            "INSERT INTO auditor_predicted_result"
+                            "(master_pub"
+                            ",balance_val"
+                            ",balance_frac"
+                            ") VALUES ($1,$2,$3);",
+                            3),
     /* Used in #postgres_update_predicted_result() */
     GNUNET_PQ_make_prepare ("auditor_predicted_result_update",
-                           "UPDATE auditor_predicted_result SET"
-                           " balance_val=$1"
-                           ",balance_frac=$2"
-                           ",balance_curr=$3"
-                           " WHERE master_pub=$4;",
-                           4),
+                            "UPDATE auditor_predicted_result SET"
+                            " balance_val=$1"
+                            ",balance_frac=$2"
+                            " WHERE master_pub=$3;",
+                            3),
     /* Used in #postgres_get_predicted_balance() */
     GNUNET_PQ_make_prepare ("auditor_predicted_result_select",
-                           "SELECT"
-                           " balance_val"
-                           ",balance_frac"
-                           ",balance_curr"
-                           " FROM auditor_predicted_result"
-                           " WHERE master_pub=$1;",
-                           1),
+                            "SELECT"
+                            " balance_val"
+                            ",balance_frac"
+                            " FROM auditor_predicted_result"
+                            " WHERE master_pub=$1;",
+                            1),
     GNUNET_PQ_PREPARED_STATEMENT_END
   };
 
@@ -1282,8 +1218,8 @@ postgres_delete_exchange (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_delete_exchange",
-                                            params);
+                                             "auditor_delete_exchange",
+                                             params);
 }
 
 
@@ -1338,8 +1274,8 @@ exchange_info_cb (void *cls,
 
     if (GNUNET_OK !=
         GNUNET_PQ_extract_result (result,
-                                 rs,
-                                 i))
+                                  rs,
+                                  i))
     {
       GNUNET_break (0);
       eic->qs = GNUNET_DB_STATUS_HARD_ERROR;
@@ -1379,10 +1315,10 @@ postgres_list_exchanges (void *cls,
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "auditor_list_exchanges",
-                                            params,
-                                            &exchange_info_cb,
-                                            &eic);
+                                             "auditor_list_exchanges",
+                                             params,
+                                             &exchange_info_cb,
+                                             &eic);
   if (qs > 0)
     return eic.qs;
   GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR != qs);
@@ -1414,8 +1350,8 @@ postgres_insert_exchange_signkey (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_insert_exchange_signkey",
-                                            params);
+                                             "auditor_insert_exchange_signkey",
+                                             params);
 }
 
 
@@ -1448,8 +1384,8 @@ postgres_insert_deposit_confirmation (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            
"auditor_deposit_confirmation_insert",
-                                            params);
+                                             
"auditor_deposit_confirmation_insert",
+                                             params);
 }
 
 
@@ -1475,6 +1411,11 @@ struct DepositConfirmationContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Query status to return.
    */
   enum GNUNET_DB_QueryStatus qs;
@@ -1496,7 +1437,8 @@ deposit_confirmation_cb (void *cls,
                          unsigned int num_results)
 {
   struct DepositConfirmationContext *dcc = cls;
-
+  struct PostgresClosure *pg = dcc->pg;
+  
   for (unsigned int i = 0; i < num_results; i++)
   {
     uint64_t serial_id;
@@ -1514,7 +1456,7 @@ deposit_confirmation_cb (void *cls,
                                            &dc.timestamp),
       GNUNET_PQ_result_spec_absolute_time ("refund_deadline",
                                            &dc.refund_deadline),
-      TALER_PQ_result_spec_amount ("amount_without_fee",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_without_fee",
                                    &dc.amount_without_fee),
       GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
                                             &dc.coin_pub),
@@ -1566,6 +1508,7 @@ postgres_get_deposit_confirmations (void *cls,
                                     
TALER_AUDITORDB_DepositConfirmationCallback cb,
                                     void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_public_key),
     GNUNET_PQ_query_param_uint64 (&start_id),
@@ -1574,7 +1517,8 @@ postgres_get_deposit_confirmations (void *cls,
   struct DepositConfirmationContext dcc = {
     .master_pub = master_public_key,
     .cb = cb,
-    .cb_cls = cb_cls
+    .cb_cls = cb_cls,
+    .pg = pg
   };
   enum GNUNET_DB_QueryStatus qs;
 
@@ -1635,8 +1579,8 @@ postgres_insert_denomination_info (void *cls,
                  TALER_amount_cmp_currency_nbo (&issue->value,
                                                &issue->fee_refund));
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_denominations_insert",
-                                            params);
+                                             "auditor_denominations_insert",
+                                             params);
 }
 
 
@@ -1662,6 +1606,11 @@ struct DenominationInfoContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Query status to return.
    */
   enum GNUNET_DB_QueryStatus qs;
@@ -1679,10 +1628,11 @@ struct DenominationInfoContext
  */
 static void
 denomination_info_cb (void *cls,
-                     PGresult *result,
-                     unsigned int num_results)
+                      PGresult *result,
+                      unsigned int num_results)
 {
   struct DenominationInfoContext *dic = cls;
+  struct PostgresClosure *pg = dic->pg;
 
   for (unsigned int i = 0; i < num_results; i++)
   {
@@ -1695,11 +1645,11 @@ denomination_info_cb (void *cls,
       TALER_PQ_result_spec_absolute_time_nbo ("expire_withdraw", 
&issue.expire_withdraw),
       TALER_PQ_result_spec_absolute_time_nbo ("expire_deposit", 
&issue.expire_deposit),
       TALER_PQ_result_spec_absolute_time_nbo ("expire_legal", 
&issue.expire_legal),
-      TALER_PQ_result_spec_amount_nbo ("coin", &issue.value),
-      TALER_PQ_result_spec_amount_nbo ("fee_withdraw", &issue.fee_withdraw),
-      TALER_PQ_result_spec_amount_nbo ("fee_deposit", &issue.fee_deposit),
-      TALER_PQ_result_spec_amount_nbo ("fee_refresh", &issue.fee_refresh),
-      TALER_PQ_result_spec_amount_nbo ("fee_refund", &issue.fee_refund),
+      TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("coin", &issue.value),
+      TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_withdraw", &issue.fee_withdraw),
+      TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_deposit", &issue.fee_deposit),
+      TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_refresh", &issue.fee_refresh),
+      TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_refund", &issue.fee_refund),
       GNUNET_PQ_result_spec_end
     };
 
@@ -1738,6 +1688,7 @@ postgres_select_denomination_info (void *cls,
                                    
TALER_AUDITORDB_DenominationInfoDataCallback cb,
                                    void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_end
@@ -1745,7 +1696,8 @@ postgres_select_denomination_info (void *cls,
   struct DenominationInfoContext dic = {
     .master_pub = master_pub,
     .cb = cb,
-    .cb_cls = cb_cls
+    .cb_cls = cb_cls,
+    .pg = pg
   };
   enum GNUNET_DB_QueryStatus qs;
 
@@ -1787,8 +1739,8 @@ postgres_insert_auditor_progress_reserve (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_progress_insert_reserve",
-                                            params);
+                                             "auditor_progress_insert_reserve",
+                                             params);
 }
 
 
@@ -1818,8 +1770,8 @@ postgres_update_auditor_progress_reserve (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_progress_update_reserve",
-                                            params);
+                                             "auditor_progress_update_reserve",
+                                             params);
 }
 
 
@@ -1855,9 +1807,9 @@ postgres_get_auditor_progress_reserve (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"auditor_progress_select_reserve",
-                                                  params,
-                                                  rs);
+                                                   
"auditor_progress_select_reserve",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -1884,8 +1836,8 @@ postgres_insert_auditor_progress_aggregation (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            
"auditor_progress_insert_aggregation",
-                                            params);
+                                             
"auditor_progress_insert_aggregation",
+                                             params);
 }
 
 
@@ -1912,8 +1864,8 @@ postgres_update_auditor_progress_aggregation (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            
"auditor_progress_update_aggregation",
-                                            params);
+                                             
"auditor_progress_update_aggregation",
+                                             params);
 }
 
 
@@ -1943,9 +1895,9 @@ postgres_get_auditor_progress_aggregation (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"auditor_progress_select_aggregation",
-                                                  params,
-                                                  rs);
+                                                   
"auditor_progress_select_aggregation",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -1972,8 +1924,8 @@ postgres_insert_auditor_progress_deposit_confirmation 
(void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            
"auditor_progress_insert_deposit_confirmation",
-                                            params);
+                                             
"auditor_progress_insert_deposit_confirmation",
+                                             params);
 }
 
 
@@ -2000,8 +1952,8 @@ postgres_update_auditor_progress_deposit_confirmation 
(void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            
"auditor_progress_update_deposit_confirmation",
-                                            params);
+                                             
"auditor_progress_update_deposit_confirmation",
+                                             params);
 }
 
 
@@ -2031,9 +1983,9 @@ postgres_get_auditor_progress_deposit_confirmation (void 
*cls,
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"auditor_progress_select_deposit_confirmation",
-                                                  params,
-                                                  rs);
+                                                   
"auditor_progress_select_deposit_confirmation",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -2180,8 +2132,8 @@ postgres_insert_wire_auditor_progress (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "wire_auditor_progress_insert",
-                                            params);
+                                             "wire_auditor_progress_insert",
+                                             params);
 }
 
 
@@ -2220,8 +2172,8 @@ postgres_update_wire_auditor_progress (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "wire_auditor_progress_update",
-                                            params);
+                                             "wire_auditor_progress_update",
+                                             params);
 }
 
 
@@ -2319,8 +2271,8 @@ postgres_insert_reserve_info (void *cls,
                                             withdraw_fee_balance));
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_reserves_insert",
-                                            params);
+                                             "auditor_reserves_insert",
+                                             params);
 }
 
 
@@ -2361,8 +2313,8 @@ postgres_update_reserve_info (void *cls,
                                             withdraw_fee_balance));
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_reserves_update",
-                                            params);
+                                             "auditor_reserves_update",
+                                             params);
 }
 
 
@@ -2388,8 +2340,8 @@ postgres_del_reserve_info (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_reserves_delete",
-                                            params);
+                                             "auditor_reserves_delete",
+                                             params);
 }
 
 
@@ -2417,23 +2369,24 @@ postgres_get_reserve_info (void *cls,
                            struct TALER_Amount *withdraw_fee_balance,
                            struct GNUNET_TIME_Absolute *expiration_date)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (reserve_pub),
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("reserve_balance", reserve_balance),
-    TALER_PQ_result_spec_amount ("withdraw_fee_balance", withdraw_fee_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("reserve_balance", reserve_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("withdraw_fee_balance", withdraw_fee_balance),
     TALER_PQ_result_spec_absolute_time ("expiration_date", expiration_date),
     GNUNET_PQ_result_spec_uint64 ("auditor_reserves_rowid", rowid),
     GNUNET_PQ_result_spec_end
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  "auditor_reserves_select",
-                                                  params,
-                                                  rs);
+                                                   "auditor_reserves_select",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -2468,8 +2421,8 @@ postgres_insert_reserve_summary (void *cls,
                                             withdraw_fee_balance));
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_reserve_balance_insert",
-                                            params);
+                                             "auditor_reserve_balance_insert",
+                                             params);
 }
 
 
@@ -2500,8 +2453,8 @@ postgres_update_reserve_summary (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_reserve_balance_update",
-                                            params);
+                                             "auditor_reserve_balance_update",
+                                             params);
 }
 
 
@@ -2523,21 +2476,22 @@ postgres_get_reserve_summary (void *cls,
                               struct TALER_Amount *reserve_balance,
                               struct TALER_Amount *withdraw_fee_balance)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("reserve_balance", reserve_balance),
-    TALER_PQ_result_spec_amount ("withdraw_fee_balance", withdraw_fee_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("reserve_balance", reserve_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("withdraw_fee_balance", withdraw_fee_balance),
 
     GNUNET_PQ_result_spec_end
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"auditor_reserve_balance_select",
-                                                  params,
-                                                  rs);
+                                                   
"auditor_reserve_balance_select",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -2564,8 +2518,8 @@ postgres_insert_wire_fee_summary (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_wire_fee_balance_insert",
-                                            params);
+                                             "auditor_wire_fee_balance_insert",
+                                             params);
 }
 
 
@@ -2592,8 +2546,8 @@ postgres_update_wire_fee_summary (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_wire_fee_balance_update",
-                                            params);
+                                             "auditor_wire_fee_balance_update",
+                                             params);
 }
 
 
@@ -2612,20 +2566,21 @@ postgres_get_wire_fee_summary (void *cls,
                                const struct TALER_MasterPublicKeyP *master_pub,
                                struct TALER_Amount *wire_fee_balance)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("wire_fee_balance", wire_fee_balance),
-
+    TALER_PQ_RESULT_SPEC_AMOUNT ("wire_fee_balance",
+                                 wire_fee_balance),
     GNUNET_PQ_result_spec_end
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"auditor_wire_fee_balance_select",
-                                                  params,
-                                                  rs);
+                                                   
"auditor_wire_fee_balance_select",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -2661,8 +2616,8 @@ postgres_insert_denomination_balance (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            
"auditor_denomination_pending_insert",
-                                            params);
+                                             
"auditor_denomination_pending_insert",
+                                             params);
 }
 
 
@@ -2698,8 +2653,8 @@ postgres_update_denomination_balance (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            
"auditor_denomination_pending_update",
-                                            params);
+                                             
"auditor_denomination_pending_update",
+                                             params);
 }
 
 
@@ -2724,22 +2679,23 @@ postgres_get_denomination_balance (void *cls,
                                    struct TALER_Amount *payback_loss,
                                    uint64_t *num_issued)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("denom_balance", denom_balance),
-    TALER_PQ_result_spec_amount ("denom_risk", denom_risk),
-    TALER_PQ_result_spec_amount ("payback_loss", payback_loss),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("denom_balance", denom_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("denom_risk", denom_risk),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("payback_loss", payback_loss),
     GNUNET_PQ_result_spec_uint64 ("num_issued", num_issued),
     GNUNET_PQ_result_spec_end
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"auditor_denomination_pending_select",
-                                                  params,
-                                                  rs);
+                                                   
"auditor_denomination_pending_select",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -2793,8 +2749,8 @@ postgres_insert_balance_summary (void *cls,
                                             refund_fee_balance));
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_balance_summary_insert",
-                                            params);
+                                             "auditor_balance_summary_insert",
+                                             params);
 }
 
 
@@ -2836,8 +2792,8 @@ postgres_update_balance_summary (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_balance_summary_update",
-                                            params);
+                                             "auditor_balance_summary_update",
+                                             params);
 }
 
 
@@ -2866,17 +2822,18 @@ postgres_get_balance_summary (void *cls,
                               struct TALER_Amount *risk,
                               struct TALER_Amount *loss)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("denom_balance", denom_balance),
-    TALER_PQ_result_spec_amount ("deposit_fee_balance", deposit_fee_balance),
-    TALER_PQ_result_spec_amount ("melt_fee_balance", melt_fee_balance),
-    TALER_PQ_result_spec_amount ("refund_fee_balance", refund_fee_balance),
-    TALER_PQ_result_spec_amount ("risk", risk),
-    TALER_PQ_result_spec_amount ("loss", loss),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("denom_balance", denom_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("deposit_fee_balance", deposit_fee_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("melt_fee_balance", melt_fee_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("refund_fee_balance", refund_fee_balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("risk", risk),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("loss", loss),
     GNUNET_PQ_result_spec_end
   };
 
@@ -2941,6 +2898,11 @@ struct HistoricDenomRevenueContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */ 
+  struct PostgresClosure *pg;
+
+  /**
    * Number of results processed.
    */
   enum GNUNET_DB_QueryStatus qs;
@@ -2958,11 +2920,12 @@ struct HistoricDenomRevenueContext
  */
 static void
 historic_denom_revenue_cb (void *cls,
-                          PGresult *result,
-                          unsigned int num_results)
+                           PGresult *result,
+                           unsigned int num_results)
 {
   struct HistoricDenomRevenueContext *hrc = cls;
-
+  struct PostgresClosure *pg = hrc->pg;
+  
   for (unsigned int i = 0; i < num_results; i++)
   {
     struct GNUNET_HashCode denom_pub_hash;
@@ -2972,15 +2935,15 @@ historic_denom_revenue_cb (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash", &denom_pub_hash),
       TALER_PQ_result_spec_absolute_time ("revenue_timestamp", 
&revenue_timestamp),
-      TALER_PQ_result_spec_amount ("revenue_balance", &revenue_balance),
-      TALER_PQ_result_spec_amount ("loss_balance", &loss),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("revenue_balance", &revenue_balance),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("loss_balance", &loss),
       GNUNET_PQ_result_spec_end
     };
 
     if (GNUNET_OK !=
         GNUNET_PQ_extract_result (result,
-                                 rs,
-                                 i))
+                                  rs,
+                                  i))
     {
       GNUNET_break (0);
       hrc->qs = GNUNET_DB_STATUS_HARD_ERROR;
@@ -2989,11 +2952,11 @@ historic_denom_revenue_cb (void *cls,
 
     hrc->qs = i + 1;
     if (GNUNET_OK !=
-       hrc->cb (hrc->cb_cls,
-             &denom_pub_hash,
-             revenue_timestamp,
-             &revenue_balance,
-             &loss))
+        hrc->cb (hrc->cb_cls,
+                 &denom_pub_hash,
+                 revenue_timestamp,
+                 &revenue_balance,
+                 &loss))
       break;
   }
 }
@@ -3017,21 +2980,23 @@ postgres_select_historic_denom_revenue (void *cls,
                                         
TALER_AUDITORDB_HistoricDenominationRevenueDataCallback cb,
                                         void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_end
   };
   struct HistoricDenomRevenueContext hrc = {
     .cb = cb,
-    .cb_cls = cb_cls
+    .cb_cls = cb_cls,
+    .pg = pg
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            
"auditor_historic_denomination_revenue_select",
-                                            params,
-                                            &historic_denom_revenue_cb,
-                                            &hrc);
+                                             
"auditor_historic_denomination_revenue_select",
+                                             params,
+                                             &historic_denom_revenue_cb,
+                                             &hrc);
   if (qs <= 0)
     return qs;
   return hrc.qs;
@@ -3087,6 +3052,11 @@ struct HistoricReserveRevenueContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Number of results processed.
    */
   enum GNUNET_DB_QueryStatus qs;
@@ -3108,7 +3078,8 @@ historic_reserve_revenue_cb (void *cls,
                              unsigned int num_results)
 {
   struct HistoricReserveRevenueContext *hrc = cls;
-
+  struct PostgresClosure *pg = hrc->pg;
+  
   for (unsigned int i = 0; i < num_results; i++)
   {
     struct GNUNET_TIME_Absolute start_date;
@@ -3117,7 +3088,7 @@ historic_reserve_revenue_cb (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       TALER_PQ_result_spec_absolute_time ("start_date", &start_date),
       TALER_PQ_result_spec_absolute_time ("end_date", &end_date),
-      TALER_PQ_result_spec_amount ("reserve_profits", &reserve_profits),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("reserve_profits", &reserve_profits),
       GNUNET_PQ_result_spec_end
     };
 
@@ -3132,10 +3103,10 @@ historic_reserve_revenue_cb (void *cls,
     }
     hrc->qs = i + 1;
     if (GNUNET_OK !=
-       hrc->cb (hrc->cb_cls,
-                start_date,
-                end_date,
-                &reserve_profits))
+        hrc->cb (hrc->cb_cls,
+                 start_date,
+                 end_date,
+                 &reserve_profits))
       break;
   }
 }
@@ -3158,6 +3129,7 @@ postgres_select_historic_reserve_revenue (void *cls,
                                           
TALER_AUDITORDB_HistoricReserveRevenueDataCallback cb,
                                           void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_end
@@ -3165,7 +3137,8 @@ postgres_select_historic_reserve_revenue (void *cls,
   enum GNUNET_DB_QueryStatus qs;
   struct HistoricReserveRevenueContext hrc = {
     .cb = cb,
-    .cb_cls = cb_cls
+    .cb_cls = cb_cls,
+    .pg = pg
   };
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
@@ -3202,8 +3175,8 @@ postgres_insert_predicted_result (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_predicted_result_insert",
-                                            params);
+                                             "auditor_predicted_result_insert",
+                                             params);
 }
 
 
@@ -3230,8 +3203,8 @@ postgres_update_predicted_result (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "auditor_predicted_result_update",
-                                            params);
+                                             "auditor_predicted_result_update",
+                                             params);
 }
 
 
@@ -3250,20 +3223,21 @@ postgres_get_predicted_balance (void *cls,
                                 const struct TALER_MasterPublicKeyP 
*master_pub,
                                 struct TALER_Amount *balance)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("balance", balance),
-
+    TALER_PQ_RESULT_SPEC_AMOUNT ("balance",
+                                 balance),
     GNUNET_PQ_result_spec_end
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"auditor_predicted_result_select",
-                                                  params,
-                                                  rs);
+                                                   
"auditor_predicted_result_select",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -3309,6 +3283,19 @@ libtaler_plugin_auditordb_postgres_init (void *cls)
       return NULL;
     }
   }
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_get_value_string (cfg,
+                                             "taler",
+                                             "CURRENCY",
+                                             &pg->currency))
+  {
+    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                               "taler",
+                               "CURRENCY");
+    GNUNET_free (pg->connection_cfg_str);
+    GNUNET_free (pg);
+    return NULL;
+  }
   plugin = GNUNET_new (struct TALER_AUDITORDB_Plugin);
   plugin->cls = pg;
   plugin->get_session = &postgres_get_session;
@@ -3394,6 +3381,7 @@ libtaler_plugin_auditordb_postgres_done (void *cls)
   struct PostgresClosure *pg = plugin->cls;
 
   GNUNET_free (pg->connection_cfg_str);
+  GNUNET_free (pg->currency);
   GNUNET_free (pg);
   GNUNET_free (plugin);
   return NULL;
diff --git a/src/auditordb/test-auditor-db-postgres.conf 
b/src/auditordb/test-auditor-db-postgres.conf
index fd8ffbfd..e06d511c 100644
--- a/src/auditordb/test-auditor-db-postgres.conf
+++ b/src/auditordb/test-auditor-db-postgres.conf
@@ -5,3 +5,6 @@ DB = postgres
 [auditordb-postgres]
 # Argument for Postgres for how to connect to the database.
 CONFIG = "postgres:///talercheck"
+
+[taler]
+CURRENCY = "EUR"
\ No newline at end of file
diff --git a/src/auditordb/test_auditordb.c b/src/auditordb/test_auditordb.c
index 80c442a9..68aa4564 100644
--- a/src/auditordb/test_auditordb.c
+++ b/src/auditordb/test_auditordb.c
@@ -54,7 +54,7 @@ static int result = -1;
 
 
 /**
- * Currency we use.
+ * Currency we use, must match CURRENCY in "test-auditor-db-postgres.conf".
  */
 #define CURRENCY "EUR"
 
diff --git a/src/exchange-tools/taler-exchange-wire.c 
b/src/exchange-tools/taler-exchange-wire.c
index 1ea3c5c0..366b69ec 100644
--- a/src/exchange-tools/taler-exchange-wire.c
+++ b/src/exchange-tools/taler-exchange-wire.c
@@ -60,7 +60,7 @@ sign_account_data (void *cls,
   char *json_out;
   FILE *out;
   int ret;
-
+ 
   if (GNUNET_NO == ai->credit_enabled)
     return;
   if (NULL == ai->wire_response_filename)
@@ -71,6 +71,7 @@ sign_account_data (void *cls,
     global_ret = 1;
     return;
   }
+  
   wire = TALER_JSON_exchange_wire_signature_make (ai->payto_url,
                                                   &master_priv);
   GNUNET_assert (NULL != wire);
@@ -199,6 +200,9 @@ run (void *cls,
     global_ret = 1;
     return;
   }
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Signing /wire response with private key matching public key 
`%s'\n",
+              masters);
   GNUNET_free (masters);
   TALER_EXCHANGEDB_find_accounts (cfg,
                                   &sign_account_data,
diff --git a/src/exchange/taler-exchange-httpd.c 
b/src/exchange/taler-exchange-httpd.c
index f0059736..b30b19c3 100644
--- a/src/exchange/taler-exchange-httpd.c
+++ b/src/exchange/taler-exchange-httpd.c
@@ -684,6 +684,9 @@ exchange_serve_process_config ()
     return GNUNET_SYSERR;
   }
   GNUNET_free (TEH_master_public_key_str);
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Launching exchange with public key `%s'...\n",
+              GNUNET_p2s (&TEH_master_public_key.eddsa_pub));
 
   if ( (GNUNET_OK !=
         TEH_VALIDATION_init (cfg)) ||
diff --git a/src/exchange/taler-exchange-httpd_validation.c 
b/src/exchange/taler-exchange-httpd_validation.c
index ba34de80..acb12117 100644
--- a/src/exchange/taler-exchange-httpd_validation.c
+++ b/src/exchange/taler-exchange-httpd_validation.c
@@ -173,8 +173,9 @@ load_account (void *cls,
                                                   &TEH_master_public_key))
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Invalid signature in `%s'\n",
-                  ai->wire_response_filename);
+                  "Invalid signature in `%s' for public key `%s'\n",
+                  ai->wire_response_filename,
+                  GNUNET_p2s (&TEH_master_public_key.eddsa_pub));
       json_decref (wire_s);
       *ret = GNUNET_SYSERR;
       return;
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index c89e4472..b1f1aba8 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -39,6 +39,24 @@
 #define AUTO_EXPLAIN 1
 
 /**
+ * Wrapper macro to add the currency from the plugin's state
+ * when fetching amounts from the database.
+ *
+ * @param field name of the database field to fetch amount from
+ * @param amountp[out] pointer to amount to set
+ */
+#define TALER_PQ_RESULT_SPEC_AMOUNT(field,amountp) 
TALER_PQ_result_spec_amount(field,pg->currency,amountp)
+
+/**
+ * Wrapper macro to add the currency from the plugin's state
+ * when fetching amounts from the database.  NBO variant.
+ *
+ * @param field name of the database field to fetch amount from
+ * @param amountp[out] pointer to amount to set
+ */
+#define TALER_PQ_RESULT_SPEC_AMOUNT_NBO(field,amountp) 
TALER_PQ_result_spec_amount_nbo(field,pg->currency,amountp)
+
+/**
  * Log a really unexpected PQ error with all the details we can get hold of.
  *
  * @param result PQ result object of the PQ operation that failed
@@ -70,7 +88,7 @@ struct TALER_EXCHANGEDB_Session
    * Name of the current transaction, for debugging.
    */
   const char *transaction_name;
-
+  
 };
 
 
@@ -103,6 +121,11 @@ struct PostgresClosure
    * be garbage collected?
    */
   struct GNUNET_TIME_Relative legal_reserve_expiration_time;
+
+  /**
+   * Which currency should we assume all amounts to be in?
+   */
+  char *currency;
 };
 
 
@@ -180,19 +203,14 @@ postgres_create_tables (void *cls)
                             ",expire_legal INT8 NOT NULL"
                             ",coin_val INT8 NOT NULL" /* value of this denom */
                             ",coin_frac INT4 NOT NULL" /* fractional value of 
this denom */
-                            ",coin_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL" /* assuming same currency for fees */
                             ",fee_withdraw_val INT8 NOT NULL"
                             ",fee_withdraw_frac INT4 NOT NULL"
-                            ",fee_withdraw_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                             ",fee_deposit_val INT8 NOT NULL"
                             ",fee_deposit_frac INT4 NOT NULL"
-                            ",fee_deposit_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                             ",fee_refresh_val INT8 NOT NULL"
                             ",fee_refresh_frac INT4 NOT NULL"
-                            ",fee_refresh_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                             ",fee_refund_val INT8 NOT NULL"
                             ",fee_refund_frac INT4 NOT NULL"
-                            ",fee_refund_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                             ")"),
     /* index for gc_denominations */
     GNUNET_PQ_make_try_execute ("CREATE INDEX denominations_expire_legal_index 
ON "
@@ -214,7 +232,6 @@ postgres_create_tables (void *cls)
                             ",account_details TEXT NOT NULL "
                             ",current_balance_val INT8 NOT NULL"
                             ",current_balance_frac INT4 NOT NULL"
-                            ",current_balance_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                             ",expiration_date INT8 NOT NULL"
                             ",gc_date INT8 NOT NULL"
                             ");"),
@@ -236,7 +253,6 @@ postgres_create_tables (void *cls)
                            ",wire_reference BYTEA NOT NULL"
                            ",credit_val INT8 NOT NULL"
                            ",credit_frac INT4 NOT NULL"
-                           ",credit_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL"
                            ",sender_account_details TEXT NOT NULL"
                            ",exchange_account_section TEXT NOT NULL"
                            ",execution_date INT8 NOT NULL"
@@ -262,10 +278,8 @@ postgres_create_tables (void *cls)
                            ",receiver_account TEXT NOT NULL"
                            ",amount_val INT8 NOT NULL"
                            ",amount_frac INT4 NOT NULL"
-                           ",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL"
                            ",closing_fee_val INT8 NOT NULL"
                            ",closing_fee_frac INT4 NOT NULL"
-                           ",closing_fee_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                            ");"),
     GNUNET_PQ_make_try_execute("CREATE INDEX reserves_close_by_reserve "
                                "ON reserves_close(reserve_pub)"),
@@ -284,7 +298,6 @@ postgres_create_tables (void *cls)
                             ",execution_date INT8 NOT NULL"
                             ",amount_with_fee_val INT8 NOT NULL"
                             ",amount_with_fee_frac INT4 NOT NULL"
-                            ",amount_with_fee_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                             ");"),
     /* Index blindcoins(reserve_pub) for get_reserves_out statement */
     GNUNET_PQ_make_try_execute ("CREATE INDEX reserves_out_reserve_pub_index 
ON"
@@ -311,7 +324,6 @@ postgres_create_tables (void *cls)
                            ",old_coin_sig BYTEA NOT NULL 
CHECK(LENGTH(old_coin_sig)=64)"
                            ",amount_with_fee_val INT8 NOT NULL"
                            ",amount_with_fee_frac INT4 NOT NULL"
-                           ",amount_with_fee_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                            ",noreveal_index INT4 NOT NULL"
                            ");"),
     GNUNET_PQ_make_try_execute ("CREATE INDEX 
refresh_commitments_old_coin_pub_index ON "
@@ -360,7 +372,6 @@ postgres_create_tables (void *cls)
                            ",coin_pub BYTEA NOT NULL REFERENCES known_coins 
(coin_pub) ON DELETE CASCADE"
                            ",amount_with_fee_val INT8 NOT NULL"
                            ",amount_with_fee_frac INT4 NOT NULL"
-                           ",amount_with_fee_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                            ",timestamp INT8 NOT NULL"
                            ",refund_deadline INT8 NOT NULL"
                            ",wire_deadline INT8 NOT NULL"
@@ -394,7 +405,6 @@ postgres_create_tables (void *cls)
                            ",rtransaction_id INT8 NOT NULL"
                            ",amount_with_fee_val INT8 NOT NULL"
                            ",amount_with_fee_frac INT4 NOT NULL"
-                           ",amount_with_fee_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                            ",PRIMARY KEY (coin_pub, merchant_pub, 
h_contract_terms, rtransaction_id)" /* this combo must be unique, and we 
usually select by coin_pub */
                            ");"),
     GNUNET_PQ_make_try_execute("CREATE INDEX refunds_coin_pub_index "
@@ -409,7 +419,6 @@ postgres_create_tables (void *cls)
                            ",exchange_account_section TEXT NOT NULL"
                            ",amount_val INT8 NOT NULL"
                            ",amount_frac INT4 NOT NULL"
-                           ",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL"
                            ");"),
     /* Table for the tracking API, mapping from wire transfer identifiers
        to transactions and back */
@@ -428,10 +437,8 @@ postgres_create_tables (void *cls)
                            ",end_date INT8 NOT NULL"
                            ",wire_fee_val INT8 NOT NULL"
                            ",wire_fee_frac INT4 NOT NULL"
-                           ",wire_fee_curr VARCHAR("TALER_CURRENCY_LEN_STR") 
NOT NULL"
                            ",closing_fee_val INT8 NOT NULL"
                            ",closing_fee_frac INT4 NOT NULL"
-                           ",closing_fee_curr 
VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                            ",master_sig BYTEA NOT NULL CHECK 
(LENGTH(master_sig)=64)"
                            ",PRIMARY KEY (wire_method, start_date)" /* this 
combo must be unique */
                            ");"),
@@ -449,7 +456,6 @@ postgres_create_tables (void *cls)
                            ",coin_blind BYTEA NOT NULL 
CHECK(LENGTH(coin_blind)=32)"
                            ",amount_val INT8 NOT NULL"
                            ",amount_frac INT4 NOT NULL"
-                           ",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL"
                            ",timestamp INT8 NOT NULL"
                            ",h_blind_ev BYTEA NOT NULL REFERENCES reserves_out 
(h_blind_ev) ON DELETE CASCADE"
                            ");"),
@@ -470,7 +476,6 @@ postgres_create_tables (void *cls)
                            ",coin_blind BYTEA NOT NULL 
CHECK(LENGTH(coin_blind)=32)"
                            ",amount_val INT8 NOT NULL"
                            ",amount_frac INT4 NOT NULL"
-                           ",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL"
                            ",timestamp INT8 NOT NULL"
                            ",h_blind_ev BYTEA NOT NULL REFERENCES 
refresh_revealed_coins (h_coin_ev) ON DELETE CASCADE"
                            ");"),
@@ -515,7 +520,6 @@ postgres_create_tables (void *cls)
                            "(merchant_serial_id BIGSERIAL NOT NULL REFERENCES 
kyc_merchants (merchant_serial_id) ON DELETE CASCADE"
                            ",amount_val INT8 NOT NULL"
                            ",amount_frac INT4 NOT NULL"
-                           ",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT 
NULL"
                            ",timestamp INT8 NOT NULL"
                            ");"),
 
@@ -564,24 +568,18 @@ postgres_prepare (PGconn *db_conn)
                             ",expire_legal"
                             ",coin_val" /* value of this denom */
                             ",coin_frac" /* fractional value of this denom */
-                            ",coin_curr" /* assuming same currency for fees */
                             ",fee_withdraw_val"
                             ",fee_withdraw_frac"
-                            ",fee_withdraw_curr" /* must match coin_curr */
                             ",fee_deposit_val"
                             ",fee_deposit_frac"
-                            ",fee_deposit_curr"  /* must match coin_curr */
                             ",fee_refresh_val"
                             ",fee_refresh_frac"
-                            ",fee_refresh_curr" /* must match coin_curr */
                             ",fee_refund_val"
                             ",fee_refund_frac"
-                            ",fee_refund_curr" /* must match coin_curr */
                             ") VALUES "
                             "($1, $2, $3, $4, $5, $6, $7, $8, $9, $10,"
-                            " $11, $12, $13, $14, $15, $16, $17, $18,"
-                            " $19, $20, $21, $22, $23);",
-                            23),
+                            " $11, $12, $13, $14, $15, $16, $17, $18);",
+                            18),
     /* Used in #postgres_iterate_denomination_info() */
     GNUNET_PQ_make_prepare ("denomination_iterate",
                             "SELECT"
@@ -593,19 +591,14 @@ postgres_prepare (PGconn *db_conn)
                             ",expire_legal"
                             ",coin_val"  /* value of this denom */
                             ",coin_frac" /* fractional value of this denom */
-                            ",coin_curr" /* assuming same currency for fees */
                             ",fee_withdraw_val"
                             ",fee_withdraw_frac"
-                            ",fee_withdraw_curr" /* must match coin_curr */
                             ",fee_deposit_val"
                             ",fee_deposit_frac"
-                            ",fee_deposit_curr"  /* must match coin_curr */
                             ",fee_refresh_val"
                             ",fee_refresh_frac"
-                            ",fee_refresh_curr" /* must match coin_curr */
                             ",fee_refund_val"
                             ",fee_refund_frac"
-                            ",fee_refund_curr" /* must match coin_curr */
                             ",denom_pub"
                             " FROM denominations;",
                             0),
@@ -620,19 +613,14 @@ postgres_prepare (PGconn *db_conn)
                             ",expire_legal"
                             ",coin_val"  /* value of this denom */
                             ",coin_frac" /* fractional value of this denom */
-                            ",coin_curr" /* assuming same currency for fees */
                             ",fee_withdraw_val"
                             ",fee_withdraw_frac"
-                            ",fee_withdraw_curr" /* must match coin_curr */
                             ",fee_deposit_val"
                             ",fee_deposit_frac"
-                            ",fee_deposit_curr"  /* must match coin_curr */
                             ",fee_refresh_val"
                             ",fee_refresh_frac"
-                            ",fee_refresh_curr" /* must match coin_curr */
                             ",fee_refund_val"
                             ",fee_refund_frac"
-                            ",fee_refund_curr" /* must match coin_curr */
                             " FROM denominations"
                             " WHERE denom_pub_hash=$1;",
                             1),
@@ -657,7 +645,6 @@ postgres_prepare (PGconn *db_conn)
                             "SELECT"
                             " current_balance_val"
                             ",current_balance_frac"
-                            ",current_balance_curr"
                             ",expiration_date"
                             ",gc_date"
                             " FROM reserves"
@@ -672,12 +659,11 @@ postgres_prepare (PGconn *db_conn)
                             ",account_details"
                             ",current_balance_val"
                             ",current_balance_frac"
-                            ",current_balance_curr"
                             ",expiration_date"
                             ",gc_date"
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7);",
-                            7),
+                            "($1, $2, $3, $4, $5, $6);",
+                            6),
     /* Used in #postgres_insert_reserve_closed() */
     GNUNET_PQ_make_prepare ("reserves_close_insert",
                             "INSERT INTO reserves_close "
@@ -687,13 +673,11 @@ postgres_prepare (PGconn *db_conn)
                             ",receiver_account"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",closing_fee_val"
                             ",closing_fee_frac"
-                            ",closing_fee_curr"
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);",
-                            10),
+                            "($1, $2, $3, $4, $5, $6, $7, $8);",
+                            8),
     /* Used in #reserves_update() when the reserve is updated */
     GNUNET_PQ_make_prepare ("reserve_update",
                             "UPDATE reserves"
@@ -702,10 +686,9 @@ postgres_prepare (PGconn *db_conn)
                             ",gc_date=$2"
                             ",current_balance_val=$3"
                             ",current_balance_frac=$4"
-                            ",current_balance_curr=$5"
                             " WHERE"
-                            " reserve_pub=$6;",
-                            6),
+                            " reserve_pub=$5;",
+                            5),
     /* Used in #postgres_reserves_in_insert() to store transaction details */
     GNUNET_PQ_make_prepare ("reserves_in_add_transaction",
                             "INSERT INTO reserves_in "
@@ -713,14 +696,13 @@ postgres_prepare (PGconn *db_conn)
                             ",wire_reference"
                             ",credit_val"
                             ",credit_frac"
-                            ",credit_curr"
                             ",exchange_account_section"
                             ",sender_account_details"
                             ",execution_date"
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7, $8) "
+                            "($1, $2, $3, $4, $5, $6, $7) "
                             "ON CONFLICT DO NOTHING;",
-                            8),
+                            7),
     /* Used in postgres_select_reserves_in_above_serial_id() to obtain inbound
        transactions for reserves with serial id '\geq' the given parameter */
     GNUNET_PQ_make_prepare ("reserves_in_get_latest_wire_reference",
@@ -739,7 +721,6 @@ postgres_prepare (PGconn *db_conn)
                             ",wire_reference"
                             ",credit_val"
                             ",credit_frac"
-                            ",credit_curr"
                             ",execution_date"
                             ",sender_account_details"
                             ",reserve_in_serial_id"
@@ -755,7 +736,6 @@ postgres_prepare (PGconn *db_conn)
                             ",wire_reference"
                             ",credit_val"
                             ",credit_frac"
-                            ",credit_curr"
                             ",execution_date"
                             ",sender_account_details"
                             ",reserve_in_serial_id"
@@ -770,7 +750,6 @@ postgres_prepare (PGconn *db_conn)
                             " wire_reference"
                             ",credit_val"
                             ",credit_frac"
-                            ",credit_curr"
                             ",execution_date"
                             ",sender_account_details"
                             " FROM reserves_in"
@@ -800,10 +779,9 @@ postgres_prepare (PGconn *db_conn)
                             ",execution_date"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7, $8, $9);",
-                            9),
+                            "($1, $2, $3, $4, $5, $6, $7, $8);",
+                            8),
     /* Used in #postgres_get_withdraw_info() to
        locate the response for a /reserve/withdraw request
        using the hash of the blinded message.  Used to
@@ -817,10 +795,8 @@ postgres_prepare (PGconn *db_conn)
                             ",execution_date"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_withdraw_val"
                             ",denom.fee_withdraw_frac"
-                            ",denom.fee_withdraw_curr"
                             " FROM reserves_out"
                             "    JOIN denominations denom"
                             "      USING (denom_pub_hash)"
@@ -840,10 +816,8 @@ postgres_prepare (PGconn *db_conn)
                             ",execution_date"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_withdraw_val"
                             ",denom.fee_withdraw_frac"
-                            ",denom.fee_withdraw_curr"
                             " FROM reserves_out"
                             "    JOIN denominations denom"
                             "      USING (denom_pub_hash)"
@@ -861,7 +835,6 @@ postgres_prepare (PGconn *db_conn)
                             ",execution_date"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",reserve_out_serial_id"
                             " FROM reserves_out"
                             "    JOIN denominations denom"
@@ -909,11 +882,10 @@ postgres_prepare (PGconn *db_conn)
                             ",old_coin_sig "
                             ",amount_with_fee_val "
                             ",amount_with_fee_frac "
-                            ",amount_with_fee_curr "
                             ",noreveal_index "
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7);",
-                            7),
+                            "($1, $2, $3, $4, $5, $6);",
+                            6),
     /* Used in #postgres_get_melt() to fetch
        high-level information about a melt operation */
     GNUNET_PQ_make_prepare ("get_melt",
@@ -921,13 +893,11 @@ postgres_prepare (PGconn *db_conn)
                             " kc.denom_pub_hash"
                             ",denom.fee_refresh_val"
                             ",denom.fee_refresh_frac"
-                            ",denom.fee_refresh_curr"
                             ",kc.denom_sig"
                             ",old_coin_pub"
                             ",old_coin_sig"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",noreveal_index"
                             " FROM refresh_commitments"
                             "   JOIN known_coins kc"
@@ -953,7 +923,6 @@ postgres_prepare (PGconn *db_conn)
                             ",old_coin_sig"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",noreveal_index"
                             ",melt_serial_id"
                             ",rc"
@@ -972,10 +941,8 @@ postgres_prepare (PGconn *db_conn)
                             ",old_coin_sig"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_refresh_val "
                             ",denom.fee_refresh_frac "
-                            ",denom.fee_refresh_curr "
                             " FROM refresh_commitments"
                             "    JOIN known_coins "
                             "      ON (refresh_commitments.old_coin_pub = 
known_coins.coin_pub)"
@@ -1045,10 +1012,9 @@ postgres_prepare (PGconn *db_conn)
                             ",rtransaction_id "
                             ",amount_with_fee_val "
                             ",amount_with_fee_frac "
-                            ",amount_with_fee_curr "
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7, $8);",
-                            8),
+                            "($1, $2, $3, $4, $5, $6, $7);",
+                            7),
     /* Query the 'refunds' by coin public key */
     GNUNET_PQ_make_prepare ("get_refunds_by_coin",
                             "SELECT"
@@ -1058,10 +1024,8 @@ postgres_prepare (PGconn *db_conn)
                             ",rtransaction_id"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_refund_val "
                             ",denom.fee_refund_frac "
-                            ",denom.fee_refund_curr "
                             " FROM refunds"
                             "    JOIN known_coins USING (coin_pub)"
                             "    JOIN denominations denom USING 
(denom_pub_hash)"
@@ -1078,7 +1042,6 @@ postgres_prepare (PGconn *db_conn)
                             ",coin_pub"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",refund_serial_id"
                             " FROM refunds"
                             "   JOIN known_coins kc USING (coin_pub)"
@@ -1099,7 +1062,6 @@ postgres_prepare (PGconn *db_conn)
                             "(coin_pub"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",timestamp"
                             ",refund_deadline"
                             ",wire_deadline"
@@ -1110,15 +1072,14 @@ postgres_prepare (PGconn *db_conn)
                             ",wire"
                             ") VALUES "
                             "($1, $2, $3, $4, $5, $6, $7, $8, $9, $10,"
-                            " $11, $12);",
-                            12),
+                            " $11);",
+                            11),
     /* Fetch an existing deposit request, used to ensure idempotency
        during /deposit processing. Used in #postgres_have_deposit(). */
     GNUNET_PQ_make_prepare ("get_deposit",
                             "SELECT"
                             " amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",timestamp"
                             ",refund_deadline"
                             ",wire_deadline"
@@ -1135,7 +1096,6 @@ postgres_prepare (PGconn *db_conn)
                             "SELECT"
                             " amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",timestamp"
                             ",merchant_pub"
                             ",denom.denom_pub"
@@ -1161,10 +1121,8 @@ postgres_prepare (PGconn *db_conn)
                             "SELECT"
                             " amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_deposit_val"
                             ",denom.fee_deposit_frac"
-                            ",denom.fee_deposit_curr"
                             ",wire_deadline"
                             " FROM deposits"
                             "    JOIN known_coins USING (coin_pub)"
@@ -1182,10 +1140,8 @@ postgres_prepare (PGconn *db_conn)
                             " deposit_serial_id"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_deposit_val"
                             ",denom.fee_deposit_frac"
-                            ",denom.fee_deposit_curr"
                             ",wire_deadline"
                             ",h_contract_terms"
                             ",wire"
@@ -1207,10 +1163,8 @@ postgres_prepare (PGconn *db_conn)
                             " deposit_serial_id"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_deposit_val"
                             ",denom.fee_deposit_frac"
-                            ",denom.fee_deposit_curr"
                             ",wire_deadline"
                             ",h_contract_terms"
                             ",coin_pub"
@@ -1253,10 +1207,8 @@ postgres_prepare (PGconn *db_conn)
                             "SELECT"
                             " amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_deposit_val"
                             ",denom.fee_deposit_frac"
-                            ",denom.fee_deposit_curr"
                             ",timestamp"
                             ",refund_deadline"
                             ",wire_deadline"
@@ -1303,10 +1255,8 @@ postgres_prepare (PGconn *db_conn)
                             ",wire_out.execution_date"
                             ",deposits.amount_with_fee_val"
                             ",deposits.amount_with_fee_frac"
-                            ",deposits.amount_with_fee_curr"
                             ",denom.fee_deposit_val"
                             ",denom.fee_deposit_frac"
-                            ",denom.fee_deposit_curr"
                             ",denom.denom_pub"
                             " FROM aggregation_tracking"
                             "    JOIN deposits"
@@ -1326,10 +1276,8 @@ postgres_prepare (PGconn *db_conn)
                             ",wire_out.execution_date"
                             ",amount_with_fee_val"
                             ",amount_with_fee_frac"
-                            ",amount_with_fee_curr"
                             ",denom.fee_deposit_val"
                             ",denom.fee_deposit_frac"
-                            ",denom.fee_deposit_curr"
                             " FROM deposits"
                             "    JOIN aggregation_tracking"
                             "      USING (deposit_serial_id)"
@@ -1359,10 +1307,8 @@ postgres_prepare (PGconn *db_conn)
                             ",end_date"
                             ",wire_fee_val"
                             ",wire_fee_frac"
-                            ",wire_fee_curr"
                             ",closing_fee_val"
                             ",closing_fee_frac"
-                            ",closing_fee_curr"
                             ",master_sig"
                             " FROM wire_fee"
                             " WHERE wire_method=$1"
@@ -1377,14 +1323,12 @@ postgres_prepare (PGconn *db_conn)
                             ",end_date"
                             ",wire_fee_val"
                             ",wire_fee_frac"
-                            ",wire_fee_curr"
                             ",closing_fee_val"
                             ",closing_fee_frac"
-                            ",closing_fee_curr"
                             ",master_sig"
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);",
-                            19),
+                            "($1, $2, $3, $4, $5, $6, $7, $8);",
+                            8),
     /* Used in #postgres_store_wire_transfer_out */
     GNUNET_PQ_make_prepare ("insert_wire_out",
                             "INSERT INTO wire_out "
@@ -1394,10 +1338,9 @@ postgres_prepare (PGconn *db_conn)
                             ",exchange_account_section"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7);",
-                            7),
+                            "($1, $2, $3, $4, $5, $6);",
+                            6),
     /* Used in #postgres_wire_prepare_data_insert() to store
        wire transfer information before actually committing it with the bank */
     GNUNET_PQ_make_prepare ("wire_prepare_data_insert",
@@ -1438,7 +1381,6 @@ postgres_prepare (PGconn *db_conn)
                             " merchant_serial_id"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             " FROM kyc_events"
                             " WHERE merchant_serial_id=$1",
                             1),
@@ -1483,33 +1425,31 @@ postgres_prepare (PGconn *db_conn)
                             "(merchant_serial_id"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",timestamp)"
-                            " VALUES ($1, $2, $3, $4, $5)",
-                            5),
+                            " VALUES ($1, $2, $3, $4)",
+                            4),
 
     /* Used in #postgres_select_deposits_missing_wire */
     GNUNET_PQ_make_prepare ("deposits_get_overdue",
-                           "SELECT"
-                           " deposit_serial_id"
-                           ",coin_pub"
-                           ",amount_with_fee_val"
-                           ",amount_with_fee_frac"
-                           ",amount_with_fee_curr"
-                           ",wire"
-                           ",wire_deadline"
-                           ",tiny"
-                           ",done"
-                           " FROM deposits"
-                           " WHERE wire_deadline >= $1"
-                           " AND wire_deadline < $2"
-                           " AND NOT (EXISTS (SELECT 1"
-                           "            FROM refunds"
-                           "            WHERE (refunds.coin_pub = 
deposits.coin_pub))"
-                           "       OR EXISTS (SELECT 1"
-                           "            FROM aggregation_tracking"
-                           "            WHERE 
(aggregation_tracking.deposit_serial_id = deposits.deposit_serial_id)))"
-                           " ORDER BY wire_deadline ASC",
+                            "SELECT"
+                            " deposit_serial_id"
+                            ",coin_pub"
+                            ",amount_with_fee_val"
+                            ",amount_with_fee_frac"
+                            ",wire"
+                            ",wire_deadline"
+                            ",tiny"
+                            ",done"
+                            " FROM deposits"
+                            " WHERE wire_deadline >= $1"
+                            " AND wire_deadline < $2"
+                            " AND NOT (EXISTS (SELECT 1"
+                            "            FROM refunds"
+                            "            WHERE (refunds.coin_pub = 
deposits.coin_pub))"
+                            "       OR EXISTS (SELECT 1"
+                            "            FROM aggregation_tracking"
+                            "            WHERE 
(aggregation_tracking.deposit_serial_id = deposits.deposit_serial_id)))"
+                            " ORDER BY wire_deadline ASC",
                            2),
     /* Used in #postgres_gc() */
     GNUNET_PQ_make_prepare ("gc_prewire",
@@ -1526,7 +1466,6 @@ postgres_prepare (PGconn *db_conn)
                             ",wire_target"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             " FROM wire_out"
                             " WHERE wireout_uuid>=$1"
                             " ORDER BY wireout_uuid ASC;",
@@ -1540,7 +1479,6 @@ postgres_prepare (PGconn *db_conn)
                             ",wire_target"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             " FROM wire_out"
                             " WHERE wireout_uuid>=$1 AND 
exchange_account_section=$2"
                             " ORDER BY wireout_uuid ASC;",
@@ -1554,12 +1492,11 @@ postgres_prepare (PGconn *db_conn)
                             ",coin_blind"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",timestamp"
                             ",h_blind_ev"
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7, $8);",
-                            8),
+                            "($1, $2, $3, $4, $5, $6, $7);",
+                            7),
     /* Used in #postgres_insert_payback_request() to store payback-refresh
        information */
     GNUNET_PQ_make_prepare ("payback_refresh_insert",
@@ -1569,12 +1506,11 @@ postgres_prepare (PGconn *db_conn)
                             ",coin_blind"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",timestamp"
                             ",h_blind_ev"
                             ") VALUES "
-                            "($1, $2, $3, $4, $5, $6, $7, $8);",
-                            8),
+                            "($1, $2, $3, $4, $5, $6, $7);",
+                            7),
     /* Used in #postgres_select_payback_above_serial_id() to obtain payback 
transactions */
     GNUNET_PQ_make_prepare ("payback_get_incr",
                             "SELECT"
@@ -1590,7 +1526,6 @@ postgres_prepare (PGconn *db_conn)
                             ",coins.denom_sig"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             " FROM payback"
                             "    JOIN known_coins coins"
                             "      USING (coin_pub)"
@@ -1617,7 +1552,6 @@ postgres_prepare (PGconn *db_conn)
                             ",coins.denom_sig"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             " FROM payback_refresh"
                             "    JOIN refresh_revealed_coins rrc"
                             "      ON (rrc.coin_ev = h_blind_ev)"
@@ -1641,10 +1575,8 @@ postgres_prepare (PGconn *db_conn)
                             ",receiver_account"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",closing_fee_val"
                             ",closing_fee_frac"
-                            ",closing_fee_curr"
                             " FROM reserves_close"
                             " WHERE close_uuid>=$1"
                             " ORDER BY close_uuid ASC;",
@@ -1658,7 +1590,6 @@ postgres_prepare (PGconn *db_conn)
                             ",coin_blind"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",timestamp"
                             ",coins.denom_pub_hash"
                             ",coins.denom_sig"
@@ -1679,7 +1610,6 @@ postgres_prepare (PGconn *db_conn)
                             ",coin_blind"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",timestamp"
                             ",coins.denom_pub_hash"
                             ",coins.denom_sig"
@@ -1699,10 +1629,8 @@ postgres_prepare (PGconn *db_conn)
                             "SELECT"
                             " amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",closing_fee_val"
                             ",closing_fee_frac"
-                            ",closing_fee_curr"
                             ",execution_date"
                             ",receiver_account"
                             ",wtid"
@@ -1718,7 +1646,6 @@ postgres_prepare (PGconn *db_conn)
                             ",reserve_pub"
                             ",current_balance_val"
                             ",current_balance_frac"
-                            ",current_balance_curr"
                             " FROM reserves"
                             " WHERE expiration_date<=$1"
                             "   AND (current_balance_val != 0 "
@@ -1735,7 +1662,6 @@ postgres_prepare (PGconn *db_conn)
                             ",coin_blind"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",timestamp"
                             ",coins.denom_pub_hash"
                             ",coins.denom_sig"
@@ -1756,7 +1682,6 @@ postgres_prepare (PGconn *db_conn)
                             ",coin_blind"
                             ",amount_val"
                             ",amount_frac"
-                            ",amount_curr"
                             ",timestamp"
                             ",coins.denom_pub_hash"
                             ",coins.denom_sig"
@@ -1862,8 +1787,8 @@ postgres_get_session (void *cls)
        * DB.  Needed after the database server restarts as we need to
        * properly reconnect. */
       GNUNET_assert (0 ==
-                    pthread_setspecific (pc->db_conn_threadlocal,
-                                         NULL));
+                     pthread_setspecific (pc->db_conn_threadlocal,
+                                          NULL));
       PQfinish (session->conn);
       GNUNET_free (session);
     }
@@ -2089,8 +2014,8 @@ postgres_insert_denomination_info (void *cls,
                                                &issue->properties.fee_refund));
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "denomination_insert",
-                                            params);
+                                             "denomination_insert",
+                                             params);
 }
 
 
@@ -2109,6 +2034,7 @@ postgres_get_denomination_info (void *cls,
                                 const struct GNUNET_HashCode *denom_pub_hash,
                                 struct 
TALER_EXCHANGEDB_DenominationKeyInformationP *issue)
 {
+  struct PostgresClosure *pg = cls;
   enum GNUNET_DB_QueryStatus qs;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
@@ -2116,34 +2042,34 @@ postgres_get_denomination_info (void *cls,
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_auto_from_type ("master_pub",
-                                         &issue->properties.master),
+                                          &issue->properties.master),
     GNUNET_PQ_result_spec_auto_from_type ("master_sig",
-                                         &issue->signature),
+                                          &issue->signature),
     TALER_PQ_result_spec_absolute_time_nbo ("valid_from",
-                                            &issue->properties.start),
+                                            &issue->properties.start),
     TALER_PQ_result_spec_absolute_time_nbo ("expire_withdraw",
-                                            
&issue->properties.expire_withdraw),
+                                            
&issue->properties.expire_withdraw),
     TALER_PQ_result_spec_absolute_time_nbo ("expire_deposit",
-                                            &issue->properties.expire_deposit),
+                                            &issue->properties.expire_deposit),
     TALER_PQ_result_spec_absolute_time_nbo ("expire_legal",
-                                            &issue->properties.expire_legal),
-    TALER_PQ_result_spec_amount_nbo ("coin",
-                                    &issue->properties.value),
-    TALER_PQ_result_spec_amount_nbo ("fee_withdraw",
-                                    &issue->properties.fee_withdraw),
-    TALER_PQ_result_spec_amount_nbo ("fee_deposit",
-                                    &issue->properties.fee_deposit),
-    TALER_PQ_result_spec_amount_nbo ("fee_refresh",
-                                    &issue->properties.fee_refresh),
-    TALER_PQ_result_spec_amount_nbo ("fee_refund",
-                                    &issue->properties.fee_refund),
+                                            &issue->properties.expire_legal),
+    TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("coin",
+                                     &issue->properties.value),
+    TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_withdraw",
+                                     &issue->properties.fee_withdraw),
+    TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_deposit",
+                                     &issue->properties.fee_deposit),
+    TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_refresh",
+                                     &issue->properties.fee_refresh),
+    TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_refund",
+                                     &issue->properties.fee_refund),
     GNUNET_PQ_result_spec_end
   };
 
   qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                "denomination_get",
-                                                params,
-                                                rs);
+                                                 "denomination_get",
+                                                 params,
+                                                 rs);
   if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
     return qs;
   issue->properties.purpose.size = htonl (sizeof (struct 
TALER_DenominationKeyValidityPS));
@@ -2167,6 +2093,11 @@ struct DenomIteratorContext
    * Closure to pass to @e cb
    */
   void *cb_cls;
+
+  /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
 };
 
 
@@ -2184,7 +2115,8 @@ domination_cb_helper (void *cls,
                       unsigned int num_results)
 {
   struct DenomIteratorContext *dic = cls;
-
+  struct PostgresClosure *pg = dic->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     struct TALER_EXCHANGEDB_DenominationKeyInformationP issue;
@@ -2202,15 +2134,15 @@ domination_cb_helper (void *cls,
                                                
&issue.properties.expire_deposit),
        TALER_PQ_result_spec_absolute_time_nbo ("expire_legal",
                                                &issue.properties.expire_legal),
-       TALER_PQ_result_spec_amount_nbo ("coin",
+       TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("coin",
                                         &issue.properties.value),
-       TALER_PQ_result_spec_amount_nbo ("fee_withdraw",
+       TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_withdraw",
                                         &issue.properties.fee_withdraw),
-       TALER_PQ_result_spec_amount_nbo ("fee_deposit",
+       TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_deposit",
                                         &issue.properties.fee_deposit),
-       TALER_PQ_result_spec_amount_nbo ("fee_refresh",
+       TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_refresh",
                                         &issue.properties.fee_refresh),
-       TALER_PQ_result_spec_amount_nbo ("fee_refund",
+       TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_refund",
                                         &issue.properties.fee_refund),
        GNUNET_PQ_result_spec_rsa_public_key ("denom_pub",
                                              &denom_pub.rsa_public_key),
@@ -2258,14 +2190,15 @@ postgres_iterate_denomination_info (void *cls,
   };
   struct DenomIteratorContext dic = {
     .cb = cb,
-    .cb_cls = cb_cls
+    .cb_cls = cb_cls,
+    .pg = pc
   };
 
   return GNUNET_PQ_eval_prepared_multi_select (postgres_get_session (pc)->conn,
-                                              "denomination_iterate",
-                                              params,
-                                              &domination_cb_helper,
-                                              &dic);
+                                               "denomination_iterate",
+                                               params,
+                                               &domination_cb_helper,
+                                               &dic);
 }
 
 
@@ -2284,12 +2217,13 @@ postgres_reserve_get (void *cls,
                       struct TALER_EXCHANGEDB_Session *session,
                       struct TALER_EXCHANGEDB_Reserve *reserve)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type(&reserve->pub),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount("current_balance", &reserve->balance),
+    TALER_PQ_RESULT_SPEC_AMOUNT("current_balance", &reserve->balance),
     TALER_PQ_result_spec_absolute_time("expiration_date", &reserve->expiry),
     TALER_PQ_result_spec_absolute_time("gc_date", &reserve->gc),
     GNUNET_PQ_result_spec_end
@@ -2515,15 +2449,15 @@ postgres_get_latest_reserve_in_reference (void *cls,
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_variable_size ("wire_reference",
-                                        wire_reference,
-                                        wire_reference_size),
+                                         wire_reference,
+                                         wire_reference_size),
     GNUNET_PQ_result_spec_end
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"reserves_in_get_latest_wire_reference",
-                                                  params,
-                                                  rs);
+                                                   
"reserves_in_get_latest_wire_reference",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -2545,6 +2479,7 @@ postgres_get_withdraw_info (void *cls,
                             const struct GNUNET_HashCode *h_blind,
                             struct TALER_EXCHANGEDB_CollectableBlindcoin 
*collectable)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam no_params[] = {
     GNUNET_PQ_query_param_end
   };
@@ -2558,13 +2493,13 @@ postgres_get_withdraw_info (void *cls,
     GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
                                          &collectable->sig.rsa_signature),
     GNUNET_PQ_result_spec_auto_from_type ("reserve_sig",
-                                         &collectable->reserve_sig),
+                                          &collectable->reserve_sig),
     GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
-                                         &collectable->reserve_pub),
-    TALER_PQ_result_spec_amount ("amount_with_fee",
-                                &collectable->amount_with_fee),
-    TALER_PQ_result_spec_amount ("fee_withdraw",
-                                &collectable->withdraw_fee),
+                                          &collectable->reserve_pub),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
+                                 &collectable->amount_with_fee),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("fee_withdraw",
+                                 &collectable->withdraw_fee),
     GNUNET_PQ_result_spec_end
   };
   enum GNUNET_DB_QueryStatus qs;
@@ -2689,6 +2624,11 @@ struct ReserveHistoryContext
   struct TALER_EXCHANGEDB_ReserveHistory *rh_tail;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Set to #GNUNET_SYSERR on serious internal errors during
    * the callbacks.
    */
@@ -2732,10 +2672,11 @@ append_rh (struct ReserveHistoryContext *rhc)
  */
 static void
 add_bank_to_exchange (void *cls,
-                     PGresult *result,
-                     unsigned int num_results)
+                      PGresult *result,
+                      unsigned int num_results)
 {
   struct ReserveHistoryContext *rhc = cls;
+  struct PostgresClosure *pg = rhc->pg;
 
   while (0 < num_results)
   {
@@ -2745,27 +2686,27 @@ add_bank_to_exchange (void *cls,
     bt = GNUNET_new (struct TALER_EXCHANGEDB_BankTransfer);
     {
       struct GNUNET_PQ_ResultSpec rs[] = {
-       GNUNET_PQ_result_spec_variable_size ("wire_reference",
-                                            &bt->wire_reference,
-                                            &bt->wire_reference_size),
-       TALER_PQ_result_spec_amount ("credit",
-                                    &bt->amount),
-       TALER_PQ_result_spec_absolute_time ("execution_date",
-                                            &bt->execution_date),
-       GNUNET_PQ_result_spec_string ("sender_account_details",
+        GNUNET_PQ_result_spec_variable_size ("wire_reference",
+                                             &bt->wire_reference,
+                                             &bt->wire_reference_size),
+        TALER_PQ_RESULT_SPEC_AMOUNT ("credit",
+                                     &bt->amount),
+        TALER_PQ_result_spec_absolute_time ("execution_date",
+                                            &bt->execution_date),
+        GNUNET_PQ_result_spec_string ("sender_account_details",
                                       &bt->sender_account_details),
-       GNUNET_PQ_result_spec_end
+        GNUNET_PQ_result_spec_end
       };
 
       if (GNUNET_OK !=
-         GNUNET_PQ_extract_result (result,
-                                   rs,
-                                   --num_results))
+          GNUNET_PQ_extract_result (result,
+                                    rs,
+                                    --num_results))
       {
-       GNUNET_break (0);
-       GNUNET_free (bt);
-       rhc->status = GNUNET_SYSERR;
-       return;
+        GNUNET_break (0);
+        GNUNET_free (bt);
+        rhc->status = GNUNET_SYSERR;
+        return;
       }
     }
     bt->reserve_pub = *rhc->reserve_pub;
@@ -2785,10 +2726,11 @@ add_bank_to_exchange (void *cls,
  */
 static void
 add_withdraw_coin (void *cls,
-                  PGresult *result,
-                  unsigned int num_results)
+                   PGresult *result,
+                   unsigned int num_results)
 {
   struct ReserveHistoryContext *rhc = cls;
+  struct PostgresClosure *pg = rhc->pg;
 
   while (0 < num_results)
   {
@@ -2798,30 +2740,30 @@ add_withdraw_coin (void *cls,
     cbc = GNUNET_new (struct TALER_EXCHANGEDB_CollectableBlindcoin);
     {
       struct GNUNET_PQ_ResultSpec rs[] = {
-       GNUNET_PQ_result_spec_auto_from_type ("h_blind_ev",
-                                             &cbc->h_coin_envelope),
-       GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
-                                             &cbc->denom_pub_hash),
-       GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
-                                            &cbc->sig.rsa_signature),
-       GNUNET_PQ_result_spec_auto_from_type ("reserve_sig",
-                                             &cbc->reserve_sig),
-       TALER_PQ_result_spec_amount ("amount_with_fee",
-                                    &cbc->amount_with_fee),
-       TALER_PQ_result_spec_amount ("fee_withdraw",
-                                    &cbc->withdraw_fee),
-       GNUNET_PQ_result_spec_end
+           GNUNET_PQ_result_spec_auto_from_type ("h_blind_ev",
+                                              &cbc->h_coin_envelope),
+        GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
+                                              &cbc->denom_pub_hash),
+        GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
+                                             &cbc->sig.rsa_signature),
+        GNUNET_PQ_result_spec_auto_from_type ("reserve_sig",
+                                              &cbc->reserve_sig),
+        TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
+                                     &cbc->amount_with_fee),
+        TALER_PQ_RESULT_SPEC_AMOUNT ("fee_withdraw",
+                                     &cbc->withdraw_fee),
+        GNUNET_PQ_result_spec_end
       };
 
       if (GNUNET_OK !=
-         GNUNET_PQ_extract_result (result,
-                                   rs,
-                                   --num_results))
+          GNUNET_PQ_extract_result (result,
+                                    rs,
+                                    --num_results))
       {
-       GNUNET_break (0);
-       GNUNET_free (cbc);
-       rhc->status = GNUNET_SYSERR;
-       return;
+        GNUNET_break (0);
+        GNUNET_free (cbc);
+        rhc->status = GNUNET_SYSERR;
+        return;
       }
     }
     cbc->reserve_pub = *rhc->reserve_pub;
@@ -2841,10 +2783,11 @@ add_withdraw_coin (void *cls,
  */
 static void
 add_payback (void *cls,
-            PGresult *result,
-            unsigned int num_results)
+             PGresult *result,
+             unsigned int num_results)
 {
   struct ReserveHistoryContext *rhc = cls;
+  struct PostgresClosure *pg = rhc->pg;
 
   while (0 < num_results)
   {
@@ -2854,32 +2797,32 @@ add_payback (void *cls,
     payback = GNUNET_new (struct TALER_EXCHANGEDB_Payback);
     {
       struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("amount",
-                                    &payback->value),
-       GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
-                                             &payback->coin.coin_pub),
-       GNUNET_PQ_result_spec_auto_from_type ("coin_blind",
-                                             &payback->coin_blind),
-       GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
-                                             &payback->coin_sig),
-       TALER_PQ_result_spec_absolute_time ("timestamp",
-                                            &payback->timestamp),
-       GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
-                                          &payback->coin.denom_pub_hash),
-       GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
-                                         
&payback->coin.denom_sig.rsa_signature),
-       GNUNET_PQ_result_spec_end
+        TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
+                                     &payback->value),
+        GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
+                                              &payback->coin.coin_pub),
+        GNUNET_PQ_result_spec_auto_from_type ("coin_blind",
+                                              &payback->coin_blind),
+        GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
+                                              &payback->coin_sig),
+        TALER_PQ_result_spec_absolute_time ("timestamp",
+                                            &payback->timestamp),
+        GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
+                                              &payback->coin.denom_pub_hash),
+        GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
+                                             
&payback->coin.denom_sig.rsa_signature),
+        GNUNET_PQ_result_spec_end
       };
 
       if (GNUNET_OK !=
-         GNUNET_PQ_extract_result (result,
-                                   rs,
-                                   --num_results))
+          GNUNET_PQ_extract_result (result,
+                                    rs,
+                                    --num_results))
       {
-       GNUNET_break (0);
-       GNUNET_free (payback);
-       rhc->status = GNUNET_SYSERR;
-       return;
+        GNUNET_break (0);
+        GNUNET_free (payback);
+        rhc->status = GNUNET_SYSERR;
+        return;
       }
     }
     payback->reserve_pub = *rhc->reserve_pub;
@@ -2900,11 +2843,12 @@ add_payback (void *cls,
  */
 static void
 add_exchange_to_bank (void *cls,
-                     PGresult *result,
-                     unsigned int num_results)
+                      PGresult *result,
+                      unsigned int num_results)
 {
   struct ReserveHistoryContext *rhc = cls;
-
+  struct PostgresClosure *pg = rhc->pg;
+  
   while (0 < num_results)
   {
     struct TALER_EXCHANGEDB_ClosingTransfer *closing;
@@ -2913,9 +2857,9 @@ add_exchange_to_bank (void *cls,
     closing = GNUNET_new (struct TALER_EXCHANGEDB_ClosingTransfer);
     {
       struct GNUNET_PQ_ResultSpec rs[] = {
-       TALER_PQ_result_spec_amount ("amount",
+       TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                     &closing->amount),
-       TALER_PQ_result_spec_amount ("closing_fee",
+       TALER_PQ_RESULT_SPEC_AMOUNT ("closing_fee",
                                     &closing->closing_fee),
        TALER_PQ_result_spec_absolute_time ("execution_date",
                                             &closing->execution_date),
@@ -2959,8 +2903,9 @@ static enum GNUNET_DB_QueryStatus
 postgres_get_reserve_history (void *cls,
                               struct TALER_EXCHANGEDB_Session *session,
                               const struct TALER_ReservePublicKeyP 
*reserve_pub,
-                             struct TALER_EXCHANGEDB_ReserveHistory **rhp)
+                              struct TALER_EXCHANGEDB_ReserveHistory **rhp)
 {
+  struct PostgresClosure *pg = cls;
   struct ReserveHistoryContext rhc;
   struct {
     /**
@@ -2997,6 +2942,7 @@ postgres_get_reserve_history (void *cls,
   rhc.reserve_pub = reserve_pub;
   rhc.rh = NULL;
   rhc.rh_tail = NULL;
+  rhc.pg = pg;
   rhc.status = GNUNET_OK;
   qs = GNUNET_DB_STATUS_SUCCESS_NO_RESULTS; /* make static analysis happy */
   for (unsigned int i=0;NULL != work[i].cb;i++)
@@ -3044,6 +2990,7 @@ postgres_have_deposit (void *cls,
                        const struct TALER_EXCHANGEDB_Deposit *deposit,
                        int check_extras)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (&deposit->coin.coin_pub),
     GNUNET_PQ_query_param_auto_from_type (&deposit->h_contract_terms),
@@ -3055,7 +3002,7 @@ postgres_have_deposit (void *cls,
   };
   struct TALER_EXCHANGEDB_Deposit deposit2;
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("amount_with_fee",
+    TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                  &deposit2.amount_with_fee),
     TALER_PQ_result_spec_absolute_time ("timestamp",
                                         &deposit2.timestamp),
@@ -3125,8 +3072,8 @@ postgres_mark_deposit_tiny (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "mark_deposit_tiny",
-                                            params);
+                                             "mark_deposit_tiny",
+                                             params);
 }
 
 
@@ -3156,15 +3103,15 @@ postgres_test_deposit_done (void *cls,
   uint8_t done = 0;
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_auto_from_type ("done",
-                                         &done),
+                                          &done),
     GNUNET_PQ_result_spec_end
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                "test_deposit_done",
-                                                params,
-                                                rs);
+                                                 "test_deposit_done",
+                                                 params,
+                                                 rs);
   if (qs < 0)
     return qs;
   if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
@@ -3196,8 +3143,8 @@ postgres_mark_deposit_done (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "mark_deposit_done",
-                                            params);
+                                             "mark_deposit_done",
+                                             params);
 }
 
 
@@ -3218,6 +3165,7 @@ postgres_get_ready_deposit (void *cls,
                             TALER_EXCHANGEDB_DepositIterator deposit_cb,
                             void *deposit_cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
   struct GNUNET_PQ_QueryParam params[] = {
     TALER_PQ_query_param_absolute_time (&now),
@@ -3233,19 +3181,19 @@ postgres_get_ready_deposit (void *cls,
   json_t *wire;
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_uint64 ("deposit_serial_id",
-                                 &serial_id),
-    TALER_PQ_result_spec_amount ("amount_with_fee",
-                                &amount_with_fee),
-    TALER_PQ_result_spec_amount ("fee_deposit",
-                                &deposit_fee),
+                                  &serial_id),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
+                                 &amount_with_fee),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
+                                 &deposit_fee),
     TALER_PQ_result_spec_absolute_time ("wire_deadline",
-                                        &wire_deadline),
+                                        &wire_deadline),
     GNUNET_PQ_result_spec_auto_from_type ("h_contract_terms",
-                                         &h_contract_terms),
+                                          &h_contract_terms),
     GNUNET_PQ_result_spec_auto_from_type ("merchant_pub",
-                                         &merchant_pub),
+                                          &merchant_pub),
     GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
-                                         &coin_pub),
+                                          &coin_pub),
     TALER_PQ_result_spec_json ("wire",
                                &wire),
     GNUNET_PQ_result_spec_end
@@ -3254,26 +3202,26 @@ postgres_get_ready_deposit (void *cls,
 
   (void) GNUNET_TIME_round_abs (&now);
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-             "Finding ready deposits by deadline %s (%llu)\n",
-             GNUNET_STRINGS_absolute_time_to_string (now),
-             (unsigned long long) now.abs_value_us);
+              "Finding ready deposits by deadline %s (%llu)\n",
+              GNUNET_STRINGS_absolute_time_to_string (now),
+              (unsigned long long) now.abs_value_us);
 
   qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                "deposits_get_ready",
-                                                params,
-                                                rs);
+                                                 "deposits_get_ready",
+                                                 params,
+                                                 rs);
   if (qs <= 0)
     return qs;
 
   qs = deposit_cb (deposit_cb_cls,
-                  serial_id,
-                  &merchant_pub,
-                  &coin_pub,
-                  &amount_with_fee,
-                  &deposit_fee,
-                  &h_contract_terms,
-                  wire_deadline,
-                  wire);
+                   serial_id,
+                   &merchant_pub,
+                   &coin_pub,
+                   &amount_with_fee,
+                   &deposit_fee,
+                   &h_contract_terms,
+                   wire_deadline,
+                   wire);
   GNUNET_PQ_cleanup_result (rs);
   return qs;
 }
@@ -3300,6 +3248,11 @@ struct MatchingDepositContext
   const struct TALER_MerchantPublicKeyP *merchant_pub;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Maximum number of results to return.
    */
   uint32_t limit;
@@ -3327,17 +3280,18 @@ struct MatchingDepositContext
  */
 static void
 match_deposit_cb (void *cls,
-                 PGresult *result,
-                 unsigned int num_results)
+                  PGresult *result,
+                  unsigned int num_results)
 {
   struct MatchingDepositContext *mdc = cls;
+  struct PostgresClosure *pg = mdc->pg;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Found %u/%u matching deposits\n",
-             num_results,
-             mdc->limit);
+              num_results,
+              mdc->limit);
   num_results = GNUNET_MIN (num_results,
-                           mdc->limit);
+                            mdc->limit);
   for (mdc->i=0;mdc->i<num_results;mdc->i++)
   {
     struct TALER_Amount amount_with_fee;
@@ -3350,9 +3304,9 @@ match_deposit_cb (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_uint64 ("deposit_serial_id",
                                     &serial_id),
-      TALER_PQ_result_spec_amount ("amount_with_fee",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                    &amount_with_fee),
-      TALER_PQ_result_spec_amount ("fee_deposit",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
                                    &deposit_fee),
       TALER_PQ_result_spec_absolute_time ("wire_deadline",
                                            &wire_deadline),
@@ -3373,14 +3327,14 @@ match_deposit_cb (void *cls,
       return;
     }
     qs = mdc->deposit_cb (mdc->deposit_cb_cls,
-                         serial_id,
-                         mdc->merchant_pub,
-                         &coin_pub,
-                         &amount_with_fee,
-                         &deposit_fee,
-                         &h_contract_terms,
-                         wire_deadline,
-                         NULL);
+                          serial_id,
+                          mdc->merchant_pub,
+                          &coin_pub,
+                          &amount_with_fee,
+                          &deposit_fee,
+                          &h_contract_terms,
+                          wire_deadline,
+                          NULL);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
       break;
@@ -3411,6 +3365,7 @@ postgres_iterate_matching_deposits (void *cls,
                                     void *deposit_cb_cls,
                                     uint32_t limit)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (merchant_pub),
     GNUNET_PQ_query_param_auto_from_type (h_wire),
@@ -3422,13 +3377,14 @@ postgres_iterate_matching_deposits (void *cls,
   mdc.deposit_cb = deposit_cb;
   mdc.deposit_cb_cls = deposit_cb_cls;
   mdc.merchant_pub = merchant_pub;
+  mdc.pg = pg;
   mdc.limit = limit;
   mdc.status = GNUNET_OK;
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "deposits_iterate_matching",
-                                            params,
-                                            &match_deposit_cb,
-                                            &mdc);
+                                             "deposits_iterate_matching",
+                                             params,
+                                             &match_deposit_cb,
+                                             &mdc);
   if (GNUNET_OK != mdc.status)
   {
     GNUNET_break (0);
@@ -3464,7 +3420,7 @@ postgres_get_known_coin (void *cls,
     GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
                                           &coin_info->denom_pub_hash),
     GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
-                                        &coin_info->denom_sig.rsa_signature),
+                                         &coin_info->denom_sig.rsa_signature),
     GNUNET_PQ_result_spec_end
   };
 
@@ -3475,9 +3431,9 @@ postgres_get_known_coin (void *cls,
   if (NULL == session)
     session = postgres_get_session (pc);
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  "get_known_coin",
-                                                  params,
-                                                  rs);
+                                                   "get_known_coin",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -3668,8 +3624,8 @@ postgres_insert_refund (void *cls,
                  TALER_amount_cmp_currency (&refund->refund_amount,
                                             &refund->refund_fee));
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "insert_refund",
-                                            params);
+                                             "insert_refund",
+                                             params);
 }
 
 
@@ -3689,6 +3645,11 @@ struct SelectRefundContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Set to #GNUNET_SYSERR on error.
    */
   int status;
@@ -3709,6 +3670,7 @@ get_refunds_cb (void *cls,
                unsigned int num_results)
 {
   struct SelectRefundContext *srctx = cls;
+  struct PostgresClosure *pg = srctx->pg;
 
   for (unsigned int i=0;i<num_results;i++)
   {
@@ -3720,37 +3682,37 @@ get_refunds_cb (void *cls,
     struct TALER_Amount refund_fee;
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_auto_from_type ("merchant_pub",
-                                           &merchant_pub),
+                                            &merchant_pub),
       GNUNET_PQ_result_spec_auto_from_type ("merchant_sig",
-                                           &merchant_sig),
+                                            &merchant_sig),
       GNUNET_PQ_result_spec_auto_from_type ("h_contract_terms",
-                                           &h_contract),
+                                            &h_contract),
       GNUNET_PQ_result_spec_uint64 ("rtransaction_id",
-                                   &rtransaction_id),
-      TALER_PQ_result_spec_amount ("amount_with_fee",
-                                  &amount_with_fee),
-      TALER_PQ_result_spec_amount ("fee_refund",
-                                  &refund_fee),
+                                    &rtransaction_id),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
+                                   &amount_with_fee),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refund",
+                                   &refund_fee),
       GNUNET_PQ_result_spec_end
     };
 
     if (GNUNET_OK !=
-       GNUNET_PQ_extract_result (result,
-                                 rs,
-                                 i))
+        GNUNET_PQ_extract_result (result,
+                                  rs,
+                                  i))
     {
       GNUNET_break (0);
       srctx->status = GNUNET_SYSERR;
       return;
     }
     if (GNUNET_OK !=
-       srctx->cb (srctx->cb_cls,
-                  &merchant_pub,
-                  &merchant_sig,
-                  &h_contract,
-                  rtransaction_id,
-                  &amount_with_fee,
-                  &refund_fee))
+        srctx->cb (srctx->cb_cls,
+                   &merchant_pub,
+                   &merchant_sig,
+                   &h_contract,
+                   rtransaction_id,
+                   &amount_with_fee,
+                   &refund_fee))
       return;
   }
 }
@@ -3768,11 +3730,12 @@ get_refunds_cb (void *cls,
  */
 static enum GNUNET_DB_QueryStatus
 postgres_select_refunds_by_coin (void *cls,
-                                struct TALER_EXCHANGEDB_Session *session,
-                                const struct TALER_CoinSpendPublicKeyP 
*coin_pub,
-                                TALER_EXCHANGEDB_RefundCoinCallback cb,
-                                void *cb_cls)
+                                 struct TALER_EXCHANGEDB_Session *session,
+                                 const struct TALER_CoinSpendPublicKeyP 
*coin_pub,
+                                 TALER_EXCHANGEDB_RefundCoinCallback cb,
+                                 void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   enum GNUNET_DB_QueryStatus qs;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (coin_pub),
@@ -3781,6 +3744,7 @@ postgres_select_refunds_by_coin (void *cls,
   struct SelectRefundContext srctx = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
 
@@ -3810,7 +3774,7 @@ postgres_get_melt (void *cls,
                    const struct TALER_RefreshCommitmentP *rc,
                    struct TALER_EXCHANGEDB_RefreshMelt *refresh_melt)
 {
-  struct PostgresClosure *pc = cls;
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (rc),
     GNUNET_PQ_query_param_end
@@ -3818,7 +3782,7 @@ postgres_get_melt (void *cls,
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
                                           
&refresh_melt->session.coin.denom_pub_hash),
-    TALER_PQ_result_spec_amount ("fee_refresh",
+    TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refresh",
                                  &refresh_melt->melt_fee),
     GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
                                          
&refresh_melt->session.coin.denom_sig.rsa_signature),
@@ -3828,14 +3792,14 @@ postgres_get_melt (void *cls,
                                           
&refresh_melt->session.coin.coin_pub),
     GNUNET_PQ_result_spec_auto_from_type ("old_coin_sig",
                                           &refresh_melt->session.coin_sig),
-    TALER_PQ_result_spec_amount ("amount_with_fee",
+    TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                  &refresh_melt->session.amount_with_fee),
     GNUNET_PQ_result_spec_end
   };
   enum GNUNET_DB_QueryStatus qs;
 
   if (NULL == session)
-    session = postgres_get_session (pc);
+    session = postgres_get_session (pg);
   qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn,
                                                 "get_melt",
                                                 params,
@@ -3867,7 +3831,7 @@ postgres_get_melt_index (void *cls,
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_uint32 ("noreveal_index",
-                                 noreveal_index),
+                                  noreveal_index),
     GNUNET_PQ_result_spec_end
   };
 
@@ -4041,12 +4005,12 @@ add_revealed_coins (void *cls,
       GNUNET_PQ_result_spec_uint32 ("newcoin_index",
                                     &off),
       GNUNET_PQ_result_spec_rsa_public_key ("denom_pub",
-                                           &rrc->denom_pub.rsa_public_key),
+                                            &rrc->denom_pub.rsa_public_key),
       GNUNET_PQ_result_spec_auto_from_type ("link_sig",
                                             &rrc->orig_coin_link_sig),
       GNUNET_PQ_result_spec_variable_size ("coin_ev",
-                                          (void **) &rrc->coin_ev,
-                                          &rrc->coin_ev_size),
+                                           (void **) &rrc->coin_ev,
+                                           &rrc->coin_ev_size),
       GNUNET_PQ_result_spec_rsa_signature ("ev_sig",
                                            &rrc->coin_sig.rsa_signature),
       GNUNET_PQ_result_spec_end
@@ -4280,14 +4244,14 @@ add_ldl (void *cls,
       };
 
       if (GNUNET_OK !=
-         GNUNET_PQ_extract_result (result,
+          GNUNET_PQ_extract_result (result,
                                     rs,
                                     i))
       {
-       GNUNET_break (0);
-       GNUNET_free (pos);
-       ldctx->status = GNUNET_SYSERR;
-       return;
+        GNUNET_break (0);
+        GNUNET_free (pos);
+        ldctx->status = GNUNET_SYSERR;
+        return;
       }
     }
     if ( (NULL != ldctx->last) &&
@@ -4392,6 +4356,11 @@ struct CoinHistoryContext
   struct TALER_EXCHANGEDB_Session *session;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Set to transaction status.
    */
   enum GNUNET_DB_QueryStatus status;
@@ -4412,7 +4381,8 @@ add_coin_deposit (void *cls,
                   unsigned int num_results)
 {
   struct CoinHistoryContext *chc = cls;
-
+  struct PostgresClosure *pg = chc->pg;
+    
   for (unsigned int i = 0; i < num_results; i++)
   {
     struct TALER_EXCHANGEDB_Deposit *deposit;
@@ -4422,9 +4392,9 @@ add_coin_deposit (void *cls,
     deposit = GNUNET_new (struct TALER_EXCHANGEDB_Deposit);
     {
       struct GNUNET_PQ_ResultSpec rs[] = {
-        TALER_PQ_result_spec_amount ("amount_with_fee",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                      &deposit->amount_with_fee),
-        TALER_PQ_result_spec_amount ("fee_deposit",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
                                      &deposit->deposit_fee),
         TALER_PQ_result_spec_absolute_time ("timestamp",
                                             &deposit->timestamp),
@@ -4491,6 +4461,7 @@ add_coin_melt (void *cls,
                unsigned int num_results)
 {
   struct CoinHistoryContext *chc = cls;
+  struct PostgresClosure *pg = chc->pg;
 
   for (unsigned int i=0;i<num_results;i++)
   {
@@ -4506,9 +4477,9 @@ add_coin_melt (void *cls,
         /* oldcoin_index not needed */
         GNUNET_PQ_result_spec_auto_from_type ("old_coin_sig",
                                               &melt->session.coin_sig),
-        TALER_PQ_result_spec_amount ("amount_with_fee",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                      &melt->session.amount_with_fee),
-        TALER_PQ_result_spec_amount ("fee_refresh",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refresh",
                                      &melt->melt_fee),
         GNUNET_PQ_result_spec_end
       };
@@ -4560,6 +4531,7 @@ add_coin_refund (void *cls,
                  unsigned int num_results)
 {
   struct CoinHistoryContext *chc = cls;
+  struct PostgresClosure *pg = chc->pg;
 
   for (unsigned int i=0;i<num_results;i++)
   {
@@ -4578,9 +4550,9 @@ add_coin_refund (void *cls,
                                               &refund->h_contract_terms),
         GNUNET_PQ_result_spec_uint64 ("rtransaction_id",
                                       &refund->rtransaction_id),
-        TALER_PQ_result_spec_amount ("amount_with_fee",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                      &refund->refund_amount),
-        TALER_PQ_result_spec_amount ("fee_refund",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refund",
                                      &refund->refund_fee),
         GNUNET_PQ_result_spec_end
       };
@@ -4631,6 +4603,7 @@ add_old_coin_payback (void *cls,
                       unsigned int num_results)
 {
   struct CoinHistoryContext *chc = cls;
+  struct PostgresClosure *pg = chc->pg;
 
   for (unsigned int i=0;i<num_results;i++)
   {
@@ -4646,7 +4619,7 @@ add_old_coin_payback (void *cls,
                                               &payback->coin_sig),
         GNUNET_PQ_result_spec_auto_from_type ("coin_blind",
                                               &payback->coin_blind),
-        TALER_PQ_result_spec_amount ("amount",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                      &payback->value),
         TALER_PQ_result_spec_absolute_time ("timestamp",
                                             &payback->timestamp),
@@ -4692,6 +4665,7 @@ add_coin_payback (void *cls,
                   unsigned int num_results)
 {
   struct CoinHistoryContext *chc = cls;
+  struct PostgresClosure *pg = chc->pg;
 
   for (unsigned int i=0;i<num_results;i++)
   {
@@ -4701,7 +4675,7 @@ add_coin_payback (void *cls,
     payback = GNUNET_new (struct TALER_EXCHANGEDB_Payback);
     {
       struct GNUNET_PQ_ResultSpec rs[] = {
-        TALER_PQ_result_spec_amount ("amount",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                      &payback->value),
         GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
                                               &payback->reserve_pub),
@@ -4753,6 +4727,7 @@ add_coin_payback_refresh (void *cls,
                           unsigned int num_results)
 {
   struct CoinHistoryContext *chc = cls;
+  struct PostgresClosure *pg = chc->pg;
 
   for (unsigned int i=0;i<num_results;i++)
   {
@@ -4768,7 +4743,7 @@ add_coin_payback_refresh (void *cls,
                                               &payback->coin_sig),
         GNUNET_PQ_result_spec_auto_from_type ("coin_blind",
                                               &payback->coin_blind),
-        TALER_PQ_result_spec_amount ("amount",
+        TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                      &payback->value),
         TALER_PQ_result_spec_absolute_time ("timestamp",
                                             &payback->timestamp),
@@ -4834,6 +4809,7 @@ postgres_get_coin_transactions (void *cls,
                                 int include_payback,
                                 struct TALER_EXCHANGEDB_TransactionList **tlp)
 {
+  struct PostgresClosure *pg = cls;
   static const struct Work work_op[] = {
     /** #TALER_EXCHANGEDB_TT_DEPOSIT */
     { "get_deposit_with_coin_pub",
@@ -4883,6 +4859,7 @@ postgres_get_coin_transactions (void *cls,
   chc.status = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
   chc.coin_pub = coin_pub;
   chc.session = session;
+  chc.pg = pg;
   chc.db_cls = cls;
   for (unsigned int i=0;NULL != work[i].statement; i++)
   {
@@ -4926,6 +4903,11 @@ struct WireTransferResultContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Set to #GNUNET_SYSERR on serious errors.
    */
   int status;
@@ -4947,6 +4929,7 @@ handle_wt_result (void *cls,
                   unsigned int num_results)
 {
   struct WireTransferResultContext *ctx = cls;
+  struct PostgresClosure *pg = ctx->pg;
 
   for (unsigned int i=0;i<num_results;i++)
   {
@@ -4969,8 +4952,8 @@ handle_wt_result (void *cls,
       GNUNET_PQ_result_spec_auto_from_type ("coin_pub", &coin_pub),
       GNUNET_PQ_result_spec_auto_from_type ("merchant_pub", &merchant_pub),
       TALER_PQ_result_spec_absolute_time ("execution_date", &exec_time),
-      TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee),
-      TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee", &amount_with_fee),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit", &deposit_fee),
       GNUNET_PQ_result_spec_end
     };
 
@@ -5017,6 +5000,7 @@ postgres_lookup_wire_transfer (void *cls,
                                TALER_EXCHANGEDB_WireTransferDataCallback cb,
                                void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (wtid),
     GNUNET_PQ_query_param_end
@@ -5026,6 +5010,7 @@ postgres_lookup_wire_transfer (void *cls,
 
   ctx.cb = cb;
   ctx.cb_cls = cb_cls;
+  ctx.pg = pg;
   ctx.status = GNUNET_OK;
   /* check if the melt record exists and get it */
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
@@ -5053,17 +5038,18 @@ postgres_lookup_wire_transfer (void *cls,
  * @param cb function to call with the result
  * @param cb_cls closure to pass to @a cb
  * @return transaction status code
- */
+- */
 static enum GNUNET_DB_QueryStatus
 postgres_wire_lookup_deposit_wtid (void *cls,
                                    struct TALER_EXCHANGEDB_Session *session,
-                                  const struct GNUNET_HashCode 
*h_contract_terms,
-                                  const struct GNUNET_HashCode *h_wire,
-                                  const struct TALER_CoinSpendPublicKeyP 
*coin_pub,
-                                  const struct TALER_MerchantPublicKeyP 
*merchant_pub,
-                                  TALER_EXCHANGEDB_TrackTransactionCallback cb,
-                                  void *cb_cls)
+                                   const struct GNUNET_HashCode 
*h_contract_terms,
+                                   const struct GNUNET_HashCode *h_wire,
+                                   const struct TALER_CoinSpendPublicKeyP 
*coin_pub,
+                                   const struct TALER_MerchantPublicKeyP 
*merchant_pub,
+                                   TALER_EXCHANGEDB_TrackTransactionCallback 
cb,
+                                   void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   enum GNUNET_DB_QueryStatus qs;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (coin_pub),
@@ -5079,8 +5065,8 @@ postgres_wire_lookup_deposit_wtid (void *cls,
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_auto_from_type ("wtid_raw", &wtid),
     TALER_PQ_result_spec_absolute_time ("execution_date", &exec_time),
-    TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee),
-    TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee", &amount_with_fee),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit", &deposit_fee),
     GNUNET_PQ_result_spec_end
   };
 
@@ -5103,7 +5089,7 @@ postgres_wire_lookup_deposit_wtid (void *cls,
 
   GNUNET_assert (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "lookup_deposit_wtid returned 0 matching rows\n");
+              "lookup_deposit_wtid returned 0 matching rows\n");
   {
     /* Check if transaction exists in deposits, so that we just
        do not have a WTID yet, if so, do call the CB with a NULL wtid
@@ -5119,16 +5105,16 @@ postgres_wire_lookup_deposit_wtid (void *cls,
     struct TALER_Amount amount_with_fee;
     struct TALER_Amount deposit_fee;
     struct GNUNET_PQ_ResultSpec rs2[] = {
-      TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee),
-      TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee", &amount_with_fee),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit", &deposit_fee),
       TALER_PQ_result_spec_absolute_time ("wire_deadline", &exec_time),
       GNUNET_PQ_result_spec_end
     };
 
     qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  "get_deposit_for_wtid",
-                                                  params2,
-                                                  rs2);
+                                                   "get_deposit_for_wtid",
+                                                   params2,
+                                                   rs2);
     if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
     {
       /* Ok, we're aware of the transaction, but it has not yet been
@@ -5168,8 +5154,8 @@ postgres_insert_aggregation_tracking (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "insert_aggregation_tracking",
-                                            params);
+                                             "insert_aggregation_tracking",
+                                             params);
 }
 
 
@@ -5195,9 +5181,10 @@ postgres_get_wire_fee (void *cls,
                        struct GNUNET_TIME_Absolute *start_date,
                        struct GNUNET_TIME_Absolute *end_date,
                        struct TALER_Amount *wire_fee,
-                      struct TALER_Amount *closing_fee,
+                       struct TALER_Amount *closing_fee,
                        struct TALER_MasterSignatureP *master_sig)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_string (type),
     TALER_PQ_query_param_absolute_time (&date),
@@ -5206,16 +5193,16 @@ postgres_get_wire_fee (void *cls,
   struct GNUNET_PQ_ResultSpec rs[] = {
     TALER_PQ_result_spec_absolute_time ("start_date", start_date),
     TALER_PQ_result_spec_absolute_time ("end_date", end_date),
-    TALER_PQ_result_spec_amount ("wire_fee", wire_fee),
-    TALER_PQ_result_spec_amount ("closing_fee", closing_fee),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("wire_fee", wire_fee),
+    TALER_PQ_RESULT_SPEC_AMOUNT ("closing_fee", closing_fee),
     GNUNET_PQ_result_spec_auto_from_type ("master_sig", master_sig),
     GNUNET_PQ_result_spec_end
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  "get_wire_fee",
-                                                  params,
-                                                  rs);
+                                                   "get_wire_fee",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -5242,6 +5229,7 @@ postgres_insert_wire_fee (void *cls,
                           const struct TALER_Amount *closing_fee,
                           const struct TALER_MasterSignatureP *master_sig)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_string (type),
     TALER_PQ_query_param_absolute_time (&start_date),
@@ -5258,15 +5246,15 @@ postgres_insert_wire_fee (void *cls,
   struct GNUNET_TIME_Absolute ed;
   enum GNUNET_DB_QueryStatus qs;
 
-  qs = postgres_get_wire_fee (cls,
-                             session,
-                             type,
-                             start_date,
-                             &sd,
-                             &ed,
-                             &wf,
-                             &cf,
-                             &sig);
+  qs = postgres_get_wire_fee (pg,
+                              session,
+                              type,
+                              start_date,
+                              &sd,
+                              &ed,
+                              &wf,
+                              &cf,
+                              &sig);
   if (qs < 0)
     return qs;
   if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
@@ -5300,8 +5288,8 @@ postgres_insert_wire_fee (void *cls,
   }
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "insert_wire_fee",
-                                            params);
+                                             "insert_wire_fee",
+                                             params);
 }
 
 
@@ -5321,6 +5309,11 @@ struct ExpiredReserveContext
   void *rec_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Set to #GNUNET_SYSERR on error.
    */
   int status;
@@ -5337,10 +5330,11 @@ struct ExpiredReserveContext
  */
 static void
 reserve_expired_cb (void *cls,
-                   PGresult *result,
-                   unsigned int num_results)
+                    PGresult *result,
+                    unsigned int num_results)
 {
   struct ExpiredReserveContext *erc = cls;
+  struct PostgresClosure *pg = erc->pg;
   int ret;
 
   ret = GNUNET_OK;
@@ -5352,30 +5346,30 @@ reserve_expired_cb (void *cls,
     struct TALER_Amount remaining_balance;
     struct GNUNET_PQ_ResultSpec rs[] = {
       TALER_PQ_result_spec_absolute_time ("expiration_date",
-                                          &exp_date),
+                                          &exp_date),
       GNUNET_PQ_result_spec_string ("account_details",
                                     &account_details),
       GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
-                                           &reserve_pub),
-      TALER_PQ_result_spec_amount ("current_balance",
-                                  &remaining_balance),
+                                            &reserve_pub),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("current_balance",
+                                   &remaining_balance),
       GNUNET_PQ_result_spec_end
     };
 
     if (GNUNET_OK !=
-       GNUNET_PQ_extract_result (result,
-                                 rs,
-                                 i))
+        GNUNET_PQ_extract_result (result,
+                                  rs,
+                                  i))
     {
       GNUNET_break (0);
       ret = GNUNET_SYSERR;
       break;
     }
     ret = erc->rec (erc->rec_cls,
-                   &reserve_pub,
-                   &remaining_balance,
-                   account_details,
-                   exp_date);
+                    &reserve_pub,
+                    &remaining_balance,
+                    account_details,
+                    exp_date);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_OK != ret)
       break;
@@ -5397,11 +5391,12 @@ reserve_expired_cb (void *cls,
  */
 static enum GNUNET_DB_QueryStatus
 postgres_get_expired_reserves (void *cls,
-                              struct TALER_EXCHANGEDB_Session *session,
-                              struct GNUNET_TIME_Absolute now,
-                              TALER_EXCHANGEDB_ReserveExpiredCallback rec,
-                              void *rec_cls)
+                               struct TALER_EXCHANGEDB_Session *session,
+                               struct GNUNET_TIME_Absolute now,
+                               TALER_EXCHANGEDB_ReserveExpiredCallback rec,
+                               void *rec_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     TALER_PQ_query_param_absolute_time (&now),
     GNUNET_PQ_query_param_end
@@ -5411,12 +5406,13 @@ postgres_get_expired_reserves (void *cls,
 
   ectx.rec = rec;
   ectx.rec_cls = rec_cls;
+  ectx.pg = pg;
   ectx.status = GNUNET_OK;
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "get_expired_reserves",
-                                            params,
-                                            &reserve_expired_cb,
-                                            &ectx);
+                                             "get_expired_reserves",
+                                             params,
+                                             &reserve_expired_cb,
+                                             &ectx);
   if (GNUNET_OK != ectx.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -5438,13 +5434,13 @@ postgres_get_expired_reserves (void *cls,
  */
 static enum GNUNET_DB_QueryStatus
 postgres_insert_reserve_closed (void *cls,
-                               struct TALER_EXCHANGEDB_Session *session,
-                               const struct TALER_ReservePublicKeyP 
*reserve_pub,
-                               struct GNUNET_TIME_Absolute execution_date,
-                               const char *receiver_account,
-                               const struct TALER_WireTransferIdentifierRawP 
*wtid,
-                               const struct TALER_Amount *amount_with_fee,
-                               const struct TALER_Amount *closing_fee)
+                                struct TALER_EXCHANGEDB_Session *session,
+                                const struct TALER_ReservePublicKeyP 
*reserve_pub,
+                                struct GNUNET_TIME_Absolute execution_date,
+                                const char *receiver_account,
+                                const struct TALER_WireTransferIdentifierRawP 
*wtid,
+                                const struct TALER_Amount *amount_with_fee,
+                                const struct TALER_Amount *closing_fee)
 {
   struct TALER_EXCHANGEDB_Reserve reserve;
   struct GNUNET_PQ_QueryParam params[] = {
@@ -5522,8 +5518,8 @@ postgres_wire_prepare_data_insert (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "wire_prepare_data_insert",
-                                            params);
+                                             "wire_prepare_data_insert",
+                                             params);
 }
 
 
@@ -5546,8 +5542,8 @@ postgres_wire_prepare_data_mark_finished (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "wire_prepare_data_mark_done",
-                                            params);
+                                             "wire_prepare_data_mark_done",
+                                             params);
 }
 
 
@@ -5577,19 +5573,19 @@ postgres_wire_prepare_data_get (void *cls,
   size_t buf_size;
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_uint64 ("prewire_uuid",
-                                 &prewire_uuid),
+                                  &prewire_uuid),
     GNUNET_PQ_result_spec_string ("type",
-                                 &type),
+                                  &type),
     GNUNET_PQ_result_spec_variable_size ("buf",
-                                        &buf,
-                                        &buf_size),
+                                         &buf,
+                                         &buf_size),
     GNUNET_PQ_result_spec_end
   };
 
   qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                "wire_prepare_data_get",
-                                                params,
-                                                rs);
+                                                 "wire_prepare_data_get",
+                                                 params,
+                                                 rs);
   if (0 >= qs)
     return qs;
   cb (cb_cls,
@@ -5676,8 +5672,8 @@ postgres_store_wire_transfer_out (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "insert_wire_out",
-                                            params);
+                                             "insert_wire_out",
+                                             params);
 }
 
 
@@ -5692,7 +5688,7 @@ postgres_store_wire_transfer_out (void *cls,
 static int
 postgres_gc (void *cls)
 {
-  struct PostgresClosure *pc = cls;
+  struct PostgresClosure *pg = cls;
   struct GNUNET_TIME_Absolute now;
   struct GNUNET_TIME_Absolute long_ago;
   struct GNUNET_PQ_QueryParam params_none[] = {
@@ -5718,7 +5714,7 @@ postgres_gc (void *cls)
                                             GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_YEARS,
                                                                            
10));
   /* FIXME: use GNUNET_PQ_connect_with_cfg instead? */
-  conn = GNUNET_PQ_connect (pc->connection_cfg_str);
+  conn = GNUNET_PQ_connect (pg->connection_cfg_str);
   if (NULL == conn)
     return GNUNET_SYSERR;
   ret = postgres_prepare (conn);
@@ -5767,6 +5763,11 @@ struct DepositSerialContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -5783,11 +5784,12 @@ struct DepositSerialContext
  */
 static void
 deposit_serial_helper_cb (void *cls,
-                         PGresult *result,
-                         unsigned int num_results)
+                          PGresult *result,
+                          unsigned int num_results)
 {
   struct DepositSerialContext *dsc = cls;
-
+  struct PostgresClosure *pg = dsc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     struct TALER_EXCHANGEDB_Deposit deposit;
@@ -5795,7 +5797,7 @@ deposit_serial_helper_cb (void *cls,
     uint8_t done = 0;
     uint64_t rowid;
     struct GNUNET_PQ_ResultSpec rs[] = {
-      TALER_PQ_result_spec_amount ("amount_with_fee",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                    &deposit.amount_with_fee),
       TALER_PQ_result_spec_absolute_time ("timestamp",
                                           &deposit.timestamp),
@@ -5833,18 +5835,18 @@ deposit_serial_helper_cb (void *cls,
       return;
     }
     ret = dsc->cb (dsc->cb_cls,
-                  rowid,
-                  deposit.timestamp,
-                  &deposit.merchant_pub,
-                  &denom_pub,
-                  &deposit.coin.coin_pub,
-                  &deposit.csig,
-                  &deposit.amount_with_fee,
-                  &deposit.h_contract_terms,
-                  deposit.refund_deadline,
-                  deposit.wire_deadline,
-                  deposit.receiver_wire_account,
-                  done);
+                   rowid,
+                   deposit.timestamp,
+                   &deposit.merchant_pub,
+                   &denom_pub,
+                   &deposit.coin.coin_pub,
+                   &deposit.csig,
+                   &deposit.amount_with_fee,
+                   &deposit.h_contract_terms,
+                   deposit.refund_deadline,
+                   deposit.wire_deadline,
+                   deposit.receiver_wire_account,
+                   done);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_OK != ret)
       break;
@@ -5870,6 +5872,7 @@ postgres_select_deposits_above_serial_id (void *cls,
                                           TALER_EXCHANGEDB_DepositCallback cb,
                                           void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -5877,15 +5880,16 @@ postgres_select_deposits_above_serial_id (void *cls,
   struct DepositSerialContext dsc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "audit_get_deposits_incr",
-                                            params,
-                                            &deposit_serial_helper_cb,
-                                            &dsc);
+                                             "audit_get_deposits_incr",
+                                             params,
+                                             &deposit_serial_helper_cb,
+                                             &dsc);
   if (GNUNET_OK != dsc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -5909,6 +5913,11 @@ struct RefreshsSerialContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */ 
+  struct PostgresClosure *pg;
+  
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -5925,11 +5934,12 @@ struct RefreshsSerialContext
  */
 static void
 refreshs_serial_helper_cb (void *cls,
-                          PGresult *result,
-                          unsigned int num_results)
+                           PGresult *result,
+                           unsigned int num_results)
 {
   struct RefreshsSerialContext *rsc = cls;
-
+  struct PostgresClosure *pg = rsc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     struct TALER_DenominationPublicKey denom_pub;
@@ -5946,7 +5956,7 @@ refreshs_serial_helper_cb (void *cls,
                                             &coin_pub),
       GNUNET_PQ_result_spec_auto_from_type ("old_coin_sig",
                                             &coin_sig),
-      TALER_PQ_result_spec_amount ("amount_with_fee",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                    &amount_with_fee),
       GNUNET_PQ_result_spec_uint32 ("noreveal_index",
                                     &noreveal_index),
@@ -5968,13 +5978,13 @@ refreshs_serial_helper_cb (void *cls,
       return;
     }
     ret = rsc->cb (rsc->cb_cls,
-                  rowid,
-                  &denom_pub,
-                  &coin_pub,
-                  &coin_sig,
-                  &amount_with_fee,
-                  noreveal_index,
-                  &rc);
+                   rowid,
+                   &denom_pub,
+                   &coin_pub,
+                   &coin_sig,
+                   &amount_with_fee,
+                   noreveal_index,
+                   &rc);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_OK != ret)
       break;
@@ -6000,6 +6010,7 @@ postgres_select_refreshs_above_serial_id (void *cls,
                                           
TALER_EXCHANGEDB_RefreshSessionCallback cb,
                                           void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -6007,15 +6018,16 @@ postgres_select_refreshs_above_serial_id (void *cls,
   struct RefreshsSerialContext rsc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            
"audit_get_refresh_commitments_incr",
-                                            params,
-                                            &refreshs_serial_helper_cb,
-                                            &rsc);
+                                             
"audit_get_refresh_commitments_incr",
+                                             params,
+                                             &refreshs_serial_helper_cb,
+                                             &rsc);
   if (GNUNET_OK != rsc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -6039,6 +6051,11 @@ struct RefundsSerialContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -6055,11 +6072,12 @@ struct RefundsSerialContext
  */
 static void
 refunds_serial_helper_cb (void *cls,
-                         PGresult *result,
-                         unsigned int num_results)
+                          PGresult *result,
+                          unsigned int num_results)
 {
   struct RefundsSerialContext *rsc = cls;
-
+  struct PostgresClosure *pg = rsc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     struct TALER_EXCHANGEDB_Refund refund;
@@ -6078,7 +6096,7 @@ refunds_serial_helper_cb (void *cls,
                                             &denom_pub.rsa_public_key),
       GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
                                            &refund.coin.coin_pub),
-      TALER_PQ_result_spec_amount ("amount_with_fee",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                    &refund.refund_amount),
       GNUNET_PQ_result_spec_uint64 ("refund_serial_id",
                                     &rowid),
@@ -6096,14 +6114,14 @@ refunds_serial_helper_cb (void *cls,
       return;
     }
     ret = rsc->cb (rsc->cb_cls,
-                  rowid,
-                  &denom_pub,
-                  &refund.coin.coin_pub,
-                  &refund.merchant_pub,
-                  &refund.merchant_sig,
-                  &refund.h_contract_terms,
-                  refund.rtransaction_id,
-                  &refund.refund_amount);
+                   rowid,
+                   &denom_pub,
+                   &refund.coin.coin_pub,
+                   &refund.merchant_pub,
+                   &refund.merchant_sig,
+                   &refund.h_contract_terms,
+                   refund.rtransaction_id,
+                   &refund.refund_amount);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_OK != ret)
       break;
@@ -6129,6 +6147,7 @@ postgres_select_refunds_above_serial_id (void *cls,
                                          TALER_EXCHANGEDB_RefundCallback cb,
                                          void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -6136,15 +6155,16 @@ postgres_select_refunds_above_serial_id (void *cls,
   struct RefundsSerialContext rsc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "audit_get_refunds_incr",
-                                            params,
-                                            &refunds_serial_helper_cb,
-                                            &rsc);
+                                             "audit_get_refunds_incr",
+                                             params,
+                                             &refunds_serial_helper_cb,
+                                             &rsc);
   if (GNUNET_OK != rsc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -6168,6 +6188,11 @@ struct ReservesInSerialContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -6184,11 +6209,12 @@ struct ReservesInSerialContext
  */
 static void
 reserves_in_serial_helper_cb (void *cls,
-                             PGresult *result,
-                             unsigned int num_results)
+                              PGresult *result,
+                              unsigned int num_results)
 {
   struct ReservesInSerialContext *risc = cls;
-
+  struct PostgresClosure *pg = risc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     struct TALER_ReservePublicKeyP reserve_pub;
@@ -6204,7 +6230,7 @@ reserves_in_serial_helper_cb (void *cls,
       GNUNET_PQ_result_spec_variable_size ("wire_reference",
                                            &wire_reference,
                                            &wire_reference_size),
-      TALER_PQ_result_spec_amount ("credit",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("credit",
                                    &credit),
       TALER_PQ_result_spec_absolute_time("execution_date",
                                           &execution_date),
@@ -6226,13 +6252,13 @@ reserves_in_serial_helper_cb (void *cls,
       return;
     }
     ret = risc->cb (risc->cb_cls,
-                   rowid,
-                   &reserve_pub,
-                   &credit,
-                   sender_account_details,
-                   wire_reference,
-                   wire_reference_size,
-                   execution_date);
+                    rowid,
+                    &reserve_pub,
+                    &credit,
+                    sender_account_details,
+                    wire_reference,
+                    wire_reference_size,
+                    execution_date);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_OK != ret)
       break;
@@ -6258,6 +6284,7 @@ postgres_select_reserves_in_above_serial_id (void *cls,
                                              
TALER_EXCHANGEDB_ReserveInCallback cb,
                                              void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -6265,15 +6292,16 @@ postgres_select_reserves_in_above_serial_id (void *cls,
   struct ReservesInSerialContext risc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            
"audit_reserves_in_get_transactions_incr",
-                                            params,
-                                            &reserves_in_serial_helper_cb,
-                                            &risc);
+                                             
"audit_reserves_in_get_transactions_incr",
+                                             params,
+                                             &reserves_in_serial_helper_cb,
+                                             &risc);
   if (GNUNET_OK != risc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -6300,6 +6328,7 @@ postgres_select_reserves_in_above_serial_id_by_account 
(void *cls,
                                                         
TALER_EXCHANGEDB_ReserveInCallback cb,
                                                         void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_string (account_name),
@@ -6308,15 +6337,16 @@ postgres_select_reserves_in_above_serial_id_by_account 
(void *cls,
   struct ReservesInSerialContext risc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            
"audit_reserves_in_get_transactions_incr_by_account",
-                                            params,
-                                            &reserves_in_serial_helper_cb,
-                                            &risc);
+                                             
"audit_reserves_in_get_transactions_incr_by_account",
+                                             params,
+                                             &reserves_in_serial_helper_cb,
+                                             &risc);
   if (GNUNET_OK != risc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -6340,6 +6370,11 @@ struct ReservesOutSerialContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -6356,11 +6391,12 @@ struct ReservesOutSerialContext
  */
 static void
 reserves_out_serial_helper_cb (void *cls,
-                              PGresult *result,
-                              unsigned int num_results)
+                               PGresult *result,
+                               unsigned int num_results)
 {
   struct ReservesOutSerialContext *rosc = cls;
-
+  struct PostgresClosure *pg = rosc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     struct GNUNET_HashCode h_blind_ev;
@@ -6384,7 +6420,7 @@ reserves_out_serial_helper_cb (void *cls,
                                             &reserve_sig),
       TALER_PQ_result_spec_absolute_time ("execution_date",
                                            &execution_date),
-      TALER_PQ_result_spec_amount ("amount_with_fee",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                    &amount_with_fee),
       GNUNET_PQ_result_spec_uint64 ("reserve_out_serial_id",
                                     &rowid),
@@ -6402,14 +6438,14 @@ reserves_out_serial_helper_cb (void *cls,
       return;
     }
     ret = rosc->cb (rosc->cb_cls,
-                   rowid,
-                   &h_blind_ev,
-                   &denom_pub,
-                   &denom_sig,
-                   &reserve_pub,
-                   &reserve_sig,
-                   execution_date,
-                   &amount_with_fee);
+                    rowid,
+                    &h_blind_ev,
+                    &denom_pub,
+                    &denom_sig,
+                    &reserve_pub,
+                    &reserve_sig,
+                    execution_date,
+                    &amount_with_fee);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_OK != ret)
       break;
@@ -6435,6 +6471,7 @@ postgres_select_reserves_out_above_serial_id (void *cls,
                                               
TALER_EXCHANGEDB_WithdrawCallback cb,
                                               void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -6442,15 +6479,16 @@ postgres_select_reserves_out_above_serial_id (void *cls,
   struct ReservesOutSerialContext rosc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "audit_get_reserves_out_incr",
-                                            params,
-                                            &reserves_out_serial_helper_cb,
-                                            &rosc);
+                                             "audit_get_reserves_out_incr",
+                                             params,
+                                             &reserves_out_serial_helper_cb,
+                                             &rosc);
   if (GNUNET_OK != rosc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -6474,6 +6512,11 @@ struct WireOutSerialContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -6490,11 +6533,12 @@ struct WireOutSerialContext
  */
 static void
 wire_out_serial_helper_cb (void *cls,
-                          PGresult *result,
-                          unsigned int num_results)
+                           PGresult *result,
+                           unsigned int num_results)
 {
   struct WireOutSerialContext *wosc = cls;
-
+  struct PostgresClosure *pg = wosc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     uint64_t rowid;
@@ -6511,7 +6555,7 @@ wire_out_serial_helper_cb (void *cls,
                                             &wtid),
       TALER_PQ_result_spec_json ("wire_target",
                                  &wire),
-      TALER_PQ_result_spec_amount ("amount",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                    &amount),
       GNUNET_PQ_result_spec_end
     };
@@ -6527,11 +6571,11 @@ wire_out_serial_helper_cb (void *cls,
       return;
     }
     ret = wosc->cb (wosc->cb_cls,
-                   rowid,
-                   date,
-                   &wtid,
-                   wire,
-                   &amount);
+                    rowid,
+                    date,
+                    &wtid,
+                    wire,
+                    &amount);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_OK != ret)
       break;
@@ -6557,6 +6601,7 @@ postgres_select_wire_out_above_serial_id (void *cls,
                                           
TALER_EXCHANGEDB_WireTransferOutCallback cb,
                                           void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -6564,15 +6609,16 @@ postgres_select_wire_out_above_serial_id (void *cls,
   struct WireOutSerialContext wosc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "audit_get_wire_incr",
-                                            params,
-                                            &wire_out_serial_helper_cb,
-                                            &wosc);
+                                             "audit_get_wire_incr",
+                                             params,
+                                             &wire_out_serial_helper_cb,
+                                             &wosc);
   if (GNUNET_OK != wosc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -6599,6 +6645,7 @@ postgres_select_wire_out_above_serial_id_by_account (void 
*cls,
                                                      
TALER_EXCHANGEDB_WireTransferOutCallback cb,
                                                      void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_string (account_name),
@@ -6607,15 +6654,16 @@ postgres_select_wire_out_above_serial_id_by_account 
(void *cls,
   struct WireOutSerialContext wosc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "audit_get_wire_incr_by_account",
-                                            params,
-                                            &wire_out_serial_helper_cb,
-                                            &wosc);
+                                             "audit_get_wire_incr_by_account",
+                                             params,
+                                             &wire_out_serial_helper_cb,
+                                             &wosc);
   if (GNUNET_OK != wosc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -6639,6 +6687,11 @@ struct PaybackSerialContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -6659,7 +6712,8 @@ payback_serial_helper_cb (void *cls,
                           unsigned int num_results)
 {
   struct PaybackSerialContext *psc = cls;
-
+  struct PostgresClosure *pg = psc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     uint64_t rowid;
@@ -6692,7 +6746,7 @@ payback_serial_helper_cb (void *cls,
                                            &denom_pub.rsa_public_key),
       GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
                                            &coin.denom_sig.rsa_signature),
-      TALER_PQ_result_spec_amount ("amount",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                    &amount),
       GNUNET_PQ_result_spec_end
     };
@@ -6741,6 +6795,7 @@ postgres_select_payback_above_serial_id (void *cls,
                                          TALER_EXCHANGEDB_PaybackCallback cb,
                                          void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -6748,6 +6803,7 @@ postgres_select_payback_above_serial_id (void *cls,
   struct PaybackSerialContext psc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
@@ -6780,6 +6836,11 @@ struct PaybackRefreshSerialContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -6800,7 +6861,8 @@ payback_refresh_serial_helper_cb (void *cls,
                                   unsigned int num_results)
 {
   struct PaybackRefreshSerialContext *psc = cls;
-
+  struct PostgresClosure *pg = psc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     uint64_t rowid;
@@ -6833,7 +6895,7 @@ payback_refresh_serial_helper_cb (void *cls,
                                            &denom_pub.rsa_public_key),
       GNUNET_PQ_result_spec_rsa_signature ("denom_sig",
                                            &coin.denom_sig.rsa_signature),
-      TALER_PQ_result_spec_amount ("amount",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                    &amount),
       GNUNET_PQ_result_spec_end
     };
@@ -6882,6 +6944,7 @@ postgres_select_payback_refresh_above_serial_id (void 
*cls,
                                                  
TALER_EXCHANGEDB_PaybackRefreshCallback cb,
                                                  void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -6889,6 +6952,7 @@ postgres_select_payback_refresh_above_serial_id (void 
*cls,
   struct PaybackRefreshSerialContext psc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
@@ -6921,6 +6985,11 @@ struct ReserveClosedSerialContext
   void *cb_cls;
 
   /**
+   * Plugin's context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Status code, set to #GNUNET_SYSERR on hard errors.
    */
   int status;
@@ -6937,11 +7006,12 @@ struct ReserveClosedSerialContext
  */
 static void
 reserve_closed_serial_helper_cb (void *cls,
-                                PGresult *result,
-                                unsigned int num_results)
+                                 PGresult *result,
+                                 unsigned int num_results)
 {
   struct ReserveClosedSerialContext *rcsc = cls;
-
+  struct PostgresClosure *pg = rcsc->pg;
+  
   for (unsigned int i=0;i<num_results;i++)
   {
     uint64_t rowid;
@@ -6959,12 +7029,12 @@ reserve_closed_serial_helper_cb (void *cls,
       TALER_PQ_result_spec_absolute_time ("execution_date",
                                            &execution_date),
       GNUNET_PQ_result_spec_auto_from_type ("wtid",
-                                           &wtid),
+                                            &wtid),
       GNUNET_PQ_result_spec_string ("receiver_account",
                                     &receiver_account),
-      TALER_PQ_result_spec_amount ("amount",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                    &amount_with_fee),
-      TALER_PQ_result_spec_amount ("closing_fee",
+      TALER_PQ_RESULT_SPEC_AMOUNT ("closing_fee",
                                    &closing_fee),
       GNUNET_PQ_result_spec_end
     };
@@ -6980,13 +7050,13 @@ reserve_closed_serial_helper_cb (void *cls,
       return;
     }
     ret = rcsc->cb (rcsc->cb_cls,
-                   rowid,
-                   execution_date,
-                   &amount_with_fee,
-                   &closing_fee,
-                   &reserve_pub,
-                   receiver_account,
-                   &wtid);
+                    rowid,
+                    execution_date,
+                    &amount_with_fee,
+                    &closing_fee,
+                    &reserve_pub,
+                    receiver_account,
+                    &wtid);
     GNUNET_PQ_cleanup_result (rs);
     if (GNUNET_OK != ret)
       break;
@@ -7011,7 +7081,8 @@ postgres_select_reserve_closed_above_serial_id (void *cls,
                                                 uint64_t serial_id,
                                                 
TALER_EXCHANGEDB_ReserveClosedCallback cb,
                                                 void *cb_cls)
-{
+{ 
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&serial_id),
     GNUNET_PQ_query_param_end
@@ -7019,15 +7090,16 @@ postgres_select_reserve_closed_above_serial_id (void 
*cls,
   struct ReserveClosedSerialContext rcsc = {
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
 
   qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                            "reserves_close_get_incr",
-                                            params,
-                                            &reserve_closed_serial_helper_cb,
-                                            &rcsc);
+                                             "reserves_close_get_incr",
+                                             params,
+                                             &reserve_closed_serial_helper_cb,
+                                             &rcsc);
   if (GNUNET_OK != rcsc.status)
     return GNUNET_DB_STATUS_HARD_ERROR;
   return qs;
@@ -7199,7 +7271,7 @@ postgres_get_reserve_by_h_blind (void *cls,
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
     GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
-                                         reserve_pub),
+                                          reserve_pub),
     GNUNET_PQ_result_spec_end
   };
 
@@ -7266,8 +7338,8 @@ postgres_insert_denomination_revocation (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                            "denomination_revocation_insert",
-                                            params);
+                                             "denomination_revocation_insert",
+                                             params);
 }
 
 
@@ -7287,7 +7359,7 @@ postgres_get_denomination_revocation (void *cls,
                                       struct TALER_EXCHANGEDB_Session *session,
                                       const struct GNUNET_HashCode 
*denom_pub_hash,
                                       struct TALER_MasterSignatureP 
*master_sig,
-                                     uint64_t *rowid)
+                                      uint64_t *rowid)
 {
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
@@ -7300,9 +7372,9 @@ postgres_get_denomination_revocation (void *cls,
   };
 
   return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
-                                                  
"denomination_revocation_get",
-                                                  params,
-                                                  rs);
+                                                   
"denomination_revocation_get",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -7322,6 +7394,11 @@ struct MissingWireContext
   void *cb_cls;
 
   /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+  
+  /**
    * Set to #GNUNET_SYSERR on error.
    */
   int status;
@@ -7337,10 +7414,11 @@ struct MissingWireContext
  */
 static void
 missing_wire_cb (void *cls,
-                PGresult *result,
-                unsigned int num_results)
+                 PGresult *result,
+                 unsigned int num_results)
 {
   struct MissingWireContext *mwc = cls;
+  struct PostgresClosure *pg = mwc->pg;
 
   while (0 < num_results)
   {
@@ -7353,15 +7431,15 @@ missing_wire_cb (void *cls,
     uint8_t done;
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_uint64 ("deposit_serial_id",
-                                   &rowid),
+                                    &rowid),
       GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
-                                           &coin_pub),
-      TALER_PQ_result_spec_amount ("amount_with_fee",
-                                  &amount),
+                                            &coin_pub),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
+                                   &amount),
       TALER_PQ_result_spec_json ("wire",
                                  &wire),
       TALER_PQ_result_spec_absolute_time ("wire_deadline",
-                                          &deadline),
+                                          &deadline),
       GNUNET_PQ_result_spec_auto_from_type ("tiny",
                                             &tiny),
       GNUNET_PQ_result_spec_auto_from_type ("done",
@@ -7379,13 +7457,13 @@ missing_wire_cb (void *cls,
       return;
     }
     mwc->cb (mwc->cb_cls,
-            rowid,
-            &coin_pub,
-            &amount,
-            wire,
-            deadline,
-            tiny,
-            done);
+             rowid,
+             &coin_pub,
+             &amount,
+             wire,
+             deadline,
+             tiny,
+             done);
     GNUNET_PQ_cleanup_result (rs);
   }
 }
@@ -7406,20 +7484,22 @@ missing_wire_cb (void *cls,
  */
 static enum GNUNET_DB_QueryStatus
 postgres_select_deposits_missing_wire (void *cls,
-                                      struct TALER_EXCHANGEDB_Session *session,
-                                      struct GNUNET_TIME_Absolute start_date,
-                                      struct GNUNET_TIME_Absolute end_date,
-                                      TALER_EXCHANGEDB_WireMissingCallback cb,
-                                      void *cb_cls)
+                                       struct TALER_EXCHANGEDB_Session 
*session,
+                                       struct GNUNET_TIME_Absolute start_date,
+                                       struct GNUNET_TIME_Absolute end_date,
+                                       TALER_EXCHANGEDB_WireMissingCallback cb,
+                                       void *cb_cls)
 {
+  struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     TALER_PQ_query_param_absolute_time (&start_date),
     TALER_PQ_query_param_absolute_time (&end_date),
     GNUNET_PQ_query_param_end
   };
-  struct MissingWireContext mwc = {
+  struct MissingWireContext mwc = {                                   
     .cb = cb,
     .cb_cls = cb_cls,
+    .pg = pg,
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
@@ -7434,280 +7514,6 @@ postgres_select_deposits_missing_wire (void *cls,
   return qs;
 }
 
-/**
- * Delete wire transfer records related to a particular merchant.
- * This method would be called by the logic once that merchant
- * gets successfully KYC checked.
- *
- * @param cls closure
- * @param session DB session
- * @param merchant_serial_id serial id of the merchant whose
- *        KYC records have to be deleted.
- * @return DB transaction status.
- */
-static enum GNUNET_DB_QueryStatus
-postgres_clean_kyc_events (void *cls,
-                           struct TALER_EXCHANGEDB_Session *session,
-                           uint64_t merchant_serial_id)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_uint64 (&merchant_serial_id),
-    GNUNET_PQ_query_param_end
-  };
-
-  return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                             "clean_kyc_events",
-                                             params);
-
-}
-
-
-/**
- * Mark a merchant as NOT KYC-checked.
- *
- * @param cls closure
- * @param session DB session
- * @param payto_url payto:// URL indentifying the merchant
- *        to unmark.  Note, different banks may have different
- *        policies to check their customers.
- * @return database transaction status.
- */
-static enum GNUNET_DB_QueryStatus
-postgres_unmark_kyc_merchant
-  (void *cls,
-   struct TALER_EXCHANGEDB_Session *session,
-   const char *payto_url)
-{
-
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_string (payto_url),
-    GNUNET_PQ_query_param_end
-  };
-
-  return GNUNET_PQ_eval_prepared_non_select
-    (session->conn,
-     "unmark_kyc_merchant",
-     params);
-}
-
-/**
- * Record timestamp where a particular merchant performed
- * a wire transfer.
- *
- * @param cls closure.
- * @param session db session.
- * @param merchant_serial_id serial id of the merchant who
- *        performed the wire transfer.
- * @param amount amount of the wire transfer being monitored.
- * @return database transaction status.
- */
-static enum GNUNET_DB_QueryStatus
-postgres_insert_kyc_event
-  (void *cls,
-   struct TALER_EXCHANGEDB_Session *session,
-   uint64_t merchant_serial_id,
-   struct TALER_Amount *amount)
-{
-  struct GNUNET_TIME_Absolute now;
-
-  now = GNUNET_TIME_absolute_get ();
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_uint64 (&merchant_serial_id),
-    TALER_PQ_query_param_amount (amount),
-    GNUNET_PQ_query_param_absolute_time (&now),
-    GNUNET_PQ_query_param_end
-  };
-
-  return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                             "insert_kyc_event",
-                                             params);
-}
-
-/**
- * Mark a merchant as KYC-checked.
- *
- * @param payto_url payto:// URL indentifying the merchant
- *        to mark.  Note, different banks may have different
- *        policies to check their customers.
- * @return database transaction status.
- */
-static enum GNUNET_DB_QueryStatus
-postgres_mark_kyc_merchant
-  (void *cls,
-   struct TALER_EXCHANGEDB_Session *session,
-   const char *payto_url)
-{
-
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_string (payto_url),
-    GNUNET_PQ_query_param_end
-  };
-
-  return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                             "mark_kyc_merchant",
-                                             params);
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure
- * @param result the postgres result
- * @param num_result the number of results in @a result
- */
-static void
-sum_kyc_events (void *cls,
-                PGresult *result,
-                unsigned int num_results)
-{
-  struct TALER_Amount *tot = cls;
-  struct TALER_Amount tmp;
-
-  int ntuples = PQntuples (result);
-
-  struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_result_spec_amount ("amount", &tmp),
-    GNUNET_PQ_result_spec_end
-  };
-
-  for (unsigned int i = 0; i < ntuples; i++)
-  {
-    GNUNET_assert
-      (GNUNET_OK == GNUNET_PQ_extract_result (result,
-                                              rs,
-                                              i));
-
-    if ((0 == tot->value) && (0 == tot->fraction))
-      *tot = tmp;
-    else
-      GNUNET_assert
-        (GNUNET_SYSERR != TALER_amount_add (tot,
-                                            tot,
-                                            &tmp));
-
-  }
-
-}
-
-
-/**
- * Calculate sum of money flow related to a particular merchant,
- * used for KYC monitoring.
- *
- * @param cls closure
- * @param session DB session
- * @param merchant_serial_id serial id identifying the merchant
- *        into the KYC monitoring system.
- * @param amount[out] will store the amount of money received
- *        by this merchant.
- */
-static enum GNUNET_DB_QueryStatus
-postgres_get_kyc_events (void *cls,
-                         struct TALER_EXCHANGEDB_Session *session,
-                         uint64_t merchant_serial_id,
-                         struct TALER_Amount *amount)
-{
-  enum GNUNET_DB_QueryStatus qs;
-
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_uint64 (&merchant_serial_id),
-    GNUNET_PQ_query_param_end
-  };
-
-  /* make sure sum object starts virgin.  */
-  memset (amount,
-          0,
-          sizeof (struct TALER_Amount));
-
-  qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
-                                             "get_kyc_events",
-                                             params,
-                                             sum_kyc_events,
-                                             amount);
-  return qs;
-}
-
-/**
- * Retrieve KYC-check status related to a particular merchant.
- *
- * @param payto_url URL identifying a merchant bank account,
- *        whose KYC is going to be retrieved.
- * @param[out] status store the result.
- * @return transaction status.
- */
-static enum GNUNET_DB_QueryStatus
-postgres_get_kyc_status (void *cls,
-                         struct TALER_EXCHANGEDB_Session *session,
-                         const char *payto_url,
-                         TALER_EXCHANGEDB_KycStatusCallback ksc,
-                         void *ksc_cls)
-{
-  uint8_t status;
-  uint64_t merchant_serial_id;
-  enum GNUNET_DB_QueryStatus qs;
-  char *general_id;
-
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_string (payto_url),
-    GNUNET_PQ_query_param_end
-  };
-
-
-  struct GNUNET_PQ_ResultSpec rs[] = {
-    GNUNET_PQ_result_spec_string ("general_id",
-                                  &general_id),
-    GNUNET_PQ_result_spec_auto_from_type ("kyc_checked",
-                                          &status),
-    GNUNET_PQ_result_spec_uint64 ("merchant_serial_id",
-                                  &merchant_serial_id),
-    GNUNET_PQ_result_spec_end
-  };
-
-  qs = GNUNET_PQ_eval_prepared_singleton_select
-    (session->conn,
-     "get_kyc_status",
-     params,
-     rs);
-
-  if (0 >= qs)
-    return qs;
-
-  ksc (ksc_cls,
-       payto_url,
-       general_id,
-       status,
-       merchant_serial_id);
-
-  return qs;
-}
-
-
-
-/**
- * Insert a merchant into the KYC monitor table.
- *
- * @param payto_url payto:// URL indentifying the merchant
- *        bank account.
- * @return database transaction status.
- */
-static enum GNUNET_DB_QueryStatus
-postgres_insert_kyc_merchant (void *cls,
-                              struct TALER_EXCHANGEDB_Session *session,
-                              const char *general_id,
-                              const char *payto_url)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_string (payto_url),
-    GNUNET_PQ_query_param_string (general_id),
-    GNUNET_PQ_query_param_end
-  };
-  return GNUNET_PQ_eval_prepared_non_select (session->conn,
-                                             "insert_kyc_merchant",
-                                             params);
-}
-
 
 /**
  * Initialize Postgres database subsystem.
@@ -7771,6 +7577,18 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
     GNUNET_free (pg);
     return NULL;
   }
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_get_value_string (cfg,
+                                             "taler",
+                                             "CURRENCY",
+                                             &pg->currency))
+  {
+    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                               "taler",
+                               "CURRENCY");
+    GNUNET_free (pg);
+    return NULL;
+  }
   plugin = GNUNET_new (struct TALER_EXCHANGEDB_Plugin);
   plugin->cls = pg;
   plugin->get_session = &postgres_get_session;
@@ -7860,14 +7678,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
   plugin->select_deposits_missing_wire
     = &postgres_select_deposits_missing_wire;
 
-  plugin->insert_kyc_merchant = postgres_insert_kyc_merchant;
-  plugin->mark_kyc_merchant = postgres_mark_kyc_merchant;
-  plugin->unmark_kyc_merchant = postgres_unmark_kyc_merchant;
-  plugin->get_kyc_status = postgres_get_kyc_status;
-  plugin->insert_kyc_event = postgres_insert_kyc_event;
-  plugin->get_kyc_events = postgres_get_kyc_events;
-  plugin->clean_kyc_events = postgres_clean_kyc_events;
-
   return plugin;
 }
 
diff --git a/src/exchangedb/test-exchange-db-postgres.conf 
b/src/exchangedb/test-exchange-db-postgres.conf
index be821d75..e61c4505 100644
--- a/src/exchangedb/test-exchange-db-postgres.conf
+++ b/src/exchangedb/test-exchange-db-postgres.conf
@@ -7,6 +7,8 @@ DB = postgres
 #The connection string the plugin has to use for connecting to the database
 CONFIG = postgres:///talercheck
 
+[taler]
+CURRENCY = EUR
 
 [exchangedb]
 
diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c
index ef477548..5018ec63 100644
--- a/src/exchangedb/test_exchangedb.c
+++ b/src/exchangedb/test_exchangedb.c
@@ -55,7 +55,7 @@ static int result;
 
 
 /**
- * Currency we use.
+ * Currency we use.  Must match test-exchange-db-*.conf.
  */
 #define CURRENCY "EUR"
 
@@ -344,61 +344,6 @@ never_called_cb (void *cls,
 
 
 /**
- * Callback used to process data of a merchant under KYC monitoring.
- *
- * @param cls closure
- * @param payto_url payto URL of this particular merchant (bank account)
- * @param general_id general identificator valid at the KYC-caring institution
- * @param kyc_checked status of KYC check: if GNUNET_OK, the merchant was
- *        checked at least once, never otherwise.
- * @param merchant_serial_id serial ID identifying this merchant (bank
- *        account) into the database system; it helps making more efficient
- *        queries instead of the payto URL.
- */
-static void
-kcs (void *cls,
-     const char *payto_url,
-     const char *general_id,
-     uint8_t kyc_checked,
-     uint64_t merchant_serial_id)
-{
-  struct TALER_EXCHANGEDB_Session *session = cls;
-  struct TALER_Amount amount;
-  struct TALER_Amount sum;
-
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_amount_get_zero (CURRENCY,
-                                        &amount));
-  amount.value = 30;
-  FAILIF
-    (GNUNET_OK != plugin->insert_kyc_event (NULL,
-                                            session,
-                                            merchant_serial_id,
-                                            &amount));
-  amount.value = 20;
-  amount.fraction = 70;
-  FAILIF
-    (GNUNET_OK != plugin->insert_kyc_event (NULL,
-                                            session,
-                                            merchant_serial_id,
-                                            &amount));
-  FAILIF
-    (0 >= plugin->get_kyc_events (NULL,
-                                  session,
-                                  merchant_serial_id,
-                                  &sum));
-
-  FAILIF ((50 != sum.value) || (70 != sum.fraction));
-
-  FAILIF (2 != plugin->clean_kyc_events (NULL,
-                                         session,
-                                         merchant_serial_id));
-
-  drop:
-    return;
-}
-
-/**
  * Function called with information about a refresh order.
  * Checks that the response matches what we expect to see.
  *
@@ -2225,26 +2170,6 @@ run (void *cls)
   FAILIF (GNUNET_OK !=
           test_wire_fees (session));
 
-  FAILIF (GNUNET_OK !=
-          plugin->insert_kyc_merchant (NULL,
-                                       session,
-                                       "dummy", // NULL segfaults.
-                                       "payto://mock"));
-  FAILIF (GNUNET_OK !=
-          plugin->mark_kyc_merchant (NULL,
-                                     session,
-                                     "payto://mock"));
-  FAILIF (GNUNET_OK !=
-          plugin->get_kyc_status (NULL,
-                                  session,
-                                  "payto://mock",
-                                  &kcs,
-                                  session));
-
-  FAILIF (GNUNET_OK !=
-          plugin->unmark_kyc_merchant (NULL,
-                                       session,
-                                       "payto://mock"));
   plugin->preflight (plugin->cls,
                      session);
 
diff --git a/src/include/taler_exchangedb_plugin.h 
b/src/include/taler_exchangedb_plugin.h
index a065534b..61ec5305 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -794,29 +794,6 @@ typedef int
 
 
 /**
- * Callback used to process data of a merchant under KYC monitoring.
- *
- * @param cls closure
- * @param payto_url payto URL of this particular
- *        merchant (bank account)
- * @param general_id general identificator valid
- *        at the KYC-caring institution
- * @param kyc_checked status of KYC check:
- *        if GNUNET_OK, the merchant was checked at least once,
- *        never otherwise.
- * @param merchant_serial_id serial ID identifying
- *        this merchant (bank account) into the database system;
- *        it helps making more efficient queries than the payto
- *        URL.
- */
-typedef void
-(*TALER_EXCHANGEDB_KycStatusCallback)(void *cls,
-                                      const char *payto_url,
-                                      const char *general_id,
-                                      uint8_t kyc_checked,
-                                      uint64_t merchant_serial_id);
-
-/**
  * Function called with details about coins that were melted,
  * with the goal of auditing the refresh's execution.
  *
@@ -919,19 +896,6 @@ typedef void
 
 
 /**
- * Callback for handling a KYC timestamped event associated with
- * a certain customer (= merchant).
- *
- * @param cls closure
- * @param url "payto" URL associated with the customer
- * @param timeout last time when the KYC was issued to the customer.
- */
-typedef void
-(*TALER_EXCHANGEDB_KycCallback)(void *cls,
-                                const char *url,
-                                struct GNUNET_TIME_Absolute timeout);
-
-/**
  * Function called with details about coins that were refunding,
  * with the goal of auditing the refund's execution.
  *
@@ -2509,126 +2473,6 @@ struct TALER_EXCHANGEDB_Plugin
                                   TALER_EXCHANGEDB_WireMissingCallback cb,
                                   void *cb_cls);
 
-  /**
-   * Insert a merchant into the KYC monitor table, namely it
-   * associates a flag to the merchant that indicates whether
-   * a KYC check has been done or not on this merchant.
-   *
-   * @param cls closure
-   * @param session db session
-   * @param general_id identificator at the KYC-aware institution,
-   *        can be NULL if this is in-line wiht the rules.
-   * @param payto_url payto:// URL indentifying the merchant
-   *        bank account.
-   * @return database transaction status.
-   */
-  enum GNUNET_DB_QueryStatus
-  (*insert_kyc_merchant)(void *cls,
-                         struct TALER_EXCHANGEDB_Session *session,
-                         const char *general_id,
-                         const char *payto_url);
-
-  /**
-   * Mark a merchant as KYC-checked.
-   *
-   * @param cls closure
-   * @param session db session
-   * @param payto_url payto:// URL indentifying the merchant
-   *        to check.  Note, different banks may have different
-   *        policies to check their customers.
-   * @return database transaction status.
-   */
-  enum GNUNET_DB_QueryStatus
-  (*mark_kyc_merchant)(void *cls,
-                       struct TALER_EXCHANGEDB_Session *session,
-                       const char *payto_url);
-
-
-  /**
-   * Mark a merchant as NOT KYC-checked.
-   *
-   * @param cls closure
-   * @param session db session
-   * @param payto_url payto:// URL indentifying the merchant
-   *        to unmark.  Note, different banks may have different
-   *        policies to check their customers.
-   * @return database transaction status.
-   */
-  enum GNUNET_DB_QueryStatus
-  (*unmark_kyc_merchant)(void *cls,
-                         struct TALER_EXCHANGEDB_Session *session,
-                         const char *payto_url);
-
-
-  /**
-   * Retrieve KYC-check status related to a particular merchant.
-   *
-   * @param cls closure
-   * @param session db session
-   * @param payto_url URL identifying a merchant bank account,
-   *        whose KYC is going to be retrieved.
-   * @param ksc callback to process all the row's columns.  As
-   *        expectable, it will only be called _if_ a row is found.
-   * @param ksc_cls closure for above callback.
-   * @return transaction status.
-   */
-  enum GNUNET_DB_QueryStatus
-  (*get_kyc_status)(void *cls,
-                    struct TALER_EXCHANGEDB_Session *session,
-                    const char *payto_url,
-                    TALER_EXCHANGEDB_KycStatusCallback ksc,
-                    void *ksc_cls);
-
-  /**
-   * Record timestamp where a particular merchant performed
-   * a wire transfer.
-   *
-   * @param cls closure.
-   * @param session db session.
-   * @param merchant_serial_id serial id of the merchant who
-   *        performed the wire transfer.
-   * @param amount amount of the wire transfer being monitored.
-   * @return database transaction status.
-   */
-  enum GNUNET_DB_QueryStatus
-  (*insert_kyc_event)(void *cls,
-                      struct TALER_EXCHANGEDB_Session *session,
-                      uint64_t merchant_serial_id,
-                      struct TALER_Amount *amount);
-
-
-  /**
-   * Calculate sum of money flow related to a particular merchant,
-   * used for KYC monitoring.
-   *
-   * @param cls closure
-   * @param session DB session
-   * @param merchant_serial_id serial id identifying the merchant
-   *        into the KYC monitoring system.
-   * @param amount[out] will store the amount of money received
-   *        by this merchant.
-   */
-  enum GNUNET_DB_QueryStatus
-  (*get_kyc_events)(void *cls,
-                    struct TALER_EXCHANGEDB_Session *session,
-                    uint64_t merchant_serial_id,
-                    struct TALER_Amount *amount);
-
-  /**
-   * Delete wire transfer records related to a particular merchant.
-   * This method would be called by the logic once that merchant
-   * gets successfully KYC checked.
-   *
-   * @param cls closure
-   * @param session DB session
-   * @param merchant_serial_id serial id of the merchant whose
-   *        KYC records have to be deleted.
-   * @return DB transaction status.
-   */
-  enum GNUNET_DB_QueryStatus
-  (*clean_kyc_events)(void *cls,
-                      struct TALER_EXCHANGEDB_Session *session,
-                      uint64_t merchant_serial_id);
 };
 
 #endif /* _TALER_EXCHANGE_DB_H */
diff --git a/src/include/taler_pq_lib.h b/src/include/taler_pq_lib.h
index 4ac0a6df..47040ea0 100644
--- a/src/include/taler_pq_lib.h
+++ b/src/include/taler_pq_lib.h
@@ -94,24 +94,28 @@ TALER_PQ_query_param_absolute_time_nbo (const struct 
GNUNET_TIME_AbsoluteNBO *x)
  * Currency amount expected.
  *
  * @param name name of the field in the table
+ * @param currency expected currency for the @a amount
  * @param[out] amount where to store the result
  * @return array entry for the result specification to use
  */
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_amount_nbo (const char *name,
-                                struct TALER_AmountNBO *amount);
+                                 const char *currency,
+                                 struct TALER_AmountNBO *amount);
 
 
 /**
  * Currency amount expected.
  *
  * @param name name of the field in the table
+ * @param currency expected currency for the @a amount
  * @param[out] amount where to store the result
  * @return array entry for the result specification to use
  */
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_amount (const char *name,
-                            struct TALER_Amount *amount);
+                             const char *currency,
+                             struct TALER_Amount *amount);
 
 
 /**
diff --git a/src/include/taler_util.h b/src/include/taler_util.h
index 2bdc888a..479a4575 100644
--- a/src/include/taler_util.h
+++ b/src/include/taler_util.h
@@ -87,7 +87,8 @@ TALER_gcrypt_init (void);
  */
 const char *
 TALER_b2s (const void *buf,
-          size_t buf_size);
+           size_t buf_size);
+
 
 /**
  * Convert a fixed-sized object to a string using
diff --git a/src/json/json_wire.c b/src/json/json_wire.c
index 91e502c1..57a0db10 100644
--- a/src/json/json_wire.c
+++ b/src/json/json_wire.c
@@ -150,7 +150,6 @@ TALER_JSON_exchange_wire_signature_make (const char 
*payto_url,
 
   GNUNET_CRYPTO_eddsa_key_get_public (&master_priv->eddsa_priv,
                                       &master_pub.eddsa_pub);
-
   TALER_exchange_wire_signature_make (payto_url,
                                       master_priv,
                                       &master_sig);
diff --git a/src/lib/testing_api_helpers.c b/src/lib/testing_api_helpers.c
index fd06d3ce..0f2575d9 100644
--- a/src/lib/testing_api_helpers.c
+++ b/src/lib/testing_api_helpers.c
@@ -986,9 +986,17 @@ TALER_TESTING_make_wire_details (unsigned long long 
account_no,
 {
   char *payto;
   json_t *ret;
+  int ends_slash;
+
+  if (0 < strlen (bank_url))
+    ends_slash = '/' == bank_url[strlen(bank_url)-1];
+  else
+    ends_slash = 0;
 
   GNUNET_asprintf (&payto,
-                   "payto://x-taler-bank/%s/%llu",
+                   (ends_slash)
+                   ? "payto://x-taler-bank/%s%llu"
+                   : "payto://x-taler-bank/%s/%llu",
                    bank_url,
                    account_no);
   ret = json_pack ("{s:s, s:s}",
diff --git a/src/pq/pq_query_helper.c b/src/pq/pq_query_helper.c
index 6386749c..1a03c2d4 100644
--- a/src/pq/pq_query_helper.c
+++ b/src/pq/pq_query_helper.c
@@ -42,19 +42,19 @@
  */
 static int
 qconv_amount_nbo (void *cls,
-                 const void *data,
-                 size_t data_len,
-                 void *param_values[],
-                 int param_lengths[],
-                 int param_formats[],
-                 unsigned int param_length,
-                 void *scratch[],
-                 unsigned int scratch_length)
+                  const void *data,
+                  size_t data_len,
+                  void *param_values[],
+                  int param_lengths[],
+                  int param_formats[],
+                  unsigned int param_length,
+                  void *scratch[],
+                  unsigned int scratch_length)
 {
   const struct TALER_AmountNBO *amount = data;
   unsigned int off = 0;
 
-  GNUNET_assert (3 == param_length);
+  GNUNET_assert (2 == param_length);
   param_values[off] = (void *) &amount->value;
   param_lengths[off] = sizeof (amount->value);
   param_formats[off] = 1;
@@ -62,10 +62,6 @@ qconv_amount_nbo (void *cls,
   param_values[off] = (void *) &amount->fraction;
   param_lengths[off] = sizeof (amount->fraction);
   param_formats[off] = 1;
-  off++;
-  param_values[off] = (void *) amount->currency;
-  param_lengths[off] = strlen (amount->currency);
-  param_formats[off] = 1;
   return 0;
 }
 
@@ -83,7 +79,7 @@ struct GNUNET_PQ_QueryParam
 TALER_PQ_query_param_amount_nbo (const struct TALER_AmountNBO *x)
 {
   struct GNUNET_PQ_QueryParam res =
-    { &qconv_amount_nbo, NULL, x, sizeof (*x), 3 };
+    { &qconv_amount_nbo, NULL, x, sizeof (*x), 2 };
   return res;
 }
 
@@ -104,14 +100,14 @@ TALER_PQ_query_param_amount_nbo (const struct 
TALER_AmountNBO *x)
  */
 static int
 qconv_amount (void *cls,
-             const void *data,
-             size_t data_len,
-             void *param_values[],
-             int param_lengths[],
-             int param_formats[],
-             unsigned int param_length,
-             void *scratch[],
-             unsigned int scratch_length)
+              const void *data,
+              size_t data_len,
+              void *param_values[],
+              int param_lengths[],
+              int param_formats[],
+              unsigned int param_length,
+              void *scratch[],
+              unsigned int scratch_length)
 {
   const struct TALER_Amount *amount_hbo = data;
   struct TALER_AmountNBO *amount;
@@ -119,16 +115,16 @@ qconv_amount (void *cls,
   amount = GNUNET_new (struct TALER_AmountNBO);
   scratch[0] = amount;
   TALER_amount_hton (amount,
-                    amount_hbo);
+                     amount_hbo);
   qconv_amount_nbo (cls,
-                   amount,
-                   sizeof (struct TALER_AmountNBO),
-                   param_values,
-                   param_lengths,
-                   param_formats,
-                   param_length,
-                   &scratch[1],
-                   scratch_length - 1);
+                    amount,
+                    sizeof (struct TALER_AmountNBO),
+                    param_values,
+                    param_lengths,
+                    param_formats,
+                    param_length,
+                    &scratch[1],
+                    scratch_length - 1);
   return 1;
 }
 
@@ -146,7 +142,7 @@ struct GNUNET_PQ_QueryParam
 TALER_PQ_query_param_amount (const struct TALER_Amount *x)
 {
   struct GNUNET_PQ_QueryParam res =
-    { &qconv_amount, NULL, x, sizeof (*x), 3 };
+    { &qconv_amount, NULL, x, sizeof (*x), 2 };
   return res;
 }
 
@@ -167,14 +163,14 @@ TALER_PQ_query_param_amount (const struct TALER_Amount *x)
  */
 static int
 qconv_json (void *cls,
-           const void *data,
-           size_t data_len,
-           void *param_values[],
-           int param_lengths[],
-           int param_formats[],
-           unsigned int param_length,
-           void *scratch[],
-           unsigned int scratch_length)
+            const void *data,
+            size_t data_len,
+            void *param_values[],
+            int param_lengths[],
+            int param_formats[],
+            unsigned int param_length,
+            void *scratch[],
+            unsigned int scratch_length)
 {
   const json_t *json = data;
   char *str;
diff --git a/src/pq/pq_result_helper.c b/src/pq/pq_result_helper.c
index c1395b7c..92b8e8f4 100644
--- a/src/pq/pq_result_helper.c
+++ b/src/pq/pq_result_helper.c
@@ -40,15 +40,14 @@
  */
 static int
 extract_amount_nbo_helper (PGresult *result,
-                          int row,
-                          const char *val_name,
-                          const char *frac_name,
-                          const char *curr_name,
-                          struct TALER_AmountNBO *r_amount_nbo)
+                           int row,
+                           const char *currency,
+                           const char *val_name,
+                           const char *frac_name,
+                           struct TALER_AmountNBO *r_amount_nbo)
 {
   int val_num;
   int frac_num;
-  int curr_num;
   int len;
 
   /* These checks are simply to check that clients obey by our naming
@@ -59,9 +58,6 @@ extract_amount_nbo_helper (PGresult *result,
   GNUNET_assert (NULL !=
                  strstr (frac_name,
                          "_frac"));
-  GNUNET_assert (NULL !=
-                 strstr (curr_name,
-                         "_curr"));
   /* Set return value to invalid in case we don't finish */
   memset (r_amount_nbo,
           0,
@@ -70,27 +66,18 @@ extract_amount_nbo_helper (PGresult *result,
                        val_name);
   frac_num = PQfnumber (result,
                         frac_name);
-  curr_num = PQfnumber (result,
-                        curr_name);
   if (val_num < 0)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Field `%s' does not exist in result\n",
-               val_name);
+                "Field `%s' does not exist in result\n",
+                val_name);
     return GNUNET_SYSERR;
   }
   if (frac_num < 0)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Field `%s' does not exist in result\n",
-               frac_name);
-    return GNUNET_SYSERR;
-  }
-  if (curr_num < 0)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Field `%s' does not exist in result\n",
-               curr_name);
+                "Field `%s' does not exist in result\n",
+                frac_name);
     return GNUNET_SYSERR;
   }
   if ( (PQgetisnull (result,
@@ -98,10 +85,7 @@ extract_amount_nbo_helper (PGresult *result,
                      val_num)) ||
        (PQgetisnull (result,
                      row,
-                     frac_num)) ||
-       (PQgetisnull (result,
-                     row,
-                     curr_num)) )
+                     frac_num)) )
   {
     GNUNET_break (0);
     return GNUNET_NO;
@@ -115,13 +99,9 @@ extract_amount_nbo_helper (PGresult *result,
                                                      row,
                                                      frac_num);
   len = GNUNET_MIN (TALER_CURRENCY_LEN - 1,
-                    PQgetlength (result,
-                                 row,
-                                 curr_num));
+                    strlen (currency));
   memcpy (r_amount_nbo->currency,
-          PQgetvalue (result,
-                      row,
-                      curr_num),
+          currency,
           len);
   return GNUNET_OK;
 }
@@ -130,7 +110,7 @@ extract_amount_nbo_helper (PGresult *result,
 /**
  * Extract data from a Postgres database @a result at row @a row.
  *
- * @param cls closure
+ * @param cls closure, a `const char *` giving the currency
  * @param result where to extract data from
  * @param row row to extract data from
  * @param fname name (or prefix) of the fields to extract from
@@ -143,35 +123,31 @@ extract_amount_nbo_helper (PGresult *result,
  */
 static int
 extract_amount_nbo (void *cls,
-                   PGresult *result,
-                   int row,
-                   const char *fname,
-                   size_t *dst_size,
-                   void *dst)
+                    PGresult *result,
+                    int row,
+                    const char *fname,
+                    size_t *dst_size,
+                    void *dst)
 {
+  const char *currency = cls;
   char *val_name;
   char *frac_name;
-  char *curr_name;
   int ret;
 
   GNUNET_asprintf (&val_name,
-                  "%s_val",
-                  fname);
+                   "%s_val",
+                   fname);
   GNUNET_asprintf (&frac_name,
-                  "%s_frac",
-                  fname);
-  GNUNET_asprintf (&curr_name,
-                  "%s_curr",
-                  fname);
+                   "%s_frac",
+                   fname);
   ret = extract_amount_nbo_helper (result,
-                                  row,
-                                  val_name,
-                                  frac_name,
-                                  curr_name,
-                                  dst);
+                                   row,
+                                   currency,
+                                   val_name,
+                                   frac_name,
+                                   dst);
   GNUNET_free (val_name);
   GNUNET_free (frac_name);
-  GNUNET_free (curr_name);
   return ret;
 }
 
@@ -185,12 +161,17 @@ extract_amount_nbo (void *cls,
  */
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_amount_nbo (const char *name,
-                                struct TALER_AmountNBO *amount)
+                                 const char *currency,
+                                 struct TALER_AmountNBO *amount)
 {
-  struct GNUNET_PQ_ResultSpec res =
-    { &extract_amount_nbo, NULL, NULL,
-      (void *) amount, sizeof (*amount),
-      name, NULL };
+  struct GNUNET_PQ_ResultSpec res = {
+    .conv = &extract_amount_nbo,
+    .cls = (void *) currency,
+    .dst = (void *) amount,
+    .dst_size = sizeof (*amount),
+    .fname = name
+  };
+  
   return res;
 }
 
@@ -198,7 +179,7 @@ TALER_PQ_result_spec_amount_nbo (const char *name,
 /**
  * Extract data from a Postgres database @a result at row @a row.
  *
- * @param cls closure
+ * @param cls closure, a `const char *` giving the currency
  * @param result where to extract data from
  * @param row row to extract data from
  * @param fname name (or prefix) of the fields to extract from
@@ -211,39 +192,35 @@ TALER_PQ_result_spec_amount_nbo (const char *name,
  */
 static int
 extract_amount (void *cls,
-               PGresult *result,
-               int row,
-               const char *fname,
-               size_t *dst_size,
-               void *dst)
+                PGresult *result,
+                int row,
+                const char *fname,
+                size_t *dst_size,
+                void *dst)
 {
+  const char *currency = cls;
   struct TALER_Amount *r_amount = dst;
   char *val_name;
   char *frac_name;
-  char *curr_name;
   struct TALER_AmountNBO amount_nbo;
   int ret;
 
   GNUNET_asprintf (&val_name,
-                  "%s_val",
-                  fname);
+                   "%s_val",
+                   fname);
   GNUNET_asprintf (&frac_name,
-                  "%s_frac",
-                  fname);
-  GNUNET_asprintf (&curr_name,
-                  "%s_curr",
-                  fname);
+                   "%s_frac",
+                   fname);
   ret = extract_amount_nbo_helper (result,
-                                  row,
-                                  val_name,
-                                  frac_name,
-                                  curr_name,
-                                  &amount_nbo);
+                                   row,
+                                   currency,
+                                   val_name,
+                                   frac_name,
+                                   &amount_nbo);
   TALER_amount_ntoh (r_amount,
                      &amount_nbo);
   GNUNET_free (val_name);
   GNUNET_free (frac_name);
-  GNUNET_free (curr_name);
   return ret;
 }
 
@@ -252,17 +229,23 @@ extract_amount (void *cls,
  * Currency amount expected.
  *
  * @param name name of the field in the table
+ * @param currency the currency the amount is in
  * @param[out] amount where to store the result
  * @return array entry for the result specification to use
  */
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_amount (const char *name,
-                            struct TALER_Amount *amount)
+                             const char *currency,
+                             struct TALER_Amount *amount)
 {
-  struct GNUNET_PQ_ResultSpec res =
-    { &extract_amount, NULL, NULL,
-      (void *) amount, sizeof (*amount),
-      name, NULL };
+  struct GNUNET_PQ_ResultSpec res = {
+    .conv = &extract_amount,
+    .cls = (void *) currency,
+    .dst = (void *) amount,
+    .dst_size = sizeof (*amount),
+    .fname = name
+  };
+  
   return res;
 }
 
@@ -283,11 +266,11 @@ TALER_PQ_result_spec_amount (const char *name,
  */
 static int
 extract_json (void *cls,
-             PGresult *result,
-             int row,
-             const char *fname,
-             size_t *dst_size,
-             void *dst)
+              PGresult *result,
+              int row,
+              const char *fname,
+              size_t *dst_size,
+              void *dst)
 {
   json_t **j_dst = dst;
   const char *res;
@@ -296,33 +279,33 @@ extract_json (void *cls,
   size_t slen;
 
   fnum = PQfnumber (result,
-                   fname);
+                    fname);
   if (fnum < 0)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Field `%s' does not exist in result\n",
-               fname);
+                "Field `%s' does not exist in result\n",
+                fname);
     return GNUNET_SYSERR;
   }
   if (PQgetisnull (result,
-                  row,
-                  fnum))
+                   row,
+                   fnum))
     return GNUNET_NO;
   slen = PQgetlength (result,
-                     row,
-                     fnum);
+                      row,
+                      fnum);
   res = (const char *) PQgetvalue (result,
-                                  row,
-                                  fnum);
+                                   row,
+                                   fnum);
   *j_dst = json_loadb (res,
-                      slen,
-                      JSON_REJECT_DUPLICATES,
-                      &json_error);
+                       slen,
+                       JSON_REJECT_DUPLICATES,
+                       &json_error);
   if (NULL == *j_dst)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Failed to parse JSON result for field `%s': %s (%s)\n",
-               fname,
+                "Failed to parse JSON result for field `%s': %s (%s)\n",
+                fname,
                 json_error.text,
                 json_error.source);
     return GNUNET_SYSERR;
@@ -340,7 +323,7 @@ extract_json (void *cls,
  */
 static void
 clean_json (void *cls,
-           void *rd)
+            void *rd)
 {
   json_t **dst = rd;
 
@@ -363,15 +346,17 @@ struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_json (const char *name,
                            json_t **jp)
 {
-  struct GNUNET_PQ_ResultSpec res =
-    { &extract_json, &clean_json, NULL,
-      (void *) jp, 0,
-      name, NULL };
+  struct GNUNET_PQ_ResultSpec res = {
+    .conv = &extract_json,
+    .cleaner = &clean_json,
+    .dst = (void *) jp,
+    .fname  = name
+  };
+  
   return res;
 }
 
 
-
 /**
  * Extract data from a Postgres database @a result at row @a row.
  *
@@ -399,7 +384,7 @@ extract_round_time (void *cls,
   int fnum;
 
   fnum = PQfnumber (result,
-                   fname);
+                    fname);
   if (fnum < 0)
   {
     GNUNET_break (0);
@@ -443,10 +428,13 @@ struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_absolute_time (const char *name,
                                     struct GNUNET_TIME_Absolute *at)
 {
-  struct GNUNET_PQ_ResultSpec res =
-    { &extract_round_time, NULL, NULL,
-      (void *) at, sizeof (struct GNUNET_TIME_Absolute),
-      name, NULL };
+  struct GNUNET_PQ_ResultSpec res = {
+    .conv = &extract_round_time,
+    .dst = (void *) at,
+    .dst_size = sizeof (struct GNUNET_TIME_Absolute),
+    .fname = name
+  };
+
   return res;
 }
 
@@ -478,15 +466,15 @@ extract_round_time_nbo (void *cls,
   int fnum;
 
   fnum = PQfnumber (result,
-                   fname);
+                    fname);
   if (fnum < 0)
   {
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
   if (PQgetisnull (result,
-                  row,
-                  fnum))
+                   row,
+                   fnum))
   {
     GNUNET_break (0);
     return GNUNET_SYSERR;
@@ -522,10 +510,13 @@ struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_absolute_time_nbo (const char *name,
                                         struct GNUNET_TIME_AbsoluteNBO *at)
 {
-  struct GNUNET_PQ_ResultSpec res =
-    { &extract_round_time_nbo, NULL, NULL,
-      (void *) at, sizeof (struct GNUNET_TIME_AbsoluteNBO),
-      name, NULL };
+  struct GNUNET_PQ_ResultSpec res = {
+    .conv = &extract_round_time_nbo, 
+    .dst = (void *) at,
+    .dst_size = sizeof (struct GNUNET_TIME_AbsoluteNBO),
+    .fname = name
+  };
+
   return res;
 }
 
diff --git a/src/pq/test_pq.c b/src/pq/test_pq.c
index 6f7de0db..471326f0 100644
--- a/src/pq/test_pq.c
+++ b/src/pq/test_pq.c
@@ -50,23 +50,18 @@ postgres_prepare (PGconn *db_conn)
            "INSERT INTO test_pq ("
            " hamount_val"
            ",hamount_frac"
-           ",hamount_curr"
            ",namount_val"
            ",namount_frac"
-           ",namount_curr"
            ",json"
            ") VALUES "
-           "($1, $2, $3, $4, $5, $6,"
-            "$7);",
-           7, NULL);
+           "($1, $2, $3, $4, $5);",
+           5, NULL);
   PREPARE ("test_select",
            "SELECT"
            " hamount_val"
            ",hamount_frac"
-           ",hamount_curr"
            ",namount_val"
            ",namount_frac"
-           ",namount_curr"
            ",json"
            " FROM test_pq;",
            0, NULL);
@@ -113,8 +108,8 @@ run_queries (PGconn *conn)
     };
 
     result = GNUNET_PQ_exec_prepared (conn,
-                                     "test_insert",
-                                     params_insert);
+                                      "test_insert",
+                                      params_insert);
     if (PGRES_COMMAND_OK != PQresultStatus (result))
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -131,10 +126,10 @@ run_queries (PGconn *conn)
     };
 
     result = GNUNET_PQ_exec_prepared (conn,
-                                     "test_select",
-                                     params_select);
+                                      "test_select",
+                                      params_select);
     if (1 !=
-       PQntuples (result))
+        PQntuples (result))
     {
       GNUNET_break (0);
       PQclear (result);
@@ -144,8 +139,8 @@ run_queries (PGconn *conn)
 
   {
     struct GNUNET_PQ_ResultSpec results_select[] = {
-      TALER_PQ_result_spec_amount ("hamount", &hamount2),
-      TALER_PQ_result_spec_amount_nbo ("namount", &namount2),
+      TALER_PQ_result_spec_amount ("hamount", "EUR", &hamount2),
+      TALER_PQ_result_spec_amount_nbo ("namount", "EUR", &namount2),
       TALER_PQ_result_spec_json ("json", &json2),
       GNUNET_PQ_result_spec_end
     };
@@ -163,8 +158,9 @@ run_queries (PGconn *conn)
                       &namount2);
     GNUNET_break (0 ==
                  TALER_amount_cmp (&hamount,
-                                   &hamount2));
-    GNUNET_break (42 == json_integer_value (json_object_get (json2, "foo")));
+                            &hamount2));
+    GNUNET_break (42 ==
+                  json_integer_value (json_object_get (json2, "foo")));
     GNUNET_PQ_cleanup_result (results_select);
     PQclear (result);
   }
@@ -185,8 +181,8 @@ main(int argc,
   int ret;
 
   GNUNET_log_setup ("test-pq",
-                   "WARNING",
-                   NULL);
+                    "WARNING",
+                    NULL);
   conn = PQconnectdb ("postgres:///talercheck");
   if (CONNECTION_OK != PQstatus (conn))
   {
@@ -202,17 +198,15 @@ main(int argc,
                   "CREATE TEMPORARY TABLE IF NOT EXISTS test_pq ("
                   " hamount_val INT8 NOT NULL"
                   ",hamount_frac INT4 NOT NULL"
-                  ",hamount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                   ",namount_val INT8 NOT NULL"
                   ",namount_frac INT4 NOT NULL"
-                  ",namount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
                   ",json VARCHAR NOT NULL"
                   ")");
   if (PGRES_COMMAND_OK != PQresultStatus (result))
   {
     fprintf (stderr,
-            "Failed to create table: %s\n",
-            PQerrorMessage (conn));
+             "Failed to create table: %s\n",
+             PQerrorMessage (conn));
     PQclear (result);
     PQfinish (conn);
     return 1;
@@ -227,12 +221,12 @@ main(int argc,
   }
   ret = run_queries (conn);
   result = PQexec (conn,
-                  "DROP TABLE test_pq");
+                   "DROP TABLE test_pq");
   if (PGRES_COMMAND_OK != PQresultStatus (result))
   {
     fprintf (stderr,
-            "Failed to create table: %s\n",
-            PQerrorMessage (conn));
+             "Failed to create table: %s\n",
+             PQerrorMessage (conn));
     PQclear (result);
     PQfinish (conn);
     return 1;
diff --git a/src/util/util.c b/src/util/util.c
index ceb3a3a8..51726290 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -39,7 +39,7 @@
  */
 const char *
 TALER_b2s (const void *buf,
-          size_t buf_size)
+           size_t buf_size)
 {
   static char ret[9];
   struct GNUNET_HashCode hc;
@@ -49,7 +49,7 @@ TALER_b2s (const void *buf,
                      buf_size,
                      &hc);
   tmp = GNUNET_STRINGS_data_to_string_alloc (&hc,
-                                            sizeof (hc));
+                                             sizeof (hc));
   memcpy (ret,
          tmp,
          8);

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]