There are several implementations all over ETS, so it's probably worth it getting a solid one in Traits and import it from there. We got this one from envisage.

I'll revise it with Martin tomorrow.