split up perform method for single responsibility