safer, and still strict primitive to string conv