first commit
Final product
generics update