why reinvent tolower()?