optimized for lower-upper-case distuiation