even more final version of the assignment