First / last effects refactor