gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-merchant] branch master updated: refactor to check f


From: gnunet
Subject: [GNUnet-SVN] [taler-merchant] branch master updated: refactor to check for instance in one place, instead of in each handler
Date: Thu, 26 Sep 2019 14:32:35 +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 d239c2f  refactor to check for instance in one place, instead of in 
each handler
d239c2f is described below

commit d239c2f6dc034547daf2cee7d1737c592d59c7aa
Author: Christian Grothoff <address@hidden>
AuthorDate: Thu Sep 26 14:32:32 2019 +0200

    refactor to check for instance in one place, instead of in each handler
---
 src/backend/taler-merchant-httpd.c                 | 505 +++++++++++----------
 src/backend/taler-merchant-httpd.h                 |  17 +-
 src/backend/taler-merchant-httpd_check-payment.c   |  42 +-
 src/backend/taler-merchant-httpd_check-payment.h   |   5 +-
 src/backend/taler-merchant-httpd_config.c          |  25 +-
 src/backend/taler-merchant-httpd_config.h          |   5 +-
 src/backend/taler-merchant-httpd_history.c         |  16 +-
 src/backend/taler-merchant-httpd_history.h         |   5 +-
 src/backend/taler-merchant-httpd_mhd.c             |  33 +-
 src/backend/taler-merchant-httpd_mhd.h             |  15 +-
 src/backend/taler-merchant-httpd_pay.c             | 231 +++++-----
 src/backend/taler-merchant-httpd_pay.h             |   5 +-
 src/backend/taler-merchant-httpd_proposal.c        | 119 +++--
 src/backend/taler-merchant-httpd_proposal.h        |   8 +-
 src/backend/taler-merchant-httpd_refund.c          |  63 +--
 src/backend/taler-merchant-httpd_refund.h          |  12 +-
 src/backend/taler-merchant-httpd_tip-authorize.c   |  36 +-
 src/backend/taler-merchant-httpd_tip-authorize.h   |   5 +-
 src/backend/taler-merchant-httpd_tip-pickup.c      |  63 +--
 src/backend/taler-merchant-httpd_tip-pickup.h      |  11 +-
 src/backend/taler-merchant-httpd_tip-query.c       |  37 +-
 src/backend/taler-merchant-httpd_tip-query.h       |   5 +-
 .../taler-merchant-httpd_track-transaction.c       | 165 +++----
 .../taler-merchant-httpd_track-transaction.h       |   5 +-
 src/backend/taler-merchant-httpd_track-transfer.c  | 201 ++++----
 src/backend/taler-merchant-httpd_track-transfer.h  |   5 +-
 src/lib/test_merchant_api.c                        | 488 ++++++++++----------
 27 files changed, 1034 insertions(+), 1093 deletions(-)

diff --git a/src/backend/taler-merchant-httpd.c 
b/src/backend/taler-merchant-httpd.c
index 8e4db76..2864ef6 100644
--- a/src/backend/taler-merchant-httpd.c
+++ b/src/backend/taler-merchant-httpd.c
@@ -152,10 +152,10 @@ static mode_t unixpath_mode;
 
 
 /**
- * Return GNUNET_YES if given a valid correlation ID and
- * GNUNET_NO otherwise.
+ * Return #GNUNET_YES if given a valid correlation ID and
+ * #GNUNET_NO otherwise.
  *
- * @returns GNUNET_YES iff given a valid correlation ID
+ * @returns #GNUNET_YES iff given a valid correlation ID
  */
 static int
 is_valid_correlation_id (const char *correlation_id)
@@ -170,249 +170,6 @@ is_valid_correlation_id (const char *correlation_id)
 
 
 /**
- * A client has requested the given url using the given method
- * (#MHD_HTTP_METHOD_GET, #MHD_HTTP_METHOD_PUT,
- * #MHD_HTTP_METHOD_DELETE, #MHD_HTTP_METHOD_POST, etc).  The callback
- * must call MHD callbacks to provide content to give back to the
- * client and return an HTTP status code (i.e. #MHD_HTTP_OK,
- * #MHD_HTTP_NOT_FOUND, etc.).
- *
- * @param cls argument given together with the function
- *        pointer when the handler was registered with MHD
- * @param url the requested url
- * @param method the HTTP method used (#MHD_HTTP_METHOD_GET,
- *        #MHD_HTTP_METHOD_PUT, etc.)
- * @param version the HTTP version string (i.e.
- *        #MHD_HTTP_VERSION_1_1)
- * @param upload_data the data being uploaded (excluding HEADERS,
- *        for a POST that fits into memory and that is encoded
- *        with a supported encoding, the POST data will NOT be
- *        given in upload_data and is instead available as
- *        part of #MHD_get_connection_values; very large POST
- *        data *will* be made available incrementally in
- *        @a upload_data)
- * @param upload_data_size set initially to the size of the
- *        @a upload_data provided; the method must update this
- *        value to the number of bytes NOT processed;
- * @param con_cls pointer that the callback can set to some
- *        address and that will be preserved by MHD for future
- *        calls for this request; since the access handler may
- *        be called many times (i.e., for a PUT/POST operation
- *        with plenty of upload data) this allows the application
- *        to easily associate some request-specific state.
- *        If necessary, this state can be cleaned up in the
- *        global #MHD_RequestCompletedCallback (which
- *        can be set with the #MHD_OPTION_NOTIFY_COMPLETED).
- *        Initially, `*con_cls` will be NULL.
- * @return #MHD_YES if the connection was handled successfully,
- *         #MHD_NO if the socket must be closed due to a serios
- *         error while handling the request
- */
-static int
-url_handler (void *cls,
-             struct MHD_Connection *connection,
-             const char *url,
-             const char *method,
-             const char *version,
-             const char *upload_data,
-             size_t *upload_data_size,
-             void **con_cls)
-{
-  static struct TMH_RequestHandler handlers[] = {
-    /* Landing page, tell humans to go away. */
-    { "/", MHD_HTTP_METHOD_GET, "text/plain",
-      "Hello, I'm a merchant's Taler backend. This HTTP server is not for 
humans.\n",
-      0,
-      &TMH_MHD_handler_static_response, MHD_HTTP_OK },
-    { "/agpl", MHD_HTTP_METHOD_GET, "text/plain",
-      NULL, 0,
-      &TMH_MHD_handler_agpl_redirect, MHD_HTTP_FOUND },
-    { "/public/pay", MHD_HTTP_METHOD_POST, "application/json",
-      NULL, 0,
-      &MH_handler_pay, MHD_HTTP_OK },
-    { "/public/pay", NULL, "text/plain",
-      "Only POST is allowed", 0,
-      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
-    { "/track/transfer", MHD_HTTP_METHOD_GET, "application/json",
-      NULL, 0,
-      &MH_handler_track_transfer, MHD_HTTP_OK},
-    { "/track/transfer", NULL, "text/plain",
-      "Only GET is allowed", 0,
-      &TMH_MHD_handler_static_response, MHD_HTTP_OK},
-    { "/track/transaction", MHD_HTTP_METHOD_GET, "application/json",
-      NULL, 0,
-      &MH_handler_track_transaction, MHD_HTTP_OK},
-    { "/track/transaction", NULL, "text/plain",
-      "Only GET is allowed", 0,
-      &TMH_MHD_handler_static_response, MHD_HTTP_OK},
-    { "/history", MHD_HTTP_METHOD_GET, "text/plain",
-      "Only GET is allowed", 0,
-      &MH_handler_history, MHD_HTTP_OK},
-    { "/order", MHD_HTTP_METHOD_POST, "application/json",
-      NULL, 0,
-      &MH_handler_proposal_put, MHD_HTTP_OK },
-    { "/public/proposal", MHD_HTTP_METHOD_GET, "text/plain",
-      NULL, 0,
-      &MH_handler_proposal_lookup, MHD_HTTP_OK},
-    { "/proposal", NULL, "text/plain",
-      "Only GET/POST are allowed", 0,
-      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
-    { "/refund", MHD_HTTP_METHOD_POST, "application/json",
-      NULL, 0,
-      &MH_handler_refund_increase, MHD_HTTP_OK},
-    { "/public/refund", MHD_HTTP_METHOD_GET, "text/plain",
-      NULL, 0,
-      &MH_handler_refund_lookup, MHD_HTTP_OK},
-    { "/refund", NULL, "application/json",
-      "Only POST/GET are allowed", 0,
-      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED},
-    { "/tip-authorize", MHD_HTTP_METHOD_POST, "text/plain",
-      NULL, 0,
-      &MH_handler_tip_authorize, MHD_HTTP_OK},
-    { "/tip-authorize", NULL, "application/json",
-      "Only POST is allowed", 0,
-      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED},
-    { "/public/tip-pickup", MHD_HTTP_METHOD_POST, "text/plain",
-      NULL, 0,
-      &MH_handler_tip_pickup, MHD_HTTP_OK},
-    { "/public/tip-pickup", MHD_HTTP_METHOD_GET, "text/plain",
-      NULL, 0,
-      &MH_handler_tip_pickup_get, MHD_HTTP_OK},
-    { "/public/tip-pickup", NULL, "application/json",
-      "Only POST/GET are allowed", 0,
-      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED},
-    { "/tip-query", MHD_HTTP_METHOD_GET, "text/plain",
-      NULL, 0,
-      &MH_handler_tip_query, MHD_HTTP_OK},
-    { "/check-payment", MHD_HTTP_METHOD_GET, "text/plain",
-      NULL, 0,
-      &MH_handler_check_payment, MHD_HTTP_OK},
-    { "/config", MHD_HTTP_METHOD_GET, "text/plain",
-      NULL, 0,
-      &MH_handler_config, MHD_HTTP_OK},
-    {NULL, NULL, NULL, NULL, 0, 0 }
-  };
-  static struct TMH_RequestHandler h404 = {
-    "", NULL, "text/html",
-    "<html><title>404: not found</title></html>", 0,
-    &TMH_MHD_handler_static_response, MHD_HTTP_NOT_FOUND
-  };
-
-  struct TM_HandlerContext *hc = *con_cls;
-  struct GNUNET_AsyncScopeId aid;
-  const char *correlation_id = NULL;
-  char *instance_id;
-  const char *effective_url;
-  int ret;
-
-  if (NULL == hc)
-  {
-    GNUNET_async_scope_fresh (&aid);
-    /* We only read the correlation ID on the first callback for every client 
*/
-    correlation_id = MHD_lookup_connection_value (connection,
-                                                  MHD_HEADER_KIND,
-                                                  "Taler-Correlation-Id");
-    if ((NULL != correlation_id) &&
-        (GNUNET_YES != is_valid_correlation_id (correlation_id)))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                  "illegal incoming correlation ID\n");
-      correlation_id = NULL;
-    }
-  }
-  else
-  {
-    aid = hc->async_scope_id;
-  }
-
-  GNUNET_SCHEDULER_begin_async_scope (&aid);
-
-  if (NULL != correlation_id)
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "Handling request for (%s) URL '%s', correlation_id=%s\n",
-                method,
-                url,
-                correlation_id);
-  else
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "Handling request (%s) for URL '%s'\n",
-                method,
-                url);
-
-  /* Find out the merchant backend instance for the request.
-   * If there is an instance, remove the instance specification
-   * from the beginning of the request URL. */
-  {
-    const char *instance_prefix = "/instances/";
-
-    if (0 == strncmp (url,
-                      instance_prefix,
-                      strlen (instance_prefix)))
-    {
-      /* url starts with "/instances/" */
-      const char *istart = url + strlen (instance_prefix);
-      const char *slash = strchr (istart, '/');
-
-      if (NULL == slash)
-      {
-        return TMH_MHD_handler_static_response (&h404,
-                                                connection,
-                                                con_cls,
-                                                upload_data,
-                                                upload_data_size,
-                                                NULL);
-      }
-      instance_id = GNUNET_strndup (istart,
-                                    slash - istart);
-      effective_url = slash;
-    }
-    else
-    {
-      effective_url = url;
-      instance_id = NULL;
-    }
-  }
-
-  for (unsigned int i = 0; NULL != handlers[i].url; i++)
-  {
-    struct TMH_RequestHandler *rh = &handlers[i];
-
-    if ( (0 == strcasecmp (effective_url,
-                           rh->url)) &&
-         ( (NULL == rh->method) ||
-           (0 == strcasecmp (method,
-                             rh->method)) ) )
-    {
-      ret = rh->handler (rh,
-                         connection,
-                         con_cls,
-                         upload_data,
-                         upload_data_size,
-                         instance_id);
-      hc = *con_cls;
-      if (NULL != hc)
-      {
-        hc->rh = rh;
-        /* Store the async context ID, so we can restore it if
-         * we get another callack for this request. */
-        hc->async_scope_id = aid;
-      }
-      GNUNET_free_non_null (instance_id);
-      return ret;
-    }
-  }
-  ret = TMH_MHD_handler_static_response (&h404,
-                                         connection,
-                                         con_cls,
-                                         upload_data,
-                                         upload_data_size,
-                                         instance_id);
-  GNUNET_free_non_null (instance_id);
-  return ret;
-}
-
-
-/**
  * Callback that frees all the elements in the hashmap
  *
  * @param cls closure, NULL
@@ -1175,8 +932,8 @@ instances_iterator_cb (void *cls,
  * @param instance_id identifier of the instance to resolve
  * @return NULL if that instance is unknown to us
  */
-struct MerchantInstance *
-TMH_lookup_instance (const char *instance_id)
+static struct MerchantInstance *
+lookup_instance (const char *instance_id)
 {
   struct GNUNET_HashCode h_instance;
 
@@ -1252,6 +1009,257 @@ iterate_instances (const struct 
GNUNET_CONFIGURATION_Handle *config)
 
 
 /**
+ * A client has requested the given url using the given method
+ * (#MHD_HTTP_METHOD_GET, #MHD_HTTP_METHOD_PUT,
+ * #MHD_HTTP_METHOD_DELETE, #MHD_HTTP_METHOD_POST, etc).  The callback
+ * must call MHD callbacks to provide content to give back to the
+ * client and return an HTTP status code (i.e. #MHD_HTTP_OK,
+ * #MHD_HTTP_NOT_FOUND, etc.).
+ *
+ * @param cls argument given together with the function
+ *        pointer when the handler was registered with MHD
+ * @param url the requested url
+ * @param method the HTTP method used (#MHD_HTTP_METHOD_GET,
+ *        #MHD_HTTP_METHOD_PUT, etc.)
+ * @param version the HTTP version string (i.e.
+ *        #MHD_HTTP_VERSION_1_1)
+ * @param upload_data the data being uploaded (excluding HEADERS,
+ *        for a POST that fits into memory and that is encoded
+ *        with a supported encoding, the POST data will NOT be
+ *        given in upload_data and is instead available as
+ *        part of #MHD_get_connection_values; very large POST
+ *        data *will* be made available incrementally in
+ *        @a upload_data)
+ * @param upload_data_size set initially to the size of the
+ *        @a upload_data provided; the method must update this
+ *        value to the number of bytes NOT processed;
+ * @param con_cls pointer that the callback can set to some
+ *        address and that will be preserved by MHD for future
+ *        calls for this request; since the access handler may
+ *        be called many times (i.e., for a PUT/POST operation
+ *        with plenty of upload data) this allows the application
+ *        to easily associate some request-specific state.
+ *        If necessary, this state can be cleaned up in the
+ *        global #MHD_RequestCompletedCallback (which
+ *        can be set with the #MHD_OPTION_NOTIFY_COMPLETED).
+ *        Initially, `*con_cls` will be NULL.
+ * @return #MHD_YES if the connection was handled successfully,
+ *         #MHD_NO if the socket must be closed due to a serios
+ *         error while handling the request
+ */
+static int
+url_handler (void *cls,
+             struct MHD_Connection *connection,
+             const char *url,
+             const char *method,
+             const char *version,
+             const char *upload_data,
+             size_t *upload_data_size,
+             void **con_cls)
+{
+  static struct TMH_RequestHandler handlers[] = {
+    /* Landing page, tell humans to go away. */
+    { "/", MHD_HTTP_METHOD_GET, "text/plain",
+      "Hello, I'm a merchant's Taler backend. This HTTP server is not for 
humans.\n",
+      0,
+      &TMH_MHD_handler_static_response, MHD_HTTP_OK },
+    { "/agpl", MHD_HTTP_METHOD_GET, "text/plain",
+      NULL, 0,
+      &TMH_MHD_handler_agpl_redirect, MHD_HTTP_FOUND },
+    { "/public/pay", MHD_HTTP_METHOD_POST, "application/json",
+      NULL, 0,
+      &MH_handler_pay, MHD_HTTP_OK },
+    { "/public/pay", NULL, "text/plain",
+      "Only POST is allowed", 0,
+      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
+    { "/track/transfer", MHD_HTTP_METHOD_GET, "application/json",
+      NULL, 0,
+      &MH_handler_track_transfer, MHD_HTTP_OK},
+    { "/track/transfer", NULL, "text/plain",
+      "Only GET is allowed", 0,
+      &TMH_MHD_handler_static_response, MHD_HTTP_OK},
+    { "/track/transaction", MHD_HTTP_METHOD_GET, "application/json",
+      NULL, 0,
+      &MH_handler_track_transaction, MHD_HTTP_OK},
+    { "/track/transaction", NULL, "text/plain",
+      "Only GET is allowed", 0,
+      &TMH_MHD_handler_static_response, MHD_HTTP_OK},
+    { "/history", MHD_HTTP_METHOD_GET, "text/plain",
+      "Only GET is allowed", 0,
+      &MH_handler_history, MHD_HTTP_OK},
+    { "/order", MHD_HTTP_METHOD_POST, "application/json",
+      NULL, 0,
+      &MH_handler_proposal_put, MHD_HTTP_OK },
+    { "/public/proposal", MHD_HTTP_METHOD_GET, "text/plain",
+      NULL, 0,
+      &MH_handler_proposal_lookup, MHD_HTTP_OK},
+    { "/proposal", NULL, "text/plain",
+      "Only GET/POST are allowed", 0,
+      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
+    { "/refund", MHD_HTTP_METHOD_POST, "application/json",
+      NULL, 0,
+      &MH_handler_refund_increase, MHD_HTTP_OK},
+    { "/public/refund", MHD_HTTP_METHOD_GET, "text/plain",
+      NULL, 0,
+      &MH_handler_refund_lookup, MHD_HTTP_OK},
+    { "/refund", NULL, "application/json",
+      "Only POST/GET are allowed", 0,
+      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED},
+    { "/tip-authorize", MHD_HTTP_METHOD_POST, "text/plain",
+      NULL, 0,
+      &MH_handler_tip_authorize, MHD_HTTP_OK},
+    { "/tip-authorize", NULL, "application/json",
+      "Only POST is allowed", 0,
+      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED},
+    { "/public/tip-pickup", MHD_HTTP_METHOD_POST, "text/plain",
+      NULL, 0,
+      &MH_handler_tip_pickup, MHD_HTTP_OK},
+    { "/public/tip-pickup", MHD_HTTP_METHOD_GET, "text/plain",
+      NULL, 0,
+      &MH_handler_tip_pickup_get, MHD_HTTP_OK},
+    { "/public/tip-pickup", NULL, "application/json",
+      "Only POST/GET are allowed", 0,
+      &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED},
+    { "/tip-query", MHD_HTTP_METHOD_GET, "text/plain",
+      NULL, 0,
+      &MH_handler_tip_query, MHD_HTTP_OK},
+    { "/check-payment", MHD_HTTP_METHOD_GET, "text/plain",
+      NULL, 0,
+      &MH_handler_check_payment, MHD_HTTP_OK},
+    { "/config", MHD_HTTP_METHOD_GET, "text/plain",
+      NULL, 0,
+      &MH_handler_config, MHD_HTTP_OK},
+    {NULL, NULL, NULL, NULL, 0, 0 }
+  };
+  static struct TMH_RequestHandler h404 = {
+    "", NULL, "text/html",
+    "<html><title>404: not found</title></html>", 0,
+    &TMH_MHD_handler_static_response, MHD_HTTP_NOT_FOUND
+  };
+
+  struct TM_HandlerContext *hc = *con_cls;
+  struct GNUNET_AsyncScopeId aid;
+  const char *correlation_id = NULL;
+  struct MerchantInstance *instance;
+  const char *effective_url;
+  int ret;
+
+  if (NULL == hc)
+  {
+    GNUNET_async_scope_fresh (&aid);
+    /* We only read the correlation ID on the first callback for every client 
*/
+    correlation_id = MHD_lookup_connection_value (connection,
+                                                  MHD_HEADER_KIND,
+                                                  "Taler-Correlation-Id");
+    if ((NULL != correlation_id) &&
+        (GNUNET_YES != is_valid_correlation_id (correlation_id)))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "illegal incoming correlation ID\n");
+      correlation_id = NULL;
+    }
+  }
+  else
+  {
+    aid = hc->async_scope_id;
+  }
+
+  GNUNET_SCHEDULER_begin_async_scope (&aid);
+
+  if (NULL != correlation_id)
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Handling request for (%s) URL '%s', correlation_id=%s\n",
+                method,
+                url,
+                correlation_id);
+  else
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Handling request (%s) for URL '%s'\n",
+                method,
+                url);
+
+  /* Find out the merchant backend instance for the request.
+   * If there is an instance, remove the instance specification
+   * from the beginning of the request URL. */
+  {
+    const char *instance_prefix = "/instances/";
+
+    if (0 == strncmp (url,
+                      instance_prefix,
+                      strlen (instance_prefix)))
+    {
+      /* url starts with "/instances/" */
+      const char *istart = url + strlen (instance_prefix);
+      const char *slash = strchr (istart, '/');
+      char *instance_id;
+
+      if (NULL == slash)
+      {
+        return TMH_MHD_handler_static_response (&h404,
+                                                connection,
+                                                con_cls,
+                                                upload_data,
+                                                upload_data_size,
+                                                NULL);
+      }
+      instance_id = GNUNET_strndup (istart,
+                                    slash - istart);
+      instance = lookup_instance (instance_id);
+      GNUNET_free (instance_id);
+      effective_url = slash;
+    }
+    else
+    {
+      effective_url = url;
+      instance = lookup_instance (NULL);
+    }
+  }
+  if (NULL == instance)
+    return TMH_RESPONSE_reply_json_pack (connection,
+                                         MHD_HTTP_NOT_FOUND,
+                                         "{s:I, s:s}",
+                                         "code",
+                                         (json_int_t) 
TALER_EC_INSTANCE_UNKNOWN,
+                                         "error",
+                                         "merchant instance unknown");
+
+  for (unsigned int i = 0; NULL != handlers[i].url; i++)
+  {
+    struct TMH_RequestHandler *rh = &handlers[i];
+
+    if ( (0 == strcasecmp (effective_url,
+                           rh->url)) &&
+         ( (NULL == rh->method) ||
+           (0 == strcasecmp (method,
+                             rh->method)) ) )
+    {
+      ret = rh->handler (rh,
+                         connection,
+                         con_cls,
+                         upload_data,
+                         upload_data_size,
+                         instance);
+      hc = *con_cls;
+      if (NULL != hc)
+      {
+        hc->rh = rh;
+        /* Store the async context ID, so we can restore it if
+         * we get another callack for this request. */
+        hc->async_scope_id = aid;
+      }
+      return ret;
+    }
+  }
+  return TMH_MHD_handler_static_response (&h404,
+                                          connection,
+                                          con_cls,
+                                          upload_data,
+                                          upload_data_size,
+                                          instance);
+}
+
+
+/**
  * Main function that will be run by the scheduler.
  *
  * @param cls closure
@@ -1412,7 +1420,6 @@ run (void *cls,
     const char *choices[] = {"tcp",
                              "unix",
                              NULL};
-
     const char *serve_type;
 
     if (GNUNET_OK !=
diff --git a/src/backend/taler-merchant-httpd.h 
b/src/backend/taler-merchant-httpd.h
index 4e939b9..c7046d8 100644
--- a/src/backend/taler-merchant-httpd.h
+++ b/src/backend/taler-merchant-httpd.h
@@ -62,7 +62,7 @@ struct IterateInstancesCls
    * Tells if the parsing encountered any error. We need this
    * field since the iterator must return void
    */
