Protocol for avoiding pointers

it is sometimes useful: you can use negative values as special cases.