Allow fractional progress. General refactoring