diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java
index a0c78ef9cdc2e2dee3d91d3702481ac9ec5ddafe..f1ca4827efb8924794bdf8627d41c1dc6c936d8d 100644
--- a/src/main/java/teetime/framework/Analysis.java
+++ b/src/main/java/teetime/framework/Analysis.java
@@ -28,6 +28,7 @@ import org.slf4j.LoggerFactory;
 import teetime.framework.exceptionHandling.AbstractExceptionListener;
 import teetime.framework.exceptionHandling.IExceptionListenerFactory;
 import teetime.framework.exceptionHandling.IgnoringExceptionListenerFactory;
+import teetime.framework.signal.InitializingSignal;
 import teetime.framework.signal.ValidatingSignal;
 import teetime.framework.validation.AnalysisNotValidException;
 import teetime.util.Pair;
@@ -142,22 +143,24 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught
 				final RunnableProducerStage runnable = new RunnableProducerStage(stage);
 				thread = createThread(runnable, stage.getId());
 				this.finiteProducerThreads.add(thread);
+				InitializingSignal initializingSignal = new InitializingSignal();
+				stage.onSignal(initializingSignal, null);
 				break;
 			}
 			case BY_INTERRUPT: {
 				final RunnableProducerStage runnable = new RunnableProducerStage(stage);
 				thread = createThread(runnable, stage.getId());
+				InitializingSignal initializingSignal = new InitializingSignal();
+				stage.onSignal(initializingSignal, null);
 				this.infiniteProducerThreads.add(thread);
 				break;
 			}
 			default:
 				throw new IllegalStateException("Unhandled termination strategy: " + terminationStrategy);
 			}
-
-			// FIXME: remove, if this solves the #151 bug
-			// final Set<Stage> intraStages = traverseIntraStages(stage);
-			// final AbstractExceptionListener newListener = factory.createInstance();
-			// initializeIntraStages(intraStages, thread, newListener);
+			final Set<Stage> intraStages = traverseIntraStages(stage);
+			final AbstractExceptionListener newListener = factory.createInstance();
+			initializeIntraStages(intraStages, thread, newListener);
 		}
 
 	}
@@ -173,11 +176,6 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught
 		for (Stage intraStage : intraStages) {
 			intraStage.setOwningThread(thread);
 			intraStage.setExceptionHandler(newListener);
-			try {
-				intraStage.onInitializing();
-			} catch (Exception e) { // NOPMD(generic framework catch)
-				throw new IllegalStateException("The following exception occurs within initializing the analysis:", e);
-			}
 		}
 	}
 
diff --git a/src/main/java/teetime/framework/RunnableProducerStage.java b/src/main/java/teetime/framework/RunnableProducerStage.java
index a9f2c9a43de2558da0fea7f5e6e8ee7d3a0960a6..2b7b556af36be9f5dd00b4c827c48dea1b831dc5 100644
--- a/src/main/java/teetime/framework/RunnableProducerStage.java
+++ b/src/main/java/teetime/framework/RunnableProducerStage.java
@@ -15,7 +15,6 @@
  */
 package teetime.framework;
 
-import teetime.framework.signal.InitializingSignal;
 import teetime.framework.signal.StartingSignal;
 import teetime.framework.signal.TerminatingSignal;
 
@@ -27,8 +26,6 @@ public final class RunnableProducerStage extends AbstractRunnableStage {
 
 	@Override
 	protected void beforeStageExecution(final Stage stage) {
-		InitializingSignal initializingSignal = new InitializingSignal();
-		stage.onSignal(initializingSignal, null);
 		final StartingSignal startingSignal = new StartingSignal();
 		stage.onSignal(startingSignal, null);
 	}