this now supports negative numbers.