handle negative amounts correctly