Ok, probably best I leave out this private methods stuff from this PR. I'll create another for it.