streamlined sync and async sub