-   unsigned int ret;
+  unsigned int ret;
 };
 
 
@@ -203,8 +203,7 @@ struct TMH_RequestHandler
    * @param[in,out] connection_cls the connection's closure (can be updated)
    * @param upload_data upload data
    * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
-   * @param instance_id mechant backend instance ID, or NULL if no explicit
-   *        instance has been specified
+   * @param mi merchant backend instance, never NULL
    * @return MHD result code
    */
   int (*handler)(struct TMH_RequestHandler *rh,
@@ -212,7 +211,7 @@ struct TMH_RequestHandler
                  void **connection_cls,
                  const char *upload_data,
                  size_t *upload_data_size,
-                 const char *instance_id);
+                 struct MerchantInstance *mi);
 
   /**
    * Default response code.
@@ -344,14 +343,4 @@ extern struct GNUNET_TIME_Relative default_pay_deadline;
 void
 TMH_trigger_daemon (void);
 
-/**
- * Lookup a merchant instance by its name.
- *
- * @param name name of the instance to resolve
- * @return NULL if that instance is unknown to us
- */
-struct MerchantInstance *
-TMH_lookup_instance (const char *name);
-
-
 #endif
diff --git a/src/backend/taler-merchant-httpd_check-payment.c 
b/src/backend/taler-merchant-httpd_check-payment.c
index 2ba4cc4..a77e731 100644
--- a/src/backend/taler-merchant-httpd_check-payment.c
+++ b/src/backend/taler-merchant-httpd_check-payment.c
@@ -48,7 +48,7 @@
  *                   if not a session-bound payment
  * @returns the URI, must be freed with #GNUNET_free
  */
-char *
+static char *
 make_taler_pay_uri (struct MHD_Connection *connection,
                     const char *instance_id,
                     const char *order_id,
@@ -66,7 +66,7 @@ make_taler_pay_uri (struct MHD_Connection *connection,
                                                 "X-Forwarded-Host");
 
   uri_path = MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
-                                      "X-Forwarded-Prefix");
+                                          "X-Forwarded-Prefix");
   if (NULL == uri_path)
     uri_path = "-";
 
@@ -259,15 +259,16 @@ check_order_and_request_payment (struct MHD_Connection 
*connection,
       TALER_JSON_hash (contract_terms,
                        &h_contract_terms))
   {
-  GNUNET_break (0);
-  json_decref (contract_terms);
-  return TMH_RESPONSE_reply_internal_error (connection,
-                                            
TALER_EC_CHECK_PAYMENT_FAILED_COMPUTE_PROPOSAL_HASH,
-                                            "Failed to hash proposal");
+    GNUNET_break (0);
+    json_decref (contract_terms);
+    return TMH_RESPONSE_reply_internal_error (connection,
+                                              
TALER_EC_CHECK_PAYMENT_FAILED_COMPUTE_PROPOSAL_HASH,
+                                              "Failed to hash proposal");
   }
   /* Offer was not picked up yet, but we ensured that it exists */
   h_contract_terms_str = GNUNET_STRINGS_data_to_string_alloc 
(&h_contract_terms,
-                                                              sizeof (struct 
GNUNET_HashCode));
+                                                              sizeof (struct
+                                                                      
GNUNET_HashCode));
   ret = send_pay_request (connection,
                           order_id,
                           final_contract_url,
@@ -291,8 +292,7 @@ check_order_and_request_payment (struct MHD_Connection 
*connection,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -301,7 +301,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
                           void **connection_cls,
                           const char *upload_data,
                           size_t *upload_data_size,
-                          const char *instance_id)
+                          struct MerchantInstance *mi)
 {
   const char *order_id;
   const char *contract_url;
@@ -309,7 +309,6 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
   const char *fulfillment_url;
   char *final_contract_url;
   char *h_contract_terms_str;
-  struct MerchantInstance *mi;
   enum GNUNET_DB_QueryStatus qs;
   json_t *contract_terms;
   struct GNUNET_HashCode h_contract_terms;
@@ -317,11 +316,6 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
   int ret;
   int refunded;
 
-  mi = TMH_lookup_instance (instance_id);
-  if (NULL == mi)
-    return TMH_RESPONSE_reply_bad_request (connection,
-                                           
TALER_EC_CHECK_PAYMENT_INSTANCE_UNKNOWN,
-                                           "merchant instance unknown");
   order_id = MHD_lookup_connection_value (connection,
                                           MHD_GET_ARGUMENT_KIND,
                                           "order_id");
@@ -340,7 +334,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
   {
     final_contract_url = TALER_url_absolute_mhd (connection,
                                                  "/public/proposal",
-                                                 "instance", instance_id,
+                                                 "instance", mi->id,
                                                  "order_id", order_id,
                                                  NULL);
     GNUNET_assert (NULL != final_contract_url);
@@ -350,8 +344,8 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
     final_contract_url = GNUNET_strdup (contract_url);
   }
   session_id = MHD_lookup_connection_value (connection,
-                                                MHD_GET_ARGUMENT_KIND,
-                                                "session_id");
+                                            MHD_GET_ARGUMENT_KIND,
+                                            "session_id");
 
   db->preflight (db->cls);
   qs = db->find_contract_terms (db->cls,
@@ -419,7 +413,8 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
   }
 
   h_contract_terms_str = GNUNET_STRINGS_data_to_string_alloc 
(&h_contract_terms,
-                                                              sizeof (struct 
GNUNET_HashCode));
+                                                              sizeof (struct
+                                                                      
GNUNET_HashCode));
 
 
 
@@ -505,7 +500,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
   }
 
   /* Accumulate refunds, if any. */
-  for (unsigned int i=0;i<MAX_RETRIES;i++)
+  for (unsigned int i = 0; i<MAX_RETRIES; i++)
   {
     qs = db->get_refunds_from_contract_terms_hash (db->cls,
                                                    &mi->pubkey,
@@ -537,7 +532,8 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
                                       "contract_terms", contract_terms,
                                       "paid", 1,
                                       "refunded", refunded,
-                                      "refund_amount", TALER_JSON_from_amount 
(&refund_amount));
+                                      "refund_amount", TALER_JSON_from_amount (
+                                        &refund_amount));
   GNUNET_free (final_contract_url);
   return ret;
 }
diff --git a/src/backend/taler-merchant-httpd_check-payment.h 
b/src/backend/taler-merchant-httpd_check-payment.h
index 98fa3a1..2ff39d7 100644
--- a/src/backend/taler-merchant-httpd_check-payment.h
+++ b/src/backend/taler-merchant-httpd_check-payment.h
@@ -34,8 +34,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -44,6 +43,6 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
                           void **connection_cls,
                           const char *upload_data,
                           size_t *upload_data_size,
-                          const char *instance_id);
+                          struct MerchantInstance *mi);
 
 #endif
diff --git a/src/backend/taler-merchant-httpd_config.c 
b/src/backend/taler-merchant-httpd_config.c
index 3e7b7b3..21fb55c 100644
--- a/src/backend/taler-merchant-httpd_config.c
+++ b/src/backend/taler-merchant-httpd_config.c
@@ -39,8 +39,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -49,24 +48,12 @@ MH_handler_config (struct TMH_RequestHandler *rh,
                    void **connection_cls,
                    const char *upload_data,
                    size_t *upload_data_size,
-                   const char *instance_id)
+                   struct MerchantInstance *mi)
 {
-  int ret;
-  struct MerchantInstance *mi;
-
-  mi = TMH_lookup_instance (instance_id);
-
-  if (NULL == mi)
-    return TMH_RESPONSE_reply_bad_request (connection,
-                                           
TALER_EC_CHECK_PAYMENT_INSTANCE_UNKNOWN,
-                                           "merchant instance unknown");
-
-  ret = TMH_RESPONSE_reply_json_pack (connection,
-                                      MHD_HTTP_OK,
-                                      "{s:s}",
-                                      "currency", TMH_currency);
-
-  return ret;
+  return TMH_RESPONSE_reply_json_pack (connection,
+                                       MHD_HTTP_OK,
+                                       "{s:s}",
+                                       "currency", TMH_currency);
 }
 
 /* end of taler-merchant-httpd_config.c */
diff --git a/src/backend/taler-merchant-httpd_config.h 
b/src/backend/taler-merchant-httpd_config.h
index 08594a5..43c987d 100644
--- a/src/backend/taler-merchant-httpd_config.h
+++ b/src/backend/taler-merchant-httpd_config.h
@@ -31,8 +31,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -41,6 +40,6 @@ MH_handler_config (struct TMH_RequestHandler *rh,
                    void **connection_cls,
                    const char *upload_data,
                    size_t *upload_data_size,
-                   const char *instance_id);
+                   struct MerchantInstance *mi);
 
 #endif
diff --git a/src/backend/taler-merchant-httpd_history.c 
b/src/backend/taler-merchant-httpd_history.c
index 36ca729..5db0fb6 100644
--- a/src/backend/taler-merchant-httpd_history.c
+++ b/src/backend/taler-merchant-httpd_history.c
@@ -122,8 +122,7 @@ pd_cb (void *cls,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -132,7 +131,7 @@ MH_handler_history (struct TMH_RequestHandler *rh,
                     void **connection_cls,
                     const char *upload_data,
                     size_t *upload_data_size,
-                    const char *instance_id)
+                    struct MerchantInstance *mi)
 {
   #define LOG_INFO(...) GNUNET_log (GNUNET_ERROR_TYPE_INFO, __VA_ARGS__)
   const char *str;
@@ -141,7 +140,6 @@ MH_handler_history (struct TMH_RequestHandler *rh,
   int ret;
   unsigned int ascending = GNUNET_NO;
   unsigned long long seconds;
-  struct MerchantInstance *mi;
   unsigned long long start = INT64_MAX;
   long long delta = -20;
   enum GNUNET_DB_QueryStatus qs;
@@ -175,16 +173,6 @@ MH_handler_history (struct TMH_RequestHandler *rh,
     }
   }
 
-  mi = TMH_lookup_instance (instance_id);
-
-  if (NULL == mi)
-  {
-    json_decref (response);
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         TALER_EC_HISTORY_INSTANCE_UNKNOWN,
-                                         "instance");
-  }
-
   /* Sanity check that we don't have some odd stale transaction running */
   db->preflight (db->cls);
 
diff --git a/src/backend/taler-merchant-httpd_history.h 
b/src/backend/taler-merchant-httpd_history.h
index 5ea2ed2..d9c1a20 100644
--- a/src/backend/taler-merchant-httpd_history.h
+++ b/src/backend/taler-merchant-httpd_history.h
@@ -34,8 +34,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -44,7 +43,7 @@ MH_handler_history (struct TMH_RequestHandler *rh,
                     void **connection_cls,
                     const char *upload_data,
                     size_t *upload_data_size,
-                    const char *instance_id);
+                    struct MerchantInstance *mi);
 
 /* end of taler-merchant-httpd_history.c */
 #endif
diff --git a/src/backend/taler-merchant-httpd_mhd.c 
b/src/backend/taler-merchant-httpd_mhd.c
index a17485c..a80c833 100644
--- a/src/backend/taler-merchant-httpd_mhd.c
+++ b/src/backend/taler-merchant-httpd_mhd.c
@@ -37,8 +37,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, could be NULL in this specific case!
  * @return MHD result code
  */
 int
@@ -47,11 +46,12 @@ TMH_MHD_handler_static_response (struct TMH_RequestHandler 
*rh,
                                  void **connection_cls,
                                  const char *upload_data,
                                  size_t *upload_data_size,
-                                 const char *instance_id)
+                                 struct MerchantInstance *instance)
 {
   struct MHD_Response *response;
   int ret;
 
+  (void) instance;
   if (0 == rh->data_size)
     rh->data_size = strlen ((const char *) rh->data);
   response = MHD_create_response_from_buffer (rh->data_size,
@@ -84,23 +84,23 @@ TMH_MHD_handler_static_response (struct TMH_RequestHandler 
*rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL (but unused)
  * @return MHD result code
  */
 int
 TMH_MHD_handler_agpl_redirect (struct TMH_RequestHandler *rh,
-                                  struct MHD_Connection *connection,
-                                  void **connection_cls,
-                                  const char *upload_data,
-                                  size_t *upload_data_size,
-                                  const char *instance_id)
+                               struct MHD_Connection *connection,
+                               void **connection_cls,
+                               const char *upload_data,
+                               size_t *upload_data_size,
+                               struct MerchantInstance *mi)
 {
   const char *agpl =
     "This server is licensed under the Affero GPL. You will now be redirected 
to the source code.";
   struct MHD_Response *response;
   int ret;
 
+  (void) mi;
   response = MHD_create_response_from_buffer (strlen (agpl),
                                               (void *) agpl,
                                               MHD_RESPMEM_PERSISTENT);
@@ -142,17 +142,16 @@ TMH_MHD_handler_agpl_redirect (struct TMH_RequestHandler 
*rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
 TMH_MHD_handler_send_json_pack_error (struct TMH_RequestHandler *rh,
-                                         struct MHD_Connection *connection,
-                                         void **connection_cls,
-                                         const char *upload_data,
-                                         size_t *upload_data_size,
-                                         const char *instance_id)
+                                      struct MHD_Connection *connection,
+                                      void **connection_cls,
+                                      const char *upload_data,
+                                      size_t *upload_data_size,
+                                      struct MerchantInstance *mi)
 {
   return TMH_RESPONSE_reply_json_pack (connection,
                                        rh->response_code,
diff --git a/src/backend/taler-merchant-httpd_mhd.h 
b/src/backend/taler-merchant-httpd_mhd.h
index 0ec9830..6564922 100644
--- a/src/backend/taler-merchant-httpd_mhd.h
+++ b/src/backend/taler-merchant-httpd_mhd.h
@@ -37,8 +37,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, NULL is allowed in this case!
  * @return MHD result code
  */
 int
@@ -47,7 +46,7 @@ TMH_MHD_handler_static_response (struct TMH_RequestHandler 
*rh,
                                  void **connection_cls,
                                  const char *upload_data,
                                  size_t *upload_data_size,
-                                 const char *instance_id);
+                                 struct MerchantInstance *mi);
 
 
 /**
@@ -59,8 +58,7 @@ TMH_MHD_handler_static_response (struct TMH_RequestHandler 
*rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -69,7 +67,7 @@ TMH_MHD_handler_agpl_redirect (struct TMH_RequestHandler *rh,
                                void **connection_cls,
                                const char *upload_data,
                                size_t *upload_data_size,
-                               const char *instance_id);
+                               struct MerchantInstance *mi);
 
 
 /**
@@ -104,8 +102,7 @@ TMH_MHD_helper_send_json_pack (struct TMH_RequestHandler 
*rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -114,7 +111,7 @@ TMH_MHD_handler_send_json_pack_error (struct 
TMH_RequestHandler *rh,
                                       void **connection_cls,
                                       const char *upload_data,
                                       size_t *upload_data_size,
-                                      const char *instance_id);
+                                      struct MerchantInstance *mi);
 
 
 #endif
diff --git a/src/backend/taler-merchant-httpd_pay.c 
b/src/backend/taler-merchant-httpd_pay.c
index e72a8e2..f3775c2 100644
--- a/src/backend/taler-merchant-httpd_pay.c
+++ b/src/backend/taler-merchant-httpd_pay.c
@@ -41,7 +41,8 @@
 /**
  * How long to wait before giving up processing with the exchange?
  */
-#define PAY_TIMEOUT (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 
30))
+#define PAY_TIMEOUT (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \
+                                                    30))
 
 /**
  * How often do we retry the (complex!) database transaction?
@@ -452,7 +453,7 @@ abort_deposit (struct PayContext *pc)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Aborting pending /deposit operations\n");
-  for (unsigned int i=0;i<pc->coins_cnt;i++)
+  for (unsigned int i = 0; i<pc->coins_cnt; i++)
   {
     struct DepositConfirmation *dci = &pc->dc[i];
 
@@ -490,9 +491,9 @@ sign_success_response (struct PayContext *pc)
                                     errmsg);
   {
     struct PaymentResponsePS mr = {
-     .purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_PAYMENT_OK),
-     .purpose.size = htonl (sizeof (mr)),
-     .h_contract_terms = pc->h_contract_terms
+      .purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_PAYMENT_OK),
+      .purpose.size = htonl (sizeof (mr)),
+      .h_contract_terms = pc->h_contract_terms
     };
 
     GNUNET_CRYPTO_eddsa_sign (&pc->mi->privkey.eddsa_priv,
@@ -553,7 +554,7 @@ pay_context_cleanup (struct TM_HandlerContext *hc)
     pc->timeout_task = NULL;
   }
   TMH_PARSE_post_cleanup_callback (pc->json_parse_context);
-  for (unsigned int i=0;i<pc->coins_cnt;i++)
+  for (unsigned int i = 0; i<pc->coins_cnt; i++)
   {
     struct DepositConfirmation *dc = &pc->dc[i];
 
@@ -627,7 +628,7 @@ check_payment_sufficient (struct PayContext *pc)
    * This loops calculates what are the deposit fee / total
    * amount with fee / and wire fee, for all the coins.
    */
