more stable ways to calculate progress