Basically replace the method we have now and use the more standard one. @richardcase to add any spike stuff, here or on a branch, even if untidy and unfinished.