properly detects % change