add ! operator and fix numeric/string conversion