use unsigned long for address manipulation