Use Product trait instead of reflection

Much simpler code (probably faster too)