Hi, the following points are my personal point of view. LaTeX3 want to separate into different layers. The core language is expl3. So before the next layers can be achieved the basement must be stable. However the points are not limited to the core language. It's also useful for package authors This introduction leads me to my points. It is useful to separate internal and global functions. + The code is more readable and the user knows which functions can be used or not. + The naming of auxiliary functions can be more natural + It's more object-oriented programming whereby some values will be returned. + Specifying auxiliary functions for one special task make it easier to find bugs (or features ;-) ) Of course I see some drawbacks which are more addressed to the LaTeX3 team. - Long decision process which function is local and which one is global. - Changes can lead to new bugs. The global drawback is the time which must be regarded in the schedule. However based on my small list and *own* opinion I think a clearer separation is a useful extension. Side note: As Paulo Cerada pointed out that it's quite common to see variables starting with _ which denote encapsulation. However I like a more clearer syntax like \i_foo_ whereby \i_ indicates "internal". This is the same like \l_ for local and \g_ for global variables. best regards Marco