-  for (unsigned int i=1;i<pc->coins_cnt;i++)
+  for (unsigned int i = 1; i<pc->coins_cnt; i++)
   {
     struct DepositConfirmation *dc = &pc->dc[i];
 
@@ -658,7 +659,7 @@ check_payment_sufficient (struct PayContext *pc)
     {
       int new_exchange = GNUNET_YES;
 
-      for (unsigned int j=0;j<i;j++)
+      for (unsigned int j = 0; j<i; j++)
         if (0 == strcasecmp (dc->exchange_url,
                              pc->dc[j].exchange_url))
         {
@@ -730,7 +731,7 @@ check_payment_sufficient (struct PayContext *pc)
     GNUNET_assert
       (GNUNET_OK == TALER_amount_get_zero
         (total_wire_fee.currency,
-         &wire_fee_customer_contribution));
+        &wire_fee_customer_contribution));
   }
 
   /**
@@ -762,8 +763,8 @@ check_payment_sufficient (struct PayContext *pc)
     GNUNET_assert
       (GNUNET_OK == TALER_amount_add
         (&total_needed,
-         &total_needed,
-         &wire_fee_customer_contribution));
+        &total_needed,
+        &wire_fee_customer_contribution));
 
     /* check if total payment sufficies */
     if (-1 == TALER_amount_cmp (&acc_amount,
@@ -790,8 +791,8 @@ check_payment_sufficient (struct PayContext *pc)
     GNUNET_assert
       (GNUNET_SYSERR != TALER_amount_subtract
         (&deposit_fee_savings,
-         &pc->max_fee,
-         &acc_fee));
+        &pc->max_fee,
+        &acc_fee));
 
     /* See how much of wire fee
        contribution is covered by
@@ -803,8 +804,8 @@ check_payment_sufficient (struct PayContext *pc)
       GNUNET_assert
         (GNUNET_SYSERR != TALER_amount_subtract
           (&wire_fee_customer_contribution,
-           &wire_fee_customer_contribution,
-           &deposit_fee_savings));
+          &wire_fee_customer_contribution,
+          &deposit_fee_savings));
 
       /* subtract remaining wire fees from total contribution */
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -814,9 +815,9 @@ check_payment_sufficient (struct PayContext *pc)
                     (&wire_fee_customer_contribution));
 
       if (GNUNET_SYSERR == TALER_amount_subtract
-        (&acc_amount,
-         &acc_amount,
-         &wire_fee_customer_contribution))
+            (&acc_amount,
+            &acc_amount,
+            &wire_fee_customer_contribution))
       {
         GNUNET_break_op (0);
         return TALER_EC_PAY_PAYMENT_INSUFFICIENT_DUE_TO_FEES;
@@ -980,12 +981,18 @@ deposit_cb (void *cls,
       /* We can't do anything meaningful here, the exchange did something 
wrong */
       resume_pay_with_response (pc,
                                 MHD_HTTP_SERVICE_UNAVAILABLE,
-                                TMH_RESPONSE_make_json_pack ("{s:s, s:I, s:I, 
s:I, s:s}",
-                                                             "error", 
"exchange failed",
-                                                             "code", 
(json_int_t) TALER_EC_PAY_EXCHANGE_FAILED,
-                                                             "exchange-code", 
(json_int_t) ec,
-                                                             
"exchange-http-status", (json_int_t) http_status,
-                                                             "hint", "The 
exchange provided an unexpected response"));
+                                TMH_RESPONSE_make_json_pack (
+                                  "{s:s, s:I, s:I, s:I, s:s}",
+                                  "error",
+                                  "exchange failed",
+                                  "code",
+                                  (json_int_t) TALER_EC_PAY_EXCHANGE_FAILED,
+                                  "exchange-code",
+                                  (json_int_t) ec,
+                                  "exchange-http-status",
+                                  (json_int_t) http_status,
+                                  "hint",
+                                  "The exchange provided an unexpected 
response"));
     }
     else
     {
@@ -1103,7 +1110,7 @@ process_pay_with_exchange (void *cls,
   /* Initiate /deposit operation for all coins of
      the current exchange (!) */
   GNUNET_assert (0 == pc->pending_at_ce);
-  for (unsigned int i=0;i<pc->coins_cnt;i++)
+  for (unsigned int i = 0; i<pc->coins_cnt; i++)
   {
     struct DepositConfirmation *dc = &pc->dc[i];
     const struct TALER_EXCHANGE_DenomPublicKey *denom_details;
@@ -1111,25 +1118,25 @@ process_pay_with_exchange (void *cls,
     if (GNUNET_YES == dc->found_in_db)
       continue;
     if (0 != strcmp (dc->exchange_url,
-                    pc->current_exchange))
+                     pc->current_exchange))
       continue;
     denom_details = TALER_EXCHANGE_get_denomination_key
-      (keys,
-       &dc->denom);
+                      (keys,
+                      &dc->denom);
 
     if (NULL == denom_details)
     {
       GNUNET_break_op (0);
       resume_pay_with_response
         (pc,
-         MHD_HTTP_BAD_REQUEST,
-         TMH_RESPONSE_make_json_pack
-           ("{s:s, s:I, s:o, s:o}",
-            "error", "denomination not found",
-            "code", TALER_EC_PAY_DENOMINATION_KEY_NOT_FOUND,
-            "denom_pub", GNUNET_JSON_from_rsa_public_key
-              (dc->denom.rsa_public_key),
-            "exchange_keys", TALER_EXCHANGE_get_keys_raw (mh)));
+        MHD_HTTP_BAD_REQUEST,
+        TMH_RESPONSE_make_json_pack
+          ("{s:s, s:I, s:o, s:o}",
+          "error", "denomination not found",
+          "code", TALER_EC_PAY_DENOMINATION_KEY_NOT_FOUND,
+          "denom_pub", GNUNET_JSON_from_rsa_public_key
+            (dc->denom.rsa_public_key),
+          "exchange_keys", TALER_EXCHANGE_get_keys_raw (mh)));
       return;
     }
     if (GNUNET_OK !=
@@ -1140,14 +1147,14 @@ process_pay_with_exchange (void *cls,
       GNUNET_break_op (0);
       resume_pay_with_response
         (pc,
-         MHD_HTTP_BAD_REQUEST,
-         TMH_RESPONSE_make_json_pack
-           ("{s:s, s:I, s:o}",
-            "error", "invalid denomination",
-            "code", (json_int_t)
-              TALER_EC_PAY_DENOMINATION_KEY_AUDITOR_FAILURE,
-            "denom_pub", GNUNET_JSON_from_rsa_public_key
-              (dc->denom.rsa_public_key)));
+        MHD_HTTP_BAD_REQUEST,
+        TMH_RESPONSE_make_json_pack
+          ("{s:s, s:I, s:o}",
+          "error", "invalid denomination",
+          "code", (json_int_t)
+          TALER_EC_PAY_DENOMINATION_KEY_AUDITOR_FAILURE,
+          "denom_pub", GNUNET_JSON_from_rsa_public_key
+            (dc->denom.rsa_public_key)));
       return;
     }
 
@@ -1159,11 +1166,11 @@ process_pay_with_exchange (void *cls,
     GNUNET_assert (NULL != pc->wm->j_wire);
     GNUNET_log
       (GNUNET_ERROR_TYPE_DEBUG,
-       "Timing for this payment, wire_deadline:"
-       " %llu, refund_deadline: %llu\n",
-       (unsigned long long)
-         pc->wire_transfer_deadline.abs_value_us,
-       (unsigned long long) pc->refund_deadline.abs_value_us);
+      "Timing for this payment, wire_deadline:"
+      " %llu, refund_deadline: %llu\n",
+      (unsigned long long)
+      pc->wire_transfer_deadline.abs_value_us,
+      (unsigned long long) pc->refund_deadline.abs_value_us);
     db->preflight (db->cls);
 
     dc->dh = TALER_EXCHANGE_deposit (mh,
@@ -1187,13 +1194,13 @@ process_pay_with_exchange (void *cls,
       GNUNET_break_op (0);
       resume_pay_with_response
         (pc,
-         MHD_HTTP_UNAUTHORIZED,
-         TMH_RESPONSE_make_json_pack
-           ("{s:s, s:I, s:i}",
-            "hint", "Coin signature invalid.",
-            "code", (json_int_t)
-              TALER_EC_PAY_COIN_SIGNATURE_INVALID,
-            "coin_idx", i));
+        MHD_HTTP_UNAUTHORIZED,
+        TMH_RESPONSE_make_json_pack
+          ("{s:s, s:I, s:i}",
+          "hint", "Coin signature invalid.",
+          "code", (json_int_t)
+          TALER_EC_PAY_COIN_SIGNATURE_INVALID,
+          "coin_idx", i));
       return;
     }
 
@@ -1211,7 +1218,7 @@ process_pay_with_exchange (void *cls,
 static void
 find_next_exchange (struct PayContext *pc)
 {
-  for (unsigned int i=0;i<pc->coins_cnt;i++)
+  for (unsigned int i = 0; i<pc->coins_cnt; i++)
   {
     struct DepositConfirmation *dc = &pc->dc[i];
 
@@ -1301,7 +1308,7 @@ check_coin_paid (void *cls,
     GNUNET_break (0);
     return;
   }
-  for (unsigned int i=0;i<pc->coins_cnt;i++)
+  for (unsigned int i = 0; i<pc->coins_cnt; i++)
   {
     struct DepositConfirmation *dc = &pc->dc[i];
 
@@ -1317,7 +1324,7 @@ check_coin_paid (void *cls,
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Coin (%s) already found in our DB.\n",
                 TALER_b2s (coin_pub,
-                          sizeof (*coin_pub)));
+                           sizeof (*coin_pub)));
     if (GNUNET_OK !=
         TALER_amount_add (&pc->total_paid,
                           &pc->total_paid,
@@ -1381,7 +1388,7 @@ parse_pay (struct MHD_Connection *connection,
                              &order_id),
     GNUNET_JSON_spec_fixed_auto ("merchant_pub",
                                  &merchant_pub),
-    GNUNET_JSON_spec_end()
+    GNUNET_JSON_spec_end ()
   };
   enum GNUNET_DB_QueryStatus qs;
   const char *session_id;
@@ -1488,7 +1495,7 @@ parse_pay (struct MHD_Connection *connection,
                                &fulfillment_url),
       GNUNET_JSON_spec_fixed_auto ("H_wire",
                                    &pc->h_wire),
-      GNUNET_JSON_spec_end()
+      GNUNET_JSON_spec_end ()
     };
 
     res = TMH_PARSE_json_data (connection,
@@ -1515,7 +1522,7 @@ parse_pay (struct MHD_Connection *connection,
       struct GNUNET_JSON_Specification wspec[] = {
         GNUNET_JSON_spec_relative_time ("wire_transfer_delay",
                                         &used_wire_transfer_delay),
-        GNUNET_JSON_spec_end()
+        GNUNET_JSON_spec_end ()
       };
 
       res = TMH_PARSE_json_data (connection,
@@ -1533,7 +1540,8 @@ parse_pay (struct MHD_Connection *connection,
       = GNUNET_TIME_absolute_add (pc->timestamp,
                                   used_wire_transfer_delay);
 
-    if (pc->wire_transfer_deadline.abs_value_us < 
pc->refund_deadline.abs_value_us)
+    if (pc->wire_transfer_deadline.abs_value_us <
+        pc->refund_deadline.abs_value_us)
     {
       GNUNET_break (0);
       GNUNET_JSON_parse_free (spec);
@@ -1569,7 +1577,7 @@ parse_pay (struct MHD_Connection *connection,
     struct GNUNET_JSON_Specification espec[] = {
       TALER_JSON_spec_amount ("max_wire_fee",
                               &pc->max_wire_fee),
-      GNUNET_JSON_spec_end()
+      GNUNET_JSON_spec_end ()
     };
 
     res = TMH_PARSE_json_data (connection,
@@ -1596,8 +1604,8 @@ parse_pay (struct MHD_Connection *connection,
   {
     struct GNUNET_JSON_Specification espec[] = {
       GNUNET_JSON_spec_uint32 ("wire_fee_amortization",
-                              &pc->wire_fee_amortization),
-      GNUNET_JSON_spec_end()
+                               &pc->wire_fee_amortization),
+      GNUNET_JSON_spec_end ()
     };
 
     res = TMH_PARSE_json_data (connection,
@@ -1635,7 +1643,7 @@ parse_pay (struct MHD_Connection *connection,
     const char *exchange_url;
     struct GNUNET_JSON_Specification ispec[] = {
       TALER_JSON_spec_denomination_public_key ("denom_pub",
-                                              &dc->denom),
+                                               &dc->denom),
       TALER_JSON_spec_amount ("contribution",
                               &dc->amount_with_fee),
       GNUNET_JSON_spec_string ("exchange_url",
@@ -1646,7 +1654,7 @@ parse_pay (struct MHD_Connection *connection,
                                               &dc->ub_sig),
       GNUNET_JSON_spec_fixed_auto ("coin_sig",
                                    &dc->coin_sig),
-      GNUNET_JSON_spec_end()
+      GNUNET_JSON_spec_end ()
     };
 
     res = TMH_PARSE_json_data (connection,
@@ -1691,7 +1699,7 @@ check_coin_refunded (void *cls,
 {
   struct PayContext *pc = cls;
 
-  for (unsigned int i=0;i<pc->coins_cnt;i++)
+  for (unsigned int i = 0; i<pc->coins_cnt; i++)
   {
     struct DepositConfirmation *dc = &pc->dc[i];
 
@@ -1726,10 +1734,13 @@ begin_transaction (struct PayContext *pc)
   {
     GNUNET_break (0);
     resume_pay_with_response (pc,
-                             MHD_HTTP_INTERNAL_SERVER_ERROR,
-                             TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
-                                               "code", (json_int_t) 
TALER_EC_PAY_DB_STORE_TRANSACTION_ERROR,
-                                               "hint", "Soft merchant database 
error: retry counter exceeded"));
+                              MHD_HTTP_INTERNAL_SERVER_ERROR,
+                              TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
+                                                           "code",
+                                                           (json_int_t)
+                                                           
TALER_EC_PAY_DB_STORE_TRANSACTION_ERROR,
+                                                           "hint",
+                                                           "Soft merchant 
database error: retry counter exceeded"));
     return;
   }
 
@@ -1903,7 +1914,7 @@ begin_transaction (struct PayContext *pc)
                                "could not create JSON array");
         return;
       }
-      for (unsigned int i=0;i<pc->coins_cnt;i++)
+      for (unsigned int i = 0; i<pc->coins_cnt; i++)
       {
         struct TALER_RefundRequestPS rr;
         struct TALER_MerchantSignatureP msig;
@@ -1944,11 +1955,20 @@ begin_transaction (struct PayContext *pc)
         if (0 !=
             json_array_append_new (refunds,
                                    json_pack ("{s:I, s:o, s:o s:o s:o}",
-                                              "rtransaction_id", (json_int_t) 
rtransactionid,
-                                              "coin_pub", 
GNUNET_JSON_from_data_auto (&rr.coin_pub),
-                                              "merchant_sig", 
GNUNET_JSON_from_data_auto (&msig),
-                                              "refund_amount", 
TALER_JSON_from_amount_nbo (&rr.refund_amount),
-                                              "refund_fee", 
TALER_JSON_from_amount_nbo (&rr.refund_fee))))
+                                              "rtransaction_id",
+                                              (json_int_t) rtransactionid,
+                                              "coin_pub",
+                                              GNUNET_JSON_from_data_auto (
+                                                &rr.coin_pub),
+                                              "merchant_sig",
+                                              GNUNET_JSON_from_data_auto (
+                                                &msig),
+                                              "refund_amount",
+                                              TALER_JSON_from_amount_nbo (
+                                                &rr.refund_amount),
+                                              "refund_fee",
+                                              TALER_JSON_from_amount_nbo (
+                                                &rr.refund_fee))))
         {
           json_decref (refunds);
           GNUNET_break (0);
@@ -1963,9 +1983,9 @@ begin_transaction (struct PayContext *pc)
       /* Resume and send back the response.  */
       resume_pay_with_response
         (pc,
-         MHD_HTTP_OK,
-         TMH_RESPONSE_make_json_pack
-         ("{s:o, s:o, s:o}",
+        MHD_HTTP_OK,
+        TMH_RESPONSE_make_json_pack
+          ("{s:o, s:o, s:o}",
           /* Refunds pack.  */
           "refund_permissions", refunds,
           "merchant_pub",
@@ -2009,10 +2029,10 @@ begin_transaction (struct PayContext *pc)
       }
       resume_pay_with_error
         (pc,
-         MHD_HTTP_INTERNAL_SERVER_ERROR,
-         TALER_EC_PAY_DB_STORE_PAYMENTS_ERROR,
-         "Merchant database error: could not "
-         "mark proposal as 'paid'");
+        MHD_HTTP_INTERNAL_SERVER_ERROR,
+        TALER_EC_PAY_DB_STORE_PAYMENTS_ERROR,
+        "Merchant database error: could not "
+        "mark proposal as 'paid'");
       return;
     }
 
@@ -2040,10 +2060,10 @@ begin_transaction (struct PayContext *pc)
       }
       resume_pay_with_error
         (pc,
-         MHD_HTTP_INTERNAL_SERVER_ERROR,
-         TALER_EC_PAY_DB_STORE_PAYMENTS_ERROR,
-         "Merchant database error: could not "
-         "mark proposal as 'paid'");
+        MHD_HTTP_INTERNAL_SERVER_ERROR,
+        TALER_EC_PAY_DB_STORE_PAYMENTS_ERROR,
+        "Merchant database error: could not "
+        "mark proposal as 'paid'");
       return;
     }
 
@@ -2092,12 +2112,12 @@ handler_pay_json (struct MHD_Connection *connection,
   pc->suspended = GNUNET_YES;
   GNUNET_log
     (GNUNET_ERROR_TYPE_DEBUG,
-     "Suspending /pay handling while working with the exchange\n");
+    "Suspending /pay handling while working with the exchange\n");
 
   pc->timeout_task = GNUNET_SCHEDULER_add_delayed
-    (PAY_TIMEOUT,
-     &handle_pay_timeout,
-     pc);
+                       (PAY_TIMEOUT,
+                       &handle_pay_timeout,
+                       pc);
 
   begin_transaction (pc);
   return MHD_YES;
@@ -2115,8 +2135,7 @@ handler_pay_json (struct MHD_Connection *connection,
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a
  *       upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -2125,7 +2144,7 @@ MH_handler_pay (struct TMH_RequestHandler *rh,
                 void **connection_cls,
                 const char *upload_data,
                 size_t *upload_data_size,
-                const char *instance_id)
+                struct MerchantInstance *mi)
 {
   struct PayContext *pc;
   int res;
@@ -2142,24 +2161,10 @@ MH_handler_pay (struct TMH_RequestHandler *rh,
     pc->hc.cc = &pay_context_cleanup;
     pc->connection = connection;
     *connection_cls = pc;
-    pc->mi = TMH_lookup_instance (instance_id);
-    if (NULL == pc->mi)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Unable to find the specified instance\n");
-      if (MHD_NO ==
-          TMH_RESPONSE_reply_not_found (connection,
-                                    TALER_EC_PAY_INSTANCE_UNKNOWN,
-                                    "Unknown instance given"))
-      {
-        GNUNET_break (0);
-        return GNUNET_SYSERR;
-      }
-      return GNUNET_NO;
-    }
+    pc->mi = mi;
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "/pay: picked instance %s\n",
-                pc->mi->id);
+                mi->id);
 
   }
   else
diff --git a/src/backend/taler-merchant-httpd_pay.h 
b/src/backend/taler-merchant-httpd_pay.h
index cffb13b..78f5d78 100644
--- a/src/backend/taler-merchant-httpd_pay.h
+++ b/src/backend/taler-merchant-httpd_pay.h
@@ -40,8 +40,7 @@ MH_force_pc_resume (void);
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -50,6 +49,6 @@ MH_handler_pay (struct TMH_RequestHandler *rh,
                 void **connection_cls,
                 const char *upload_data,
                 size_t *upload_data_size,
-                const char *instance_id);
+                struct MerchantInstance *mi);
 
 #endif
diff --git a/src/backend/taler-merchant-httpd_proposal.c 
b/src/backend/taler-merchant-httpd_proposal.c
index 7f61d21..aa56e61 100644
--- a/src/backend/taler-merchant-httpd_proposal.c
+++ b/src/backend/taler-merchant-httpd_proposal.c
@@ -79,7 +79,7 @@ check_products (json_t *products)
       /* FIXME: there are other fields in the product specification
          that are currently not labeled as optional. Maybe check
          those as well, or make them truly optional. */
-      GNUNET_JSON_spec_end()
+      GNUNET_JSON_spec_end ()
     };
 
     /* extract fields we need to sign separately */
@@ -191,7 +191,7 @@ proposal_put (struct MHD_Connection *connection,
   {
     char buf[256];
     time_t timer;
-    struct tm* tm_info;
+    struct tm*tm_info;
     size_t off;
     uint64_t rand;
     char *last;
@@ -201,9 +201,9 @@ proposal_put (struct MHD_Connection *connection,
     if (NULL == tm_info)
     {
       return TMH_RESPONSE_reply_internal_error
-        (connection,
-         TALER_EC_PROPOSAL_NO_LOCALTIME,
-         "failed to determine local time");
+               (connection,
+               TALER_EC_PROPOSAL_NO_LOCALTIME,
+               "failed to determine local time");
     }
     off = strftime (buf,
                     sizeof (buf),
@@ -280,9 +280,9 @@ proposal_put (struct MHD_Connection *connection,
   {
     json_object_set_new
       (order,
-       "wire_fee_amortization",
-       json_integer
-         ((json_int_t) default_wire_fee_amortization));
+      "wire_fee_amortization",
+      json_integer
+        ((json_int_t) default_wire_fee_amortization));
   }
 
   if (NULL == json_object_get (order,
@@ -398,9 +398,9 @@ proposal_put (struct MHD_Connection *connection,
   if (GNUNET_SYSERR == res)
   {
     return TMH_RESPONSE_reply_internal_error
-      (connection,
-       TALER_EC_PROPOSAL_ORDER_PARSE_ERROR,
-       "Impossible to parse the order");
+             (connection,
+             TALER_EC_PROPOSAL_ORDER_PARSE_ERROR,
+             "Impossible to parse the order");
   }
 
   /* check contract is well-formed */
@@ -408,9 +408,9 @@ proposal_put (struct MHD_Connection *connection,
   {
     GNUNET_JSON_parse_free (spec);
     return TMH_RESPONSE_reply_arg_invalid
-      (connection,
-       TALER_EC_PARAMETER_MALFORMED,
-       "order:products");
+             (connection,
+             TALER_EC_PARAMETER_MALFORMED,
+             "order:products");
   }
 
   /* add fields to the contract that the backend should provide */
@@ -428,30 +428,28 @@ proposal_put (struct MHD_Connection *connection,
   if (NULL == wm)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "No wire method available for"
-                " instance '%s'\n", mi->id);
+                "No wire method available for instance '%s'\n", mi->id);
     GNUNET_JSON_parse_free (spec);
-    return TMH_RESPONSE_reply_not_found
-      (connection,
-       TALER_EC_CONTRACT_INSTANCE_UNKNOWN,
-       "No wire method configured for instance");
+    return TMH_RESPONSE_reply_not_found (connection,
+                                         
TALER_EC_PROPOSAL_INSTANCE_CONFIGURATION_LACKS_WIRE,
+                                         "No wire method configured for 
instance");
   }
   json_object_set_new (order,
                        "H_wire",
-                      GNUNET_JSON_from_data_auto (&wm->h_wire));
+                       GNUNET_JSON_from_data_auto (&wm->h_wire));
   json_object_set_new (order,
                        "wire_method",
-                      json_string (wm->wire_method));
+                       json_string (wm->wire_method));
   json_object_set_new (order,
                        "merchant_pub",
-                      GNUNET_JSON_from_data_auto (&mi->pubkey));
+                       GNUNET_JSON_from_data_auto (&mi->pubkey));
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Inserting order '%s' for instance '%s'\n",
               order_id,
               mi->id);
 
-  for (unsigned int i=0;i<MAX_RETRIES;i++)
+  for (unsigned int i = 0; i<MAX_RETRIES; i++)
   {
     db->preflight (db->cls);
     qs = db->insert_order (db->cls,
@@ -469,10 +467,10 @@ proposal_put (struct MHD_Connection *connection,
     {
       GNUNET_break (0);
       return TMH_RESPONSE_reply_internal_error
-        (connection,
-         TALER_EC_PROPOSAL_STORE_DB_ERROR_SOFT,
-         "db error: could not check for existing order"
-         " due to repeated soft transaction failure");
+               (connection,
+               TALER_EC_PROPOSAL_STORE_DB_ERROR_SOFT,
+               "db error: could not check for existing order"
+               " due to repeated soft transaction failure");
     }
 
     {
@@ -503,9 +501,9 @@ proposal_put (struct MHD_Connection *connection,
                            JSON_COMPACT);
           GNUNET_log
             (GNUNET_ERROR_TYPE_ERROR,
-             _("Order ID `%s' already exists with proposal `%s'\n"),
-             order_id,
-             js);
+            _ ("Order ID `%s' already exists with proposal `%s'\n"),
+            order_id,
+            js);
           free (js);
         }
         json_decref (contract_terms);
@@ -513,9 +511,9 @@ proposal_put (struct MHD_Connection *connection,
         /* contract_terms may be private, only expose
          * duplicate order_id to the network */
         rv = TMH_RESPONSE_reply_external_error
-          (connection,
-           TALER_EC_PROPOSAL_STORE_DB_ERROR_ALREADY_EXISTS,
-           msg);
+               (connection,
+               TALER_EC_PROPOSAL_STORE_DB_ERROR_ALREADY_EXISTS,
+               msg);
         GNUNET_free (msg);
         return rv;
       }
@@ -524,9 +522,9 @@ proposal_put (struct MHD_Connection *connection,
     /* Other hard transaction error (disk full, etc.) */
     GNUNET_JSON_parse_free (spec);
     return TMH_RESPONSE_reply_internal_error
-      (connection,
-       TALER_EC_PROPOSAL_STORE_DB_ERROR_HARD,
-       "db error: could not store this proposal's data into db");
+             (connection,
+             TALER_EC_PROPOSAL_STORE_DB_ERROR_HARD,
+             "db error: could not store this proposal's data into db");
   }
 
   /* DB transaction succeeded, generate positive response */
@@ -552,8 +550,7 @@ proposal_put (struct MHD_Connection *connection,
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in
  *                @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -562,11 +559,10 @@ MH_handler_proposal_put (struct TMH_RequestHandler *rh,
                          void **connection_cls,
                          const char *upload_data,
                          size_t *upload_data_size,
-                         const char *instance_id)
+                         struct MerchantInstance *mi)
 {
   int res;
   struct TMH_JsonParseContext *ctx;
-  struct MerchantInstance *mi;
   json_t *root;
   json_t *order;
 
@@ -592,24 +588,17 @@ MH_handler_proposal_put (struct TMH_RequestHandler *rh,
 
   /* A error response was already generated */
   if ( (GNUNET_NO == res) ||
-  /* or, need more data to accomplish parsing */
+       /* or, need more data to accomplish parsing */
        (NULL == root) )
     return MHD_YES;
-
-  mi = TMH_lookup_instance (instance_id);
-  if (NULL == mi)
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         TALER_EC_CONTRACT_INSTANCE_UNKNOWN,
-                                         "instance");
-
   order = json_object_get (root,
                            "order");
   if (NULL == order)
   {
     res = TMH_RESPONSE_reply_arg_missing
-      (connection,
-       TALER_EC_PARAMETER_MISSING,
-       "order");
+            (connection,
+            TALER_EC_PARAMETER_MISSING,
+            "order");
   }
   else
     res = proposal_put (connection, order, mi);
@@ -630,8 +619,7 @@ MH_handler_proposal_put (struct TMH_RequestHandler *rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -640,35 +628,29 @@ MH_handler_proposal_lookup (struct TMH_RequestHandler *rh,
                             void **connection_cls,
                             const char *upload_data,
                             size_t *upload_data_size,
-                            const char *instance_id)
+                            struct MerchantInstance *mi)
 {
   const char *order_id;
   const char *nonce;
   int res;
   enum GNUNET_DB_QueryStatus qs;
   json_t *contract_terms;
-  struct MerchantInstance *mi;
   struct GNUNET_CRYPTO_EddsaSignature merchant_sig;
   const char *stored_nonce;
 
-  mi = TMH_lookup_instance (instance_id);
-  if (NULL == mi)
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         TALER_EC_CONTRACT_INSTANCE_UNKNOWN,
-                                         "instance");
   order_id = MHD_lookup_connection_value (connection,
                                           MHD_GET_ARGUMENT_KIND,
                                           "order_id");
   if (NULL == order_id)
     return TMH_RESPONSE_reply_arg_missing (connection,
-                                          TALER_EC_PARAMETER_MISSING,
+                                           TALER_EC_PARAMETER_MISSING,
                                            "order_id");
   nonce = MHD_lookup_connection_value (connection,
                                        MHD_GET_ARGUMENT_KIND,
                                        "nonce");
   if (NULL == nonce)
     return TMH_RESPONSE_reply_arg_missing (connection,
-                                          TALER_EC_PARAMETER_MISSING,
+                                           TALER_EC_PARAMETER_MISSING,
                                            "nonce");
   db->preflight (db->cls);
   qs = db->find_contract_terms (db->cls,
@@ -712,8 +694,8 @@ MH_handler_proposal_lookup (struct TMH_RequestHandler *rh,
 
     /* extract fields we need to sign separately */
     res = TMH_PARSE_json_data (connection,
-                              contract_terms,
-                              spec);
+                               contract_terms,
+                               spec);
     if (GNUNET_NO == res)
     {
       return MHD_YES;
@@ -725,7 +707,7 @@ MH_handler_proposal_lookup (struct TMH_RequestHandler *rh,
                                                 "Impossible to parse the 
order");
     }
 
-    for (unsigned int i=0;i<MAX_RETRIES;i++)
+    for (unsigned int i = 0; i<MAX_RETRIES; i++)
     {
       db->preflight (db->cls);
       qs = db->insert_contract_terms (db->cls,
@@ -764,7 +746,7 @@ MH_handler_proposal_lookup (struct TMH_RequestHandler *rh,
   }
 
   if (0 != strcmp (stored_nonce,
-                  nonce))
+                   nonce))
   {
     return TMH_RESPONSE_reply_bad_request (connection,
                                            TALER_EC_PROPOSAL_LOOKUP_NOT_FOUND,
@@ -799,7 +781,8 @@ MH_handler_proposal_lookup (struct TMH_RequestHandler *rh,
                                       "contract_terms",
                                       contract_terms,
                                       "sig",
-                                      GNUNET_JSON_from_data_auto 
(&merchant_sig));
+                                      GNUNET_JSON_from_data_auto (
+                                        &merchant_sig));
   return res;
 }
 
diff --git a/src/backend/taler-merchant-httpd_proposal.h 
b/src/backend/taler-merchant-httpd_proposal.h
index 137c32a..4edac09 100644
--- a/src/backend/taler-merchant-httpd_proposal.h
+++ b/src/backend/taler-merchant-httpd_proposal.h
@@ -33,8 +33,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -43,7 +42,7 @@ MH_handler_proposal_put (struct TMH_RequestHandler *rh,
                          void **connection_cls,
                          const char *upload_data,
                          size_t *upload_data_size,
-                         const char *instance_id);
+                         struct MerchantInstance *mi);
 
 
 /**
@@ -56,6 +55,7 @@ MH_handler_proposal_put (struct TMH_RequestHandler *rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -64,5 +64,5 @@ MH_handler_proposal_lookup (struct TMH_RequestHandler *rh,
                             void **connection_cls,
                             const char *upload_data,
                             size_t *upload_data_size,
-                            const char *instance_id);
+                            struct MerchantInstance *mi);
 #endif
diff --git a/src/backend/taler-merchant-httpd_refund.c 
b/src/backend/taler-merchant-httpd_refund.c
index a20149a..a9d8ab1 100644
--- a/src/backend/taler-merchant-httpd_refund.c
+++ b/src/backend/taler-merchant-httpd_refund.c
@@ -49,7 +49,7 @@ struct ProcessRefundData
   /**
    * Both public and private key are needed by the callback
    */
-   const struct MerchantInstance *merchant;
+  const struct MerchantInstance *merchant;
 
   /**
    * Return code: #TALER_EC_NONE if successful.
@@ -85,7 +85,7 @@ struct TMH_JsonParseContext
  * @param order_id order ID to show a refund for
  * @returns the URI, must be freed with #GNUNET_free
  */
-char *
+static char *
 make_taler_refund_uri (struct MHD_Connection *connection,
                        const char *instance_id,
                        const char *order_id)
@@ -155,8 +155,7 @@ json_parse_cleanup (struct TM_HandlerContext *hc)
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -165,7 +164,7 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh,
                             void **connection_cls,
                             const char *upload_data,
                             size_t *upload_data_size,
-                            const char *instance_id)
+                            struct MerchantInstance *mi)
 {
   int res;
   struct TMH_JsonParseContext *ctx;
@@ -174,7 +173,6 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh,
   json_t *contract_terms;
   const char *order_id;
   const char *reason;
-  struct MerchantInstance *mi;
   struct GNUNET_HashCode h_contract_terms;
   struct TALER_MerchantRefundConfirmationPS confirmation;
   struct GNUNET_CRYPTO_EddsaSignature sig;
@@ -227,19 +225,6 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh,
     return MHD_NO;
   }
 
-  mi = TMH_lookup_instance (instance_id);
-  if (NULL == mi)
-  {
-    GNUNET_assert (NULL != instance_id);
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Instance '%s' not found\n", instance_id);
-    GNUNET_JSON_parse_free (spec);
-    json_decref (root);
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         TALER_EC_REFUND_INSTANCE_UNKNOWN,
-                                         "Unknown instance given");
-  }
-
   db->preflight (db->cls);
   /* Convert order id to h_contract_terms */
   qs = db->find_contract_terms (db->cls,
@@ -283,7 +268,7 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh,
                                               TALER_EC_INTERNAL_LOGIC_ERROR,
                                               "Could not hash contract terms");
   }
-  for (unsigned int i=0;i<MAX_RETRIES;i++)
+  for (unsigned int i = 0; i<MAX_RETRIES; i++)
   {
     if (GNUNET_OK !=
         db->start (db->cls,
@@ -366,7 +351,8 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh,
    * the information needed to generate the right response.
    */
   confirmation.purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_REFUND_OK);
-  confirmation.purpose.size = htonl (sizeof (struct 
TALER_MerchantRefundConfirmationPS));
+  confirmation.purpose.size = htonl (sizeof (struct
+                                             
TALER_MerchantRefundConfirmationPS));
   GNUNET_CRYPTO_hash (order_id,
                       strlen (order_id),
                       &confirmation.h_order_id);
@@ -451,8 +437,8 @@ process_refunds_cb (void *cls,
 
   if (GNUNET_OK !=
       GNUNET_CRYPTO_eddsa_sign (&prd->merchant->privkey.eddsa_priv,
-                               &rr.purpose,
-                               &sig))
+                                &rr.purpose,
+                                &sig))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Could not sign refund request\n");
@@ -493,8 +479,7 @@ process_refunds_cb (void *cls,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -503,27 +488,13 @@ MH_handler_refund_lookup (struct TMH_RequestHandler *rh,
                           void **connection_cls,
                           const char *upload_data,
                           size_t *upload_data_size,
-                          const char *instance_id)
+                          struct MerchantInstance *mi)
 {
   const char *order_id;
   struct GNUNET_HashCode h_contract_terms;
   json_t *contract_terms;
-  struct MerchantInstance *mi;
   enum GNUNET_DB_QueryStatus qs;
 
-  mi = TMH_lookup_instance (instance_id);
-
-  if (NULL == mi)
-  {
-    GNUNET_assert (NULL != instance_id);
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Unknown instance given: %s\n",
-                instance_id);
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         TALER_EC_REFUND_INSTANCE_UNKNOWN,
-                                         "Unknown instance given");
-  }
-
   order_id = MHD_lookup_connection_value (connection,
                                           MHD_GET_ARGUMENT_KIND,
                                           "order_id");
@@ -532,7 +503,7 @@ MH_handler_refund_lookup (struct TMH_RequestHandler *rh,
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Argument 'order_id' not given\n");
     return TMH_RESPONSE_reply_arg_missing (connection,
-                                          TALER_EC_PARAMETER_MISSING,
+                                           TALER_EC_PARAMETER_MISSING,
                                            "order_id");
   }
 
@@ -597,9 +568,11 @@ MH_handler_refund_lookup (struct TMH_RequestHandler *rh,
                                          "refund_permissions",
                                          response,
                                          "merchant_pub",
-                                         GNUNET_JSON_from_data_auto 
(&mi->pubkey),
+                                         GNUNET_JSON_from_data_auto (
+                                           &mi->pubkey),
                                          "h_contract_terms",
-                                         GNUNET_JSON_from_data_auto 
(&h_contract_terms));
+                                         GNUNET_JSON_from_data_auto (
+                                           &h_contract_terms));
   }
 }
 
@@ -627,7 +600,7 @@ TM_get_refund_json (const struct MerchantInstance *mi,
   prd.merchant = mi;
   prd.ec = TALER_EC_NONE;
   db->preflight (db->cls);
-  for (unsigned int i=0;i<MAX_RETRIES;i++)
+  for (unsigned int i = 0; i<MAX_RETRIES; i++)
   {
     qs = db->get_refunds_from_contract_terms_hash (db->cls,
                                                    &mi->pubkey,
@@ -645,7 +618,7 @@ TM_get_refund_json (const struct MerchantInstance *mi,
     json_decref (prd.response);
     *ret_ec = TALER_EC_REFUND_LOOKUP_DB_ERROR;
     *ret_errmsg = ("database hard error: looking for "
-                  "h_contract_terms in merchant_refunds table");
+                   "h_contract_terms in merchant_refunds table");
   }
   if (TALER_EC_NONE != prd.ec)
   {
diff --git a/src/backend/taler-merchant-httpd_refund.h 
b/src/backend/taler-merchant-httpd_refund.h
index eadd24a..9713adb 100644
--- a/src/backend/taler-merchant-httpd_refund.h
+++ b/src/backend/taler-merchant-httpd_refund.h
@@ -34,8 +34,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -44,7 +43,7 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh,
                             void **connection_cls,
                             const char *upload_data,
                             size_t *upload_data_size,
-                            const char *instance_id);
+                            struct MerchantInstance *mi);
 
 
 /**
@@ -55,8 +54,7 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -65,7 +63,7 @@ MH_handler_refund_lookup (struct TMH_RequestHandler *rh,
                           void **connection_cls,
                           const char *upload_data,
                           size_t *upload_data_size,
-                          const char *instance_id);
+                          struct MerchantInstance *mi);
 
 /**
  * Get the JSON representation of a refund.
@@ -82,4 +80,4 @@ TM_get_refund_json (const struct MerchantInstance *mi,
                     enum TALER_ErrorCode *ret_ec,
                     const char **ret_errmsg);
 
-#endif                          
+#endif
diff --git a/src/backend/taler-merchant-httpd_tip-authorize.c 
b/src/backend/taler-merchant-httpd_tip-authorize.c
index 1a79d77..67c4a6e 100644
--- a/src/backend/taler-merchant-httpd_tip-authorize.c
+++ b/src/backend/taler-merchant-httpd_tip-authorize.c
@@ -107,8 +107,7 @@ cleanup_tac (struct TM_HandlerContext *hc)
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -117,11 +116,10 @@ MH_handler_tip_authorize (struct TMH_RequestHandler *rh,
                           void **connection_cls,
                           const char *upload_data,
                           size_t *upload_data_size,
-                          const char *instance_id)
+                          struct MerchantInstance *mi)
 {
   struct TipAuthContext *tac;
   int res;
-  struct MerchantInstance *mi;
   enum TALER_ErrorCode ec;
   struct GNUNET_TIME_Absolute expiration;
   struct GNUNET_HashCode tip_id;
@@ -152,7 +150,7 @@ MH_handler_tip_authorize (struct TMH_RequestHandler *rh,
     struct GNUNET_JSON_Specification spec[] = {
       TALER_JSON_spec_amount ("amount", &tac->amount),
       GNUNET_JSON_spec_string ("justification", &tac->justification),
-      GNUNET_JSON_spec_end()
+      GNUNET_JSON_spec_end ()
     };
 
     res = TMH_PARSE_post_json (connection,
@@ -178,22 +176,11 @@ MH_handler_tip_authorize (struct TMH_RequestHandler *rh,
     tac->parsed_json = GNUNET_YES;
   }
 
-  mi = TMH_lookup_instance (instance_id);
-  if (NULL == mi)
-  {
-    GNUNET_assert (NULL != instance_id);
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "Instance `%s' not configured\n",
-                instance_id);
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         
TALER_EC_TIP_AUTHORIZE_INSTANCE_UNKNOWN,
-                                         "unknown instance");
-  }
   if (NULL == mi->tip_exchange)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                 "Instance `%s' not configured for tipping\n",
-                (NULL != instance_id) ? instance_id : "default");
+                mi->id);
     return TMH_RESPONSE_reply_not_found (connection,
                                          
TALER_EC_TIP_AUTHORIZE_INSTANCE_DOES_NOT_TIP,
                                          "exchange for tipping not configured 
for the instance");
@@ -275,7 +262,7 @@ MH_handler_tip_authorize (struct TMH_RequestHandler *rh,
                                                   "X-Forwarded-Host");
 
     uri_path = MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
-                                        "X-Forwarded-Prefix");
+                                            "X-Forwarded-Prefix");
     if (NULL == uri_path)
       uri_path = "-";
 
@@ -286,7 +273,8 @@ MH_handler_tip_authorize (struct TMH_RequestHandler *rh,
     {
       /* Should never happen, at last the host header should be defined */
       GNUNET_break (0);
-      return TMH_RESPONSE_reply_internal_error (connection, 0, "unable to 
identify backend host");
+      return TMH_RESPONSE_reply_internal_error (connection, 0,
+                                                "unable to identify backend 
host");
     }
 
     if (0 == strcmp (mi->id, "default"))
@@ -297,11 +285,11 @@ MH_handler_tip_authorize (struct TMH_RequestHandler *rh,
     GNUNET_CRYPTO_hash_to_enc (&tip_id, &hash_enc);
 
     GNUNET_assert (0 < GNUNET_asprintf (&taler_tip_uri,
-                                         "taler://tip/%s/%s/%s/%s",
-                                         host,
-                                         uri_path,
-                                         uri_instance_id,
-                                         hash_enc.encoding));
+                                        "taler://tip/%s/%s/%s/%s",
+                                        host,
+                                        uri_path,
+                                        uri_instance_id,
+                                        hash_enc.encoding));
 
 
     res = TMH_RESPONSE_reply_json_pack (connection,
diff --git a/src/backend/taler-merchant-httpd_tip-authorize.h 
b/src/backend/taler-merchant-httpd_tip-authorize.h
index 025b958..8706d64 100644
--- a/src/backend/taler-merchant-httpd_tip-authorize.h
+++ b/src/backend/taler-merchant-httpd_tip-authorize.h
@@ -32,8 +32,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -42,6 +41,6 @@ MH_handler_tip_authorize (struct TMH_RequestHandler *rh,
                           void **connection_cls,
                           const char *upload_data,
                           size_t *upload_data_size,
-                          const char *instance_id);
+                          struct MerchantInstance *mi);
 
 #endif
diff --git a/src/backend/taler-merchant-httpd_tip-pickup.c 
b/src/backend/taler-merchant-httpd_tip-pickup.c
index 6232c4b..bead341 100644
--- a/src/backend/taler-merchant-httpd_tip-pickup.c
+++ b/src/backend/taler-merchant-httpd_tip-pickup.c
@@ -151,7 +151,7 @@ pickup_cleanup (struct TM_HandlerContext *hc)
 
   if (NULL != pc->planchets)
   {
-    for (unsigned int i=0;i<pc->planchets_len;i++)
+    for (unsigned int i = 0; i<pc->planchets_len; i++)
       GNUNET_free_non_null (pc->planchets[i].coin_ev);
     GNUNET_free (pc->planchets);
     pc->planchets = NULL;
@@ -237,21 +237,22 @@ run_pickup (struct MHD_Connection *connection,
   }
   GNUNET_CRYPTO_eddsa_key_get_public (&reserve_priv.eddsa_priv,
                                       &reserve_pub.eddsa_pub);
-  for (unsigned int i=0;i<pc->planchets_len;i++)
+  for (unsigned int i = 0; i<pc->planchets_len; i++)
   {
     struct PlanchetDetail *pd = &pc->planchets[i];
     struct TALER_ReserveSignatureP reserve_sig;
 
     pd->wr.reserve_pub = reserve_pub;
     GNUNET_assert (GNUNET_OK ==
-                  GNUNET_CRYPTO_eddsa_sign (&reserve_priv.eddsa_priv,
-                                            &pd->wr.purpose,
-                                            &reserve_sig.eddsa_signature));
+                   GNUNET_CRYPTO_eddsa_sign (&reserve_priv.eddsa_priv,
+                                             &pd->wr.purpose,
+                                             &reserve_sig.eddsa_signature));
     if (0 !=
         json_array_append_new (sigs,
                                json_pack ("{s:o}",
                                           "reserve_sig",
-                                          GNUNET_JSON_from_data_auto 
(&reserve_sig))))
+                                          GNUNET_JSON_from_data_auto (
+                                            &reserve_sig))))
     {
       GNUNET_break (0);
       json_decref (sigs);
@@ -264,8 +265,10 @@ run_pickup (struct MHD_Connection *connection,
   return TMH_RESPONSE_reply_json_pack (connection,
                                        MHD_HTTP_OK,
                                        "{s:o, s:o}",
-                                       "reserve_pub", 
GNUNET_JSON_from_data_auto (&reserve_pub),
-                                      "reserve_sigs", sigs);
+                                       "reserve_pub",
+                                       GNUNET_JSON_from_data_auto (
+                                         &reserve_pub),
+                                       "reserve_sigs", sigs);
 }
 
 
@@ -304,7 +307,8 @@ exchange_found_cb (void *cls,
   if (NULL == keys)
   {
     pc->ec = TALER_EC_TIP_PICKUP_EXCHANGE_LACKED_KEYS;
-    pc->error_hint = "could not obtain denomination keys from exchange, check 
URL";
+    pc->error_hint =
+      "could not obtain denomination keys from exchange, check URL";
     pc->response_code = MHD_HTTP_FAILED_DEPENDENCY;
     TMH_trigger_daemon ();
     return;
@@ -318,7 +322,7 @@ exchange_found_cb (void *cls,
               "Calculating tip amount over %u planchets!\n",
               pc->planchets_len);
   hc = GNUNET_CRYPTO_hash_context_start ();
-  for (unsigned int i=0;i<pc->planchets_len;i++)
+  for (unsigned int i = 0; i<pc->planchets_len; i++)
   {
     struct PlanchetDetail *pd = &pc->planchets[i];
     const struct TALER_EXCHANGE_DenomPublicKey *dk;
@@ -468,7 +472,7 @@ parse_planchet (struct MHD_Connection *connection,
     GNUNET_JSON_spec_varsize ("coin_ev",
                               (void **) &pd->coin_ev,
                               &pd->coin_ev_size),
-    GNUNET_JSON_spec_end()
+    GNUNET_JSON_spec_end ()
   };
 
   ret = TMH_PARSE_json_data (connection,
@@ -494,8 +498,7 @@ parse_planchet (struct MHD_Connection *connection,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -504,7 +507,7 @@ MH_handler_tip_pickup (struct TMH_RequestHandler *rh,
                        void **connection_cls,
                        const char *upload_data,
                        size_t *upload_data_size,
-                       const char *instance_id)
+                       struct MerchantInstance *mi)
 {
   int res;
   struct GNUNET_HashCode tip_id;
@@ -514,7 +517,7 @@ MH_handler_tip_pickup (struct TMH_RequestHandler *rh,
                                  &tip_id),
     GNUNET_JSON_spec_json ("planchets",
                            &planchets),
-    GNUNET_JSON_spec_end()
+    GNUNET_JSON_spec_end ()
   };
   struct PickupContext *pc;
   json_t *root;
@@ -581,7 +584,7 @@ MH_handler_tip_pickup (struct TMH_RequestHandler *rh,
   db->preflight (db->cls);
   pc->planchets = GNUNET_new_array (pc->planchets_len,
                                     struct PlanchetDetail);
-  for (unsigned int i=0;i<pc->planchets_len;i++)
+  for (unsigned int i = 0; i<pc->planchets_len; i++)
   {
     if (GNUNET_OK !=
         (res = parse_planchet (connection,
@@ -611,8 +614,7 @@ MH_handler_tip_pickup (struct TMH_RequestHandler *rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -621,9 +623,8 @@ MH_handler_tip_pickup_get (struct TMH_RequestHandler *rh,
                            void **connection_cls,
                            const char *upload_data,
                            size_t *upload_data_size,
-                           const char *instance_id)
+                           struct MerchantInstance *mi)
 {
-  struct MerchantInstance *mi;
   const char *tip_id_str;
   char *exchange_url;
   json_t *extra;
@@ -635,12 +636,6 @@ MH_handler_tip_pickup_get (struct TMH_RequestHandler *rh,
   int ret;
   int qs;
 
-  mi = TMH_lookup_instance (instance_id);
-  if (NULL == mi)
-    return TMH_RESPONSE_reply_bad_request (connection,
-                                           TALER_EC_TIP_INSTANCE_UNKNOWN,
-                                           "merchant instance unknown");
-
   tip_id_str = MHD_lookup_connection_value (connection,
                                             MHD_GET_ARGUMENT_KIND,
                                             "tip_id");
@@ -703,16 +698,22 @@ MH_handler_tip_pickup_get (struct TMH_RequestHandler *rh,
                                   "Could not determine exchange URL for the 
given tip id");
   }
 
-  timestamp_expire = GNUNET_TIME_absolute_add (timestamp, 
GNUNET_TIME_UNIT_DAYS);
+  timestamp_expire = GNUNET_TIME_absolute_add (timestamp,
+                                               GNUNET_TIME_UNIT_DAYS);
 
   ret = TMH_RESPONSE_reply_json_pack (connection,
                                       MHD_HTTP_OK,
                                       "{s:s, s:o, s:o, s:o, s:o, s:o}",
                                       "exchange_url", exchange_url,
-                                      "amount", TALER_JSON_from_amount 
(&tip_amount),
-                                      "amount_left", TALER_JSON_from_amount 
(&tip_amount_left),
-                                      "stamp_created", 
GNUNET_JSON_from_time_abs (timestamp),
-                                      "stamp_expire", 
GNUNET_JSON_from_time_abs (timestamp_expire),
+                                      "amount", TALER_JSON_from_amount (
+                                        &tip_amount),
+                                      "amount_left", TALER_JSON_from_amount (
+                                        &tip_amount_left),
+                                      "stamp_created",
+                                      GNUNET_JSON_from_time_abs (timestamp),
+                                      "stamp_expire",
+                                      GNUNET_JSON_from_time_abs (
+                                        timestamp_expire),
                                       "extra", extra);
 
   GNUNET_free (exchange_url);
diff --git a/src/backend/taler-merchant-httpd_tip-pickup.h 
b/src/backend/taler-merchant-httpd_tip-pickup.h
index f0e9733..3ca15bb 100644
--- a/src/backend/taler-merchant-httpd_tip-pickup.h
+++ b/src/backend/taler-merchant-httpd_tip-pickup.h
@@ -32,8 +32,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+* @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -42,7 +41,8 @@ MH_handler_tip_pickup (struct TMH_RequestHandler *rh,
                        void **connection_cls,
                        const char *upload_data,
                        size_t *upload_data_size,
-                       const char *instance_id);
+                       struct MerchantInstance *mi);
+
 
 /**
  * Manages a GET /tip-pickup call.
@@ -52,8 +52,7 @@ MH_handler_tip_pickup (struct TMH_RequestHandler *rh,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -62,7 +61,7 @@ MH_handler_tip_pickup_get (struct TMH_RequestHandler *rh,
                            void **connection_cls,
                            const char *upload_data,
                            size_t *upload_data_size,
-                           const char *instance_id);
+                           struct MerchantInstance *mi);
 
 
 #endif
diff --git a/src/backend/taler-merchant-httpd_tip-query.c 
b/src/backend/taler-merchant-httpd_tip-query.c
index bd61a3e..d54625c 100644
--- a/src/backend/taler-merchant-httpd_tip-query.c
+++ b/src/backend/taler-merchant-httpd_tip-query.c
@@ -112,15 +112,20 @@ generate_final_response (struct TipQueryContext *tqc)
                                        MHD_HTTP_OK,
                                        "{s:o, s:o, s:o, s:o, s:o}",
                                        "reserve_pub",
-                                       GNUNET_JSON_from_data_auto 
(&reserve_pub),
+                                       GNUNET_JSON_from_data_auto (
+                                         &reserve_pub),
                                        "reserve_expiration",
-                                       GNUNET_JSON_from_time_abs 
(tqc->ctr.reserve_expiration),
+                                       GNUNET_JSON_from_time_abs (
+                                         tqc->ctr.reserve_expiration),
                                        "amount_authorized",
-                                       TALER_JSON_from_amount 
(&tqc->ctr.amount_authorized),
+                                       TALER_JSON_from_amount (
+                                         &tqc->ctr.amount_authorized),
                                        "amount_picked_up",
-                                       TALER_JSON_from_amount 
(&tqc->ctr.amount_withdrawn),
+                                       TALER_JSON_from_amount (
+                                         &tqc->ctr.amount_withdrawn),
                                        "amount_available",
-                                       TALER_JSON_from_amount 
(&amount_available));
+                                       TALER_JSON_from_amount (
+                                         &amount_available));
 }
 
 
@@ -132,8 +137,7 @@ generate_final_response (struct TipQueryContext *tqc)
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -142,10 +146,9 @@ MH_handler_tip_query (struct TMH_RequestHandler *rh,
                       void **connection_cls,
                       const char *upload_data,
                       size_t *upload_data_size,
-                      const char *instance_id)
+                      struct MerchantInstance *mi)
 {
   struct TipQueryContext *tqc;
-  struct MerchantInstance *mi;
 
   if (NULL == *connection_cls)
   {
@@ -188,23 +191,11 @@ MH_handler_tip_query (struct TMH_RequestHandler *rh,
     return generate_final_response (tqc);
   }
 
-
-  mi = TMH_lookup_instance (instance_id);
-  if (NULL == mi)
-  {
-    GNUNET_assert (NULL != instance_id);
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "Instance `%s' not configured\n",
-                instance_id);
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         
TALER_EC_TIP_AUTHORIZE_INSTANCE_UNKNOWN,
-                                         "unknown instance");
-  }
   if (NULL == mi->tip_exchange)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                 "Instance `%s' not configured for tipping\n",
-                instance_id);
+                mi->id);
     return TMH_RESPONSE_reply_not_found (connection,
                                          
TALER_EC_TIP_AUTHORIZE_INSTANCE_DOES_NOT_TIP,
                                          "exchange for tipping not configured 
for the instance");
@@ -213,7 +204,7 @@ MH_handler_tip_query (struct TMH_RequestHandler *rh,
 
   {
     int qs;
-    for (unsigned int i=0;i<MAX_RETRIES;i++)
+    for (unsigned int i = 0; i<MAX_RETRIES; i++)
     {
       db->preflight (db->cls);
       qs = db->get_authorized_tip_amount (db->cls,
diff --git a/src/backend/taler-merchant-httpd_tip-query.h 
b/src/backend/taler-merchant-httpd_tip-query.h
index 10b1e1b..257aaf7 100644
--- a/src/backend/taler-merchant-httpd_tip-query.h
+++ b/src/backend/taler-merchant-httpd_tip-query.h
@@ -31,8 +31,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -41,6 +40,6 @@ MH_handler_tip_query (struct TMH_RequestHandler *rh,
                       void **connection_cls,
                       const char *upload_data,
                       size_t *upload_data_size,
-                      const char *instance_id);
+                      struct MerchantInstance *mi);
 
 #endif
diff --git a/src/backend/taler-merchant-httpd_track-transaction.c 
b/src/backend/taler-merchant-httpd_track-transaction.c
index 1376aa9..b8fe42b 100644
--- a/src/backend/taler-merchant-httpd_track-transaction.c
+++ b/src/backend/taler-merchant-httpd_track-transaction.c
@@ -75,7 +75,8 @@ extern struct GNUNET_CONTAINER_MultiHashMap *by_id_map;
 /**
  * How long to wait before giving up processing with the exchange?
  */
-#define TRACK_TIMEOUT (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 30))
+#define TRACK_TIMEOUT (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, \
+                                                      30))
 
 /**
  * How often do we retry the simple INSERT database transaction?
@@ -99,12 +100,12 @@ make_track_transaction_ok (unsigned int num_transfers,
   struct TALER_Amount sum;
 
   j_transfers = json_array ();
-  for (unsigned int i=0;i<num_transfers;i++)
+  for (unsigned int i = 0; i<num_transfers; i++)
   {
     const struct TransactionWireTransfer *transfer = &transfers[i];
 
     sum = transfer->coins[0].amount_with_fee;
-    for (unsigned int j=1;j<transfer->num_coins;j++)
+    for (unsigned int j = 1; j<transfer->num_coins; j++)
     {
       const struct TALER_MERCHANT_CoinWireTransfer *coin = &transfer->coins[j];
 
@@ -117,10 +118,17 @@ make_track_transaction_ok (unsigned int num_transfers,
     GNUNET_assert (0 ==
                    json_array_append_new (j_transfers,
                                           json_pack ("{s:s, s:o, s:o, s:o}",
-                                                     "exchange", 
transfer->exchange_url,
-                                                     "wtid", 
GNUNET_JSON_from_data_auto (&transfer->wtid),
-                                                     "execution_time", 
GNUNET_JSON_from_time_abs (transfer->execution_time),
-                                                     "amount", 
TALER_JSON_from_amount (&sum))));
+                                                     "exchange",
+                                                     transfer->exchange_url,
+                                                     "wtid",
+                                                     
GNUNET_JSON_from_data_auto (
+                                                       &transfer->wtid),
+                                                     "execution_time",
+                                                     GNUNET_JSON_from_time_abs 
(
+                                                       
transfer->execution_time),
+                                                     "amount",
+                                                     TALER_JSON_from_amount (
+                                                       &sum))));
   }
   ret = TMH_RESPONSE_make_json (j_transfers);
   json_decref (j_transfers);
@@ -462,15 +470,18 @@ wire_deposits_cb (void *cls,
     GNUNET_break_op (0);
     resume_track_transaction_with_response
       (tctx,
-       MHD_HTTP_FAILED_DEPENDENCY,
-       TMH_RESPONSE_make_json_pack ("{s:I, s:I, s:I, s:O}",
-                                    "code", (json_int_t) 
TALER_EC_TRACK_TRANSACTION_WIRE_TRANSFER_TRACE_ERROR,
-                                    "exchange-http-status", (json_int_t) 
http_status,
-                                    "exchange-code", (json_int_t) ec,
-                                    "details", json));
+      MHD_HTTP_FAILED_DEPENDENCY,
+      TMH_RESPONSE_make_json_pack ("{s:I, s:I, s:I, s:O}",
+                                   "code",
+                                   (json_int_t)
+                                   
TALER_EC_TRACK_TRANSACTION_WIRE_TRANSFER_TRACE_ERROR,
+                                   "exchange-http-status",
+                                   (json_int_t) http_status,
+                                   "exchange-code", (json_int_t) ec,
+                                   "details", json));
     return;
   }
-  for (unsigned int i=0;i<MAX_RETRIES;i++)
+  for (unsigned int i = 0; i<MAX_RETRIES; i++)
   {
     db->preflight (db->cls);
     qs = db->store_transfer_to_proof (db->cls,
@@ -492,13 +503,13 @@ wire_deposits_cb (void *cls,
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Failed to store transfer-to-proof mapping in DB\n");
   }
-  for (struct TrackCoinContext *tcc=tctx->tcc_head;
+  for (struct TrackCoinContext *tcc = tctx->tcc_head;
        NULL != tcc;
-       tcc=tcc->next)
+       tcc = tcc->next)
   {
     if (GNUNET_YES == tcc->have_wtid)
       continue;
-    for (unsigned int d=0;d<details_length;d++)
+    for (unsigned int d = 0; d<details_length; d++)
     {
 
       if (0 == GNUNET_memcmp (&details[d].coin_pub,
@@ -509,7 +520,7 @@ wire_deposits_cb (void *cls,
         tcc->have_wtid = GNUNET_YES;
       }
 
-      for (unsigned int i=0;i<MAX_RETRIES;i++)
+      for (unsigned int i = 0; i<MAX_RETRIES; i++)
       {
         db->preflight (db->cls);
         qs = db->store_coin_to_transfer (db->cls,
@@ -521,11 +532,11 @@ wire_deposits_cb (void *cls,
       }
       if (0 > qs)
       {
-       /* Not good, but not fatal either, log error and continue */
-       /* Special report if retries insufficient */
-       GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
-       /* Always report on hard error as well to enable diagnostics */
-       GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+        /* Not good, but not fatal either, log error and continue */
+        /* Special report if retries insufficient */
+        GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
+        /* Always report on hard error as well to enable diagnostics */
+        GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
         GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                     "Failed to store coin-to-transfer mapping in DB\n");
       }
@@ -613,9 +624,9 @@ wtid_cb (void *cls,
     {
       resume_track_transaction_with_response
         (tcc->tctx,
-         MHD_HTTP_ACCEPTED,
-         /* Return verbatim what the exchange said.  */
-         TMH_RESPONSE_make_json (json));
+        MHD_HTTP_ACCEPTED,
+        /* Return verbatim what the exchange said.  */
+        TMH_RESPONSE_make_json (json));
 
       return;
     }
@@ -624,17 +635,17 @@ wtid_cb (void *cls,
        coins, report error! */
     resume_track_transaction_with_response
       (tcc->tctx,
-       MHD_HTTP_FAILED_DEPENDENCY,
-       TMH_RESPONSE_make_json_pack
-         ("{s:I, s:I, s:I, s:O}",
-          "code",
-          (json_int_t) TALER_EC_TRACK_TRANSACTION_COIN_TRACE_ERROR,
-          "exchange-http-status",
-          (json_int_t) http_status,
-          "exchange-code",
-          (json_int_t) ec,
-          "details",
-          json));
+      MHD_HTTP_FAILED_DEPENDENCY,
+      TMH_RESPONSE_make_json_pack
+        ("{s:I, s:I, s:I, s:O}",
+        "code",
+        (json_int_t) TALER_EC_TRACK_TRANSACTION_COIN_TRACE_ERROR,
+        "exchange-http-status",
+        (json_int_t) http_status,
+        "exchange-code",
+        (json_int_t) ec,
+        "details",
+        json));
 
     return;
   }
@@ -659,10 +670,10 @@ wtid_cb (void *cls,
     GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
     resume_track_transaction_with_response
       (tcc->tctx,
-       MHD_HTTP_INTERNAL_SERVER_ERROR,
-       TMH_RESPONSE_make_error
-         (TALER_EC_TRACK_TRANSACTION_DB_FETCH_FAILED,
-          "Fail to query database about proofs"));
+      MHD_HTTP_INTERNAL_SERVER_ERROR,
+      TMH_RESPONSE_make_error
+        (TALER_EC_TRACK_TRANSACTION_DB_FETCH_FAILED,
+        "Fail to query database about proofs"));
     return;
   }
 
@@ -675,13 +686,17 @@ wtid_cb (void *cls,
     GNUNET_break_op (0);
     resume_track_transaction_with_response
       (tcc->tctx,
-       MHD_HTTP_FAILED_DEPENDENCY,
-       TMH_RESPONSE_make_json_pack ("{s:I, s:s, s:O, s:o, s:o}",
-                                   "code", (json_int_t) 
TALER_EC_TRACK_TRANSACTION_CONFLICTING_REPORTS,
-                                    "error", "conflicting transfer data from 
exchange",
-                                    "transaction_tracking_claim", json,
-                                    "wtid_tracking_claim", pcc.p_ret,
-                                    "coin_pub", GNUNET_JSON_from_data_auto 
(&tcc->coin_pub)));
+      MHD_HTTP_FAILED_DEPENDENCY,
+      TMH_RESPONSE_make_json_pack ("{s:I, s:s, s:O, s:o, s:o}",
+                                   "code",
+                                   (json_int_t)
+                                   
TALER_EC_TRACK_TRANSACTION_CONFLICTING_REPORTS,
+                                   "error",
+                                   "conflicting transfer data from exchange",
+                                   "transaction_tracking_claim", json,
+                                   "wtid_tracking_claim", pcc.p_ret,
+                                   "coin_pub", GNUNET_JSON_from_data_auto (
+                                     &tcc->coin_pub)));
     return;
   }
 
@@ -712,8 +727,8 @@ generate_response (struct TrackTransactionContext *tctx)
     int found = GNUNET_NO;
 
     for (struct TrackCoinContext *tcc2 = tctx->tcc_head;
-        tcc2 != tcc;
-        tcc2 = tcc2->next)
+         tcc2 != tcc;
+         tcc2 = tcc2->next)
     {
       if (0 == GNUNET_memcmp (&tcc->wtid,
                               &tcc2->wtid))
@@ -739,8 +754,8 @@ generate_response (struct TrackTransactionContext *tctx)
       int found = GNUNET_NO;
 
       for (struct TrackCoinContext *tcc2 = tctx->tcc_head;
-          tcc2 != tcc;
-          tcc2 = tcc2->next)
+           tcc2 != tcc;
+           tcc2 = tcc2->next)
       {
         if (0 == GNUNET_memcmp (&tcc->wtid,
                                 &tcc2->wtid))
@@ -756,13 +771,13 @@ generate_response (struct TrackTransactionContext *tctx)
 
         wt = &wts[wtid_off++];
         wt->wtid = tcc->wtid;
-       wt->exchange_url = tcc->exchange_url;
+        wt->exchange_url = tcc->exchange_url;
         wt->execution_time = tcc->execution_time;
         /* count number of coins with this wtid */
         num_coins = 0;
         for (struct TrackCoinContext *tcc2 = tctx->tcc_head;
-            NULL != tcc2;
-            tcc2 = tcc2->next)
+             NULL != tcc2;
+             tcc2 = tcc2->next)
         {
           if (0 == GNUNET_memcmp (&wt->wtid,
                                   &tcc2->wtid))
@@ -774,13 +789,14 @@ generate_response (struct TrackTransactionContext *tctx)
                                       struct TALER_MERCHANT_CoinWireTransfer);
         num_coins = 0;
         for (struct TrackCoinContext *tcc2 = tctx->tcc_head;
-            NULL != tcc2;
-            tcc2 = tcc2->next)
+             NULL != tcc2;
+             tcc2 = tcc2->next)
         {
           if (0 == GNUNET_memcmp (&wt->wtid,
                                   &tcc2->wtid))
           {
-            struct TALER_MERCHANT_CoinWireTransfer *coin = 
&wt->coins[num_coins++];
+            struct TALER_MERCHANT_CoinWireTransfer *coin =
+              &wt->coins[num_coins++];
 
             coin->coin_pub = tcc2->coin_pub;
             coin->amount_with_fee = tcc2->amount_with_fee;
@@ -792,8 +808,8 @@ generate_response (struct TrackTransactionContext *tctx)
     GNUNET_assert (wtid_off == num_wtid);
 
     resp = make_track_transaction_ok (num_wtid,
-                                     wts);
-    for (wtid_off=0;wtid_off < num_wtid; wtid_off++)
+                                      wts);
+    for (wtid_off = 0; wtid_off < num_wtid; wtid_off++)
       GNUNET_free (wts[wtid_off].coins);
     resume_track_transaction_with_response (tctx,
                                             MHD_HTTP_OK,
@@ -835,7 +851,7 @@ trace_coins (struct TrackTransactionContext *tctx)
   if (NULL != tcc)
   {
     if (0 != strcmp (tcc->exchange_url,
-                    tctx->current_exchange))
+                     tctx->current_exchange))
     {
       /* exchange changed, find matching one first! */
       tctx->eh = NULL;
@@ -905,8 +921,9 @@ handle_track_transaction_timeout (void *cls)
   }
   resume_track_transaction_with_response (tctx,
                                           MHD_HTTP_SERVICE_UNAVAILABLE,
-                                          TMH_RESPONSE_make_error 
(TALER_EC_PAY_EXCHANGE_TIMEOUT,
-                                                                           
"exchange not reachable"));
+                                          TMH_RESPONSE_make_error (
+                                            TALER_EC_PAY_EXCHANGE_TIMEOUT,
+                                            "exchange not reachable"));
 }
 
 
@@ -1011,14 +1028,15 @@ find_exchange (struct TrackTransactionContext *tctx)
   struct TrackCoinContext *tcc = tctx->tcc_head;
 
   while ( (NULL != tcc) &&
-         (GNUNET_YES == tcc->have_wtid) )
+          (GNUNET_YES == tcc->have_wtid) )
     tcc = tcc->next;
   if (NULL != tcc)
   {
     tctx->current_exchange = tcc->exchange_url;
     tctx->fo = TMH_EXCHANGES_find_exchange (tctx->current_exchange,
                                             NULL,
-                                            
&process_track_transaction_with_exchange,
+                                            &
+                                            
process_track_transaction_with_exchange,
                                             tctx);
 
   }
@@ -1037,8 +1055,7 @@ find_exchange (struct TrackTransactionContext *tctx)
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -1047,7 +1064,7 @@ MH_handler_track_transaction (struct TMH_RequestHandler 
*rh,
                               void **connection_cls,
                               const char *upload_data,
                               size_t *upload_data_size,
-                              const char *instance_id)
+                              struct MerchantInstance *mi)
 {
   struct TrackTransactionContext *tctx;
   const char *order_id;
@@ -1107,14 +1124,10 @@ MH_handler_track_transaction (struct TMH_RequestHandler 
*rh,
                                            TALER_EC_PARAMETER_MISSING,
                                            "order_id");
 
-  tctx->mi = TMH_lookup_instance (instance_id);
-  if (NULL == tctx->mi)
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         
TALER_EC_TRACK_TRANSACTION_INSTANCE_UNKNOWN,
-                                         "unknown instance");
+  tctx->mi = mi;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Tracking on behalf of instance '%s'\n",
-              instance_id);
+              mi->id);
 
 
   /* Map order id to contract terms; the objective is to get
@@ -1157,7 +1170,7 @@ MH_handler_track_transaction (struct TMH_RequestHandler 
*rh,
                               &tctx->total_amount),
       GNUNET_JSON_spec_fixed_auto ("H_wire",
                                    &tctx->h_wire),
-      GNUNET_JSON_spec_end()
+      GNUNET_JSON_spec_end ()
     };
 
     if (GNUNET_YES !=
@@ -1192,7 +1205,7 @@ MH_handler_track_transaction (struct TMH_RequestHandler 
*rh,
     GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != tctx->qs);
     return TMH_RESPONSE_reply_internal_error (connection,
                                               
TALER_EC_TRACK_TRANSACTION_DB_FETCH_PAYMENT_ERROR,
-                                             "Database error: failed to find 
payment data");
+                                              "Database error: failed to find 
payment data");
   }
   if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
   {
diff --git a/src/backend/taler-merchant-httpd_track-transaction.h 
b/src/backend/taler-merchant-httpd_track-transaction.h
index 7efecaa..91b8c47 100644
--- a/src/backend/taler-merchant-httpd_track-transaction.h
+++ b/src/backend/taler-merchant-httpd_track-transaction.h
@@ -32,8 +32,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -42,7 +41,7 @@ MH_handler_track_transaction (struct TMH_RequestHandler *rh,
                               void **connection_cls,
                               const char *upload_data,
                               size_t *upload_data_size,
-                              const char *instance_id);
+                              struct MerchantInstance *mi);
 
 
 #endif
diff --git a/src/backend/taler-merchant-httpd_track-transfer.c 
b/src/backend/taler-merchant-httpd_track-transfer.c
index f833c7e..e9e0cb9 100644
--- a/src/backend/taler-merchant-httpd_track-transfer.c
+++ b/src/backend/taler-merchant-httpd_track-transfer.c
@@ -35,7 +35,8 @@
 /**
  * How long to wait before giving up processing with the exchange?
  */
-#define TRACK_TIMEOUT (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 30))
+#define TRACK_TIMEOUT (GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, \
+                                                      30))
 
 /**
  * How often do we retry the simple INSERT database transaction?
@@ -259,8 +260,10 @@ build_deposits_response (void *cls,
   }
   element = json_pack ("{s:O, s:o, s:o}",
                        "order_id", order_id,
-                       "deposit_value", TALER_JSON_from_amount 
(&entry->deposit_value),
-                       "deposit_fee", TALER_JSON_from_amount 
(&entry->deposit_fee));
+                       "deposit_value", TALER_JSON_from_amount (
+                         &entry->deposit_value),
+                       "deposit_fee", TALER_JSON_from_amount (
+                         &entry->deposit_fee));
   json_decref (contract_terms);
   if (NULL == element)
   {
@@ -323,8 +326,8 @@ transform_response (const json_t *result,
                                     &h_key);
 
     if (NULL != (current_entry =
-                GNUNET_CONTAINER_multihashmap_get (map,
-                                                   &h_key)))
+                   GNUNET_CONTAINER_multihashmap_get (map,
+                                                      &h_key)))
     {
       /* The map already knows this h_contract_terms*/
       if ( (GNUNET_SYSERR ==
@@ -374,7 +377,7 @@ transform_response (const json_t *result,
                        "deposits_sums",
                        rctx->deposits_response);
   rctx->deposits_response = NULL;
- cleanup:
+cleanup:
   GNUNET_CONTAINER_multihashmap_iterate (map,
                                          &hashmap_free,
                                          NULL);
@@ -467,16 +470,25 @@ check_transfer (void *cls,
     rctx->check_transfer_result = GNUNET_SYSERR;
     /* Build the `TrackTransferConflictDetails` */
     rctx->response
-      = TMH_RESPONSE_make_json_pack ("{s:I, s:s, s:o, s:I, s:o, s:o, s:s, s:o, 
s:o}",
-                                     "code", (json_int_t) 
TALER_EC_TRACK_TRANSFER_CONFLICTING_REPORTS,
-                                     "hint", "disagreement about deposit 
valuation",
-                                     "exchange_deposit_proof", exchange_proof,
-                                     "conflict_offset", (json_int_t) 
rctx->current_offset,
-                                     "exchange_transfer_proof", 
rctx->original_response,
-                                     "coin_pub", GNUNET_JSON_from_data_auto 
(coin_pub),
-                                     "h_contract_terms", 
GNUNET_JSON_from_data_auto (&ttd->h_contract_terms),
-                                     "amount_with_fee", TALER_JSON_from_amount 
(amount_with_fee),
-                                     "deposit_fee", TALER_JSON_from_amount 
(deposit_fee));
+      = TMH_RESPONSE_make_json_pack (
+          "{s:I, s:s, s:o, s:I, s:o, s:o, s:s, s:o, s:o}",
+          "code",
+          (json_int_t) TALER_EC_TRACK_TRANSFER_CONFLICTING_REPORTS,
+          "hint",
+          "disagreement about deposit valuation",
+          "exchange_deposit_proof", exchange_proof,
+          "conflict_offset",
+          (json_int_t) rctx->current_offset,
+          "exchange_transfer_proof",
+          rctx->original_response,
+          "coin_pub", GNUNET_JSON_from_data_auto (
+            coin_pub),
+          "h_contract_terms",
+          GNUNET_JSON_from_data_auto (&ttd->h_contract_terms),
+          "amount_with_fee", TALER_JSON_from_amount (
+            amount_with_fee),
+          "deposit_fee", TALER_JSON_from_amount (
+            deposit_fee));
     return;
   }
   rctx->check_transfer_result = GNUNET_OK;
@@ -552,18 +564,27 @@ check_wire_fee (struct TrackTransferContext *rctx,
   /* Wire fee check failed, export proof to client */
   resume_track_transfer_with_response
     (rctx,
-     MHD_HTTP_INTERNAL_SERVER_ERROR,
-     TMH_RESPONSE_make_json_pack ("{s:I, s:o, s:o, s:o, s:o, s:o, s:o, s:o, 
s:o, s:O}",
-                                  "code", (json_int_t) 
TALER_EC_TRACK_TRANSFER_JSON_BAD_WIRE_FEE,
-                                  "wire_fee", TALER_JSON_from_amount 
(wire_fee),
-                                  "execution_time", GNUNET_JSON_from_time_abs 
(execution_time),
-                                  "expected_wire_fee", TALER_JSON_from_amount 
(&expected_fee),
-                                  "expected_closing_fee", 
TALER_JSON_from_amount (&closing_fee),
-                                  "start_date", GNUNET_JSON_from_time_abs 
(start_date),
-                                  "end_date", GNUNET_JSON_from_time_abs 
(end_date),
-                                  "master_sig", GNUNET_JSON_from_data_auto 
(&master_sig),
-                                  "master_pub", GNUNET_JSON_from_data_auto 
(master_pub),
-                                  "json", json));
+    MHD_HTTP_INTERNAL_SERVER_ERROR,
+    TMH_RESPONSE_make_json_pack (
+      "{s:I, s:o, s:o, s:o, s:o, s:o, s:o, s:o, s:o, s:O}",
+      "code",
+      (json_int_t) TALER_EC_TRACK_TRANSFER_JSON_BAD_WIRE_FEE,
+      "wire_fee", TALER_JSON_from_amount (wire_fee),
+      "execution_time", GNUNET_JSON_from_time_abs (
+        execution_time),
+      "expected_wire_fee", TALER_JSON_from_amount (
+        &expected_fee),
+      "expected_closing_fee",
+      TALER_JSON_from_amount (&closing_fee),
+      "start_date", GNUNET_JSON_from_time_abs (
+        start_date),
+      "end_date", GNUNET_JSON_from_time_abs (
+        end_date),
+      "master_sig", GNUNET_JSON_from_data_auto (
+        &master_sig),
+      "master_pub", GNUNET_JSON_from_data_auto (
+        master_pub),
+      "json", json));
   return GNUNET_SYSERR;
 }
 
@@ -611,15 +632,18 @@ wire_transfer_cb (void *cls,
   {
     resume_track_transfer_with_response
       (rctx,
-       MHD_HTTP_FAILED_DEPENDENCY,
-       TMH_RESPONSE_make_json_pack ("{s:I, s:I, s:I, s:O}",
-                                    "code", (json_int_t) 
TALER_EC_TRACK_TRANSFER_EXCHANGE_ERROR,
-                                    "exchange-code", (json_int_t) ec,
-                                    "exchange-http-status", (json_int_t) 
http_status,
-                                    "details", json));
+      MHD_HTTP_FAILED_DEPENDENCY,
+      TMH_RESPONSE_make_json_pack ("{s:I, s:I, s:I, s:O}",
+                                   "code",
+                                   (json_int_t)
+                                   TALER_EC_TRACK_TRANSFER_EXCHANGE_ERROR,
+                                   "exchange-code", (json_int_t) ec,
+                                   "exchange-http-status",
+                                   (json_int_t) http_status,
+                                   "details", json));
     return;
   }
-  for (unsigned int i=0;i<MAX_RETRIES;i++)
+  for (unsigned int i = 0; i<MAX_RETRIES; i++)
   {
     db->preflight (db->cls);
     qs = db->store_transfer_to_proof (db->cls,
@@ -639,10 +663,13 @@ wire_transfer_cb (void *cls,
     GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
     resume_track_transfer_with_response
       (rctx,
-       MHD_HTTP_INTERNAL_SERVER_ERROR,
-       TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
-                                    "code", (json_int_t) 
TALER_EC_TRACK_TRANSFER_DB_STORE_TRANSFER_ERROR,
-                                    "details", "failed to store response from 
exchange to local database"));
+      MHD_HTTP_INTERNAL_SERVER_ERROR,
+      TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
+                                   "code",
+                                   (json_int_t)
+                                   
TALER_EC_TRACK_TRANSFER_DB_STORE_TRANSFER_ERROR,
+                                   "details",
+                                   "failed to store response from exchange to 
local database"));
     return;
   }
   rctx->original_response = json;
@@ -662,7 +689,7 @@ wire_transfer_cb (void *cls,
    * details_length is how many (Taler coin) deposits have been
    * aggregated into _this_ wire transfer.
    */
-  for (unsigned int i=0;i<details_length;i++)
+  for (unsigned int i = 0; i<details_length; i++)
   {
     rctx->current_offset = i;
     rctx->current_detail = &details[i];
@@ -678,16 +705,19 @@ wire_transfer_cb (void *cls,
     if (0 > qs)
     {
       /* single, read-only SQL statements should never cause
-        serialization problems */
+   serialization problems */
       GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
       /* Always report on hard error as well to enable diagnostics */
       GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
       resume_track_transfer_with_response
         (rctx,
-         MHD_HTTP_INTERNAL_SERVER_ERROR,
-         TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
-                                      "code", (json_int_t) 
TALER_EC_TRACK_TRANSFER_DB_FETCH_DEPOSIT_ERROR,
-                                      "details", "failed to obtain deposit 
data from local database"));
+        MHD_HTTP_INTERNAL_SERVER_ERROR,
+        TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
+                                     "code",
+                                     (json_int_t)
+                                     
TALER_EC_TRACK_TRANSFER_DB_FETCH_DEPOSIT_ERROR,
+                                     "details",
+                                     "failed to obtain deposit data from local 
database"));
       return;
     }
     if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
@@ -706,12 +736,14 @@ wire_transfer_cb (void *cls,
       GNUNET_break (0);
       resume_track_transfer_with_response
         (rctx,
-         MHD_HTTP_INTERNAL_SERVER_ERROR,
-         TMH_RESPONSE_make_json_pack ("{s:I, s:s, s:I, s:s}",
-                                      "code", (json_int_t) 
TALER_EC_TRACK_TRANSFER_DB_INTERNAL_LOGIC_ERROR,
-                                      "details", "internal logic error",
-                                      "line", (json_int_t) __LINE__,
-                                      "file", __FILE__));
+        MHD_HTTP_INTERNAL_SERVER_ERROR,
+        TMH_RESPONSE_make_json_pack ("{s:I, s:s, s:I, s:s}",
+                                     "code",
+                                     (json_int_t)
+                                     
TALER_EC_TRACK_TRANSFER_DB_INTERNAL_LOGIC_ERROR,
+                                     "details", "internal logic error",
+                                     "line", (json_int_t) __LINE__,
+                                     "file", __FILE__));
       return;
     }
     if (GNUNET_SYSERR == rctx->check_transfer_result)
@@ -721,14 +753,14 @@ wire_transfer_cb (void *cls,
       GNUNET_assert (NULL != rctx->response);
       resume_track_transfer_with_response
         (rctx,
-         MHD_HTTP_FAILED_DEPENDENCY,
-         rctx->response);
+        MHD_HTTP_FAILED_DEPENDENCY,
+        rctx->response);
       rctx->response = NULL;
       return;
     }
     /* Response is consistent with the /deposit we made,
        remember it for future reference */
-    for (unsigned int r=0;r<MAX_RETRIES;r++)
+    for (unsigned int r = 0; r<MAX_RETRIES; r++)
     {
       db->preflight (db->cls);
       qs = db->store_coin_to_transfer (db->cls,
@@ -746,10 +778,13 @@ wire_transfer_cb (void *cls,
       GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
       resume_track_transfer_with_response
         (rctx,
-         MHD_HTTP_INTERNAL_SERVER_ERROR,
-         TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
-                                      "code", (json_int_t) 
TALER_EC_TRACK_TRANSFER_DB_STORE_COIN_ERROR,
-                                      "details", "failed to store response 
from exchange to local database"));
+        MHD_HTTP_INTERNAL_SERVER_ERROR,
+        TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
+                                     "code",
+                                     (json_int_t)
+                                     
TALER_EC_TRACK_TRANSFER_DB_STORE_COIN_ERROR,
+                                     "details",
+                                     "failed to store response from exchange 
to local database"));
       return;
     }
   }
@@ -759,14 +794,14 @@ wire_transfer_cb (void *cls,
               "About to call tracks transformator.\n");
 
   if (NULL == (jresponse =
-               transform_response (json,
-                                   rctx)))
+                 transform_response (json,
+                                     rctx)))
   {
     resume_track_transfer_with_response
       (rctx,
-       MHD_HTTP_INTERNAL_SERVER_ERROR,
-       TMH_RESPONSE_make_error (TALER_EC_TRACK_TRANSFER_JSON_RESPONSE_ERROR,
-                                "Fail to elaborate the response."));
+      MHD_HTTP_INTERNAL_SERVER_ERROR,
+      TMH_RESPONSE_make_error (TALER_EC_TRACK_TRANSFER_JSON_RESPONSE_ERROR,
+                               "Fail to elaborate the response."));
     return;
   }
 
@@ -804,10 +839,13 @@ process_track_transfer_with_exchange (void *cls,
     GNUNET_break (0);
     resume_track_transfer_with_response
       (rctx,
-       MHD_HTTP_INTERNAL_SERVER_ERROR,
-       TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
-                                   "code", (json_int_t) 
TALER_EC_TRACK_TRANSFER_REQUEST_ERROR,
-                                    "error", "failed to run /track/transfer on 
exchange"));
+      MHD_HTTP_INTERNAL_SERVER_ERROR,
+      TMH_RESPONSE_make_json_pack ("{s:I, s:s}",
+                                   "code",
+                                   (json_int_t)
+                                   TALER_EC_TRACK_TRANSFER_REQUEST_ERROR,
+                                   "error",
+                                   "failed to run /track/transfer on 
exchange"));
   }
 }
 
@@ -833,8 +871,9 @@ handle_track_transfer_timeout (void *cls)
   }
   resume_track_transfer_with_response (rctx,
                                        MHD_HTTP_SERVICE_UNAVAILABLE,
-                                       TMH_RESPONSE_make_error 
(TALER_EC_TRACK_TRANSFER_EXCHANGE_TIMEOUT,
-                                                                        
"exchange not reachable"));
+                                       TMH_RESPONSE_make_error (
+                                         
TALER_EC_TRACK_TRANSFER_EXCHANGE_TIMEOUT,
+                                         "exchange not reachable"));
 }
 
 
@@ -855,13 +894,13 @@ proof_cb (void *cls,
   json_t *transformed_response;
 
   if (NULL == (transformed_response =
-              transform_response (proof,
-                                  rctx)))
+                 transform_response (proof,
+                                     rctx)))
   {
     rctx->response_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
     rctx->response
       = TMH_RESPONSE_make_error (TALER_EC_TRACK_TRANSFER_JSON_RESPONSE_ERROR,
-                                "Fail to elaborate response.");
+                                 "Fail to elaborate response.");
     return;
   }
 
@@ -881,8 +920,7 @@ proof_cb (void *cls,
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -891,7 +929,7 @@ MH_handler_track_transfer (struct TMH_RequestHandler *rh,
                            void **connection_cls,
                            const char *upload_data,
                            size_t *upload_data_size,
-                           const char *instance_id)
+                           struct MerchantInstance *mi)
 {
   struct TrackTransferContext *rctx;
   const char *str;
@@ -966,20 +1004,15 @@ MH_handler_track_transfer (struct TMH_RequestHandler *rh,
       GNUNET_break (0);
       wire_method = "x-taler-bank";
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                 "Client needs fixing, see API change for #4943!\n");
+                  "Client needs fixing, see API change for #4943!\n");
     }
     else
       return TMH_RESPONSE_reply_arg_missing (connection,
-                                            TALER_EC_PARAMETER_MISSING,
-                                            "wire_method");
+                                             TALER_EC_PARAMETER_MISSING,
+                                             "wire_method");
   }
   rctx->wire_method = GNUNET_strdup (wire_method);
