more careful with numerical types