Started making it into a module. Not releasable yet.