yet more refactoring to encompass rationals