-
-  rctx->mi = TMH_lookup_instance (instance_id);
-  if (NULL == rctx->mi)
-    return TMH_RESPONSE_reply_not_found (connection,
-                                         
TALER_EC_TRACK_TRANSFER_INSTANCE_UNKNOWN,
-                                         "instance unknown");
+  rctx->mi = mi;
   str = MHD_lookup_connection_value (connection,
                                      MHD_GET_ARGUMENT_KIND,
                                      "wtid");
diff --git a/src/backend/taler-merchant-httpd_track-transfer.h 
b/src/backend/taler-merchant-httpd_track-transfer.h
index 8da998d..8ec8567 100644
--- a/src/backend/taler-merchant-httpd_track-transfer.h
+++ b/src/backend/taler-merchant-httpd_track-transfer.h
@@ -34,8 +34,7 @@
  * @param[in,out] connection_cls the connection's closure (can be updated)
  * @param upload_data upload data
  * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
- * @param instance_id merchant backend instance ID or NULL is no instance
- *        has been explicitly specified
+ * @param mi merchant backend instance, never NULL
  * @return MHD result code
  */
 int
@@ -44,7 +43,7 @@ MH_handler_track_transfer (struct TMH_RequestHandler *rh,
                            void **connection_cls,
                            const char *upload_data,
                            size_t *upload_data_size,
-                           const char *instance_id);
+                           struct MerchantInstance *mi);
 
 
 #endif
