Refactored so overriding behavior is decoupled and separated into two distinct processes.