tested all code works so far