used higher level abstraction for main queue