Hello Hans, I compared tex-text and trep, tlig. Since you map features=default to trep and tlig, and both of them further to tex-text (twice), tex-text could be split in two parts as well, so that you can make one-to-one mapping. Should I make those changes and seny you the two files? (Twice 300 bytes to be added to ConTeXt + souce, which is approximately the same as written below.) 1.) TREP function fonts.initializers.base.otf.texquotes(tfm,value) tfm.characters[0x0022] = table.fastcopy(tfm.characters[0x201D]) tfm.characters[0x0027] = table.fastcopy(tfm.characters[0x2019]) tfm.characters[0x0060] = table.fastcopy(tfm.characters[0x2018]) end Corresponding lines from XeTeX: U+0022; ; ; >;U+201D; ; " -> right double quote U+0027; ; ; <>;U+2019; ; ' -> right single quote U+0060; ; ; <>;U+2018; ; ` -> left single quote 2.) TLIG { "endash", "hyphen hyphen" }, U+002D U+002D; ; ; <>;U+2013; ; -- -> en dash { "emdash", "hyphen hyphen hyphen" }, U+002D U+002D U+002D;<>;U+2014; ; --- -> em dash { "quotedblright", "quotesingle quotesingle" }, U+0027 U+0027; <>;U+201D; ; '' -> right double quote { "quotedblleft", "grave grave" }, U+0060 U+0060; <>;U+201C; ; `` -> left double quote { "quotedblbase", "comma comma" } U+002C U+002C; <>;U+201E; ; ,, -> DOUBLE LOW-9 QUOTATION MARK missing from tex-text (not needed so far) { "quotedblleft", "quoteleft quoteleft" }, 0x2018 0x2018 <> 0x201C ; 2x left single quote -> left double quote { "quotedblright", "quoteright quoteright" }, 0x2019 0x2019 <> 0x201D ; 2x right single quote -> right double quote 3.) Only in XeTeX's tex-text (Do people need it?): U+0021 U+0060; <>;U+00A1; ; !` -> inverted exclam U+003F U+0060; <>;U+00BF; ; ?` -> inverted question U+003C U+003C; <>;U+00AB; ; << -> LEFT POINTING GUILLEMET U+003E U+003E; <>;U+00BB; ; >> -> RIGHT POINTING GUILLEMET Plus, there's a little problem with this patch that I have sent you (it's not in stable yet, so it might make sense to fix it before releasing): \definefontsynonym[Dummy] [name:\typescripttwo] [features=default] \definefontsynonym[DummyItalic] [name:\typescripttwo/I] [features=default] \definefontsynonym[DummyBold] [name:\typescripttwo/B] [features=default] \definefontsynonym[DummyBoldItalic][name:\typescripttwo/BI][features=default] \definefontsynonym[DummyCaps] [name:\typescripttwo] [features=smallcaps] The problem is that "features=default" implies "script=latn", which is not always desired. A copy of mapping=tex-text comes from tlig & trep substitution. I assume that script=latn;language=dflt;+liga;+kern; is always on by default (were needed), so basically mapping=tex-text is the only thing that really needs to be added. [Iwona-Bold.otf]:script=latn;language=dflt;+liga;+kern;mapping=tex-text;mapping=tex-text; Some (non-latin) fonts complain when one requests non-existing features. Also, it might be handy to be able to define \definetypeface[basic][rm][Xserif][whatever][script=arab,language=...] (for now forget that one, interface needs to be extended once and properly). \definefontsynonym[a][file:Iwona-Bold.otf][mapping=tex-text] doesn't work, so the only way seems to be \definefontfeature[xetex][mapping=tex-text] \definefontsynonym[a][file:Iwona-Bold.otf][xetex] I have tried to use \definefontfeature[xetex][mapping=tex-text] \definefontfeature[caps][+smcp] \definefontsynonym[a][file:Iwona-Bold.otf][features={xetex,caps}] but that didn't work. Mojca