diff --git a/src/main/java/teetime/framework/Configuration.java b/src/main/java/teetime/framework/Configuration.java
index 2c10587fe47bc1ae8b4f5051fbc9b6e09ae441b8..fb6270a0cbc397aa90a1d7a7a20cbfe8a484502d 100644
--- a/src/main/java/teetime/framework/Configuration.java
+++ b/src/main/java/teetime/framework/Configuration.java
@@ -31,6 +31,7 @@ public abstract class Configuration extends AbstractCompositeStage {
 	private final IExceptionListenerFactory<?> factory;
 	private final ConfigurationContext context;
 
+	private boolean initialized;
 	private boolean executed;
 	private Stage startStage;
 
@@ -43,11 +44,19 @@ public abstract class Configuration extends AbstractCompositeStage {
 		this.context = new ConfigurationContext(this);
 	}
 
-	boolean isExecuted() {
+	boolean isInitialized() {
+		return initialized;
+	}
+
+	void setInitialized(final boolean executed) {
+		this.initialized = executed;
+	}
+
+	public boolean isExecuted() {
 		return executed;
 	}
 
-	void setExecuted(final boolean executed) {
+	public void setExecuted(final boolean executed) {
 		this.executed = executed;
 	}
 
diff --git a/src/main/java/teetime/framework/Execution.java b/src/main/java/teetime/framework/Execution.java
index e801ab6bdaa3570d8b19de73bb773dd74c65b834..782f0ea2a189d2b167d7108e1d7616f99cb75017 100644
--- a/src/main/java/teetime/framework/Execution.java
+++ b/src/main/java/teetime/framework/Execution.java
@@ -62,10 +62,10 @@ public final class Execution<T extends Configuration> {
 	public Execution(final T configuration, final boolean validationEnabled) {
 		this.configuration = configuration;
 		this.configurationContext = configuration.getContext();
-		if (configuration.isExecuted()) {
+		if (configuration.isInitialized()) {
 			throw new IllegalStateException("Configuration was already executed");
 		}
-		configuration.setExecuted(true);
+		configuration.setInitialized(true);
 		if (validationEnabled) {
 			validateStages();
 		}
@@ -133,6 +133,10 @@ public final class Execution<T extends Configuration> {
 	 * @since 2.0
 	 */
 	public void executeNonBlocking() {
+		if (configuration.isExecuted()) {
+			throw new IllegalStateException("Any configuration instance may only be executed once.");
+		}
+		configuration.setExecuted(true);
 		configurationContext.executeConfiguration();
 	}