structure refactored and new interfaces used. product can be ran without
any errors