Could there also be a bug in the \setup command definition: \unexpanded\def\doinstallsetuphandler#1#2#3#4#5% {\unexpanded\def#2{\dodoubleempty#4}% \newtoks#5% \def#4[##1][##2]% {\ifsecondargument \def\docommand####1% we will have a simple one as well {\edef#3{##1}% \getparameters[#1#3][##2]% \the#5}% \processcommalist[##1]\docommand \else \let#3\empty \getparameters[#1][##1]% \the#5% \fi}} I would expect (difference is on the seventh line): \unexpanded\def\doinstallsetuphandler#1#2#3#4#5% {\unexpanded\def#2{\dodoubleempty#4}% \newtoks#5% \def#4[##1][##2]% {\ifsecondargument \def\docommand####1% we will have a simple one as well {\edef#3{####1}% <-- argument of \docommand instead of the comma-separated list \getparameters[#1#3][##2]% \the#5}% \processcommalist[##1]\docommand \else \let#3\empty \getparameters[#1][##1]% \the#5% \fi}} Vianney PS: just to learn some TeXnical details, could someone explain what the \unexpanded is supposed to do here?