diff --git a/maestro/pool_client.c b/maestro/pool_client.c
index 51f9c77a34b3fdfa65defad4269277eed810c9d1..2958786bf01be3191942aa06fd0d321fb0057a11 100644
--- a/maestro/pool_client.c
+++ b/maestro/pool_client.c
@@ -616,17 +616,17 @@ mstro_pc__init_transfer_send_ticket(mstro_pool_operation op)
   ticket.n_segments = init->n_segments;
   ticket.distributed_cdo = init->distributed_cdo;
 
-  if (init->methods->supported[0] == MSTRO__POOL__TRANSPORT_KIND__MIO
+  if (op->pc_transport.methods->supported[0] == MSTRO__POOL__TRANSPORT_KIND__MIO
       && (!g_mio_available || (realsize % getpagesize()) != 0 )
       ){
     WARN("Not issuing a ticket with MIO. Either not available or CDO size (%zu)"
          " is not a multiple of the page size (%d)."
          " Will use maestro-core default transport\n",
          realsize, getpagesize());
-    init->methods->supported[0] = MSTRO__POOL__TRANSPORT_KIND__OFI;
+    op->pc_transport.methods->supported[0] = MSTRO__POOL__TRANSPORT_KIND__OFI;
   }
 
-  status = mstro_pc__select_transfer_method(op->pc_transport.target_cdo, init->methods,
+  status = mstro_pc__select_transfer_method(op->pc_transport.target_cdo, op->pc_transport.methods,
                                             &ticket);
   if(status!=MSTRO_OK) {
     ERR("Failed to select transport method\n");
@@ -812,7 +812,26 @@ mstro_pc__init_transfer_reg_app(mstro_pool_operation op)
   }
 
   assert(op->pc_transport.target_ep!=NULL);
-  
+
+  if(op->pc_transport.methods==NULL)
+  {
+      /**FIXME In a transfer ticket we do not know the transfer methods, so fake one*/
+      Mstro__Pool__TransportKind ofi_method[1] = { MSTRO__POOL__TRANSPORT_KIND__OFI };
+      Mstro__Pool__TransportMethods m = MSTRO__POOL__TRANSPORT_METHODS__INIT;
+      m.n_supported = 1;
+      m.supported = &ofi_method[0];
+      size_t len = mstro__pool__transport_methods__get_packed_size(&m);
+      uint8_t *buf = malloc(sizeof(uint8_t)*len);
+      mstro__pool__transport_methods__pack(&m,buf);
+      Mstro__Pool__TransportMethods *methods = mstro__pool__transport_methods__unpack(NULL, len, buf);
+      op->pc_transport.methods = methods;
+      free(buf);
+  }
+  if(op->kind == MSTRO_OP_PC_INIT_TRANSFER)
+  {
+      //we should consume the transport methods in msg here
+      op->msg->initiate_transfer->methods = NULL;
+  } 
   /* pass into registry */
   status = mstro_pc_app_register(op->pc_transport.target_ep,
                                  op->pc_transport.target_addr,
@@ -1235,18 +1254,8 @@ mstro_pc__op_maker(Mstro__Pool__MstroMsg **msg)
       op->pc_transport.target_ep = NULL;
       op->pc_transport.request = NULL;
       op->pc_transport.target_appid = (*msg)->transfer_ticket->srcid->id;
-      /**FIXME we do not know the transfer methods, so fake one*/
-      Mstro__Pool__TransportKind ofi_method[1] = { MSTRO__POOL__TRANSPORT_KIND__OFI };
-      Mstro__Pool__TransportMethods m = MSTRO__POOL__TRANSPORT_METHODS__INIT;
-      m.n_supported = 1;
-      m.supported = &ofi_method[0];
-      size_t len = mstro__pool__transport_methods__get_packed_size(&m);
-      uint8_t *buf = malloc(sizeof(uint8_t)*len);
-      mstro__pool__transport_methods__pack(&m,buf);
-      Mstro__Pool__TransportMethods *methods = mstro__pool__transport_methods__unpack(NULL, len, buf);
-      op->pc_transport.methods = methods;
+      op->pc_transport.methods = NULL;
       op->pc_transport.target_serialized_endpoint = (*msg)->transfer_ticket->src_serialized_endpoint;
-      free(buf);
       break;
     case MSTRO__POOL__MSTRO_MSG__MSG_DECLARE_ACK:
       op->kind = MSTRO_OP_PC_DECLARE_ACK;
diff --git a/maestro/pool_manager_registry.c b/maestro/pool_manager_registry.c
index 1b85223b120fc3ed38f0cdfb567fc6a799ecf028..6c53fc31c9e48831d7ecf023c5c33a2a2fe4ed37 100644
--- a/maestro/pool_manager_registry.c
+++ b/maestro/pool_manager_registry.c
@@ -292,20 +292,8 @@ mstro_pc_app_register(struct mstro_endpoint *ep,
     e->serialized_desc = serialized_desc;
     e->pending = false;
 
-    e->transport_methods=malloc(sizeof(Mstro__Pool__TransportMethods));
-    if(e==NULL) {
-      return MSTRO_NOMEM;
-    }
-    mstro__pool__transport_methods__init(e->transport_methods);
-    e->transport_methods->n_supported = transport_methods->n_supported;
-    e->transport_methods->supported = malloc(sizeof(Mstro__Pool__TransportKind)*transport_methods->n_supported);
-    if(e->transport_methods->supported==NULL) {
-      return MSTRO_NOMEM;
-    }
-    memcpy(e->transport_methods->supported,
-           transport_methods->supported,
-           sizeof(Mstro__Pool__TransportKind)*transport_methods->n_supported);
-
+    e->transport_methods=transport_methods;
+   
     /* FIXME: we should check that there is no previous entry and
      * document whether that's an error or a legal way of overriding
      * things */