avoid treating some functions as pure where they're really not