handles negative balances correctly