diff --git a/src/bank-lib/test_bank_api.c b/src/bank-lib/test_bank_api.c
index fe02fb8e5..019b09976 100644
--- a/src/bank-lib/test_bank_api.c
+++ b/src/bank-lib/test_bank_api.c
@@ -171,9 +171,11 @@ context_task (void *cls);
 
 /**
  * Run the context task, the working set has changed.
+ *
+ * @param cls NULL
  */
 static void
-trigger_context_task ()
+trigger_context_task (void *cls)
 {
   GNUNET_SCHEDULER_cancel (ctx_task);
   ctx_task = GNUNET_SCHEDULER_add_now (&context_task,
@@ -333,7 +335,6 @@ interpreter_run (void *cls)
       fail (is);
       return;
     }
-    trigger_context_task ();
     return;
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -486,7 +487,8 @@ run (void *cls)
   is = GNUNET_new (struct InterpreterState);
   is->commands = commands;
 
-  ctx = GNUNET_CURL_init ();
+  ctx = GNUNET_CURL_init (&trigger_context_task,
+                          NULL);
   GNUNET_assert (NULL != ctx);
   ctx_task = GNUNET_SCHEDULER_add_now (&context_task,
                                        ctx);
diff --git a/src/exchange-lib/test_exchange_api.c b/src/exchange-lib/test_exchange_api.c
index 2936f68fb..1ab09c9c4 100644
--- a/src/exchange-lib/test_exchange_api.c
+++ b/src/exchange-lib/test_exchange_api.c
@@ -48,9 +48,9 @@ static struct GNUNET_CURL_Context *ctx;
 static struct TALER_EXCHANGE_Handle *exchange;
 
 /**
- * Task run on shutdown.
+ * Task run on timeout.
  */
-static struct GNUNET_SCHEDULER_Task *shutdown_task;
+static struct GNUNET_SCHEDULER_Task *timeout_task;
 
 /**
  * Task that runs the main event loop.
@@ -569,27 +569,6 @@ struct InterpreterState
 };
 
 
-/**
- * Task that runs the context's event loop with the GNUnet scheduler.
- *
- * @param cls unused
- */
-static void
-context_task (void *cls);
-
-
-/**
- * Run the context task, the working set has changed.
- */
-static void
-trigger_context_task ()
-{
-  GNUNET_SCHEDULER_cancel (ctx_task);
-  ctx_task = GNUNET_SCHEDULER_add_now (&context_task,
-                                       NULL);
-}
-
-
 /**
  * The testcase failed, return with an error code.
  *
@@ -1499,7 +1478,6 @@ interpreter_run (void *cls)
       fail (is);
       return;
     }
-    trigger_context_task ();
     return;
   case OC_WITHDRAW_STATUS:
     GNUNET_assert (NULL !=
@@ -1515,7 +1493,6 @@ interpreter_run (void *cls)
                                    &reserve_pub,
                                    &reserve_status_cb,
                                    is);
-    trigger_context_task ();
     return;
   case OC_WITHDRAW_SIGN:
     GNUNET_assert (NULL !=
@@ -1575,7 +1552,6 @@ interpreter_run (void *cls)
       fail (is);
       return;
     }
-    trigger_context_task ();
     return;
   case OC_DEPOSIT:
     {
@@ -1728,7 +1704,6 @@ interpreter_run (void *cls)
         return;
       }
       json_decref (wire);
-      trigger_context_task ();
       return;
     }
   case OC_REFRESH_MELT:
@@ -1826,7 +1801,6 @@ interpreter_run (void *cls)
         }
       }
     }
-    trigger_context_task ();
     return;
   case OC_REFRESH_REVEAL:
     ref = find_command (is,
@@ -1845,7 +1819,6 @@ interpreter_run (void *cls)
       fail (is);
       return;
     }
-    trigger_context_task ();
     return;
   case OC_REFRESH_LINK:
     /* find reveal command */
@@ -1885,13 +1858,11 @@ interpreter_run (void *cls)
       fail (is);
       return;
     }
-    trigger_context_task ();
     return;
   case OC_WIRE:
     cmd->details.wire.wh = TALER_EXCHANGE_wire (exchange,
                                                 &wire_cb,
                                                 is);
-    trigger_context_task ();
     return;
   case OC_WIRE_DEPOSITS:
     if (NULL != cmd->details.wire_deposits.wtid_ref)
@@ -1906,7 +1877,6 @@ interpreter_run (void *cls)
                                       &cmd->details.wire_deposits.wtid,
                                       &wire_deposits_cb,
                                       is);
-    trigger_context_task ();
     return;
   case OC_DEPOSIT_WTID:
     {
@@ -1969,7 +1939,6 @@ interpreter_run (void *cls)
                                    ref->details.deposit.transaction_id,
                                    &deposit_wtid_cb,
                                    is);
-      trigger_context_task ();
     }
     return;
   default:
@@ -1984,6 +1953,19 @@ interpreter_run (void *cls)
 }
 
 
