added a FIFO implementation