gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated: add currency to amounts in merch


From: gnunet
Subject: [taler-merchant] branch master updated: add currency to amounts in merchant DB
Date: Tue, 22 Aug 2023 23:15:17 +0200

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

grothoff pushed a commit to branch master
in repository merchant.

The following commit(s) were added to refs/heads/master by this push:
     new c98d960d add currency to amounts in merchant DB
c98d960d is described below

commit c98d960d1badd1eeb834bacbc133960e2f86d304
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Tue Aug 22 23:15:08 2023 +0200

    add currency to amounts in merchant DB
---
 src/backend/taler-merchant-httpd.h                 |   2 +-
 .../taler-merchant-httpd_post-orders-ID-pay.c      |  70 +---------
 ...taler-merchant-httpd_private-get-instances-ID.c |   8 +-
 ...ler-merchant-httpd_private-patch-instances-ID.c |  23 +---
 .../taler-merchant-httpd_private-post-instances.c  |  25 +---
 .../taler-merchant-httpd_private-post-orders.c     |  45 ++-----
 src/backenddb/merchant-0001.sql                    |  59 ++++-----
 src/backenddb/pg_activate_reserve.c                |   2 +-
 src/backenddb/pg_authorize_reward.c                |  34 +++--
 src/backenddb/pg_helper.h                          |  30 -----
 src/backenddb/pg_increase_refund.c                 |  11 +-
 src/backenddb/pg_insert_deposit.c                  |   8 +-
 src/backenddb/pg_insert_deposit_to_transfer.c      |   2 +-
 src/backenddb/pg_insert_instance.c                 |  12 +-
 src/backenddb/pg_insert_pickup.c                   |  18 +--
 src/backenddb/pg_insert_product.c                  |   2 +-
 src/backenddb/pg_insert_reserve.c                  |  15 ++-
 src/backenddb/pg_insert_transfer.c                 |   2 +-
 src/backenddb/pg_insert_transfer_details.c         |   8 +-
 src/backenddb/pg_lookup_deposits.c                 |  17 ++-
 src/backenddb/pg_lookup_instances.c                |  16 +--
 src/backenddb/pg_lookup_product.c                  |   2 +-
 src/backenddb/pg_lookup_refunds.c                  |   5 +-
 src/backenddb/pg_lookup_reserves.c                 |  17 ++-
 src/backenddb/pg_lookup_transfers.c                |   5 +-
 src/backenddb/pg_select_exchange_keys.c            |   5 +
 src/backenddb/pg_select_open_transfers.c           |   5 +-
 .../pg_set_transfer_status_to_confirmed.c          |   6 +-
 src/backenddb/pg_store_wire_fee_by_exchange.c      |   4 +-
 src/backenddb/pg_update_instance.c                 |  22 ++--
 src/backenddb/pg_update_product.c                  |   2 +-
 src/backenddb/plugin_merchantdb_postgres.c         | 144 +++++++++------------
 src/backenddb/test_merchantdb.c                    |  30 +----
 src/include/taler_merchant_service.h               |  31 +----
 src/include/taler_merchant_testing_lib.h           |  22 +---
 src/include/taler_merchantdb_plugin.h              |  18 +--
 src/lib/merchant_api_get_instance.c                |  37 +++---
 src/lib/merchant_api_patch_instance.c              |  12 +-
 src/lib/merchant_api_post_instances.c              |  12 +-
 src/merchant-tools/taler-merchant-benchmark.c      |   3 -
 src/testing/test_key_rotation.sh                   |   2 +-
 src/testing/test_kyc_api.c                         |   1 -
 src/testing/test_merchant_api.c                    |  63 ++-------
 .../exchange-secmod-cs/keys/coin_eur_1/1690997204  |   1 -
 .../exchange-secmod-cs/keys/coin_eur_1/1691601704  |   1 -
 .../exchange-secmod-cs/keys/coin_eur_5/1690997204  | Bin 32 -> 0 bytes
 .../exchange-secmod-cs/keys/coin_eur_5/1691601704  |   1 -
 .../keys/coin_eur_ct_1/1690997204                  | Bin 32 -> 0 bytes
 .../keys/coin_eur_ct_1/1691601704                  |   1 -
 .../keys/coin_eur_ct_10/1690997204                 |   1 -
 .../keys/coin_eur_ct_10/1691601704                 |   1 -
 src/testing/test_merchant_api_twisted.c            |   3 +-
 src/testing/test_merchant_instance_auth.sh         |   4 +-
 src/testing/test_merchant_instance_creation.sh     |   6 +-
 src/testing/test_merchant_instance_purge.sh        |   4 +-
 src/testing/test_merchant_instance_response.sh     |   2 +-
 src/testing/test_merchant_kyc.sh                   |   2 +-
 src/testing/test_merchant_order_autocleanup.sh     |   2 +-
 src/testing/test_merchant_order_creation.sh        |   4 +-
 src/testing/test_merchant_product_creation.sh      |   2 +-
 src/testing/test_merchant_reserve_creation.sh      |   2 +-
 src/testing/test_merchant_transfer_tracking.sh     |   4 +-
 src/testing/test_merchant_wirewatch.sh             |   2 +-
 src/testing/testing_api_cmd_get_instance.c         |  53 +-------
 src/testing/testing_api_cmd_patch_instance.c       |  43 ++----
 src/testing/testing_api_cmd_post_instances.c       |  56 ++------
 66 files changed, 324 insertions(+), 728 deletions(-)

diff --git a/src/backend/taler-merchant-httpd.h 
b/src/backend/taler-merchant-httpd.h
index 4f25bab8..e1f2eeff 100644
--- a/src/backend/taler-merchant-httpd.h
+++ b/src/backend/taler-merchant-httpd.h
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2014-2021 Taler Systems SA
+  Copyright (C) 2014-2023 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU General Public License as published by the Free Software
diff --git a/src/backend/taler-merchant-httpd_post-orders-ID-pay.c 
b/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
index d4e620bd..5233d103 100644
--- a/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
+++ b/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
@@ -296,29 +296,10 @@ struct PayContext
    * Note that IF the total fee of the exchange is higher, that is
    * acceptable to the merchant if the customer is willing to
    * pay the difference
-   * (i.e. amount - max_fee <= actual-amount - actual-fee).
+   * (i.e. amount - max_fee <= actual_amount - actual_fee).
    */
   struct TALER_Amount max_fee;
 
-  /**
-   * Maximum wire fee the merchant is willing to pay, from @e root.
-   * Note that IF the total fee of the exchange is higher, that is
-   * acceptable to the merchant if the customer is willing to
-   * pay the amorized difference.  Wire fees are charged over an
-   * aggregate of several translations, hence unlike the deposit
-   * fees, they are amortized over several customer's transactions.
-   * The contract specifies under @e wire_fee_amortization how many
-   * customer's transactions he expects the wire fees to be amortized
-   * over on average.  Thus, if the wire fees are larger than
-   * @e max_wire_fee, each customer is expected to contribute
-   * $\frac{actual-wire-fee - max_wire_fee}{wire_fee_amortization}$.
-   * The customer's contribution may be further reduced by the
-   * difference between @e max_fee and the sum of the deposit fees.
-   *
-   * Default is that the merchant is unwilling to pay any wire fees.
-   */
-  struct TALER_Amount max_wire_fee;
-
   /**
    * Amount from @e root.  This is the amount the merchant expects
    * to make, minus @e max_fee.
@@ -376,15 +357,6 @@ struct PayContext
    */
   enum TALER_MerchantConfirmationAlgorithm pos_alg;
 
-  /**
-   * Number of transactions that the wire fees are expected to be
-   * amortized over.  Never zero, defaults (conservateively) to 1.
-   * May be higher if merchants expect many small transactions to
-   * be aggregated and thus wire fees to be reasonably amortized
-   * due to aggregation.
-   */
-  uint32_t wire_fee_amortization;
-
   /**
    * Minimum age required for this purchase.
    */
@@ -1643,8 +1615,6 @@ check_payment_sufficient (struct PayContext *pc)
   struct TALER_Amount acc_fee;
   struct TALER_Amount acc_amount;
   struct TALER_Amount final_amount;
-  struct TALER_Amount wire_fee_delta;
-  struct TALER_Amount wire_fee_customer_contribution;
   struct TALER_Amount total_wire_fee;
   struct TALER_Amount total_needed;
 
@@ -1742,9 +1712,6 @@ check_payment_sufficient (struct PayContext *pc)
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Total wire fee: %s\n",
               TALER_amount2s (&total_wire_fee));
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Max wire fee: %s\n",
-              TALER_amount2s (&pc->max_wire_fee));
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Deposit fee limit for merchant: %s\n",
               TALER_amount2s (&pc->max_fee));
@@ -1753,10 +1720,10 @@ check_payment_sufficient (struct PayContext *pc)
               TALER_amount2s (&pc->total_refunded));
 
   /* Now compare exchange wire fee compared to
-   * what we are willing to pay */
+ * what we are willing to pay */
   if (GNUNET_YES !=
       TALER_amount_cmp_currency (&total_wire_fee,
-                                 &pc->max_wire_fee))
+                                 &acc_fee))
   {
     GNUNET_break (0);
     resume_pay_with_error (pc,
@@ -1765,34 +1732,12 @@ check_payment_sufficient (struct PayContext *pc)
     return false;
   }
 
-  switch (TALER_amount_subtract (&wire_fee_delta,
-                                 &total_wire_fee,
-                                 &pc->max_wire_fee))
-  {
-  case TALER_AAR_RESULT_POSITIVE:
-    /* Actual wire fee is indeed higher than our maximum,
-       compute how much the customer is expected to cover!  */
-    TALER_amount_divide (&wire_fee_customer_contribution,
-                         &wire_fee_delta,
-                         pc->wire_fee_amortization);
-    break;
-  case TALER_AAR_RESULT_ZERO:
-  case TALER_AAR_INVALID_NEGATIVE_RESULT:
-    /* Wire fee threshold is still above the wire fee amount.
-       Customer is not going to contribute on this.  */
-    GNUNET_assert (GNUNET_OK ==
-                   TALER_amount_set_zero (total_wire_fee.currency,
-                                          &wire_fee_customer_contribution));
-    break;
-  default:
-    GNUNET_assert (0);
-  }
 
-  /* add wire fee contribution to the total fees */
+  /* add wire fee to the total fees */
   if (0 >
       TALER_amount_add (&acc_fee,
                         &acc_fee,
-                        &wire_fee_customer_contribution))
+                        &total_wire_fee))
   {
     GNUNET_break (0);
     resume_pay_with_error (pc,
@@ -2639,11 +2584,6 @@ check_contract (struct PayContext *pc)
       TALER_JSON_spec_amount ("max_fee",
                               TMH_currency,
                               &pc->max_fee),
-      TALER_JSON_spec_amount ("max_wire_fee",
-                              TMH_currency,
-                              &pc->max_wire_fee),
-      GNUNET_JSON_spec_uint32 ("wire_fee_amortization",
-                               &pc->wire_fee_amortization),
       GNUNET_JSON_spec_timestamp ("timestamp",
                                   &pc->timestamp),
       GNUNET_JSON_spec_timestamp ("refund_deadline",
diff --git a/src/backend/taler-merchant-httpd_private-get-instances-ID.c 
b/src/backend/taler-merchant-httpd_private-get-instances-ID.c
index 2a2116d9..adc99c39 100644
--- a/src/backend/taler-merchant-httpd_private-get-instances-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-instances-ID.c
@@ -95,12 +95,8 @@ get_instances_ID (struct TMH_MerchantInstance *mi,
                                     mi->settings.address),
     GNUNET_JSON_pack_object_incref ("jurisdiction",
                                     mi->settings.jurisdiction),
-    TALER_JSON_pack_amount ("default_max_wire_fee",
-                            &mi->settings.default_max_wire_fee),
-    TALER_JSON_pack_amount ("default_max_deposit_fee",
-                            &mi->settings.default_max_deposit_fee),
-    GNUNET_JSON_pack_uint64 ("default_wire_fee_amortization",
-                             mi->settings.default_wire_fee_amortization),
+    GNUNET_JSON_pack_bool ("use_stefan",
+                           mi->settings.use_stefan),
     GNUNET_JSON_pack_time_rel ("default_wire_transfer_delay",
                                mi->settings.default_wire_transfer_delay),
     GNUNET_JSON_pack_time_rel ("default_pay_delay",
diff --git a/src/backend/taler-merchant-httpd_private-patch-instances-ID.c 
b/src/backend/taler-merchant-httpd_private-patch-instances-ID.c
index 5fa66e1f..bc6e3aae 100644
--- a/src/backend/taler-merchant-httpd_private-patch-instances-ID.c
+++ b/src/backend/taler-merchant-httpd_private-patch-instances-ID.c
@@ -93,14 +93,8 @@ patch_instances_ID (struct TMH_MerchantInstance *mi,
                            &is.address),
     GNUNET_JSON_spec_json ("jurisdiction",
                            &is.jurisdiction),
-    TALER_JSON_spec_amount ("default_max_wire_fee",
-                            TMH_currency,
-                            &is.default_max_wire_fee),
-    GNUNET_JSON_spec_uint32 ("default_wire_fee_amortization",
-                             &is.default_wire_fee_amortization),
-    TALER_JSON_spec_amount ("default_max_deposit_fee",
-                            TMH_currency,
-                            &is.default_max_deposit_fee),
+    GNUNET_JSON_spec_bool ("use_stefan",
+                           &is.use_stefan),
     GNUNET_JSON_spec_relative_time ("default_wire_transfer_delay",
                                     &is.default_wire_transfer_delay),
     GNUNET_JSON_spec_relative_time ("default_pay_delay",
@@ -220,18 +214,7 @@ patch_instances_ID (struct TMH_MerchantInstance *mi,
                               is.address)) &&
             (1 == json_equal (mi->settings.jurisdiction,
                               is.jurisdiction)) &&
-            (GNUNET_YES == TALER_amount_cmp_currency (
-               &mi->settings.default_max_deposit_fee,
-               &is.default_max_deposit_fee)) &&
-            (0 == TALER_amount_cmp (&mi->settings.default_max_deposit_fee,
-                                    &is.default_max_deposit_fee)) &&
-            (GNUNET_YES == TALER_amount_cmp_currency (
-               &mi->settings.default_max_wire_fee,
-               &is.default_max_wire_fee)) &&
-            (0 == TALER_amount_cmp (&mi->settings.default_max_wire_fee,
-                                    &is.default_max_wire_fee)) &&
-            (mi->settings.default_wire_fee_amortization ==
-             is.default_wire_fee_amortization) &&
+            (mi->settings.use_stefan == is.use_stefan) &&
             (GNUNET_TIME_relative_cmp 
(mi->settings.default_wire_transfer_delay,
                                        ==,
                                        is.default_wire_transfer_delay)) &&
diff --git a/src/backend/taler-merchant-httpd_private-post-instances.c 
b/src/backend/taler-merchant-httpd_private-post-instances.c
index 236741a1..6c9727e9 100644
--- a/src/backend/taler-merchant-httpd_private-post-instances.c
+++ b/src/backend/taler-merchant-httpd_private-post-instances.c
@@ -136,14 +136,8 @@ TMH_private_post_instances (const struct 
TMH_RequestHandler *rh,
                            &is.address),
     GNUNET_JSON_spec_json ("jurisdiction",
                            &is.jurisdiction),
-    TALER_JSON_spec_amount ("default_max_wire_fee",
-                            TMH_currency,
-                            &is.default_max_wire_fee),
-    GNUNET_JSON_spec_uint32 ("default_wire_fee_amortization",
-                             &is.default_wire_fee_amortization),
-    TALER_JSON_spec_amount ("default_max_deposit_fee",
-                            TMH_currency,
-                            &is.default_max_deposit_fee),
+    GNUNET_JSON_spec_bool ("use_stefan",
+                           &is.use_stefan),
     GNUNET_JSON_spec_relative_time ("default_wire_transfer_delay",
                                     &is.default_wire_transfer_delay),
     GNUNET_JSON_spec_relative_time ("default_pay_delay",
@@ -292,20 +286,7 @@ TMH_private_post_instances (const struct 
TMH_RequestHandler *rh,
                              is.address)) &&
            (1 == json_equal (mi->settings.jurisdiction,
                              is.jurisdiction)) &&
-           (GNUNET_OK ==
-            TALER_amount_cmp_currency (
-              &mi->settings.default_max_deposit_fee,
-              &is.default_max_deposit_fee)) &&
-           (0 == TALER_amount_cmp (&mi->settings.default_max_deposit_fee,
-                                   &is.default_max_deposit_fee)) &&
-           (GNUNET_OK ==
-            TALER_amount_cmp_currency (
-              &mi->settings.default_max_wire_fee,
-              &is.default_max_wire_fee)) &&
-           (0 == TALER_amount_cmp (&mi->settings.default_max_wire_fee,
-                                   &is.default_max_wire_fee)) &&
-           (mi->settings.default_wire_fee_amortization ==
-            is.default_wire_fee_amortization) &&
+           (mi->settings.use_stefan == is.use_stefan) &&
            (GNUNET_TIME_relative_cmp (mi->settings.default_wire_transfer_delay,
                                       ==,
                                       is.default_wire_transfer_delay)) &&
diff --git a/src/backend/taler-merchant-httpd_private-post-orders.c 
b/src/backend/taler-merchant-httpd_private-post-orders.c
index c83baf1d..370050d4 100644
--- a/src/backend/taler-merchant-httpd_private-post-orders.c
+++ b/src/backend/taler-merchant-httpd_private-post-orders.c
@@ -1066,9 +1066,7 @@ patch_order (struct OrderContext *oc)
   const char *merchant_base_url = NULL;
   const json_t *jmerchant = NULL;
   const json_t *delivery_location = NULL;
-  struct TALER_Amount max_wire_fee = { 0 };
   struct TALER_Amount max_fee = { 0 };
-  uint32_t wire_fee_amortization = 0;
   struct GNUNET_TIME_Timestamp timestamp
     = GNUNET_TIME_UNIT_ZERO_TS;
   struct GNUNET_TIME_Timestamp delivery_date
@@ -1119,15 +1117,6 @@ patch_order (struct OrderContext *oc)
                               TMH_currency,
                               &max_fee),
       NULL),
-    GNUNET_JSON_spec_mark_optional (
-      TALER_JSON_spec_amount ("max_wire_fee",
-                              TMH_currency,
-                              &max_wire_fee),
-      NULL),
-    GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_uint32 ("wire_fee_amortization",
-                               &wire_fee_amortization),
-      NULL),
     GNUNET_JSON_spec_mark_optional (
       GNUNET_JSON_spec_timestamp ("delivery_date",
                                   &delivery_date),
@@ -1365,35 +1354,27 @@ patch_order (struct OrderContext *oc)
 
   /* Note: total amount currency match checked
      later in execute_order() */
-  if (GNUNET_OK !=
-      TALER_amount_is_valid (&max_wire_fee))
-  {
-    GNUNET_assert (0 ==
-                   json_object_set_new (
-                     oc->order,
-                     "max_wire_fee",
-                     TALER_JSON_from_amount 
(&settings->default_max_wire_fee)));
-  }
-
   if (GNUNET_OK !=
       TALER_amount_is_valid (&max_fee))
   {
+    struct TALER_Amount stefan;
+
+    GNUNET_assert (GNUNET_OK ==
+                   TALER_amount_set_zero (TMH_currency,
+                                          &stefan));
+    if (settings->use_stefan)
+    {
+      /* FIXME: update amount from stefan curve! */
+      stefan.value = 5; // FIXME!
+    }
+
     GNUNET_assert (0 ==
                    json_object_set_new (
                      oc->order,
                      "max_fee",
-                     TALER_JSON_from_amount (
-                       &settings->default_max_deposit_fee)));
-  }
-  if (0 == wire_fee_amortization)
-  {
-    GNUNET_assert (0 ==
-                   json_object_set_new (
-                     oc->order,
-                     "wire_fee_amortization",
-                     json_integer (
-                       (json_int_t) settings->default_wire_fee_amortization)));
+                     TALER_JSON_from_amount (&stefan)));
   }
