initial fully working