diff --git a/src/lib/test_merchant_api.c b/src/lib/test_merchant_api.c
index fa7a385..7548aa5 100644
--- a/src/lib/test_merchant_api.c
+++ b/src/lib/test_merchant_api.c
@@ -128,7 +128,7 @@ static char *auditor_url;
  * @param label label to use for the command.
  */
 #define CMD_EXEC_WIREWATCH(label) \
-   TALER_TESTING_cmd_exec_wirewatch (label, CONFIG_FILE)
+  TALER_TESTING_cmd_exec_wirewatch (label, CONFIG_FILE)
 
 /**
  * Execute the taler-exchange-aggregator command with
@@ -137,7 +137,7 @@ static char *auditor_url;
  * @param label label to use for the command.
  */
 #define CMD_EXEC_AGGREGATOR(label) \
-   TALER_TESTING_cmd_exec_aggregator (label, CONFIG_FILE)
+  TALER_TESTING_cmd_exec_aggregator (label, CONFIG_FILE)
 
 /**
  * Run wire transfer of funds from some user's account to the
@@ -148,9 +148,11 @@ static char *auditor_url;
  * @param url exchange_url
  */
 #define CMD_TRANSFER_TO_EXCHANGE(label,amount) \
-   TALER_TESTING_cmd_fakebank_transfer (label, amount, \
-     fakebank_url, USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO, \
-     USER_LOGIN_NAME, USER_LOGIN_PASS, EXCHANGE_URL)
+  TALER_TESTING_cmd_fakebank_transfer (label, amount, \
+                                       fakebank_url, USER_ACCOUNT_NO, \
+                                       EXCHANGE_ACCOUNT_NO, \
+                                       USER_LOGIN_NAME, USER_LOGIN_PASS, \
+                                       EXCHANGE_URL)
 
 /**
  * Run wire transfer of funds from some user's account to the
@@ -160,10 +162,10 @@ static char *auditor_url;
  * @param amount amount to transfer, i.e. "EUR:1"
  */
 #define CMD_TRANSFER_TO_EXCHANGE_SUBJECT(label,amount,subject) \
