revise complex io interface