saved several bytes by switching to xchg!