Refactoring to turn promotion into separate object