re-implement queue container