add negative number support