block reading now uses io slave and completion channels