only deal with strings internally