changed from tabs to spaces
added augment() functionality for user overrides of default behaviour