Tightened up some interfaces, added non-negative number class