extracted follow related logic to a trait