-   TALER_TESTING_cmd_fakebank_transfer_with_subject \
-     (label, amount, fakebank_url, USER_ACCOUNT_NO, \
-      EXCHANGE_ACCOUNT_NO, USER_LOGIN_NAME, USER_LOGIN_PASS, \
-      subject)
+  TALER_TESTING_cmd_fakebank_transfer_with_subject \
+    (label, amount, fakebank_url, USER_ACCOUNT_NO, \
+    EXCHANGE_ACCOUNT_NO, USER_LOGIN_NAME, USER_LOGIN_PASS, \
+    subject)
 
 /**
  * Main function that will tell the interpreter what commands to
@@ -189,22 +191,22 @@ run (void *cls,
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-2",
-       EXCHANGE_URL,
-       "EUR:10.02",
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:10.02",
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO),
 
     TALER_TESTING_cmd_withdraw_amount
       ("withdraw-coin-1",
-       "create-reserve-1",
-       "EUR:5",
-       MHD_HTTP_OK),
+      "create-reserve-1",
+      "EUR:5",
+      MHD_HTTP_OK),
 
     TALER_TESTING_cmd_withdraw_amount
       ("withdraw-coin-2",
-       "create-reserve-1",
-       "EUR:5",
-       MHD_HTTP_OK),
+      "create-reserve-1",
+      "EUR:5",
+      MHD_HTTP_OK),
 
     /**
      * Check the reserve is depleted.
@@ -216,9 +218,9 @@ run (void *cls,
 
     TALER_TESTING_cmd_proposal
       ("create-proposal-1",
-       merchant_url,
-       MHD_HTTP_OK,
-       "{\"max_fee\":\
+      merchant_url,
+      MHD_HTTP_OK,
+      "{\"max_fee\":\
           {\"currency\":\"EUR\",\
            \"value\":0,\
            \"fraction\":50000000},\
@@ -275,10 +277,10 @@ run (void *cls,
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-498c",
-       EXCHANGE_URL,
-       "EUR:4.98",
-       EXCHANGE_ACCOUNT_NO,
-       MERCHANT_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:4.98",
+      EXCHANGE_ACCOUNT_NO,
+      MERCHANT_ACCOUNT_NO),
 
     TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-2"),
 
@@ -290,9 +292,9 @@ run (void *cls,
 
     TALER_TESTING_cmd_proposal
       ("create-proposal-2",
-       merchant_url,
-       MHD_HTTP_OK,
-       "{\"max_fee\":\
+      merchant_url,
+      MHD_HTTP_OK,
+      "{\"max_fee\":\
           {\"currency\":\"EUR\",\
            \"value\":0,\
            \"fraction\":50000000},\
@@ -326,17 +328,17 @@ run (void *cls,
     TALER_TESTING_cmd_history ("history-0",
                                merchant_url,
                                MHD_HTTP_OK,
-      /**
-       * all records to be returned; setting date as 0 lets the
-       * interpreter set it as 'now' + one hour delta, just to
-       * make sure it surpasses the proposal's timestamp.
-       */
+                               /**
+                                * all records to be returned; setting date as 
0 lets the
+                                * interpreter set it as 'now' + one hour 
delta, just to
+                                * make sure it surpasses the proposal's 
timestamp.
+                                */
                                GNUNET_TIME_UNIT_ZERO_ABS,
