implementing do_task