Trindaz: we're trying to rip it out into it's own module as it is generally useful