-      /**
-       * We only expect ONE result (create-proposal-1) to be
-       * included in /history response, because create-proposal-3
-       * did NOT go through because of double spending.
-       */
+                               /**
+                                * We only expect ONE result 
(create-proposal-1) to be
+                                * included in /history response, because 
create-proposal-3
+                                * did NOT go through because of double 
spending.
+                                */
                                1, // nresult
                                10, // start
                                -10), // nrows
@@ -349,56 +351,56 @@ run (void *cls,
 
     TALER_TESTING_cmd_merchant_track_transaction
       ("track-transaction-1",
-       merchant_url,
-       MHD_HTTP_OK,
-       "deposit-simple"),
+      merchant_url,
+      MHD_HTTP_OK,
+      "deposit-simple"),
 
     TALER_TESTING_cmd_merchant_track_transfer
       ("track-transfer-1",
-       merchant_url,
-       MHD_HTTP_OK,
-       "check_bank_transfer-498c"),
+      merchant_url,
+      MHD_HTTP_OK,
+      "check_bank_transfer-498c"),
 
     TALER_TESTING_cmd_merchant_track_transfer
       ("track-transfer-again",
-       merchant_url,
-       MHD_HTTP_OK,
-       "check_bank_transfer-498c"),
+      merchant_url,
+      MHD_HTTP_OK,
+      "check_bank_transfer-498c"),
 
     TALER_TESTING_cmd_fakebank_transfer
       ("create-reserve-2",
-       "EUR:1",
-       fakebank_url,
-       USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO,
-       "user62",
-       "pass62",
-       EXCHANGE_URL),
+      "EUR:1",
+      fakebank_url,
+      USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO,
+      "user62",
+      "pass62",
+      EXCHANGE_URL),
 
     TALER_TESTING_cmd_fakebank_transfer_with_ref
       ("create-reserve-2b",
-       "EUR:4.01",
-       fakebank_url,
-       USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO,
-       "user62",
-       "pass62",
-       "create-reserve-2",
-       EXCHANGE_URL),
+      "EUR:4.01",
+      fakebank_url,
+      USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO,
+      "user62",
+      "pass62",
+      "create-reserve-2",
+      EXCHANGE_URL),
 
     CMD_EXEC_WIREWATCH ("wirewatch-2"),
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-2a",
-       EXCHANGE_URL,
-       "EUR:1",
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:1",
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO),
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-2b",
-       EXCHANGE_URL,
-       "EUR:4.01",
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:4.01",
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO),
 
     TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-2",
                                        "create-reserve-2",
