Apply product refactor

DO NOT MERGE ATM