diff --git a/maestro/pool_client.c b/maestro/pool_client.c
index c6bcbb04ef73c66baf750ef1442bc6e9b6a57902..02cb60f41362de98f00e65b8254b90c211b6668b 100644
--- a/maestro/pool_client.c
+++ b/maestro/pool_client.c
@@ -867,19 +867,20 @@ mstro_pc__handle_initiate_transfer(const Mstro__Pool__InitiateTransfer* init,
       return MSTRO_FAIL;
 #endif
       break;
-    case MSTRO__POOL__TRANSFER_TICKET__TICKET_OFI:
+    case MSTRO__POOL__TRANSFER_TICKET__TICKET_OFI: {
       NOISE("TICKET CASE RDMA\n");
-	  appid.id = init->dst_appid->id;
+      appid.id = init->dst_appid->id;
       ofi.dstid = &appid;
-	  struct mstro_pm_app_registry_entry *e;
+      struct mstro_pm_app_registry_entry *e;
       mstro_status status = mstro_pm_app_lookup(appid.id, &e);
-	  assert(e!=NULL); // we befriended dst app earlier, it should be in the registry
+      assert(e!=NULL); // we befriended dst app earlier, it should be in the registry
       ticket.src_serialized_endpoint = e->ep->serialized;
       ofi.h = &rh; /* rest to be filled in transport_execute */
       ticket.want_completion = 1; /* so we can refcount-- */
       ticket.ofi = &ofi;
-
-	  break;
+      
+      break;
+    }
     default:
       ERR("Unsupported ticket kind %d\n", ticket.ticket_case);
       return MSTRO_UNIMPL;
@@ -933,6 +934,18 @@ mstro_pc__handle_initiate_transfer(const Mstro__Pool__InitiateTransfer* init,
   }
 
   mstro_stats_add_counter(MSTRO_STATS_CAT_PROTOCOL, MSTRO_STATS_L_PC_NUM_TICKETS_OUT, 1);
+
+  /* cleanup ticket content that is not stack-allocated */
+  switch(ticket.ticket_case) {
+    case MSTRO__POOL__TRANSFER_TICKET__TICKET_OFI: {
+      free(ticket.ofi->h->mr_key.data);
+      ticket.ofi->h->mr_key.len = 0;
+      break;
+    }
+    default:
+      break;
+  }      
+  
   return MSTRO_OK;
 }