initial version finished