+
   if (NULL == merchant_base_url)
   {
     char *url;
diff --git a/src/backenddb/merchant-0001.sql b/src/backenddb/merchant-0001.sql
index 1c9a8aaf..bbc97828 100644
--- a/src/backenddb/merchant-0001.sql
+++ b/src/backenddb/merchant-0001.sql
@@ -30,12 +30,13 @@ COMMENT ON SCHEMA merchant IS 'taler-merchant data';
 
 SET search_path TO merchant;
 
-CREATE TYPE taler_amount
+CREATE TYPE taler_amount_currency
   AS
   (val INT8
   ,frac INT4
+  ,curr VARCHAR(12)
   );
-COMMENT ON TYPE taler_amount
+COMMENT ON TYPE taler_amount_currency
   IS 'Stores an amount, fraction is in units of 1/100000000 of the base value';
 
 ---------------- Exchange information ---------------------------
@@ -46,8 +47,8 @@ CREATE TABLE IF NOT EXISTS merchant_exchange_wire_fees
   ,h_wire_method BYTEA NOT NULL CHECK (LENGTH(h_wire_method)=64)
   ,start_date INT8 NOT NULL
   ,end_date INT8 NOT NULL
-  ,wire_fee taler_amount NOT NULL
-  ,closing_fee taler_amount NOT NULL
+  ,wire_fee taler_amount_currency NOT NULL
+  ,closing_fee taler_amount_currency NOT NULL
   ,master_sig BYTEA NOT NULL CHECK (LENGTH(master_sig)=64)
   ,UNIQUE (master_pub,h_wire_method,start_date)
   );
@@ -86,9 +87,7 @@ CREATE TABLE IF NOT EXISTS merchant_instances
   ,logo BYTEA
   ,address BYTEA NOT NULL
   ,jurisdiction BYTEA NOT NULL
-  ,default_max_deposit_fee taler_amount NOT NULL
-  ,default_max_wire_fee taler_amount NOT NULL
-  ,default_wire_fee_amortization INT4 NOT NULL
+  ,use_stefan BOOLEAN NOT NULL DEFAULT TRUE
   ,default_wire_transfer_delay INT8 NOT NULL
   ,default_pay_delay INT8 NOT NULL
   ,user_type INT4
@@ -100,17 +99,19 @@ COMMENT ON COLUMN merchant_instances.merchant_id
 COMMENT ON COLUMN merchant_instances.merchant_name
   IS 'legal name of the merchant as a simple string (required)';
 COMMENT ON COLUMN merchant_instances.address
-  IS 'physical address of the merchant as a Location in JSON format 
(required)';
+  IS 'physical address of the merchant as a location in JSON format 
(required)';
 COMMENT ON COLUMN merchant_instances.jurisdiction
-  IS 'jurisdiction of the merchant as a Location in JSON format (required)';
+  IS 'jurisdiction of the merchant as a location in JSON format (required)';
 COMMENT ON COLUMN merchant_instances.website
   IS 'merchant site URL';
+COMMENT ON COLUMN merchant_instances.use_stefan
+  IS 'use STEFAN curve of exchange to determine acceptable fees (unless given 
explicitly)';
 COMMENT ON COLUMN merchant_instances.email
   IS 'email';
 COMMENT ON COLUMN merchant_instances.logo
   IS 'data image url';
 COMMENT ON COLUMN merchant_instances.auth_hash
-  IS 'hash used for merchant back office Authorization, NULL for no check';
+  IS 'hash used for merchant back office authorization, NULL for no check';
 COMMENT ON COLUMN merchant_instances.auth_salt
   IS 'salt to use when hashing Authorization header before comparing with 
auth_hash';
 COMMENT ON COLUMN merchant_instances.user_type
@@ -170,7 +171,7 @@ CREATE TABLE IF NOT EXISTS merchant_inventory
   ,unit TEXT NOT NULL
   ,image BYTEA NOT NULL
   ,taxes BYTEA NOT NULL
-  ,price taler_amount NOT NULL
+  ,price taler_amount_currency NOT NULL
   ,total_stock BIGINT NOT NULL
   ,total_sold BIGINT NOT NULL DEFAULT 0
   ,total_lost BIGINT NOT NULL DEFAULT 0
@@ -361,10 +362,10 @@ CREATE TABLE IF NOT EXISTS merchant_deposits
   ,deposit_timestamp INT8 NOT NULL
   ,coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)
   ,exchange_url TEXT NOT NULL
-  ,amount_with_fee taler_amount NOT NULL
-  ,deposit_fee taler_amount NOT NULL
-  ,refund_fee taler_amount NOT NULL
-  ,wire_fee taler_amount NOT NULL
+  ,amount_with_fee taler_amount_currency NOT NULL
+  ,deposit_fee taler_amount_currency NOT NULL
+  ,refund_fee taler_amount_currency NOT NULL
+  ,wire_fee taler_amount_currency NOT NULL
   ,signkey_serial BIGINT NOT NULL
      REFERENCES merchant_exchange_signing_keys (signkey_serial) ON DELETE 
CASCADE
   ,exchange_sig BYTEA NOT NULL CHECK (LENGTH(exchange_sig)=64)
@@ -391,7 +392,7 @@ CREATE TABLE IF NOT EXISTS merchant_refunds
   ,refund_timestamp INT8 NOT NULL
   ,coin_pub BYTEA NOT NULL
   ,reason TEXT NOT NULL
-  ,refund_amount taler_amount NOT NULL
+  ,refund_amount taler_amount_currency NOT NULL
   ,UNIQUE (order_serial, coin_pub, rtransaction_id)
   );
 COMMENT ON TABLE merchant_deposits
@@ -420,7 +421,7 @@ CREATE TABLE IF NOT EXISTS merchant_transfers
   (credit_serial INT8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
   ,exchange_url TEXT NOT NULL
   ,wtid BYTEA CHECK (LENGTH(wtid)=32)
-  ,credit_amount taler_amount NOT NULL
+  ,credit_amount taler_amount_currency NOT NULL
   ,account_serial INT8 NOT NULL
    REFERENCES merchant_accounts (account_serial) ON DELETE CASCADE
   ,ready_time INT8 NOT NULL DEFAULT (0)
@@ -456,8 +457,8 @@ CREATE TABLE IF NOT EXISTS merchant_transfer_signatures
      REFERENCES merchant_transfers (credit_serial) ON DELETE CASCADE
   ,signkey_serial BIGINT NOT NULL
      REFERENCES merchant_exchange_signing_keys (signkey_serial) ON DELETE 
CASCADE
-  ,wire_fee taler_amount NOT NULL
-  ,credit_amount taler_amount NOT NULL
+  ,wire_fee taler_amount_currency NOT NULL
+  ,credit_amount taler_amount_currency NOT NULL
   ,execution_time INT8 NOT NULL
   ,exchange_sig BYTEA NOT NULL CHECK (LENGTH(exchange_sig)=64)
   );
@@ -475,8 +476,8 @@ CREATE TABLE IF NOT EXISTS merchant_transfer_to_coin
   ,credit_serial BIGINT NOT NULL
      REFERENCES merchant_transfers (credit_serial) ON DELETE CASCADE
   ,offset_in_exchange_list INT8 NOT NULL
-  ,exchange_deposit_value taler_amount NOT NULL
-  ,exchange_deposit_fee taler_amount NOT NULL
+  ,exchange_deposit_value taler_amount_currency NOT NULL
+  ,exchange_deposit_fee taler_amount_currency NOT NULL
   );
 CREATE INDEX IF NOT EXISTS merchant_transfers_by_credit
   ON merchant_transfer_to_coin
@@ -491,7 +492,7 @@ COMMENT ON COLUMN 
merchant_transfer_to_coin.exchange_deposit_fee
 CREATE TABLE IF NOT EXISTS merchant_deposit_to_transfer
   (deposit_serial BIGINT NOT NULL
      REFERENCES merchant_deposits (deposit_serial) ON DELETE CASCADE
-  ,coin_contribution_value taler_amount NOT NULL
+  ,coin_contribution_value taler_amount_currency NOT NULL
   ,credit_serial BIGINT NOT NULL
      REFERENCES merchant_transfers (credit_serial)
   ,execution_time INT8 NOT NULL
@@ -515,10 +516,10 @@ CREATE TABLE IF NOT EXISTS merchant_reward_reserves
     REFERENCES merchant_instances (merchant_serial) ON DELETE CASCADE
   ,creation_time INT8 NOT NULL
   ,expiration INT8 NOT NULL
-  ,merchant_initial_balance taler_amount NOT NULL
-  ,exchange_initial_balance taler_amount NOT NULL DEFAULT (0,0)
-  ,rewards_committed taler_amount NOT NULL DEFAULT (0,0)
-  ,rewards_picked_up taler_amount NOT NULL DEFAULT (0,0)
+  ,merchant_initial_balance taler_amount_currency NOT NULL
+  ,exchange_initial_balance taler_amount_currency NOT NULL
+  ,rewards_committed taler_amount_currency NOT NULL
+  ,rewards_picked_up taler_amount_currency NOT NULL
   );
 COMMENT ON TABLE merchant_reward_reserves
   IS 'balances of the reserves available for rewards';
@@ -566,8 +567,8 @@ CREATE TABLE IF NOT EXISTS merchant_rewards
   ,justification TEXT NOT NULL
   ,next_url TEXT NOT NULL
   ,expiration INT8 NOT NULL
-  ,amount taler_amount NOT NULL
-  ,picked_up taler_amount NOT NULL DEFAULT (0, 0)
+  ,amount taler_amount_currency NOT NULL
+  ,picked_up taler_amount_currency NOT NULL
   ,was_picked_up BOOLEAN NOT NULL DEFAULT FALSE
   );
 CREATE INDEX IF NOT EXISTS merchant_rewards_by_pickup_and_expiration
@@ -589,7 +590,7 @@ CREATE TABLE IF NOT EXISTS merchant_reward_pickups
   ,reward_serial BIGINT NOT NULL
       REFERENCES merchant_rewards (reward_serial) ON DELETE CASCADE
   ,pickup_id BYTEA NOT NULL UNIQUE CHECK (LENGTH(pickup_id)=64)
-  ,amount taler_amount NOT NULL
+  ,amount taler_amount_currency NOT NULL
   );
 COMMENT ON TABLE merchant_reward_pickups
   IS 'rewards that have been picked up';
