optimized for lower-upper-case differentiation