Added Producer Consumer + refactor