diff --git a/src/backenddb/pg_activate_reserve.c 
b/src/backenddb/pg_activate_reserve.c
index fbdca791..d7a4ff48 100644
--- a/src/backenddb/pg_activate_reserve.c
+++ b/src/backenddb/pg_activate_reserve.c
@@ -36,7 +36,7 @@ TMH_PG_activate_reserve (void *cls,
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_string (instance_id),
     GNUNET_PQ_query_param_auto_from_type (reserve_pub),
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  initial_exchange_balance),
     GNUNET_PQ_query_param_end
   };
diff --git a/src/backenddb/pg_authorize_reward.c 
b/src/backenddb/pg_authorize_reward.c
index 29cf6c5f..6ebf4796 100644
--- a/src/backenddb/pg_authorize_reward.c
+++ b/src/backenddb/pg_authorize_reward.c
@@ -91,7 +91,6 @@ lookup_reserve_for_reward_cb (void *cls,
                               unsigned int num_results)
 {
   struct LookupReserveForRewardContext *lac = cls;
-  struct PostgresClosure *pg = lac->pg;
 
   for (unsigned int i = 0; i < num_results; i++)
   {
@@ -103,10 +102,10 @@ lookup_reserve_for_reward_cb (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
                                             &reserve_pub),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_initial_balance",
-                                   &initial_balance),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("rewards_committed",
-                                   &committed_amount),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_initial_balance",
+                                                 &initial_balance),
+      TALER_PQ_result_spec_amount_with_currency ("rewards_committed",
+                                                 &committed_amount),
       GNUNET_PQ_result_spec_timestamp ("expiration",
                                        &expiration),
       GNUNET_PQ_result_spec_end
@@ -229,9 +228,10 @@ TMH_PG_authorize_reward (void *cls,
            ",next_url"
            ",expiration"
            ",amount"
+           ",picked_up"
            ") "
            "SELECT"
-           " reserve_serial, $3, $4, $5, $6, $7"
+           " reserve_serial, $3, $4, $5, $6, $7, $8"
            " FROM merchant_reward_reserves"
            " WHERE reserve_pub=$2"
            "  AND merchant_serial = "
@@ -302,10 +302,10 @@ RETRY:
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_timestamp ("expiration",
                                        expiration),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("rewards_committed",
-                                   &rewards_committed),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_initial_balance",
-                                   &exchange_initial_balance),
+      TALER_PQ_result_spec_amount_with_currency ("rewards_committed",
+                                                 &rewards_committed),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_initial_balance",
+                                                 &exchange_initial_balance),
       GNUNET_PQ_result_spec_end
     };
 
@@ -358,8 +358,8 @@ RETRY:
     struct GNUNET_PQ_QueryParam params[] = {
       GNUNET_PQ_query_param_string (instance_id),
       GNUNET_PQ_query_param_auto_from_type (reserve_pubp),
-      TALER_PQ_query_param_amount (pg->conn,
-                                   &rewards_committed),
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                                 &rewards_committed),
       GNUNET_PQ_query_param_end
     };
 
@@ -382,6 +382,7 @@ RETRY:
                               reward_id,
                               sizeof (*reward_id));
   {
+    struct TALER_Amount zero;
     struct GNUNET_PQ_QueryParam params[] = {
       GNUNET_PQ_query_param_string (instance_id),
       GNUNET_PQ_query_param_auto_from_type (reserve_pubp),
@@ -389,11 +390,16 @@ RETRY:
       GNUNET_PQ_query_param_string (justification),
       GNUNET_PQ_query_param_string (next_url),
       GNUNET_PQ_query_param_timestamp (expiration),
-      TALER_PQ_query_param_amount (pg->conn,
-                                   amount),
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                                 amount),
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                                 &zero),
       GNUNET_PQ_query_param_end
     };
 
+    GNUNET_assert (GNUNET_OK ==
+                   TALER_amount_set_zero (amount->currency,
+                                          &zero));
     qs = GNUNET_PQ_eval_prepared_non_select (pg->conn,
                                              "insert_reward",
                                              params);
diff --git a/src/backenddb/pg_helper.h b/src/backenddb/pg_helper.h
index 2de99c69..5f677fc5 100644
--- a/src/backenddb/pg_helper.h
+++ b/src/backenddb/pg_helper.h
@@ -35,11 +35,6 @@ struct PostgresClosure
    */
   struct GNUNET_PQ_Context *conn;
 
-  /**
-   * Which currency do we deal in?
-   */
-  char *currency;
-
   /**
    * Directory with SQL statements to run to create tables.
    */
@@ -95,31 +90,6 @@ struct PostgresClosure
   } while (0)
 
 
-/**
- * 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[out] amountp 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[out] amountp pointer to amount to set
- */
-#define TALER_PQ_RESULT_SPEC_AMOUNT_NBO(field,                          \
-                                        amountp) \
-  TALER_PQ_result_spec_amount_nbo ( \
-    field,pg->currency,amountp)
-
-
 /**
  * Check that the database connection is still up
  * and automatically reconnects unless we are
diff --git a/src/backenddb/pg_increase_refund.c 
b/src/backenddb/pg_increase_refund.c
index e003512e..5fd548d7 100644
--- a/src/backenddb/pg_increase_refund.c
+++ b/src/backenddb/pg_increase_refund.c
@@ -68,7 +68,6 @@ process_refund_cb (void *cls,
                    unsigned int num_results)
 {
   struct FindRefundContext *ictx = cls;
-  struct PostgresClosure *pg = ictx->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -76,8 +75,8 @@ process_refund_cb (void *cls,
     struct TALER_Amount acc;
     uint64_t rtransaction_id;
     struct GNUNET_PQ_ResultSpec rs[] = {
-      TALER_PQ_RESULT_SPEC_AMOUNT ("refund_amount",
-                                   &acc),
+      TALER_PQ_result_spec_amount_with_currency ("refund_amount",
+                                                 &acc),
       GNUNET_PQ_result_spec_uint64 ("rtransaction_id",
                                     &rtransaction_id),
       GNUNET_PQ_result_spec_end
@@ -205,8 +204,8 @@ process_deposits_for_refund_cb (
                                             &rcd[i].coin_pub),
       GNUNET_PQ_result_spec_uint64 ("order_serial",
                                     &rcd[i].order_serial),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
-                                   &rcd[i].deposited_with_fee),
+      TALER_PQ_result_spec_amount_with_currency ("amount_with_fee",
+                                                 &rcd[i].deposited_with_fee),
       GNUNET_PQ_result_spec_end
     };
     struct FindRefundContext ictx = {
@@ -364,7 +363,7 @@ process_deposits_for_refund_cb (
         GNUNET_PQ_query_param_timestamp (&now),
         GNUNET_PQ_query_param_auto_from_type (&rcd[i].coin_pub),
         GNUNET_PQ_query_param_string (ctx->reason),
-        TALER_PQ_query_param_amount (pg->conn,
+        TALER_PQ_query_param_amount_with_currency (pg->conn,
                                      increment),
         GNUNET_PQ_query_param_end
       };
diff --git a/src/backenddb/pg_insert_deposit.c 
b/src/backenddb/pg_insert_deposit.c
index 3b85dcf6..f99c6f44 100644
--- a/src/backenddb/pg_insert_deposit.c
+++ b/src/backenddb/pg_insert_deposit.c
@@ -50,13 +50,13 @@ TMH_PG_insert_deposit (
     GNUNET_PQ_query_param_timestamp (&deposit_timestamp), /* $3 */
     GNUNET_PQ_query_param_auto_from_type (coin_pub),
     GNUNET_PQ_query_param_string (exchange_url),
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  amount_with_fee),       /* $6 */
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  deposit_fee),        /* $7 */
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  refund_fee),       /* $8 */
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  wire_fee),        /* $9 */
     GNUNET_PQ_query_param_auto_from_type (h_wire), /* $10 */
     GNUNET_PQ_query_param_auto_from_type (exchange_sig), /* $11 */
diff --git a/src/backenddb/pg_insert_deposit_to_transfer.c 
b/src/backenddb/pg_insert_deposit_to_transfer.c
index b79dd37c..4b5f0cc3 100644
--- a/src/backenddb/pg_insert_deposit_to_transfer.c
+++ b/src/backenddb/pg_insert_deposit_to_transfer.c
@@ -35,7 +35,7 @@ TMH_PG_insert_deposit_to_transfer (
   struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&deposit_serial),
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  &dd->coin_contribution),
     GNUNET_PQ_query_param_timestamp (&dd->execution_time),
     GNUNET_PQ_query_param_auto_from_type (&dd->exchange_sig),
diff --git a/src/backenddb/pg_insert_instance.c 
b/src/backenddb/pg_insert_instance.c
index 8f6fcc50..6928a094 100644
--- a/src/backenddb/pg_insert_instance.c
+++ b/src/backenddb/pg_insert_instance.c
@@ -45,11 +45,7 @@ TMH_PG_insert_instance (
     GNUNET_PQ_query_param_uint32 (&ut32),
     TALER_PQ_query_param_json (is->address),
     TALER_PQ_query_param_json (is->jurisdiction),
-    TALER_PQ_query_param_amount (pg->conn,
-                                 &is->default_max_deposit_fee),
-    TALER_PQ_query_param_amount (pg->conn,
-                                 &is->default_max_wire_fee),
-    GNUNET_PQ_query_param_uint32 (&is->default_wire_fee_amortization),
+    GNUNET_PQ_query_param_bool (is->use_stefan),
     GNUNET_PQ_query_param_relative_time (
       &is->default_wire_transfer_delay),
     GNUNET_PQ_query_param_relative_time (&is->default_pay_delay),
@@ -83,16 +79,14 @@ TMH_PG_insert_instance (
            ",user_type"
            ",address"
            ",jurisdiction"
-           ",default_max_deposit_fee"
-           ",default_max_wire_fee"
-           ",default_wire_fee_amortization"
+           ",use_stefan"
            ",default_wire_transfer_delay"
            ",default_pay_delay"
            ",website"
            ",email"
            ",logo)"
            "VALUES"
-           "($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, 
$16)");
+           "($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)");
   qs = GNUNET_PQ_eval_prepared_non_select (pg->conn,
                                            "insert_instance",
                                            params);
diff --git a/src/backenddb/pg_insert_pickup.c b/src/backenddb/pg_insert_pickup.c
index 281d4c19..73b97c6d 100644
--- a/src/backenddb/pg_insert_pickup.c
+++ b/src/backenddb/pg_insert_pickup.c
@@ -58,7 +58,7 @@ TMH_PG_insert_pickup (
            "update_picked_up_reward",
            "UPDATE merchant_rewards SET"
            " picked_up=$2"
-           ",was_picked_up = (CAST($2 AS taler_amount) = amount)"
+           ",was_picked_up = (CAST($2 AS taler_amount_currency) = amount)"
            " WHERE reward_id = $1");
   PREPARE (pg,
            "lookup_picked_up_reserve",
@@ -83,8 +83,8 @@ TMH_PG_insert_pickup (
       GNUNET_PQ_query_param_string (instance_id),
       GNUNET_PQ_query_param_auto_from_type (reward_id),
       GNUNET_PQ_query_param_auto_from_type (pickup_id),
-      TALER_PQ_query_param_amount (pg->conn,
-                                   total_requested),
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                                 total_requested),
       GNUNET_PQ_query_param_end
     };
 
