Vladimir sent me a log file (I do so love reading \tracingall output:-) to see why my example preserved kerning but his lost it. it turns out to be a `feature' of inputenc.sty, so perhaps this is the wrong mailing list after all, but it does not seem worth moving this to latexbugs@.. now. \MakeUppercase works by making some local definitions, then putting its argument in an \edef (with \uppercase), then executing the token just defined. However \tracingall reveals that the definition of the edefed token in this case is: \reserved@a -> \uppercase {\protect \IeC {\CYRG }\protect \IeC {\CYRD }} \IeC is harmless, \CYRG and \CYRD are the required uppercase letters, and... ...\protect is \relax which breaks the inter-letter kerns. so I think that the definition in inputenc should be \def\IeC{% \ifx\protect\@typeset@protect \expandafter\@firstofone \else % \protect\IeC \noexpand\IeC \fi} but I'd need to think about it more before changing the distribution. David