add shopping cart, refactorring, general cleanup