complete 1st version