diff --git a/maestro/pool_client.c b/maestro/pool_client.c
index b27ea292035ec4b23295d7230165b9ee8c0cc72e..cc8e1c62f4a655262e58d303b2b156d413dc1faf 100644
--- a/maestro/pool_client.c
+++ b/maestro/pool_client.c
@@ -456,6 +456,22 @@ mstro_pc__handle_initiate_transfer(const Mstro__Pool__InitiateTransfer* init)
     DEBUG("Source CDO empty, doing NULL transfer\n");
     realsize = 0;
   }
+
+  mstro_status swhere=MSTRO_UNIMPL;
+  mstro_status shot=MSTRO_UNIMPL;
+  const void *hint_where_ptr=NULL;
+  swhere = mstro_attribute_dict_get(src_cdo->attributes,
+                                 ".maestro.core.cdo.mio.hint.where",
+                                 &vt, &hint_where_ptr, NULL, false);
+  const void *hint_hot_ptr=NULL;
+  shot = mstro_attribute_dict_get(src_cdo->attributes,
+                                 ".maestro.core.cdo.mio.hint.hot-index",
+                                 &vt, &hint_hot_ptr, NULL, false);
+  if (swhere == MSTRO_OK || shot == MSTRO_OK) {
+    init->methods->supported[0] = MSTRO__POOL__TRANSPORT_KIND__MIO;
+    DEBUG("MIO guided IO attribute set, implicitly switching to MIO transport\n");
+  }
+
   if (   init->methods->supported[0] == MSTRO__POOL__TRANSPORT_KIND__MIO
       && (!g_mio_available || (realsize % getpagesize()) != 0 )
       ){