using abstract queue instead of specific implementation