I added a parameter to conversion tables. This allows expandable function mapping through braces, and token replacement, again through braces. I remember seeing some people asking for key-word definitions. Since the code is happy with #, I could code something that would convert \keywords:n { \cs_new:Npn \mybox:nn #{text}...#{width} { \hbox to #{width} {#{text}} } } into \cs_new:Npn \mybox:nn #1...#2 { \hbox to #2 {#1} }. Is that the syntax we want for key-word arguments? Do we want keyword arguments at all? > \tl_nest_map_function:nN {ab{cd{e}f}g} \foo:n Now we have this function and \tl_replace_tokens:nn {ab{cd#{e}~} \foo: } { a { AA } d { \l_foo_tl } \foo: {~} # {hash} } giving AA b {c \l_foo_tl hash {e} ~} ~ -- Bruno