diff --git a/src/main/java/teetime/stage/IterableProducer.java b/src/main/java/teetime/stage/IterableProducer.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d9eadde0d7e7d686de39a6f0378acd776afb8d8
--- /dev/null
+++ b/src/main/java/teetime/stage/IterableProducer.java
@@ -0,0 +1,21 @@
+package teetime.stage;
+
+import teetime.framework.ProducerStage;
+
+public class IterableProducer<O extends Iterable<T>, T> extends ProducerStage<T> {
+
+	private O iter = null;
+
+	public IterableProducer(final O iter) {
+		this.iter = iter;
+	}
+
+	@Override
+	protected void execute() {
+		for (T i : iter) {
+			this.send(this.outputPort, i);
+		}
+
+	}
+
+}
diff --git a/src/test/java/teetime/examples/pipe/SignalQueueConfiguration.java b/src/test/java/teetime/examples/pipe/SignalQueueConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..b86c70230b1a40280c9509631f6d2abab34865c5
--- /dev/null
+++ b/src/test/java/teetime/examples/pipe/SignalQueueConfiguration.java
@@ -0,0 +1,24 @@
+package teetime.examples.pipe;
+
+import teetime.framework.AnalysisConfiguration;
+import teetime.framework.ConsumerStage;
+import teetime.framework.ProducerStage;
+import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
+import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication;
+import teetime.framework.pipe.SpScPipe;
+import teetime.stage.Cache;
+import teetime.stage.Clock;
+
+public class SignalQueueConfiguration extends AnalysisConfiguration {
+
+	public SpScPipe pipe;
+
+	public SignalQueueConfiguration() {
+
+		ProducerStage<Long> first = new Clock();
+		ConsumerStage<Long> second = new Cache<Long>();
+
+		pipe = (SpScPipe) PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTER, PipeOrdering.QUEUE_BASED, false)
+				.create(first.getOutputPort(), second.getInputPort());
+	}
+}
diff --git a/src/test/java/teetime/examples/pipe/SignalQueueTest.java b/src/test/java/teetime/examples/pipe/SignalQueueTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b31ab2686bca1d73a7ae48670ffd7c8c3c18871
--- /dev/null
+++ b/src/test/java/teetime/examples/pipe/SignalQueueTest.java
@@ -0,0 +1,44 @@
+package teetime.examples.pipe;
+
+import java.util.ArrayList;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import teetime.framework.pipe.SpScPipe;
+import teetime.framework.signal.ISignal;
+import teetime.framework.signal.StartingSignal;
+import teetime.framework.signal.TerminatingSignal;
+import teetime.framework.signal.ValidatingSignal;
+
+public class SignalQueueTest {
+
+	@Test
+	public void executeTest() {
+		ArrayList<ISignal> list = new ArrayList<ISignal>();
+		list.add(new StartingSignal());
+		list.add(new TerminatingSignal());
+		list.add(new ValidatingSignal());
+		list.add(new StartingSignal());
+		list.add(new TerminatingSignal());
+		list.add(new ValidatingSignal());
+		list.add(new StartingSignal());
+		list.add(new TerminatingSignal());
+		list.add(new ValidatingSignal());
+
+		SpScPipe pipe = new SignalQueueConfiguration().pipe;
+		for (ISignal s : list) {
+			pipe.setSignal(s);
+		}
+
+		ArrayList<ISignal> secondList = new ArrayList<ISignal>();
+		while (true) {
+			ISignal temp = pipe.getSignal();
+			if (temp == null) {
+				break;
+			}
+			secondList.add(temp);
+		}
+		Assert.assertEquals(list, secondList);
+	}
+}