@@ -98,8 +98,8 @@ TMH_PG_insert_pickup (
   {
     struct GNUNET_PQ_QueryParam params[] = {
       GNUNET_PQ_query_param_auto_from_type (reward_id),
-      TALER_PQ_query_param_amount (pg->conn,
-                                   total_picked_up),
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                                 total_picked_up),
       GNUNET_PQ_query_param_end
     };
 
@@ -121,8 +121,8 @@ TMH_PG_insert_pickup (
       struct GNUNET_PQ_ResultSpec rs[] = {
         GNUNET_PQ_result_spec_uint64 ("reserve_serial",
                                       &reserve_serial),
-        TALER_PQ_RESULT_SPEC_AMOUNT ("rewards_picked_up",
-                                     &reserve_picked_up),
+        TALER_PQ_result_spec_amount_with_currency ("rewards_picked_up",
+                                                   &reserve_picked_up),
         GNUNET_PQ_result_spec_end
 
       };
@@ -146,8 +146,8 @@ TMH_PG_insert_pickup (
     {
       struct GNUNET_PQ_QueryParam params[] = {
         GNUNET_PQ_query_param_uint64 (&reserve_serial),
-        TALER_PQ_query_param_amount (pg->conn,
-                                     &reserve_picked_up),
+        TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                                   &reserve_picked_up),
         GNUNET_PQ_query_param_end
       };
 
diff --git a/src/backenddb/pg_insert_product.c 
b/src/backenddb/pg_insert_product.c
index 19096962..55db57e9 100644
--- a/src/backenddb/pg_insert_product.c
+++ b/src/backenddb/pg_insert_product.c
@@ -41,7 +41,7 @@ TMH_PG_insert_product (void *cls,
     GNUNET_PQ_query_param_string (pd->unit),
     GNUNET_PQ_query_param_string (pd->image),
     TALER_PQ_query_param_json (pd->taxes),
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  &pd->price),
     GNUNET_PQ_query_param_uint64 (&pd->total_stock),
     TALER_PQ_query_param_json (pd->address),
diff --git a/src/backenddb/pg_insert_reserve.c 
b/src/backenddb/pg_insert_reserve.c
index c2da4e15..67e2652a 100644
--- a/src/backenddb/pg_insert_reserve.c
+++ b/src/backenddb/pg_insert_reserve.c
@@ -55,8 +55,11 @@ TMH_PG_insert_reserve (void *cls,
            ",creation_time"
            ",expiration"
            ",merchant_initial_balance"
+           ",exchange_initial_balance"
+           ",rewards_committed"
+           ",rewards_picked_up"
            ")"
-           "SELECT $2, merchant_serial, $3, $4, $5"
+           "SELECT $2, merchant_serial, $3, $4, $5, $6, $6, $6"
            " FROM merchant_instances"
            " WHERE merchant_id=$1");
 RETRY:
@@ -72,18 +75,24 @@ RETRY:
 
   /* Setup reserve */
   {
+    struct TALER_Amount zero;
     struct GNUNET_TIME_Timestamp now;
     struct GNUNET_PQ_QueryParam params[] = {
       GNUNET_PQ_query_param_string (instance_id),
       GNUNET_PQ_query_param_auto_from_type (reserve_pub),
       GNUNET_PQ_query_param_timestamp (&now),
       GNUNET_PQ_query_param_timestamp (&expiration),
-      TALER_PQ_query_param_amount (pg->conn,
-                                   initial_balance),
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                                 initial_balance),
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                                 &zero),
       GNUNET_PQ_query_param_end
     };
 
     now = GNUNET_TIME_timestamp_get ();
+    GNUNET_assert (GNUNET_OK ==
+                   TALER_amount_set_zero (initial_balance->currency,
+                                          &zero));
     qs = GNUNET_PQ_eval_prepared_non_select (pg->conn,
                                              "insert_reserve",
                                              params);
diff --git a/src/backenddb/pg_insert_transfer.c 
b/src/backenddb/pg_insert_transfer.c
index 3c1502e5..6e8b8adf 100644
--- a/src/backenddb/pg_insert_transfer.c
+++ b/src/backenddb/pg_insert_transfer.c
@@ -40,7 +40,7 @@ TMH_PG_insert_transfer (
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_string (exchange_url),
     GNUNET_PQ_query_param_auto_from_type (wtid),
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  credit_amount),
     GNUNET_PQ_query_param_string (payto_uri),
     GNUNET_PQ_query_param_bool (confirmed),
diff --git a/src/backenddb/pg_insert_transfer_details.c 
b/src/backenddb/pg_insert_transfer_details.c
index 1b08733f..a4f69989 100644
--- a/src/backenddb/pg_insert_transfer_details.c
+++ b/src/backenddb/pg_insert_transfer_details.c
@@ -174,9 +174,9 @@ RETRY:
   {
     struct GNUNET_PQ_QueryParam params[] = {
       GNUNET_PQ_query_param_uint64 (&credit_serial),
-      TALER_PQ_query_param_amount (pg->conn,
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
                                    &td->total_amount),
-      TALER_PQ_query_param_amount (pg->conn,
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
                                    &td->wire_fee),
       GNUNET_PQ_query_param_timestamp (&td->execution_time),
       GNUNET_PQ_query_param_auto_from_type (&td->exchange_sig),
@@ -218,9 +218,9 @@ RETRY:
     struct GNUNET_PQ_QueryParam params[] = {
       GNUNET_PQ_query_param_uint64 (&credit_serial),
       GNUNET_PQ_query_param_uint64 (&i64),
-      TALER_PQ_query_param_amount (pg->conn,
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
                                    &d->coin_value),
-      TALER_PQ_query_param_amount (pg->conn,
+      TALER_PQ_query_param_amount_with_currency (pg->conn,
                                    &d->coin_fee),       /* deposit fee */
       GNUNET_PQ_query_param_auto_from_type (&d->coin_pub),
       GNUNET_PQ_query_param_auto_from_type (&d->h_contract_terms),
diff --git a/src/backenddb/pg_lookup_deposits.c 
b/src/backenddb/pg_lookup_deposits.c
index 01e35183..242d7bbb 100644
--- a/src/backenddb/pg_lookup_deposits.c
+++ b/src/backenddb/pg_lookup_deposits.c
@@ -66,7 +66,6 @@ lookup_deposits_cb (void *cls,
                     unsigned int num_results)
 {
   struct LookupDepositsContext *ldc = cls;
-  struct PostgresClosure *pg = ldc->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -81,14 +80,14 @@ lookup_deposits_cb (void *cls,
                                     &exchange_url),
       GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
                                             &coin_pub),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
-                                   &amount_with_fee),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("deposit_fee",
-                                   &deposit_fee),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("refund_fee",
-                                   &refund_fee),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("wire_fee",
-                                   &wire_fee),
+      TALER_PQ_result_spec_amount_with_currency ("amount_with_fee",
+                                                 &amount_with_fee),
+      TALER_PQ_result_spec_amount_with_currency ("deposit_fee",
+                                                 &deposit_fee),
+      TALER_PQ_result_spec_amount_with_currency ("refund_fee",
+                                                 &refund_fee),
+      TALER_PQ_result_spec_amount_with_currency ("wire_fee",
+                                                 &wire_fee),
       GNUNET_PQ_result_spec_end
     };
 
diff --git a/src/backenddb/pg_lookup_instances.c 
b/src/backenddb/pg_lookup_instances.c
index ada20134..15137518 100644
--- a/src/backenddb/pg_lookup_instances.c
+++ b/src/backenddb/pg_lookup_instances.c
@@ -296,12 +296,8 @@ lookup_instances_cb (void *cls,
                                  &lic->is.address),
       TALER_PQ_result_spec_json ("jurisdiction",
                                  &lic->is.jurisdiction),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("default_max_deposit_fee",
-                                   &lic->is.default_max_deposit_fee),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("default_max_wire_fee",
-                                   &lic->is.default_max_wire_fee),
-      GNUNET_PQ_result_spec_uint32 ("default_wire_fee_amortization",
-                                    &lic->is.default_wire_fee_amortization),
+      GNUNET_PQ_result_spec_bool ("use_stefan",
+                                  &lic->is.use_stefan),
       GNUNET_PQ_result_spec_relative_time ("default_wire_transfer_delay",
                                            
&lic->is.default_wire_transfer_delay),
       GNUNET_PQ_result_spec_relative_time ("default_pay_delay",
@@ -392,9 +388,7 @@ TMH_PG_lookup_instances (void *cls,
            ",user_type"
            ",address"
            ",jurisdiction"
-           ",default_max_deposit_fee"
-           ",default_max_wire_fee"
-           ",default_wire_fee_amortization"
+           ",use_stefan"
            ",default_wire_transfer_delay"
            ",default_pay_delay"
            ",website"
@@ -445,9 +439,7 @@ TMH_PG_lookup_instance (void *cls,
            ",user_type"
            ",address"
            ",jurisdiction"
-           ",default_max_deposit_fee"
-           ",default_max_wire_fee"
-           ",default_wire_fee_amortization"
+           ",use_stefan"
            ",default_wire_transfer_delay"
            ",default_pay_delay"
            ",website"
diff --git a/src/backenddb/pg_lookup_product.c 
b/src/backenddb/pg_lookup_product.c
index 04c27dff..65a3c0e5 100644
--- a/src/backenddb/pg_lookup_product.c
+++ b/src/backenddb/pg_lookup_product.c
@@ -59,7 +59,7 @@ TMH_PG_lookup_product (void *cls,
                                  &pd->description_i18n),
       GNUNET_PQ_result_spec_string ("unit",
                                     &pd->unit),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("price",
+      TALER_PQ_result_spec_amount_with_currency ("price",
                                    &pd->price),
       TALER_PQ_result_spec_json ("taxes",
                                  &pd->taxes),
diff --git a/src/backenddb/pg_lookup_refunds.c 
b/src/backenddb/pg_lookup_refunds.c
index e53860c2..2facb73f 100644
--- a/src/backenddb/pg_lookup_refunds.c
+++ b/src/backenddb/pg_lookup_refunds.c
@@ -66,7 +66,6 @@ lookup_refunds_cb (void *cls,
                    unsigned int num_results)
 {
   struct LookupRefundsContext *lrc = cls;
-  struct PostgresClosure *pg = lrc->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -75,8 +74,8 @@ lookup_refunds_cb (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
                                             &coin_pub),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("refund_amount",
-                                   &refund_amount),
+      TALER_PQ_result_spec_amount_with_currency ("refund_amount",
+                                                 &refund_amount),
       GNUNET_PQ_result_spec_end
     };
 
diff --git a/src/backenddb/pg_lookup_reserves.c 
b/src/backenddb/pg_lookup_reserves.c
index 2e503bb3..48601e5b 100644
--- a/src/backenddb/pg_lookup_reserves.c
+++ b/src/backenddb/pg_lookup_reserves.c
@@ -79,7 +79,6 @@ lookup_reserves_cb (void *cls,
                     unsigned int num_results)
 {
   struct LookupReservesContext *lrc = cls;
-  struct PostgresClosure *pg = lrc->pg;
 
   for (unsigned int i = 0; i < num_results; i++)
   {
@@ -98,14 +97,14 @@ lookup_reserves_cb (void *cls,
                                        &creation_time),
       GNUNET_PQ_result_spec_timestamp ("expiration",
                                        &expiration_time),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("merchant_initial_balance",
-                                   &merchant_initial_balance),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_initial_balance",
-                                   &exchange_initial_balance),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("rewards_committed",
-                                   &committed_amount),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("rewards_picked_up",
-                                   &pickup_amount),
+      TALER_PQ_result_spec_amount_with_currency ("merchant_initial_balance",
+                                                 &merchant_initial_balance),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_initial_balance",
+                                                 &exchange_initial_balance),
+      TALER_PQ_result_spec_amount_with_currency ("rewards_committed",
+                                                 &committed_amount),
+      TALER_PQ_result_spec_amount_with_currency ("rewards_picked_up",
+                                                 &pickup_amount),
       GNUNET_PQ_result_spec_auto_from_type ("active",
                                             &active),
       GNUNET_PQ_result_spec_end
diff --git a/src/backenddb/pg_lookup_transfers.c 
b/src/backenddb/pg_lookup_transfers.c
index 9fb5cdcb..57663729 100644
--- a/src/backenddb/pg_lookup_transfers.c
+++ b/src/backenddb/pg_lookup_transfers.c
@@ -72,7 +72,6 @@ lookup_transfers_cb (void *cls,
                      unsigned int num_results)
 {
   struct LookupTransfersContext *ltc = cls;
-  struct PostgresClosure *pg = ltc->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -86,8 +85,8 @@ lookup_transfers_cb (void *cls,
     uint8_t verified8;
     uint8_t confirmed8;
     struct GNUNET_PQ_ResultSpec rs[] = {
-      TALER_PQ_RESULT_SPEC_AMOUNT ("credit_amount",
-                                   &credit_amount),
+      TALER_PQ_result_spec_amount_with_currency ("credit_amount",
+                                                 &credit_amount),
       GNUNET_PQ_result_spec_auto_from_type ("wtid",
                                             &wtid),
       GNUNET_PQ_result_spec_string ("payto_uri",
diff --git a/src/backenddb/pg_select_exchange_keys.c 
b/src/backenddb/pg_select_exchange_keys.c
index 926319d1..b14da501 100644
--- a/src/backenddb/pg_select_exchange_keys.c
+++ b/src/backenddb/pg_select_exchange_keys.c
@@ -59,5 +59,10 @@ TMH_PG_select_exchange_keys (void *cls,
     return qs;
   *keys = TALER_EXCHANGE_keys_from_json (jkeys);
   json_decref (jkeys);
+  if (NULL == *keys)
+  {
+    GNUNET_break (0);
+    return GNUNET_DB_STATUS_HARD_ERROR;
+  }
   return qs;
 }
diff --git a/src/backenddb/pg_select_open_transfers.c 
b/src/backenddb/pg_select_open_transfers.c
index 44fdd695..40982011 100644
--- a/src/backenddb/pg_select_open_transfers.c
+++ b/src/backenddb/pg_select_open_transfers.c
@@ -67,7 +67,6 @@ open_transfers_cb (void *cls,
                    unsigned int num_results)
 {
   struct SelectOpenTransfersContext *plc = cls;
-  struct PostgresClosure *pg = plc->pg;
 
   for (unsigned int i = 0; i < num_results; i++)
   {
@@ -89,8 +88,8 @@ open_transfers_cb (void *cls,
                                     &payto_uri),
       GNUNET_PQ_result_spec_auto_from_type ("wtid",
                                             &wtid),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("credit_amount",
-                                   &total),
+      TALER_PQ_result_spec_amount_with_currency ("credit_amount",
+                                                 &total),
       GNUNET_PQ_result_spec_absolute_time ("next_attempt",
                                            &next_attempt),
       GNUNET_PQ_result_spec_end
diff --git a/src/backenddb/pg_set_transfer_status_to_confirmed.c 
b/src/backenddb/pg_set_transfer_status_to_confirmed.c
index 9b53e987..0579162a 100644
--- a/src/backenddb/pg_set_transfer_status_to_confirmed.c
+++ b/src/backenddb/pg_set_transfer_status_to_confirmed.c
@@ -39,8 +39,8 @@ TMH_PG_set_transfer_status_to_confirmed (
     GNUNET_PQ_query_param_string (instance_id),
     GNUNET_PQ_query_param_auto_from_type (wtid),
     GNUNET_PQ_query_param_string (exchange_url),
-    TALER_PQ_query_param_amount (pg->conn,
-                                 amount),
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
+                                               amount),
     GNUNET_PQ_query_param_end
   };
 
@@ -50,7 +50,7 @@ TMH_PG_set_transfer_status_to_confirmed (
            "UPDATE merchant_transfers SET"
            " confirmed=TRUE"
            " WHERE wtid=$2"
-           "   AND credit_amount=cast($4 AS taler_amount)"
+           "   AND credit_amount=cast($4 AS taler_amount_currency)"
            "   AND exchange_url=$3"
            "   AND account_serial IN"
            "   (SELECT account_serial"
diff --git a/src/backenddb/pg_store_wire_fee_by_exchange.c 
b/src/backenddb/pg_store_wire_fee_by_exchange.c
index ce5b48ca..5c002589 100644
--- a/src/backenddb/pg_store_wire_fee_by_exchange.c
+++ b/src/backenddb/pg_store_wire_fee_by_exchange.c
@@ -40,9 +40,9 @@ TMH_PG_store_wire_fee_by_exchange (
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (master_pub),
     GNUNET_PQ_query_param_auto_from_type (h_wire_method),
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  &fees->wire),
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  &fees->closing),
     GNUNET_PQ_query_param_timestamp (&start_date),
     GNUNET_PQ_query_param_timestamp (&end_date),
diff --git a/src/backenddb/pg_update_instance.c 
b/src/backenddb/pg_update_instance.c
index e1f98d73..0f44c833 100644
--- a/src/backenddb/pg_update_instance.c
+++ b/src/backenddb/pg_update_instance.c
@@ -37,11 +37,7 @@ TMH_PG_update_instance (void *cls,
     GNUNET_PQ_query_param_string (is->name),
     TALER_PQ_query_param_json (is->address),
     TALER_PQ_query_param_json (is->jurisdiction),
-    TALER_PQ_query_param_amount (pg->conn,
-                                 &is->default_max_deposit_fee),
-    TALER_PQ_query_param_amount (pg->conn,
-                                 &is->default_max_wire_fee),
-    GNUNET_PQ_query_param_uint32 (&is->default_wire_fee_amortization),
+    GNUNET_PQ_query_param_bool (is->use_stefan),
     GNUNET_PQ_query_param_relative_time (
       &is->default_wire_transfer_delay),
     GNUNET_PQ_query_param_relative_time (&is->default_pay_delay),
@@ -65,15 +61,13 @@ TMH_PG_update_instance (void *cls,
            " merchant_name=$2"
            ",address=$3"
            ",jurisdiction=$4"
-           ",default_max_deposit_fee=$5"
-           ",default_max_wire_fee=$6"
-           ",default_wire_fee_amortization=$7"
-           ",default_wire_transfer_delay=$8"
-           ",default_pay_delay=$9"
-           ",website=$10"
-           ",email=$11"
-           ",logo=$12"
-           ",user_type=$13"
+           ",use_stefan=$5"
+           ",default_wire_transfer_delay=$6"
+           ",default_pay_delay=$7"
+           ",website=$8"
+           ",email=$9"
+           ",logo=$10"
+           ",user_type=$11"
            " WHERE merchant_id=$1");
   return GNUNET_PQ_eval_prepared_non_select (pg->conn,
                                              "update_instance",
diff --git a/src/backenddb/pg_update_product.c 
b/src/backenddb/pg_update_product.c
index d721c1fe..cd7c1857 100644
--- a/src/backenddb/pg_update_product.c
+++ b/src/backenddb/pg_update_product.c
@@ -41,7 +41,7 @@ TMH_PG_update_product (void *cls,
     GNUNET_PQ_query_param_string (pd->unit),
     GNUNET_PQ_query_param_string (pd->image), /* $6 */
     TALER_PQ_query_param_json (pd->taxes),
-    TALER_PQ_query_param_amount (pg->conn,
+    TALER_PQ_query_param_amount_with_currency (pg->conn,
                                  &pd->price),       /* $8 */
     GNUNET_PQ_query_param_uint64 (&pd->total_stock),  /* $9 */
     GNUNET_PQ_query_param_uint64 (&pd->total_lost),
diff --git a/src/backenddb/plugin_merchantdb_postgres.c 
b/src/backenddb/plugin_merchantdb_postgres.c
index 016cb4e2..70a3e644 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -284,7 +284,6 @@ lookup_deposits_by_order_cb (void *cls,
                              unsigned int num_results)
 {
   struct LookupDepositsByOrderContext *ldoc = cls;
-  struct PostgresClosure *pg = ldoc->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -301,10 +300,10 @@ lookup_deposits_by_order_cb (void *cls,
                                     &exchange_url),
       GNUNET_PQ_result_spec_auto_from_type ("h_wire",
                                             &h_wire),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
-                                   &amount_with_fee),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("deposit_fee",
-                                   &deposit_fee),
+      TALER_PQ_result_spec_amount_with_currency ("amount_with_fee",
+                                                 &amount_with_fee),
+      TALER_PQ_result_spec_amount_with_currency ("deposit_fee",
+                                                 &deposit_fee),
       GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
                                             &coin_pub),
       GNUNET_PQ_result_spec_end
@@ -412,7 +411,6 @@ lookup_transfer_details_by_order_cb (void *cls,
                                      unsigned int num_results)
 {
   struct LookupTransferDetailsByOrderContext *ltdo = cls;
-  struct PostgresClosure *pg = ltdo->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -432,10 +430,10 @@ lookup_transfer_details_by_order_cb (void *cls,
                                     &exchange_url),
       GNUNET_PQ_result_spec_auto_from_type ("wtid",
                                             &wtid),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_deposit_value",
-                                   &deposit_value),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_deposit_fee",
-                                   &deposit_fee),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_deposit_value",
+                                                 &deposit_value),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_deposit_fee",
+                                                 &deposit_fee),
       GNUNET_PQ_result_spec_auto_from_type ("transfer_confirmed",
                                             &transfer_confirmed),
       GNUNET_PQ_result_spec_end
@@ -568,7 +566,6 @@ lookup_refunds_detailed_cb (void *cls,
                             unsigned int num_results)
 {
   struct LookupRefundsDetailedContext *lrdc = cls;
-  struct PostgresClosure *pg = lrdc->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -593,8 +590,8 @@ lookup_refunds_detailed_cb (void *cls,
                                     &rtransaction_id),
       GNUNET_PQ_result_spec_string ("reason",
                                     &reason),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("refund_amount",
-                                   &refund_amount),
+      TALER_PQ_result_spec_amount_with_currency ("refund_amount",
+                                                 &refund_amount),
       GNUNET_PQ_result_spec_auto_from_type ("pending",
                                             &pending8),
       GNUNET_PQ_result_spec_end
@@ -906,10 +903,10 @@ postgres_lookup_wire_fee (void *cls,
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_RESULT_SPEC_AMOUNT ("wire_fee",
-                                 &fees->wire),
-    TALER_PQ_RESULT_SPEC_AMOUNT ("closing_fee",
-                                 &fees->closing),
+    TALER_PQ_result_spec_amount_with_currency ("wire_fee",
+                                               &fees->wire),
+    TALER_PQ_result_spec_amount_with_currency ("closing_fee",
+                                               &fees->closing),
     GNUNET_PQ_result_spec_timestamp ("start_date",
                                      start_date),
     GNUNET_PQ_result_spec_timestamp ("end_date",
@@ -971,7 +968,6 @@ lookup_deposits_by_contract_and_coin_cb (void *cls,
                                          unsigned int num_results)
 {
   struct LookupDepositsByCnCContext *ldcc = cls;
-  struct PostgresClosure *pg = ldcc->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -988,14 +984,14 @@ lookup_deposits_by_contract_and_coin_cb (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_string ("exchange_url",
                                     &exchange_url),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
-                                   &amount_with_fee),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("deposit_fee",
-                                   &deposit_fee),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("refund_fee",
-                                   &refund_fee),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("wire_fee",
-                                   &wire_fee),
+      TALER_PQ_result_spec_amount_with_currency ("amount_with_fee",
+                                                 &amount_with_fee),
+      TALER_PQ_result_spec_amount_with_currency ("deposit_fee",
+                                                 &deposit_fee),
+      TALER_PQ_result_spec_amount_with_currency ("refund_fee",
+                                                 &refund_fee),
+      TALER_PQ_result_spec_amount_with_currency ("wire_fee",
+                                                 &wire_fee),
       GNUNET_PQ_result_spec_auto_from_type ("h_wire",
                                             &h_wire),
       GNUNET_PQ_result_spec_timestamp ("deposit_timestamp",
@@ -1125,15 +1121,15 @@ postgres_lookup_transfer (
   bool no_sig;
   struct TALER_Amount credit_amount;
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_RESULT_SPEC_AMOUNT ("credit_amount",
-                                 &credit_amount),
+    TALER_PQ_result_spec_amount_with_currency ("credit_amount",
+                                               &credit_amount),
     GNUNET_PQ_result_spec_allow_null (
-      TALER_PQ_RESULT_SPEC_AMOUNT ("wire_fee",
-                                   wire_fee),
+      TALER_PQ_result_spec_amount_with_currency ("wire_fee",
+                                                 wire_fee),
       &no_sig),
     GNUNET_PQ_result_spec_allow_null (
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_amount",
-                                   exchange_amount),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_amount",
+                                                 exchange_amount),
       NULL),
     GNUNET_PQ_result_spec_allow_null (
       GNUNET_PQ_result_spec_timestamp ("execution_time",
@@ -1218,7 +1214,6 @@ lookup_transfer_summary_cb (void *cls,
                             unsigned int num_results)
 {
   struct LookupTransferSummaryContext *ltdc = cls;
-  struct PostgresClosure *pg = ltdc->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -1228,10 +1223,10 @@ lookup_transfer_summary_cb (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_string ("order_id",
                                     &order_id),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_deposit_value",
-                                   &deposit_value),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_deposit_fee",
-                                   &deposit_fee),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_deposit_value",
+                                                 &deposit_value),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_deposit_fee",
+                                                 &deposit_fee),
       GNUNET_PQ_result_spec_end
     };
 
@@ -1339,7 +1334,6 @@ lookup_transfer_details_cb (void *cls,
                             unsigned int num_results)
 {
   struct LookupTransferDetailsContext *ltdc = cls;
-  struct PostgresClosure *pg = ltdc->pg;
 
   for (unsigned int i = 0; i<num_results; i++)
   {
@@ -1352,10 +1346,10 @@ lookup_transfer_details_cb (void *cls,
                                             &ttd.h_contract_terms),
       GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
                                             &ttd.coin_pub),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_deposit_value",
-                                   &ttd.coin_value),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_deposit_fee",
-                                   &ttd.coin_fee),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_deposit_value",
+                                                 &ttd.coin_value),
+      TALER_PQ_result_spec_amount_with_currency ("exchange_deposit_fee",
+                                                 &ttd.coin_fee),
       GNUNET_PQ_result_spec_end
     };
 
@@ -1463,7 +1457,6 @@ lookup_pending_reserves_cb (void *cls,
                             unsigned int num_results)
 {
   struct LookupPendingReservesContext *lrc = cls;
-  struct PostgresClosure *pg = lrc->pg;
 
   for (unsigned int i = 0; i < num_results; i++)
   {
@@ -1478,8 +1471,8 @@ lookup_pending_reserves_cb (void *cls,
                                     &instance_id),
       GNUNET_PQ_result_spec_string ("exchange_url",
                                     &exchange_url),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("merchant_initial_balance",
-                                   &merchant_initial_balance),
+      TALER_PQ_result_spec_amount_with_currency ("merchant_initial_balance",
+                                                 &merchant_initial_balance),
       GNUNET_PQ_result_spec_end
     };
 
@@ -1579,7 +1572,6 @@ lookup_reserve_rewards_cb (void *cls,
                            unsigned int num_results)
 {
   struct LookupRewardsContext *ltc = cls;
-  struct PostgresClosure *pg = ltc->pg;
 
   GNUNET_array_grow (ltc->rewards,
                      ltc->rewards_length,
@@ -1592,8 +1584,8 @@ lookup_reserve_rewards_cb (void *cls,
                                     &td->reason),
       GNUNET_PQ_result_spec_auto_from_type ("reward_id",
                                             &td->reward_id),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
-                                   &td->total_amount),
+      TALER_PQ_result_spec_amount_with_currency ("amount",
+                                                 &td->total_amount),
       GNUNET_PQ_result_spec_end
     };
 
@@ -1653,14 +1645,14 @@ postgres_lookup_reserve (void *cls,
                                      &creation_time),
     GNUNET_PQ_result_spec_timestamp ("expiration",
                                      &expiration_time),
-    TALER_PQ_RESULT_SPEC_AMOUNT ("merchant_initial_balance",
-                                 &merchant_initial_balance),
-    TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_initial_balance",
-                                 &exchange_initial_balance),
-    TALER_PQ_RESULT_SPEC_AMOUNT ("rewards_picked_up",
-                                 &pickup_amount),
-    TALER_PQ_RESULT_SPEC_AMOUNT ("rewards_committed",
-                                 &committed_amount),
+    TALER_PQ_result_spec_amount_with_currency ("merchant_initial_balance",
+                                               &merchant_initial_balance),
+    TALER_PQ_result_spec_amount_with_currency ("exchange_initial_balance",
+                                               &exchange_initial_balance),
+    TALER_PQ_result_spec_amount_with_currency ("rewards_picked_up",
+                                               &pickup_amount),
+    TALER_PQ_result_spec_amount_with_currency ("rewards_committed",
+                                               &committed_amount),
     GNUNET_PQ_result_spec_auto_from_type ("master_pub",
                                           &master_pub),
     GNUNET_PQ_result_spec_bool ("active",
@@ -1955,10 +1947,10 @@ postgres_lookup_reward (void *cls,
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
-                                 total_authorized),
-    TALER_PQ_RESULT_SPEC_AMOUNT ("picked_up",
-                                 total_picked_up),
+    TALER_PQ_result_spec_amount_with_currency ("amount",
+                                               total_authorized),
+    TALER_PQ_result_spec_amount_with_currency ("picked_up",
+                                               total_picked_up),
     GNUNET_PQ_result_spec_timestamp ("expiration",
                                      expiration),
     GNUNET_PQ_result_spec_string ("exchange_url",
@@ -2018,7 +2010,6 @@ lookup_rewards_cb (void *cls,
                    unsigned int num_results)
 {
   struct LookupMerchantRewardsContext *plc = cls;
-  struct PostgresClosure *pg = plc->pg;
 
   for (unsigned int i = 0; i < num_results; i++)
   {
@@ -2030,8 +2021,8 @@ lookup_rewards_cb (void *cls,
                                     &row_id),
       GNUNET_PQ_result_spec_auto_from_type ("reward_id",
                                             &reward_id),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
-                                   &reward_amount),
+      TALER_PQ_result_spec_amount_with_currency ("amount",
+                                                 &reward_amount),
       GNUNET_PQ_result_spec_end
     };
 
@@ -2154,7 +2145,6 @@ lookup_pickup_details_cb (void *cls,
                           unsigned int num_results)
 {
   struct LookupRewardDetailsContext *ltdc = cls;
-  struct PostgresClosure *pg = ltdc->pg;
 
   *ltdc->pickups_length = num_results;
   *ltdc->pickups = GNUNET_new_array (num_results,
@@ -2166,8 +2156,8 @@ lookup_pickup_details_cb (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_auto_from_type ("pickup_id",
                                             &pd->pickup_id),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
-                                   &pd->requested_amount),
+      TALER_PQ_result_spec_amount_with_currency ("amount",
+                                                 &pd->requested_amount),
       GNUNET_PQ_result_spec_uint64 ("num_planchets",
                                     &num_planchets),
       GNUNET_PQ_result_spec_end
@@ -2232,10 +2222,10 @@ postgres_lookup_reward_details (void *cls,
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_uint64 ("reward_serial",
                                     &reward_serial),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
-                                   total_authorized),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("picked_up",
-                                   total_picked_up),
+      TALER_PQ_result_spec_amount_with_currency ("amount",
+                                                 total_authorized),
+      TALER_PQ_result_spec_amount_with_currency ("picked_up",
+                                                 total_picked_up),
       GNUNET_PQ_result_spec_string ("justification",
                                     justification),
       GNUNET_PQ_result_spec_timestamp ("expiration",
@@ -3550,10 +3540,11 @@ postgres_connect (void *cls)
                             ",merchant_id"
                             ",exchange_url"
                             ",merchant_initial_balance"
-                            " FROM merchant_reward_reserves"
+                            " FROM merchant_reward_reserves mrr"
                             " JOIN merchant_instances USING (merchant_serial)"
                             " JOIN merchant_reward_reserve_keys USING 
(reserve_serial)"
-                            " WHERE exchange_initial_balance=CAST((0,0) AS 
taler_amount)"),
+                            " WHERE (mrr.exchange_initial_balance).val=0"
+                            "   AND (mrr.exchange_initial_balance).frac=0"),
     /* For postgres_lookup_reserve() */
     GNUNET_PQ_make_prepare ("lookup_reserve",
                             "SELECT"
@@ -4000,14 +3991,6 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
     GNUNET_free (pg);
     return NULL;
   }
-  if (GNUNET_OK !=
-      TALER_config_get_currency (cfg,
-                                 &pg->currency))
-  {
-    GNUNET_free (pg->sql_dir);
-    GNUNET_free (pg);
-    return NULL;
-  }
   plugin = GNUNET_new (struct TALER_MERCHANTDB_Plugin);
   plugin->cls = pg;
   plugin->connect = &postgres_connect;
@@ -4213,7 +4196,6 @@ libtaler_plugin_merchantdb_postgres_done (void *cls)
     pg->conn = NULL;
   }
   GNUNET_free (pg->sql_dir);
-  GNUNET_free (pg->currency);
   GNUNET_free (pg);
   GNUNET_free (plugin);
   return NULL;
diff --git a/src/backenddb/test_merchantdb.c b/src/backenddb/test_merchantdb.c
index b471f805..58470786 100644
--- a/src/backenddb/test_merchantdb.c
+++ b/src/backenddb/test_merchantdb.c
@@ -117,15 +117,7 @@ make_instance (char *instance_id,
   GNUNET_assert (NULL != instance->instance.jurisdiction);
   GNUNET_assert (0 == json_array_append_new (instance->instance.jurisdiction,
                                              json_string ("Ohio")));
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount ("EUR:1200.40",
-                                         &instance->instance.
-                                         default_max_deposit_fee));
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount ("EUR:1200.40",
-                                         &instance->instance.
-                                         default_max_wire_fee));
-  instance->instance.default_wire_fee_amortization = 1;
+  instance->instance.use_stefan = true;
   instance->instance.default_wire_transfer_delay =
     GNUNET_TIME_relative_get_minute_ ();
   instance->instance.default_pay_delay = GNUNET_TIME_relative_get_second_ ();
@@ -235,15 +227,7 @@ check_instances_equal (const struct 
TALER_MERCHANTDB_InstanceSettings *a,
                         b->address)) ||
       (1 != json_equal (a->jurisdiction,
                         b->jurisdiction)) ||
-      (GNUNET_OK != TALER_amount_cmp_currency (&a->default_max_deposit_fee,
-                                               &b->default_max_deposit_fee)) ||
-      (0 != TALER_amount_cmp (&a->default_max_deposit_fee,
-                              &b->default_max_deposit_fee)) ||
-      (GNUNET_OK != TALER_amount_cmp_currency (&a->default_max_wire_fee,
-                                               &b->default_max_wire_fee)) ||
-      (0 != TALER_amount_cmp (&a->default_max_wire_fee,
-                              &b->default_max_wire_fee)) ||
-      (a->default_wire_fee_amortization != b->default_wire_fee_amortization) ||
+      (a->use_stefan != b->use_stefan) ||
       (a->default_wire_transfer_delay.rel_value_us !=
        b->default_wire_transfer_delay.rel_value_us) ||
       (a->default_pay_delay.rel_value_us != b->default_pay_delay.rel_value_us))
@@ -599,15 +583,7 @@ run_test_instances (struct TestInstances_Closure *cls)
   json_array_append_new (cls->instances[0].instance.jurisdiction,
                          json_pack ("{s:s}",
                                     "vegetables", "bad"));
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount ("EUR:0.04",
-                                         &cls->instances[0].instance.
-                                         default_max_deposit_fee));
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount ("EUR:1.23",
-                                         &cls->instances[0].instance.
-                                         default_max_wire_fee));
-  cls->instances[0].instance.default_wire_fee_amortization = 2;
+  cls->instances[0].instance.use_stefan = false;
   cls->instances[0].instance.default_wire_transfer_delay =
     GNUNET_TIME_UNIT_HOURS;
   cls->instances[0].instance.default_pay_delay = GNUNET_TIME_UNIT_MINUTES;
diff --git a/src/include/taler_merchant_service.h 
b/src/include/taler_merchant_service.h
index d427dc22..c41080be 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -559,9 +559,7 @@ struct TALER_MERCHANT_AccountConfig
  * @param ut user type of the merchant instance
  * @param address physical address of the merchant instance
  * @param jurisdiction jurisdiction of the merchant instance
- * @param default_max_wire_fee default maximum wire fee merchant is willing to 
fully pay
- * @param default_wire_fee_amortization default amortization factor for excess 
wire fees
- * @param default_max_deposit_fee default maximum deposit fee merchant is 
willing to pay
+ * @param use_stefan use STEFAN curve for acceptable fees
  * @param default_wire_transfer_delay default wire transfer delay merchant 
will ask for
  * @param default_pay_delay default validity period for offers merchant makes
  * @param auth_token authentication token to use for access control, NULL for 
external auth; MUST follow RFC 8959
@@ -581,9 +579,7 @@ TALER_MERCHANT_instances_post (
   enum TALER_KYCLOGIC_KycUserType ut,
   const json_t *address,
   const json_t *jurisdiction,
-  const struct TALER_Amount *default_max_wire_fee,
-  uint32_t default_wire_fee_amortization,
-  const struct TALER_Amount *default_max_deposit_fee,
+  bool use_stefan,
   struct GNUNET_TIME_Relative default_wire_transfer_delay,
   struct GNUNET_TIME_Relative default_pay_delay,
   const char *auth_token,
@@ -754,9 +750,7 @@ typedef void
  * @param ut user type of the merchant instance
  * @param address physical address of the merchant instance
  * @param jurisdiction jurisdiction of the merchant instance
- * @param default_max_wire_fee default maximum wire fee merchant is willing to 
fully pay
- * @param default_wire_fee_amortization default amortization factor for excess 
wire fees
- * @param default_max_deposit_fee default maximum deposit fee merchant is 
willing to pay
+ * @param use_stefan use STEFAN curve for acceptable fees
  * @param default_wire_transfer_delay default wire transfer delay merchant 
will ask for
  * @param default_pay_delay default validity period for offers merchant makes
  * @param cb function to call with the
@@ -775,9 +769,7 @@ TALER_MERCHANT_instance_patch (
   enum TALER_KYCLOGIC_KycUserType ut,
   const json_t *address,
   const json_t *jurisdiction,
-  const struct TALER_Amount *default_max_wire_fee,
-  uint32_t default_wire_fee_amortization,
-  const struct TALER_Amount *default_max_deposit_fee,
+  bool use_stefan,
   struct GNUNET_TIME_Relative default_wire_transfer_delay,
   struct GNUNET_TIME_Relative default_pay_delay,
   TALER_MERCHANT_InstancePatchCallback cb,
@@ -914,14 +906,10 @@ struct TALER_MERCHANT_InstanceDetails
   const json_t *jurisdiction;
 
   /**
-   * default maximum wire fee merchant is willing to fully pay
+   * Are we using STEFAN curves to determine acceptable
+   * fees?
    */
-  struct TALER_Amount default_max_wire_fee;
-
-  /**
-   * default maximum deposit fee merchant is willing to pay
-   */
-  struct TALER_Amount default_max_deposit_fee;
+  bool use_stefan;
 
   /**
    * default wire transfer delay merchant will ask for
@@ -933,11 +921,6 @@ struct TALER_MERCHANT_InstanceDetails
    */
   struct GNUNET_TIME_Relative default_pay_delay;
 
-  /**
-   * Default amortization factor for excess wire fees
-   */
-  uint32_t default_wire_fee_amortization;
-
   /**
    * User type for the instance.
    */
diff --git a/src/include/taler_merchant_testing_lib.h 
b/src/include/taler_merchant_testing_lib.h
index 752342ab..bc888fa7 100644
--- a/src/include/taler_merchant_testing_lib.h
+++ b/src/include/taler_merchant_testing_lib.h
@@ -92,7 +92,6 @@ TALER_TESTING_cmd_merchant_get_instances (const char *label,
  *        POST /instances request.
  * @param instance_id the ID of the instance to create
  * @param payto_uri payment URI to use
- * @param currency currency to use for default fees
  * @param http_status expected HTTP response code.
  * @return the command.
  */
@@ -101,7 +100,6 @@ TALER_TESTING_cmd_merchant_post_instances (const char 
*label,
                                            const char *merchant_url,
                                            const char *instance_id,
                                            const char *payto_uri,
-                                           const char *currency,
                                            unsigned int http_status);
 
 
@@ -136,9 +134,7 @@ TALER_TESTING_cmd_merchant_post_instance_auth (const char 
*label,
  * @param name name of the merchant instance
  * @param address physical address of the merchant instance
  * @param jurisdiction jurisdiction of the merchant instance
- * @param default_max_wire_fee default maximum wire fee merchant is willing to 
fully pay
- * @param default_wire_fee_amortization default amortization factor for excess 
wire fees
- * @param default_max_deposit_fee default maximum deposit fee merchant is 
willing to pay
+ * @param use_stefan enable STEFAN curve
  * @param default_wire_transfer_delay default wire transfer delay merchant 
will ask for
  * @param default_pay_delay default validity period for offers merchant makes
  * @param auth_token authorization token needed to access the instance, can be 
NULL
@@ -155,9 +151,7 @@ TALER_TESTING_cmd_merchant_post_instances2 (
   const char *name,
   json_t *address,
   json_t *jurisdiction,
-  const char *default_max_wire_fee,
-  uint32_t default_wire_fee_amortization,
-  const char *default_max_deposit_fee,
+  bool use_stefan,
   struct GNUNET_TIME_Relative default_wire_transfer_delay,
   struct GNUNET_TIME_Relative default_pay_delay,
   const char *auth_token,
@@ -215,9 +209,7 @@ TALER_TESTING_cmd_merchant_delete_account (
  * @param name name of the merchant instance
  * @param address physical address of the merchant instance
  * @param jurisdiction jurisdiction of the merchant instance
- * @param default_max_wire_fee default maximum wire fee merchant is willing to 
fully pay
- * @param default_wire_fee_amortization default amortization factor for excess 
wire fees
- * @param default_max_deposit_fee default maximum deposit fee merchant is 
willing to pay
+ * @param use_stefan use STEFAN curve
  * @param default_wire_transfer_delay default wire transfer delay merchant 
will ask for
  * @param default_pay_delay default validity period for offers merchant makes
  * @param http_status expected HTTP response code.
@@ -233,9 +225,7 @@ TALER_TESTING_cmd_merchant_patch_instance (
   const char *name,
   json_t *address,
   json_t *jurisdiction,
-  const char *default_max_wire_fee,
-  uint32_t default_wire_fee_amortization,
-  const char *default_max_deposit_fee,
+  bool use_stefan,
   struct GNUNET_TIME_Relative default_wire_transfer_delay,
   struct GNUNET_TIME_Relative default_pay_delay,
   unsigned int http_status);
@@ -1909,9 +1899,7 @@ TALER_TESTING_cmd_checkserver2 (const char *label,
   op (i18n_description, const json_t) \
   op (taxes, const json_t)      \
   op (fee, const struct TALER_Amount) \
-  op (max_wire_fee, const struct TALER_Amount) \
-  op (max_deposit_fee, const struct TALER_Amount) \
-  op (wire_fee_amortization, const uint32_t) \
+  op (use_stefan, const bool) \
   op (jurisdiction, const json_t) \
   op (wire_delay, const struct GNUNET_TIME_Relative) \
   op (pay_delay, const struct GNUNET_TIME_Relative) \
diff --git a/src/include/taler_merchantdb_plugin.h 
b/src/include/taler_merchantdb_plugin.h
index 81f9804b..1c0cd37c 100644
--- a/src/include/taler_merchantdb_plugin.h
+++ b/src/include/taler_merchantdb_plugin.h
@@ -176,22 +176,10 @@ struct TALER_MERCHANTDB_InstanceSettings
   json_t *jurisdiction;
 
   /**
-   * Default max deposit fee that the merchant is willing to
-   * pay; if deposit costs more, then the customer will cover
-   * the difference.
+   * Use STEFAN curves to determine acceptable
+   * fees by default (otherwise: accept no fees by default).
    */
-  struct TALER_Amount default_max_deposit_fee;
-
-  /**
-   * Default maximum wire fee to assume, unless stated differently in the
-   * proposal already.
-   */
-  struct TALER_Amount default_max_wire_fee;
-
-  /**
-   * Default factor for wire fee amortization.
-   */
-  uint32_t default_wire_fee_amortization;
+  bool use_stefan;
 
   /**
    * If the frontend does NOT specify an execution date, how long should
diff --git a/src/lib/merchant_api_get_instance.c 
b/src/lib/merchant_api_get_instance.c
index cf58f828..9cfbcf83 100644
--- a/src/lib/merchant_api_get_instance.c
+++ b/src/lib/merchant_api_get_instance.c
@@ -98,28 +98,27 @@ handle_get_instance_finished (void *cls,
       const json_t *address;
       const json_t *jurisdiction;
       struct GNUNET_JSON_Specification spec[] = {
-        GNUNET_JSON_spec_array_const ("accounts",
-                                      &accounts),
-        GNUNET_JSON_spec_string ("name",
-                                 &igr.details.ok.details.name),
-        GNUNET_JSON_spec_string ("user_type",
-                                 &uts),
+        GNUNET_JSON_spec_array_const (
+          "accounts",
+          &accounts),
+        GNUNET_JSON_spec_string (
+          "name",
+          &igr.details.ok.details.name),
+        GNUNET_JSON_spec_string (
+          "user_type",
+          &uts),
         GNUNET_JSON_spec_fixed_auto (
           "merchant_pub",
           &igr.details.ok.details.merchant_pub),
-        GNUNET_JSON_spec_object_const ("address",
-                                       &address),
-        GNUNET_JSON_spec_object_const ("jurisdiction",
-                                       &jurisdiction),
-        TALER_JSON_spec_amount_any (
-          "default_max_wire_fee",
-          &igr.details.ok.details.default_max_wire_fee),
-        GNUNET_JSON_spec_uint32 (
-          "default_wire_fee_amortization",
-          &igr.details.ok.details.default_wire_fee_amortization),
-        TALER_JSON_spec_amount_any (
-          "default_max_deposit_fee",
-          &igr.details.ok.details.default_max_deposit_fee),
+        GNUNET_JSON_spec_object_const (
+          "address",
+          &address),
+        GNUNET_JSON_spec_object_const (
+          "jurisdiction",
+          &jurisdiction),
+        GNUNET_JSON_spec_bool (
+          "use_stefan",
+          &igr.details.ok.details.use_stefan),
         GNUNET_JSON_spec_relative_time (
           "default_wire_transfer_delay",
           &igr.details.ok.details.default_wire_transfer_delay),
diff --git a/src/lib/merchant_api_patch_instance.c 
b/src/lib/merchant_api_patch_instance.c
index 6a3c06c1..8b4b6205 100644
--- a/src/lib/merchant_api_patch_instance.c
+++ b/src/lib/merchant_api_patch_instance.c
@@ -164,9 +164,7 @@ TALER_MERCHANT_instance_patch (
   enum TALER_KYCLOGIC_KycUserType ut,
   const json_t *address,
   const json_t *jurisdiction,
-  const struct TALER_Amount *default_max_wire_fee,
-  uint32_t default_wire_fee_amortization,
-  const struct TALER_Amount *default_max_deposit_fee,
+  bool use_stefan,
   struct GNUNET_TIME_Relative default_wire_transfer_delay,
   struct GNUNET_TIME_Relative default_pay_delay,
   TALER_MERCHANT_InstancePatchCallback cb,
@@ -229,12 +227,8 @@ TALER_MERCHANT_instance_patch (
                                     (json_t *) address),
     GNUNET_JSON_pack_object_incref ("jurisdiction",
                                     (json_t *) jurisdiction),
-    TALER_JSON_pack_amount ("default_max_wire_fee",
-                            default_max_wire_fee),
-    GNUNET_JSON_pack_uint64 ("default_wire_fee_amortization",
-                             default_wire_fee_amortization),
-    TALER_JSON_pack_amount ("default_max_deposit_fee",
-                            default_max_deposit_fee),
+    GNUNET_JSON_pack_bool ("use_stefan",
+                           use_stefan),
     GNUNET_JSON_pack_time_rel ("default_wire_transfer_delay",
                                default_wire_transfer_delay),
     GNUNET_JSON_pack_time_rel ("default_pay_delay",
diff --git a/src/lib/merchant_api_post_instances.c 
b/src/lib/merchant_api_post_instances.c
index 77168e2a..77336187 100644
--- a/src/lib/merchant_api_post_instances.c
+++ b/src/lib/merchant_api_post_instances.c
@@ -170,9 +170,7 @@ TALER_MERCHANT_instances_post (
   enum TALER_KYCLOGIC_KycUserType ut,
   const json_t *address,
   const json_t *jurisdiction,
-  const struct TALER_Amount *default_max_wire_fee,
-  uint32_t default_wire_fee_amortization,
-  const struct TALER_Amount *default_max_deposit_fee,
+  bool use_stefan,
   struct GNUNET_TIME_Relative default_wire_transfer_delay,
   struct GNUNET_TIME_Relative default_pay_delay,
   const char *auth_token,
@@ -267,12 +265,8 @@ TALER_MERCHANT_instances_post (
                                     (json_t *) address),
     GNUNET_JSON_pack_object_incref ("jurisdiction",
                                     (json_t *) jurisdiction),
-    TALER_JSON_pack_amount ("default_max_wire_fee",
-                            default_max_wire_fee),
-    GNUNET_JSON_pack_uint64 ("default_wire_fee_amortization",
-                             default_wire_fee_amortization),
-    TALER_JSON_pack_amount ("default_max_deposit_fee",
-                            default_max_deposit_fee),
+    GNUNET_JSON_pack_bool ("use_stefan",
+                           use_stefan),
     GNUNET_JSON_pack_time_rel ("default_wire_transfer_delay",
                                default_wire_transfer_delay),
     GNUNET_JSON_pack_time_rel ("default_pay_delay",
diff --git a/src/merchant-tools/taler-merchant-benchmark.c 
b/src/merchant-tools/taler-merchant-benchmark.c
index ec3319cf..ce4491e0 100644
--- a/src/merchant-tools/taler-merchant-benchmark.c
+++ b/src/merchant-tools/taler-merchant-benchmark.c
@@ -183,7 +183,6 @@ run (void *cls,
         merchant_url,
         "default",
         cred.user42_payto,
-        currency,
         MHD_HTTP_NO_CONTENT),
 
       TALER_TESTING_cmd_admin_add_incoming (
@@ -261,14 +260,12 @@ run (void *cls,
         merchant_url,
         "default",
         cred.user42_payto,
-        currency,
         MHD_HTTP_NO_CONTENT),
       TALER_TESTING_cmd_merchant_post_instances (
         "instance-create-alt",
         merchant_url,
         alt_instance_id,
         cred.user42_payto,
-        currency,
         MHD_HTTP_NO_CONTENT),
       TALER_TESTING_cmd_admin_add_incoming (
         "create-reserve-1",
diff --git a/src/testing/test_key_rotation.sh b/src/testing/test_key_rotation.sh
index 2cd5569f..cf270b3c 100755
--- a/src/testing/test_key_rotation.sh
+++ b/src/testing/test_key_rotation.sh
@@ -190,7 +190,7 @@ echo "OK"
 echo -n "Setting up merchant instance"
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_kyc_api.c b/src/testing/test_kyc_api.c
index c93455e4..e26a1fd3 100644
--- a/src/testing/test_kyc_api.c
+++ b/src/testing/test_kyc_api.c
@@ -396,7 +396,6 @@ run (void *cls,
                                                merchant_url,
                                                "default",
                                                merchant_payto,
-                                               "EUR",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_batch ("pay",
                              pay),
diff --git a/src/testing/test_merchant_api.c b/src/testing/test_merchant_api.c
index 3c3c004b..32674332 100644
--- a/src/testing/test_merchant_api.c
+++ b/src/testing/test_merchant_api.c
@@ -224,7 +224,6 @@ run (void *cls,
                                                merchant_url,
                                                "default",
                                                PAYTO_I1,
-                                               "EUR",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_merchant_kyc_get ("instance-create-kyc-0",
                                         merchant_url,
@@ -233,13 +232,14 @@ run (void *cls,
                                         EXCHANGE_URL,
                                         MHD_HTTP_NO_CONTENT,
                                         TALER_AML_NORMAL),
-    TALER_TESTING_cmd_merchant_post_orders_no_claim 
("create-proposal-bad-currency",
-                                                     merchant_url,
-                                                     MHD_HTTP_BAD_REQUEST,
-                                                     "4",
-                                                     GNUNET_TIME_UNIT_ZERO_TS,
-                                                     
GNUNET_TIME_UNIT_FOREVER_TS,
-                                                     "CHF:5.0"),
+    TALER_TESTING_cmd_merchant_post_orders_no_claim (
+      "create-proposal-bad-currency",
+      merchant_url,
+      MHD_HTTP_BAD_REQUEST,
+      "4",
+      GNUNET_TIME_UNIT_ZERO_TS,
+      GNUNET_TIME_UNIT_FOREVER_TS,
+      "CHF:5.0"),
     TALER_TESTING_cmd_merchant_post_orders_no_claim ("create-proposal-4",
                                                      merchant_url,
                                                      MHD_HTTP_OK,
@@ -940,7 +940,6 @@ run (void *cls,
                                                merchant_url,
                                                "i1a",
                                                PAYTO_I1,
-                                               "EUR",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_merchant_get_product ("get-nx-product-i1a-1",
                                             merchant_url_i1a,
@@ -1671,13 +1670,11 @@ run (void *cls,
                                                merchant_url,
                                                "default",
                                                PAYTO_I1,
-                                               "EUR",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_merchant_post_instances ("instance-create-i1",
                                                merchant_url,
                                                "i1",
                                                PAYTO_I1,
-                                               "EUR",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_merchant_get_instances ("instances-get-i1",
                                               merchant_url,
@@ -1690,24 +1687,6 @@ run (void *cls,
                                              "i1",
                                              MHD_HTTP_OK,
                                              "instance-create-i1"),
-    TALER_TESTING_cmd_merchant_patch_instance 
("instance-patch-i1-bad-currency",
-                                               merchant_url,
-                                               "i1",
-                                               2,
-                                               payto_uris,
-                                               "bob-the-merchant",
-                                               json_pack ("{s:s}",
-                                                          "street",
-                                                          "bobstreet"),
-                                               json_pack ("{s:s}",
-                                                          "street",
-                                                          "bobjuryst"),
-                                               "USD:0.1",
-                                               4,
-                                               "USD:0.5",
-                                               GNUNET_TIME_UNIT_MINUTES,
-                                               GNUNET_TIME_UNIT_MINUTES,
-                                               MHD_HTTP_BAD_REQUEST),
     TALER_TESTING_cmd_merchant_patch_instance ("instance-patch-i1",
                                                merchant_url,
                                                "i1",
@@ -1720,9 +1699,7 @@ run (void *cls,
                                                json_pack ("{s:s}",
                                                           "street",
                                                           "bobjuryst"),
-                                               "EUR:0.1",
-                                               4,
-                                               "EUR:0.5",
+                                               true,
                                                GNUNET_TIME_UNIT_MINUTES,
                                                GNUNET_TIME_UNIT_MINUTES,
                                                MHD_HTTP_NO_CONTENT),
@@ -1748,9 +1725,7 @@ run (void *cls,
       json_pack ("{s:s}",
                  "street",
                  "bobjuryst"),
-      "EUR:0.1",
-      4,
-      "EUR:0.5",
+      true,
       GNUNET_TIME_UNIT_MINUTES,
       GNUNET_TIME_UNIT_MINUTES,
       MHD_HTTP_NO_CONTENT),
@@ -1768,12 +1743,6 @@ run (void *cls,
                                              "i2",
                                              MHD_HTTP_NOT_FOUND,
                                              NULL),
-    TALER_TESTING_cmd_merchant_post_instances ("instance-create-bad-currency",
-                                               merchant_url,
-                                               "i2",
-                                               PAYTO_I1,
-                                               "USD",
-                                               MHD_HTTP_BAD_REQUEST),
     TALER_TESTING_cmd_merchant_post_instances2 ("instance-create-ACL",
                                                 merchant_url,
                                                 "i-acl",
@@ -1783,9 +1752,7 @@ run (void *cls,
                                                            "shopcity"),
                                                 json_pack ("{s:s}", "city",
                                                            "lawyercity"),
-                                                "EUR:0.1",
-                                                42,
-                                                "EUR:0.2",
+                                                true,
                                                 GNUNET_TIME_UNIT_MINUTES,
                                                 GNUNET_TIME_UNIT_MINUTES,
                                                 // FIXME: change this back once
@@ -1805,9 +1772,7 @@ run (void *cls,
                                                json_pack ("{s:s}",
                                                           "street",
                                                           "bobjuryst"),
-                                               "EUR:0.1",
-                                               4,
-                                               "EUR:0.5",
+                                               true,
                                                GNUNET_TIME_UNIT_MINUTES,
                                                GNUNET_TIME_UNIT_MINUTES,
                                                MHD_HTTP_NO_CONTENT),
@@ -1815,19 +1780,16 @@ run (void *cls,
                                                merchant_url,
                                                "i2",
                                                PAYTO_I1,
-                                               "EUR",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_merchant_post_instances ("instance-create-i2-idem",
                                                merchant_url,
                                                "i2",
                                                PAYTO_I1,
-                                               "EUR",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_merchant_post_instances ("instance-create-i2-non-idem",
                                                merchant_url,
                                                "i2",
                                                
"payto://other-method/?receiver-name=X",
-                                               "EUR",
                                                MHD_HTTP_CONFLICT),
     TALER_TESTING_cmd_merchant_delete_instance ("instance-delete-i2",
                                                 merchant_url,
@@ -1863,7 +1825,6 @@ run (void *cls,
       merchant_url,
       "default",
       PAYTO_I1,
-      "EUR",
       MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_merchant_get_products ("get-products-empty",
                                              merchant_url,
diff --git 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_1/1690997204
 
b/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_1/1690997204
deleted file mode 100644
index 49c6ae9c..00000000
--- 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_1/1690997204
+++ /dev/null
@@ -1 +0,0 @@
-f�>kt��j�DM��D�o#��U\�3�%o
\ No newline at end of file
diff --git 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_1/1691601704
 
b/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_1/1691601704
deleted file mode 100644
index 82db7326..00000000
--- 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_1/1691601704
+++ /dev/null
@@ -1 +0,0 @@
-HE�J�jbU��@4�i�*“2:B
|�i�'�
\ No newline at end of file
diff --git 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_5/1690997204
 
b/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_5/1690997204
deleted file mode 100644
index a2dd2950..00000000
Binary files 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_5/1690997204
 and /dev/null differ
diff --git 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_5/1691601704
 
b/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_5/1691601704
deleted file mode 100644
index 1bfbf308..00000000
--- 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_5/1691601704
+++ /dev/null
@@ -1 +0,0 @@
-���f�x�s�o{�۰�7I�P�8��h��+�8-
diff --git 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_1/1690997204
 
b/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_1/1690997204
deleted file mode 100644
index e029d401..00000000
Binary files 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_1/1690997204
 and /dev/null differ
diff --git 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_1/1691601704
 
b/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_1/1691601704
deleted file mode 100644
index 38ec74ec..00000000
--- 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_1/1691601704
+++ /dev/null
@@ -1 +0,0 @@
-�D���~C�{�o{ˑ�����6(�3
\ No newline at end of file
diff --git 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_10/1690997204
 
b/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_10/1690997204
deleted file mode 100644
index 485fe9af..00000000
--- 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_10/1690997204
+++ /dev/null
@@ -1 +0,0 @@
-��z�F����}�Ϳ���s�@�OX�        93�
\ No newline at end of file
diff --git 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_10/1691601704
 
b/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_10/1691601704
deleted file mode 100644
index a33f018d..00000000
--- 
a/src/testing/test_merchant_api_home/taler/exchange-secmod-cs/keys/coin_eur_ct_10/1691601704
+++ /dev/null
@@ -1 +0,0 @@
-z�j��·g�0��è��_��w3�/cl�N�I
\ No newline at end of file
diff --git a/src/testing/test_merchant_api_twisted.c 
b/src/testing/test_merchant_api_twisted.c
index 36a90980..b55388ab 100644
--- a/src/testing/test_merchant_api_twisted.c
+++ b/src/testing/test_merchant_api_twisted.c
@@ -338,7 +338,6 @@ run (void *cls,
                                                twister_merchant_url,
                                                "default",
                                                PAYTO_I1,
-                                               "EUR",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_batch ("pay",
                              pay),
@@ -352,7 +351,7 @@ run (void *cls,
      * Make a reserve exist,
      * according to the previous
      * transfer.
-     *///
+     */
     CMD_EXEC_WIREWATCH ("wirewatch-1"),
     TALER_TESTING_cmd_check_bank_admin_transfer ("check_bank_transfer-2",
                                                  "EUR:10.02",
diff --git a/src/testing/test_merchant_instance_auth.sh 
b/src/testing/test_merchant_instance_auth.sh
index 1a21c083..8c031e1d 100755
--- a/src/testing/test_merchant_instance_auth.sh
+++ b/src/testing/test_merchant_instance_auth.sh
@@ -42,7 +42,7 @@ echo -n "Configuring 'default' instance ..." >&2
 
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"token","token":"secret-token:new_value"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"token","token":"secret-token:new_value"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
@@ -115,7 +115,7 @@ echo -n "Configuring 'second' instance ..." >&2
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer '$NEW_SECRET \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"token","token":"secret-token:second"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"second","name":"second","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"token","token":"secret-token:second"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"second","name":"second","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_instance_creation.sh 
b/src/testing/test_merchant_instance_creation.sh
index ed868b96..8d81ab8b 100755
--- a/src/testing/test_merchant_instance_creation.sh
+++ b/src/testing/test_merchant_instance_creation.sh
@@ -27,7 +27,7 @@ echo -n "Configuring a merchant instance before configuring 
the default instance
 
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"token","token":"secret-token:other_secret"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"first","name":"test","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"token","token":"secret-token:other_secret"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"first","name":"test","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
@@ -43,7 +43,7 @@ echo -n "Configuring default instance ..."
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "401" ]
@@ -58,7 +58,7 @@ echo -n "Configuring a second merchant instance ..."
 
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"token","token":"secret-token:other_secret"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"second","name":"test","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"token","token":"secret-token:other_secret"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"second","name":"test","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "401" ]
diff --git a/src/testing/test_merchant_instance_purge.sh 
b/src/testing/test_merchant_instance_purge.sh
index dfebbc84..0d8c0c2c 100755
--- a/src/testing/test_merchant_instance_purge.sh
+++ b/src/testing/test_merchant_instance_purge.sh
@@ -27,7 +27,7 @@ echo -n "Configuring default instance ..." >&2
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
@@ -41,7 +41,7 @@ echo -n "Configuring merchant instance ..." >&2
 
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"token","token":"secret-token:other_secret"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"test","name":"test","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"token","token":"secret-token:other_secret"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"test","name":"test","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_instance_response.sh 
b/src/testing/test_merchant_instance_response.sh
index b94f8dcf..b2eee199 100755
--- a/src/testing/test_merchant_instance_response.sh
+++ b/src/testing/test_merchant_instance_response.sh
@@ -45,7 +45,7 @@ fi
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"token","token":"secret-token:other_secret"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
+    -d 
'{"auth":{"method":"token","token":"secret-token:other_secret"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_kyc.sh b/src/testing/test_merchant_kyc.sh
index e7b45ad0..c093d698 100755
--- a/src/testing/test_merchant_kyc.sh
+++ b/src/testing/test_merchant_kyc.sh
@@ -29,7 +29,7 @@ echo -n "Configuring a merchant instance before configuring 
the default instance
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost:8082/43"},{"payto_uri":"payto://x-taler-bank/localhost:8082/44"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost:8082/43"},{"payto_uri":"payto://x-taler-bank/localhost:8082/44"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_order_autocleanup.sh 
b/src/testing/test_merchant_order_autocleanup.sh
index c366036a..a5678ecf 100755
--- a/src/testing/test_merchant_order_autocleanup.sh
+++ b/src/testing/test_merchant_order_autocleanup.sh
@@ -60,7 +60,7 @@ FORTYTHREE=$(get_payto_uri fortythree x)
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     "http://localhost:9966/management/instances"; \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$FORTYTHREE"'"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$FORTYTHREE"'"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_order_creation.sh 
b/src/testing/test_merchant_order_creation.sh
index 46b4b7fc..99b1c674 100755
--- a/src/testing/test_merchant_order_creation.sh
+++ b/src/testing/test_merchant_order_creation.sh
@@ -67,7 +67,7 @@ FORTYTHREE=$(get_payto_uri fortythree x)
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$FORTYTHREE"'"},{"payto_uri":"payto://iban/SANDBOXX/DE270744?receiver-name=Forty+Four"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000000},"default_pay_delay":{"d_us": 60000000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$FORTYTHREE"'"},{"payto_uri":"payto://iban/SANDBOXX/DE270744?receiver-name=Forty+Four"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000000},"default_pay_delay":{"d_us": 60000000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
@@ -80,7 +80,7 @@ fi
 STATUS=$(curl -H "Content-Type: application/json" -X PATCH \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/instances/default/private/ \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$FORTYTHREE"'"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000000},"default_pay_delay":{"d_us": 60000000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$FORTYTHREE"'"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000000},"default_pay_delay":{"d_us": 60000000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_product_creation.sh 
b/src/testing/test_merchant_product_creation.sh
index 22b12c2c..1da57a04 100755
--- a/src/testing/test_merchant_product_creation.sh
+++ b/src/testing/test_merchant_product_creation.sh
@@ -40,7 +40,7 @@ echo -n "Configuring merchant instance ..."
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     "http://localhost:9966/management/instances"; \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$FORTYTHREE"'"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$FORTYTHREE"'"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_reserve_creation.sh 
b/src/testing/test_merchant_reserve_creation.sh
index e0e7b722..a1a076a4 100755
--- a/src/testing/test_merchant_reserve_creation.sh
+++ b/src/testing/test_merchant_reserve_creation.sh
@@ -35,7 +35,7 @@ echo -n "Configuring merchant instance ..."
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost:18082/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://x-taler-bank/localhost:18082/43"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_transfer_tracking.sh 
b/src/testing/test_merchant_transfer_tracking.sh
index 2e9957df..6ac079f3 100755
--- a/src/testing/test_merchant_transfer_tracking.sh
+++ b/src/testing/test_merchant_transfer_tracking.sh
@@ -78,7 +78,7 @@ GNUNET_PAYTO=$(get_payto_uri gnunet x)
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$TOR_PAYTO"'"},{"payto_uri":"'"$GNUNET_PAYTO"'"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$TOR_PAYTO"'"},{"payto_uri":"'"$GNUNET_PAYTO"'"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
@@ -95,7 +95,7 @@ TUTORIAL_PAYTO=$(get_payto_uri tutorial x)
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$SURVEY_PAYTO"'"},{"payto_uri":"'"$TUTORIAL_PAYTO"'"}],"id":"test","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$SURVEY_PAYTO"'"},{"payto_uri":"'"$TUTORIAL_PAYTO"'"}],"id":"test","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/test_merchant_wirewatch.sh 
b/src/testing/test_merchant_wirewatch.sh
index 2a6e5879..7834c1d0 100755
--- a/src/testing/test_merchant_wirewatch.sh
+++ b/src/testing/test_merchant_wirewatch.sh
@@ -165,7 +165,7 @@ GNUNET_PAYTO=$(get_payto_uri gnunet x)
 STATUS=$(curl -H "Content-Type: application/json" -X POST \
     -H 'Authorization: Bearer secret-token:super_secret' \
     http://localhost:9966/management/instances \
-    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$GNUNET_PAYTO"'","credit_facade_url":"'"${FACADE_URL}"'","credit_facade_credentials":{"type":"basic","username":"'"$FACADE_USERNAME"'","password":"'"$FACADE_PASSWORD"'"}}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1",
 
"default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us"
 : 50000000},"defau [...]
+    -d 
'{"auth":{"method":"external"},"accounts":[{"payto_uri":"'"$GNUNET_PAYTO"'","credit_facade_url":"'"${FACADE_URL}"'","credit_facade_credentials":{"type":"basic","username":"'"$FACADE_USERNAME"'","password":"'"$FACADE_PASSWORD"'"}}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us"
 : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
     -w "%{http_code}" -s -o /dev/null)
 
 if [ "$STATUS" != "204" ]
diff --git a/src/testing/testing_api_cmd_get_instance.c 
b/src/testing/testing_api_cmd_get_instance.c
index 1df08348..e706f85b 100644
--- a/src/testing/testing_api_cmd_get_instance.c
+++ b/src/testing/testing_api_cmd_get_instance.c
@@ -237,59 +237,16 @@ get_instance_cb (void *cls,
         }
       }
       {
-        const struct TALER_Amount *default_max_wire_fee;
+        const bool *use_stefan;
 
         if (GNUNET_OK !=
-            TALER_TESTING_get_trait_max_wire_fee (instance_cmd,
-                                                  &default_max_wire_fee))
+            TALER_TESTING_get_trait_use_stefan (instance_cmd,
+                                                &use_stefan))
           TALER_TESTING_interpreter_fail (gis->is);
-        if ((GNUNET_OK !=
-             TALER_amount_cmp_currency (
-               &details->default_max_wire_fee,
-               default_max_wire_fee)) ||
-            (0 != TALER_amount_cmp (&details->default_max_wire_fee,
-                                    default_max_wire_fee)))
+        if (*use_stefan != details->use_stefan)
         {
           GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      "Instance default max wire fee does not match\n");
-          TALER_TESTING_interpreter_fail (gis->is);
-          return;
-        }
-      }
-      {
-        const uint32_t *default_wire_fee_amortization;
-
-        if (GNUNET_OK !=
-            TALER_TESTING_get_trait_wire_fee_amortization (
-              instance_cmd,
-              &default_wire_fee_amortization))
-          TALER_TESTING_interpreter_fail (gis->is);
-        if (details->default_wire_fee_amortization !=
-            *default_wire_fee_amortization)
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      "Instance default wire fee amortization does not 
match\n");
-          TALER_TESTING_interpreter_fail (gis->is);
-          return;
-        }
-      }
-      {
-        const struct TALER_Amount *default_max_deposit_fee;
-
-        if (GNUNET_OK !=
-            TALER_TESTING_get_trait_max_deposit_fee (instance_cmd,
-                                                     &default_max_deposit_fee))
-          TALER_TESTING_interpreter_fail (gis->is);
-        if ( (GNUNET_OK !=
-              TALER_amount_cmp_currency (
-                &details->default_max_deposit_fee,
-                default_max_deposit_fee)) ||
-             (0 != TALER_amount_cmp (&details->default_max_deposit_fee,
-                                     default_max_deposit_fee)) )
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      "Instance default max deposit fee %s does not match\n",
-                      TALER_amount2s (&details->default_max_deposit_fee));
+                      "Instance use_stefan value does not match\n");
           TALER_TESTING_interpreter_fail (gis->is);
           return;
         }
diff --git a/src/testing/testing_api_cmd_patch_instance.c 
b/src/testing/testing_api_cmd_patch_instance.c
index f069046a..59dcac07 100644
--- a/src/testing/testing_api_cmd_patch_instance.c
+++ b/src/testing/testing_api_cmd_patch_instance.c
@@ -80,19 +80,9 @@ struct PatchInstanceState
   json_t *jurisdiction;
 
   /**
-   * Wire fee to use.
+   * Use STEFAN curve?
    */
-  struct TALER_Amount default_max_wire_fee;
-
-  /**
-   * Amortization to use.
-   */
-  uint32_t default_wire_fee_amortization;
-
-  /**
-   * Deposit fee ceiling to use.
-   */
-  struct TALER_Amount default_max_deposit_fee;
+  bool use_stefan;
 
   /**
    * Wire transfer delay to use.
@@ -190,9 +180,7 @@ patch_instance_run (void *cls,
     TALER_KYCLOGIC_KYC_UT_BUSINESS,
     pis->address,
     pis->jurisdiction,
-    &pis->default_max_wire_fee,
-    pis->default_wire_fee_amortization,
-    &pis->default_max_deposit_fee,
+    pis->use_stefan,
     pis->default_wire_transfer_delay,
     pis->default_pay_delay,
     &patch_instance_cb,
@@ -218,7 +206,7 @@ patch_instance_traits (void *cls,
                        unsigned int index)
 {
   struct PatchInstanceState *pis = cls;
-  #define NUM_TRAITS (pis->payto_uris_length) + 11
+  #define NUM_TRAITS (pis->payto_uris_length) + 9
   struct TALER_TESTING_Trait traits[NUM_TRAITS];
   traits[0] =
     TALER_TESTING_make_trait_instance_name (pis->name);
@@ -229,17 +217,12 @@ patch_instance_traits (void *cls,
   traits[3] =
     TALER_TESTING_make_trait_jurisdiction (pis->jurisdiction);
   traits[4] =
-    TALER_TESTING_make_trait_max_wire_fee (&pis->default_max_wire_fee);
+    TALER_TESTING_make_trait_use_stefan (&pis->use_stefan);
   traits[5] =
-    TALER_TESTING_make_trait_wire_fee_amortization (
-      &pis->default_wire_fee_amortization);
-  traits[6] =
-    TALER_TESTING_make_trait_max_deposit_fee (&pis->default_max_deposit_fee);
-  traits[7] =
     TALER_TESTING_make_trait_wire_delay (&pis->default_wire_transfer_delay);
-  traits[8] =
+  traits[6] =
     TALER_TESTING_make_trait_pay_delay (&pis->default_pay_delay);
-  traits[9] =
+  traits[7] =
     TALER_TESTING_make_trait_payto_length (&pis->payto_uris_length);
   traits[NUM_TRAITS - 1] =
     TALER_TESTING_trait_end ();
@@ -293,9 +276,7 @@ TALER_TESTING_cmd_merchant_patch_instance (
   const char *name,
   json_t *address,
   json_t *jurisdiction,
-  const char *default_max_wire_fee,
-  uint32_t default_wire_fee_amortization,
-  const char *default_max_deposit_fee,
+  bool use_stefan,
   struct GNUNET_TIME_Relative default_wire_transfer_delay,
   struct GNUNET_TIME_Relative default_pay_delay,
   unsigned int http_status)
@@ -315,13 +296,7 @@ TALER_TESTING_cmd_merchant_patch_instance (
   pis->name = name;
   pis->address = address; /* ownership transfer! */
   pis->jurisdiction = jurisdiction; /* ownership transfer! */
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount (default_max_wire_fee,
-                                         &pis->default_max_wire_fee));
-  pis->default_wire_fee_amortization = default_wire_fee_amortization;
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount (default_max_deposit_fee,
-                                         &pis->default_max_deposit_fee));
+  pis->use_stefan = use_stefan;
   pis->default_wire_transfer_delay = default_wire_transfer_delay;
   pis->default_pay_delay = default_pay_delay;
   {
diff --git a/src/testing/testing_api_cmd_post_instances.c 
b/src/testing/testing_api_cmd_post_instances.c
index e8c3dd3f..f90aacaf 100644
--- a/src/testing/testing_api_cmd_post_instances.c
+++ b/src/testing/testing_api_cmd_post_instances.c
@@ -85,19 +85,9 @@ struct PostInstancesState
   const char *auth_token;
 
   /**
-   * Wire fee to use.
+   * Use STEFAN curves?
    */
-  struct TALER_Amount default_max_wire_fee;
-
-  /**
-   * Amortization to use.
-   */
-  uint32_t default_wire_fee_amortization;
-
-  /**
-   * Deposit fee ceiling to use.
-   */
-  struct TALER_Amount default_max_deposit_fee;
+  bool use_stefan;
 
   /**
    * Wire transfer delay to use.
@@ -197,9 +187,7 @@ post_instances_run (void *cls,
     TALER_KYCLOGIC_KYC_UT_BUSINESS,
     pis->address,
     pis->jurisdiction,
-    &pis->default_max_wire_fee,
-    pis->default_wire_fee_amortization,
-    &pis->default_max_deposit_fee,
+    pis->use_stefan,
     pis->default_wire_transfer_delay,
     pis->default_pay_delay,
     pis->auth_token,
@@ -231,7 +219,7 @@ post_instances_traits (void *cls,
                        unsigned int index)
 {
   struct PostInstancesState *pis = cls;
-  #define NUM_TRAITS (pis->payto_uris_length) + 11
+  #define NUM_TRAITS (pis->payto_uris_length) + 9
   struct TALER_TESTING_Trait traits[NUM_TRAITS];
   traits[0] =
     TALER_TESTING_make_trait_instance_name (pis->name);
@@ -242,17 +230,12 @@ post_instances_traits (void *cls,
   traits[3] =
     TALER_TESTING_make_trait_jurisdiction (pis->jurisdiction);
   traits[4] =
-    TALER_TESTING_make_trait_max_wire_fee (&pis->default_max_wire_fee);
+    TALER_TESTING_make_trait_use_stefan (&pis->use_stefan);
   traits[5] =
-    TALER_TESTING_make_trait_wire_fee_amortization (
-      &pis->default_wire_fee_amortization);
-  traits[6] =
-    TALER_TESTING_make_trait_max_deposit_fee (&pis->default_max_deposit_fee);
-  traits[7] =
     TALER_TESTING_make_trait_wire_delay (&pis->default_wire_transfer_delay);
-  traits[8] =
+  traits[6] =
     TALER_TESTING_make_trait_pay_delay (&pis->default_pay_delay);
-  traits[9] =
+  traits[7] =
     TALER_TESTING_make_trait_payto_length (&pis->payto_uris_length);
   traits[NUM_TRAITS - 1] =
     TALER_TESTING_trait_end ();
@@ -306,9 +289,7 @@ TALER_TESTING_cmd_merchant_post_instances2 (
   const char *name,
   json_t *address,
   json_t *jurisdiction,
-  const char *default_max_wire_fee,
-  uint32_t default_wire_fee_amortization,
-  const char *default_max_deposit_fee,
+  bool use_stefan,
   struct GNUNET_TIME_Relative default_wire_transfer_delay,
   struct GNUNET_TIME_Relative default_pay_delay,
   const char *auth_token,
@@ -329,13 +310,7 @@ TALER_TESTING_cmd_merchant_post_instances2 (
   pis->name = name;
   pis->address = address; /* ownership transfer! */
   pis->jurisdiction = jurisdiction; /* ownership transfer! */
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount (default_max_wire_fee,
-                                         &pis->default_max_wire_fee));
-  pis->default_wire_fee_amortization = default_wire_fee_amortization;
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount (default_max_deposit_fee,
-                                         &pis->default_max_deposit_fee));
+  pis->use_stefan = use_stefan;
   pis->default_wire_transfer_delay = default_wire_transfer_delay;
   pis->default_pay_delay = default_pay_delay;
   pis->auth_token = auth_token;
@@ -358,20 +333,11 @@ TALER_TESTING_cmd_merchant_post_instances (const char 
*label,
                                            const char *merchant_url,
                                            const char *instance_id,
                                            const char *payto_uri,
-                                           const char *currency,
                                            unsigned int http_status)
 {
   const char *payto_uris[] = {
     payto_uri
   };
-  struct TALER_Amount default_max_fee;
-  const char *default_max_fee_s;
-
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_amount_set_zero (currency,
-                                        &default_max_fee));
-  default_max_fee.value = 1;
-  default_max_fee_s = TALER_amount2s (&default_max_fee);
 
   return TALER_TESTING_cmd_merchant_post_instances2 (
     label,
@@ -382,9 +348,7 @@ TALER_TESTING_cmd_merchant_post_instances (const char 
*label,
     instance_id,
     json_pack ("{s:s}", "city", "shopcity"),
     json_pack ("{s:s}", "city", "lawyercity"),
-    default_max_fee_s,
-    10,
-    default_max_fee_s,
+    true,
     GNUNET_TIME_UNIT_ZERO, /* no wire transfer delay */
     GNUNET_TIME_UNIT_MINUTES,
     NULL,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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