refactor to support subclass
reschedule
looks good