> I suspect condition (2) is killer. While assuming "{" is catcode 1 is > fine for LaTeX-like input, what happens if you're using LaTeX3 with some > other input syntax (for example XML)? Ok, the code can be changed so that the condition becomes (2') There is only one character with catcode 1, and it is known when the package is loaded. Would it be enough? It could even be relaxed very slightly. But something that definitely cannot be coped with entirely robustly is having two catcode 1 characters at the same time (except if there is no catcode 2 character ^^): the following unbraces its argument. \catcode`\(=1\relax \catcode`\)=2\relax \def\UntilBrace#1#{\def\a{#1}\show\a} \UntilBrace((abc)){} \UntilBrace(abc){} \UntilBrace abc{} -- Bruno