Ditched the somewhat lame register() concept - subclasses can change this if they really want to.