+1 for the idea of separating the $links soup into several keys I'm not sure this is coherent with the rest of core, but I like the possibilites left to theme (filtering out, ordering...) I think leaving the render of the links to the themes is not a good idea, however : Having html code produced by l ("el"...) outside a theme function is considered OK, so what's the point of having a supplemental layer ? (plus you'd have to support the other params l handles : querystring, fragment...) Besides, modules might want to output other things than an actual <a> tag (simple text, whatever...). They are currently allowed to do so, which I think is a good thing. If their output is "complicated", it is up to the module coder ("good coding practice") to have a theme function provide that output.