added producer and consumer. probably doesn't compile