Adding product and some refactoring