introduced some nonvolitle optimisation by holding onto a producerWriteLocation and consumerReadLocation