engine refactored, checkRequirements extracted