The library forbids zero-width characters because of two issues: 1) they introduce ambiguities into the selection and placement rules, in particular confusing the algorithm for character-at-position. 2) someone could print an unending stream of zero-width characters and fill up memory. One could argue that neither of these is a serious issue, and that both are raised somewhat by overstriking, which we do accept (badly, at least in rio), but I was troubled by them anyway. Plan 9's font code is quite primitive compared to what some systems do (and some languages require), but it's served well enough for our purposes. The solution I concocted for zero-width characters struck me as rather elegant, although I knew it would cause trouble for anyone who legitimately had a use for them. 1) characters absent from the font are by definition zero-width. 2) all zero width characters are rendered as PJWs. In a stroke, this made sparse Unicode fonts bearable. You can take out the code that does this, but I think you'll raise some other issues because of other code that depends on those properties. A better solution might be to write a special operator that always draws the character - it's a trivial call to draw(). The real solution is a complete redesign of the character handling model to deal with all languages, right-to-left, Arabic letter-form-mutations, etc. etc. It's beyond my knowledge. -rob