@@ -418,40 +420,40 @@ run (void *cls,
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-498c-2",
-       EXCHANGE_URL,
-       "EUR:4.98",
-       EXCHANGE_ACCOUNT_NO,
-       MERCHANT_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:4.98",
+      EXCHANGE_ACCOUNT_NO,
+      MERCHANT_ACCOUNT_NO),
 
     TALER_TESTING_cmd_check_bank_empty ("check_bank_empty"),
 
     TALER_TESTING_cmd_merchant_track_transfer
       ("track-transfer-2",
-       merchant_url,
-       MHD_HTTP_OK,
-       "check_bank_transfer-498c-2"),
+      merchant_url,
+      MHD_HTTP_OK,
+      "check_bank_transfer-498c-2"),
 
     TALER_TESTING_cmd_merchant_track_transfer
       ("track-transfer-2-again",
-       merchant_url,
-       MHD_HTTP_OK,
-       "check_bank_transfer-498c-2"),
+      merchant_url,
+      MHD_HTTP_OK,
+      "check_bank_transfer-498c-2"),
 
     TALER_TESTING_cmd_merchant_track_transaction
       ("track-transaction-2",
-       merchant_url,
-       MHD_HTTP_OK,
-       "deposit-simple-2"),
+      merchant_url,
+      MHD_HTTP_OK,
+      "deposit-simple-2"),
 
     TALER_TESTING_cmd_history ("history-1",
                                merchant_url,
                                MHD_HTTP_OK,
                                GNUNET_TIME_UNIT_ZERO_ABS,
-      /**
-       * Now we expect BOTH contracts (create-proposal-{1,2})
-       * to be included in /history response, because
-       * create-proposal-2 has now been correctly paid.
-       */
+                               /**
+                                * Now we expect BOTH contracts 
(create-proposal-{1,2})
+                                * to be included in /history response, because
+                                * create-proposal-2 has now been correctly 
paid.
+                                */
                                2,
                                10,
                                -10),
@@ -461,12 +463,12 @@ run (void *cls,
   struct TALER_TESTING_Command refund[] = {
     TALER_TESTING_cmd_refund_increase
       ("refund-increase-1",
-       merchant_url,
-       "refund test",
-       "1",
-       "EUR:0.1",
-       "EUR:0.01",
-       MHD_HTTP_OK),
+      merchant_url,
+      "refund test",
+      "1",
+      "EUR:0.1",
+      "EUR:0.01",
+      MHD_HTTP_OK),
 
     /* Ordinary refund.  */
     TALER_TESTING_cmd_refund_lookup ("refund-lookup-1",
@@ -487,9 +489,9 @@ run (void *cls,
 
     TALER_TESTING_cmd_proposal
       ("create-proposal-not-to-be-paid",
-       merchant_url,
-       MHD_HTTP_OK,
-       "{\"max_fee\":\
+      merchant_url,
+      MHD_HTTP_OK,
+      "{\"max_fee\":\
           {\"currency\":\"EUR\",\
            \"value\":0,\
            \"fraction\":50000000},\
@@ -508,22 +510,22 @@ run (void *cls,
     /* Try to increase a non paid proposal.  */
     TALER_TESTING_cmd_refund_increase
       ("refund-increase-unpaid-proposal",
-       merchant_url,
-       "refund test",
-       "1-unpaid",
-       "EUR:0.1",
-       "EUR:0.01",
-       MHD_HTTP_BAD_REQUEST),
+      merchant_url,
+      "refund test",
+      "1-unpaid",
+      "EUR:0.1",
+      "EUR:0.01",
+      MHD_HTTP_BAD_REQUEST),
 
     /* Try to increase a non existent proposal.  */
     TALER_TESTING_cmd_refund_increase
       ("refund-increase-unpaid-proposal",
-       merchant_url,
-       "refund test",
-       "non-existent-id",
-       "EUR:0.1",
-       "EUR:0.01",
-       MHD_HTTP_NOT_FOUND),
+      merchant_url,
+      "refund test",
+      "non-existent-id",
+      "EUR:0.1",
+      "EUR:0.01",
+      MHD_HTTP_NOT_FOUND),
 
     /**
      * The following block will (1) create a new
@@ -539,22 +541,22 @@ run (void *cls,
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-unincreased-refund",
-       EXCHANGE_URL,
-       "EUR:5.01",
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:5.01",
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO),
 
     TALER_TESTING_cmd_withdraw_amount
       ("withdraw-coin-unincreased-refund",
-       "create-reserve-unincreased-refund",
-       "EUR:5",
-       MHD_HTTP_OK),
+      "create-reserve-unincreased-refund",
+      "EUR:5",
+      MHD_HTTP_OK),
 
     TALER_TESTING_cmd_proposal
       ("create-proposal-unincreased-refund",
-       merchant_url,
-       MHD_HTTP_OK,
-       "{\"max_fee\":\
+      merchant_url,
+      MHD_HTTP_OK,
+      "{\"max_fee\":\
           {\"currency\":\"EUR\",\
            \"value\":0,\
            \"fraction\":50000000},\
@@ -583,24 +585,24 @@ run (void *cls,
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-unincreased-refund",
-       EXCHANGE_URL,
-       "EUR:4.98",
-       EXCHANGE_ACCOUNT_NO,
-       MERCHANT_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:4.98",
+      EXCHANGE_ACCOUNT_NO,
+      MERCHANT_ACCOUNT_NO),
 
     /* Actually try to pick up the refund from the
      * "unincreased proposal".  */
     TALER_TESTING_cmd_refund_lookup_with_amount
       ("refund-lookup-unincreased",
-       merchant_url,
-       NULL,
-       "pay-unincreased-proposal",
-       "unincreased-proposal",
-       MHD_HTTP_OK,
-       /* If a lookup is attempted on an unincreased proposal,
-        * the backend will simply respond with a empty refunded
-        * coin "set", but the HTTP response code is 200 OK.  */
-       "EUR:0"),
+      merchant_url,
+      NULL,
+      "pay-unincreased-proposal",
+      "unincreased-proposal",
+      MHD_HTTP_OK,
+      /* If a lookup is attempted on an unincreased proposal,
+       * the backend will simply respond with a empty refunded
+       * coin "set", but the HTTP response code is 200 OK.  */
+      "EUR:0"),
 
     TALER_TESTING_cmd_end ()
   };
@@ -611,22 +613,22 @@ run (void *cls,
     /* Test tipping.  */
     TALER_TESTING_cmd_fakebank_transfer_with_instance
       ("create-reserve-tip-1",
-       "EUR:20.04",
-       fakebank_url,
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO,
-       USER_LOGIN_NAME,
-       USER_LOGIN_PASS,
-       "tip",
-       EXCHANGE_URL,
-       CONFIG_FILE),
+      "EUR:20.04",
+      fakebank_url,
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO,
+      USER_LOGIN_NAME,
+      USER_LOGIN_PASS,
+      "tip",
+      EXCHANGE_URL,
+      CONFIG_FILE),
 
     CMD_EXEC_WIREWATCH ("wirewatch-3"),
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-tip-1",
-       EXCHANGE_URL,
-       "EUR:20.04", USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:20.04", USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO),
 
     TALER_TESTING_cmd_tip_authorize ("authorize-tip-1",
                                      merchant_tip_instance_url,
@@ -649,12 +651,12 @@ run (void *cls,
      * actually create a reserve.  */
     TALER_TESTING_cmd_tip_authorize_with_ec
       ("authorize-tip-null",
-       merchant_tip_instance_nulltip_url,
-       exchange_url,
-       MHD_HTTP_NOT_FOUND,
-       "tip 2",
-       "EUR:5.01",
-       TALER_EC_RESERVE_STATUS_UNKNOWN),
+      merchant_tip_instance_nulltip_url,
+      exchange_url,
+      MHD_HTTP_NOT_FOUND,
+      "tip 2",
+      "EUR:5.01",
+      TALER_EC_RESERVE_STATUS_UNKNOWN),
 
     TALER_TESTING_cmd_tip_query ("query-tip-1",
                                  merchant_tip_instance_url,
@@ -695,77 +697,77 @@ run (void *cls,
 
     TALER_TESTING_cmd_fakebank_transfer_with_instance
       ("create-reserve-insufficient-funds",
-       "EUR:1.01",
-       fakebank_url,
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO,
-       USER_LOGIN_NAME,
-       USER_LOGIN_PASS,
-       "dtip",
-       EXCHANGE_URL,
-       CONFIG_FILE),
+      "EUR:1.01",
+      fakebank_url,
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO,
+      USER_LOGIN_NAME,
+      USER_LOGIN_PASS,
+      "dtip",
+      EXCHANGE_URL,
+      CONFIG_FILE),
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-insufficient-tip-funds",
-       EXCHANGE_URL,
-       "EUR:1.01",
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:1.01",
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO),
 
     CMD_EXEC_WIREWATCH
       ("wirewatch-insufficient-tip-funds"),
 
     TALER_TESTING_cmd_tip_authorize_with_ec
       ("authorize-tip-3-insufficient-funds",
-       merchant_tip_instance_2_url,
-       exchange_url,
-       MHD_HTTP_PRECONDITION_FAILED,
-       "tip 3",
-       "EUR:2.02",
-       TALER_EC_TIP_AUTHORIZE_INSUFFICIENT_FUNDS),
+      merchant_tip_instance_2_url,
+      exchange_url,
+      MHD_HTTP_PRECONDITION_FAILED,
+      "tip 3",
+      "EUR:2.02",
+      TALER_EC_TIP_AUTHORIZE_INSUFFICIENT_FUNDS),
 
     TALER_TESTING_cmd_tip_authorize_with_ec
       ("authorize-tip-4-unknown-instance",
-       merchant_tip_unknown_instance_url,
-       exchange_url,
-       MHD_HTTP_NOT_FOUND,
-       "tip 4",
-       "EUR:5.01",
-       TALER_EC_TIP_AUTHORIZE_INSTANCE_UNKNOWN),
+      merchant_tip_unknown_instance_url,
+      exchange_url,
+      MHD_HTTP_NOT_FOUND,
+      "tip 4",
+      "EUR:5.01",
+      TALER_EC_INSTANCE_UNKNOWN),
 
     TALER_TESTING_cmd_tip_authorize_with_ec
       ("authorize-tip-5-notip-instance",
-       merchant_url,
-       exchange_url,
-       MHD_HTTP_NOT_FOUND,
-       "tip 5",
-       "EUR:5.01",
-       TALER_EC_TIP_AUTHORIZE_INSTANCE_DOES_NOT_TIP),
+      merchant_url,
+      exchange_url,
+      MHD_HTTP_NOT_FOUND,
+      "tip 5",
+      "EUR:5.01",
+      TALER_EC_TIP_AUTHORIZE_INSTANCE_DOES_NOT_TIP),
 
     TALER_TESTING_cmd_tip_pickup_with_ec
       ("pickup-tip-3-too-much",
-       merchant_tip_instance_url,
-       MHD_HTTP_CONFLICT,
-       "authorize-tip-1",
-       pickup_amounts_1,
-       TALER_EC_TIP_PICKUP_NO_FUNDS),
+      merchant_tip_instance_url,
+      MHD_HTTP_CONFLICT,
+      "authorize-tip-1",
+      pickup_amounts_1,
+      TALER_EC_TIP_PICKUP_NO_FUNDS),
 
     TALER_TESTING_cmd_tip_authorize_fake
       ("fake-tip-authorization"),
 
     TALER_TESTING_cmd_tip_pickup_with_ec
       ("pickup-non-existent-id",
-       merchant_tip_instance_url,
-       MHD_HTTP_NOT_FOUND,
-       "fake-tip-authorization",
-       pickup_amounts_1,
-       TALER_EC_TIP_PICKUP_TIP_ID_UNKNOWN),
+      merchant_tip_instance_url,
+      MHD_HTTP_NOT_FOUND,
+      "fake-tip-authorization",
+      pickup_amounts_1,
+      TALER_EC_TIP_PICKUP_TIP_ID_UNKNOWN),
 
     TALER_TESTING_cmd_proposal
       ("create-proposal-tip-1",
-       merchant_tip_instance_url,
-       MHD_HTTP_OK,
-       "{\"max_fee\":\
+      merchant_tip_instance_url,
+      MHD_HTTP_OK,
+      "{\"max_fee\":\
           {\"currency\":\"EUR\",\
            \"value\":0,\
            \"fraction\":50000000},\
@@ -793,12 +795,12 @@ run (void *cls,
     CMD_EXEC_AGGREGATOR ("aggregator-tip-1"),
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-tip-498c",
-       EXCHANGE_URL,
-       "EUR:4.98",
-       EXCHANGE_ACCOUNT_NO,
-       MERCHANT_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:4.98",
+      EXCHANGE_ACCOUNT_NO,
+      MERCHANT_ACCOUNT_NO),
     TALER_TESTING_cmd_check_bank_empty
-    ("check_bank_empty-at-tips"),
+      ("check_bank_empty-at-tips"),
 
     TALER_TESTING_cmd_end ()
   };
@@ -807,20 +809,20 @@ run (void *cls,
 
     TALER_TESTING_cmd_fakebank_transfer
       ("create-reserve-10",
-       "EUR:10.02",
-       fakebank_url,
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO,
-       USER_LOGIN_NAME,
-       USER_LOGIN_PASS,
-       EXCHANGE_URL),
+      "EUR:10.02",
+      fakebank_url,
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO,
+      USER_LOGIN_NAME,
+      USER_LOGIN_PASS,
+      EXCHANGE_URL),
 
     CMD_EXEC_WIREWATCH ("wirewatch-10"),
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-10",
-       EXCHANGE_URL,
-       "EUR:10.02", USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:10.02", USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO),
 
     TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-10a",
                                        "create-reserve-10",
@@ -838,9 +840,9 @@ run (void *cls,
 
     TALER_TESTING_cmd_proposal
       ("create-proposal-10",
-       merchant_url,
-       MHD_HTTP_OK,
-       "{\"max_fee\":\
+      merchant_url,
+      MHD_HTTP_OK,
+      "{\"max_fee\":\
           {\"currency\":\"EUR\",\
            \"value\":0,\
            \"fraction\":50000000},\
@@ -867,20 +869,20 @@ run (void *cls,
 
     TALER_TESTING_cmd_pay_again
       ("pay-again-10",
-       merchant_url,
-       "pay-fail-partial-double-10",
-       "withdraw-coin-10a;withdraw-coin-10b",
-       "EUR:0.01",
-       MHD_HTTP_OK),
+      merchant_url,
+      "pay-fail-partial-double-10",
+      "withdraw-coin-10a;withdraw-coin-10b",
+      "EUR:0.01",
+      MHD_HTTP_OK),
 
     CMD_EXEC_AGGREGATOR ("run-aggregator-10"),
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-9.97-10",
-       EXCHANGE_URL,
-       "EUR:9.97",
-       EXCHANGE_ACCOUNT_NO,
-       MERCHANT_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:9.97",
+      EXCHANGE_ACCOUNT_NO,
+      MERCHANT_ACCOUNT_NO),
 
     TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-10"),
 
@@ -895,10 +897,10 @@ run (void *cls,
 
     TALER_TESTING_cmd_check_bank_transfer
       ("check_bank_transfer-11",
-       EXCHANGE_URL,
-       "EUR:10.02",
-       USER_ACCOUNT_NO,
-       EXCHANGE_ACCOUNT_NO),
+      EXCHANGE_URL,
+      "EUR:10.02",
+      USER_ACCOUNT_NO,
+      EXCHANGE_ACCOUNT_NO),
 
     TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-11a",
                                        "create-reserve-11",
@@ -917,9 +919,9 @@ run (void *cls,
 
     TALER_TESTING_cmd_proposal
       ("create-proposal-11",
-       merchant_url,
-       MHD_HTTP_OK,
-       "{\"max_fee\":\
+      merchant_url,
+      MHD_HTTP_OK,
+      "{\"max_fee\":\
           {\"currency\":\"EUR\",\
            \"value\":0,\
            \"fraction\":50000000},\
@@ -984,15 +986,15 @@ run (void *cls,
                              track),
     TALER_TESTING_cmd_history
       ("history-2",
-       merchant_url,
-       MHD_HTTP_OK,
-       GNUNET_TIME_absolute_add (GNUNET_TIME_UNIT_ZERO_ABS,
-                                 GNUNET_TIME_UNIT_MICROSECONDS),
-       /* zero results expected, there isn't any row with id
-        * bigger than 10. */
-       0,
-       10,
-       10),
+      merchant_url,
+      MHD_HTTP_OK,
+      GNUNET_TIME_absolute_add (GNUNET_TIME_UNIT_ZERO_ABS,
+                                GNUNET_TIME_UNIT_MICROSECONDS),
+      /* zero results expected, there isn't any row with id
+       * bigger than 10. */
+      0,
+      10,
+      10),
 
     TALER_TESTING_cmd_batch ("refund",
                              refund),
@@ -1008,11 +1010,11 @@ run (void *cls,
 
     TALER_TESTING_cmd_history_default_start
       ("history-default-start",
-       merchant_url,
-       MHD_HTTP_OK,
-       GNUNET_TIME_UNIT_ZERO_ABS,
-       4, /* Expected number of records */
-       -100), /* Delta */
+      merchant_url,
+      MHD_HTTP_OK,
+      GNUNET_TIME_UNIT_ZERO_ABS,
+      4,  /* Expected number of records */
+      -100),  /* Delta */
     /**
      * End the suite.  Fixme: better to have a label for this
      * too, as it shows a "(null)" token on logs.
@@ -1027,7 +1029,7 @@ run (void *cls,
 
 int
 main (int argc,
-      char * const *argv)
+      char *const *argv)
 {
   unsigned int ret;
   /* These environment variables get in the way... */
@@ -1039,8 +1041,8 @@ main (int argc,
                     NULL);
   if (NULL ==
       (fakebank_url = TALER_TESTING_prepare_fakebank
-        (CONFIG_FILE,
-         "account-exchange")))
+                        (CONFIG_FILE,
+                        "account-exchange")))
     return 77;
   if (NULL ==
       (merchant_url = TALER_TESTING_prepare_merchant (CONFIG_FILE)))
@@ -1074,7 +1076,7 @@ main (int argc,
   case GNUNET_OK:
 
     if (NULL == (merchantd =
-        TALER_TESTING_run_merchant (CONFIG_FILE, merchant_url)))
+                   TALER_TESTING_run_merchant (CONFIG_FILE, merchant_url)))
       return 1;
 
     ret = TALER_TESTING_setup_with_exchange (&run,

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



reply via email to

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