more cleanups, add isnumeric()