+/**
+ * Function run when the test terminates (good or bad) with timeout.
+ *
+ * @param cls NULL
+ */
+static void
+do_timeout (void *cls)
+{
+  timeout_task = NULL;
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
 /**
  * Function run when the test terminates (good or bad).
  * Cleans up our state.
@@ -1997,7 +1979,6 @@ do_shutdown (void *cls)
   struct Command *cmd;
   unsigned int i;
 
-  shutdown_task = NULL;
   for (i=0;OC_END != (cmd = &is->commands[i])->oc;i++)
   {
     switch (cmd->oc)
@@ -2156,11 +2137,6 @@ do_shutdown (void *cls)
     is->task = NULL;
   }
   GNUNET_free (is);
-  if (NULL != ctx_task)
-  {
-    GNUNET_SCHEDULER_cancel (ctx_task);
-    ctx_task = NULL;
-  }
   if (NULL != exchange)
   {
     TALER_EXCHANGE_disconnect (exchange);
@@ -2171,6 +2147,16 @@ do_shutdown (void *cls)
     GNUNET_CURL_fini (ctx);
     ctx = NULL;
   }
+  if (NULL != ctx_task)
+  {
+    GNUNET_SCHEDULER_cancel (ctx_task);
+    ctx_task = NULL;
+  }
+  if (NULL != timeout_task)
+  {
+    GNUNET_SCHEDULER_cancel (timeout_task);
+    timeout_task = NULL;
+  }
 }
 
 
@@ -2262,6 +2248,23 @@ context_task (void *cls)
 }
 
 
+/**
+ * Run the context task, the working set has changed.
+ *
+ * @param cls NULL
+ */
+static void
+trigger_context_task (void *cls)
+{
+  if (NULL == ctx)
+    return;
+  if (NULL != ctx_task)
+    GNUNET_SCHEDULER_cancel (ctx_task);
+  ctx_task = GNUNET_SCHEDULER_add_now (&context_task,
+                                       NULL);
+}
+
+
 /**
  * Main function that will be run by the scheduler.
  *
@@ -2507,7 +2510,8 @@ run (void *cls)
   is = GNUNET_new (struct InterpreterState);
   is->commands = commands;
 
-  ctx = GNUNET_CURL_init ();
+  ctx = GNUNET_CURL_init (&trigger_context_task,
+                          NULL);
   GNUNET_assert (NULL != ctx);
   ctx_task = GNUNET_SCHEDULER_add_now (&context_task,
                                        ctx);
@@ -2516,10 +2520,11 @@ run (void *cls)
                                      &cert_cb, is,
                                      TALER_EXCHANGE_OPTION_END);
   GNUNET_assert (NULL != exchange);
-  shutdown_task
+  timeout_task
     = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
                                     (GNUNET_TIME_UNIT_SECONDS, 150),
-                                    &do_shutdown, is);
+                                    &do_timeout, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown, is);
 }
 
 
diff --git a/src/exchange-lib/test_exchange_api.conf b/src/exchange-lib/test_exchange_api.conf
index 5fcc36552..a8c690786 100644
--- a/src/exchange-lib/test_exchange_api.conf
+++ b/src/exchange-lib/test_exchange_api.conf
@@ -30,12 +30,17 @@ TESTRUN = YES
 [exchangedb-postgres]
 DB_CONN_STR = "postgres:///talercheck"
 
-[wire-incoming-test]
+[exchange-wire-incoming-sepa]
+# This is the response we give out for the /wire request.  It provides
+# wallets with the bank information for transfers to the exchange.
+SEPA_RESPONSE_FILE = ${TALER_CONFIG_HOME}/sepa.json
+
+[exchange-wire-incoming-test]
 # This is the response we give out for the /wire request.  It provides
 # wallets with the bank information for transfers to the exchange.
 TEST_RESPONSE_FILE = ${TALER_CONFIG_HOME}/test.json
 
-[wire-outgoing-test]
+[exchange-wire-outgoing-test]
 # What is the main website of the bank?
 BANK_URI = "http://localhost:8082/"
 # Into which account at the 'bank' should (incoming) wire transfers be made?
diff --git a/src/exchange/test_taler_exchange_aggregator.c b/src/exchange/test_taler_exchange_aggregator.c
index 7d1991754..d9052ec7d 100644
--- a/src/exchange/test_taler_exchange_aggregator.c
+++ b/src/exchange/test_taler_exchange_aggregator.c
@@ -304,11 +304,9 @@ maint_child_death (void *cls)
   const struct GNUNET_DISK_FileHandle *pr;
   char c[16];
   struct State *state;
-  const struct GNUNET_SCHEDULER_TaskContext *tc;
 
   child_death_task = NULL;
   pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ);
-  tc = GNUNET_SCHEDULER_get_task_context ();
   GNUNET_break (0 < GNUNET_DISK_file_read (pr, &c, sizeof (c)));
   GNUNET_OS_process_wait (aggregator_proc);
   GNUNET_OS_process_destroy (aggregator_proc);
diff --git a/src/wire/plugin_wire_test.c b/src/wire/plugin_wire_test.c
index 80e5aaa8f..07072f27a 100644
--- a/src/wire/plugin_wire_test.c
+++ b/src/wire/plugin_wire_test.c
@@ -191,11 +191,13 @@ context_task (void *cls)
 /**
  * Run the bank task now.
  *
- * @param tc context for which we should initiate running the task
+ * @param cls context for which we should initiate running the task
  */
 static void
-run_bt (struct TestClosure *tc)
+run_bt (void *cls)
 {
+  struct TestClosure *tc = cls;
+
   if (NULL != tc->bt)
     GNUNET_SCHEDULER_cancel (tc->bt);
   tc->bt = GNUNET_SCHEDULER_add_now (&context_task,
@@ -751,7 +753,6 @@ test_execute_wire_transfer (void *cls,
     GNUNET_free (eh);
     return NULL;
   }
-  run_bt (tc);
   return eh;
 }
 
@@ -831,7 +832,8 @@ libtaler_plugin_wire_test_init (void *cls)
       GNUNET_free (tc);
       return NULL;
     }
-    tc->ctx = GNUNET_CURL_init ();
+    tc->ctx = GNUNET_CURL_init (&run_bt,
+                                tc);
     if (NULL == tc->ctx)
     {
       GNUNET_break (0);