Product types phase 1

A lot of refactorings and starting with product types.