more explicit implementation steps