diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/Main.java b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/Main.java
index 1a023e5..00a4344 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/Main.java
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/Main.java
@@ -79,6 +79,13 @@
 		if (isTerminateOnError() && ret!=GENERATOR_OK)
 			System.exit(ret);
 	}
+	
+	/**
+	 * @return the unique {@link GlobalSettings}
+	 */
+	public static GlobalGeneratorSettings getSettings() {
+		return (GlobalGeneratorSettings) getInstance().getGeneratorSettings();
+	}
 
 	@Inject
 	private MainGen mainGenerator;
@@ -95,11 +102,13 @@
 	@Inject
 	protected IDataConfiguration dataConfig;
 
+	private Root genModelResult = null;
+	
 	/**
-	 * @return the unique {@link GlobalSettings}
+	 *  The resulting genmodel of {@linkplain #Main.runGenerator} if available.
 	 */
-	public static GlobalGeneratorSettings getSettings() {
-		return (GlobalGeneratorSettings) getInstance().getGeneratorSettings();
+	public Root getGenModel() {
+		return genModelResult;
 	}
 	
 	/**
@@ -146,7 +155,7 @@
 				return GENERATOR_ERROR;
 			}
 			
-			Root genModel = createGeneratorModel(getSettings().isGenerateAsLibrary(), getSettings().getGeneratorModelPath());
+			Root genModel = createGeneratorModel(getSettings().isGenerateAsLibrary(), getSettings().getGeneratorModelPath());		
 			if (diagnostician.isFailed() || genModel==null) {
 				logger.logInfo("errors during build of generator model");
 				logger.logError("-- terminating", null);
@@ -187,6 +196,9 @@
 				logger.logError("-- terminating", null);
 				return GENERATOR_ERROR;
 			}
+			
+			genModelResult = genModel;
+			
 			logger.logInfo("-- finished code generation");
 		}
 		finally {
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorModule.java
index 8bee757..3eaa133 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/setup/GeneratorModule.java
@@ -34,10 +34,14 @@
 	public void configure(Binder binder) {
 		super.configure(binder);
 
-		binder.bind(AbstractGenerator.class).to(Main.class);
 		binder.bind(GenericProtocolClassGenerator.class).to(ProtocolClassGen.class);
 		binder.bind(GenericActorClassGenerator.class).to(ActorClassGen.class);
 	}
+	
+	@Override
+	public Class<? extends AbstractGenerator> bindAbstractGenerator() {
+		return Main.class;
+	}
 
 	@Override
 	public Class<? extends ILanguageExtension> bindILanguageExtension() {
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/setup/GeneratorModule.java
index 14fea06..a2eba36 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/setup/GeneratorModule.java
@@ -37,14 +37,19 @@
 	public void configure(Binder binder) {
 		super.configure(binder);
 
-		binder.bind(AbstractGenerator.class).to(Main.class);
 		binder.bind(ProcedureHelpers.class).to(CppProcedureHelpers.class);
 		binder.bind(GenericProtocolClassGenerator.class).to(ProtocolClassGen.class);
 		binder.bind(GenericActorClassGenerator.class).to(ActorClassGen.class);
 
 		binder.bind(ImportUriResolver.class).to(ModelLocatorUriResolver.class);
 	}
-
+	
+	@Override
+	public Class<? extends AbstractGenerator> bindAbstractGenerator() {
+		return Main.class;
+	}
+	
+	@Override
 	public Class<? extends ILanguageExtension> bindILanguageExtension() {
 		return CppExtensions.class;
 	}
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
index e4becc5..4d0bcfd 100644
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
@@ -29,10 +29,13 @@
 	public void configure(Binder binder) {
 		super.configure(binder);
 		
-		binder.bind(AbstractGenerator.class).to(Main.class);
-		
 		binder.bind(GlobalGeneratorSettings.class).to(GlobalSettings.class);
 	}
+	
+	@Override
+	public Class<? extends AbstractGenerator> bindAbstractGenerator() {
+		return Main.class;
+	}
 
 	@Override
 	public Class<? extends ILanguageExtension> bindILanguageExtension() {
diff --git a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/IncrementalGenerationFileIo.java b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/IncrementalGenerationFileIo.java
index 8c227ac..c291ab6 100644
--- a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/IncrementalGenerationFileIo.java
+++ b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/IncrementalGenerationFileIo.java
@@ -56,6 +56,7 @@
 	 * then the file stored in the {@code infopath} is copied to {@code path} while preserving the file data.
 	 * In the other case the key is stored and the file is stored to {@code infopath} and {@code path}.
 	 */
+	@Override
 	public void generateFile(String desc, String path, String infopath, String file, CharSequence contents) {
 		
 		long oldCRC = 0;
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/setup/GeneratorModule.java
index 9dcad33..522c31e 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/setup/GeneratorModule.java
@@ -37,14 +37,17 @@
 	public void configure(Binder binder) {
 		super.configure(binder);
 
-		binder.bind(AbstractGenerator.class).to(Main.class);
 		binder.bind(GenericProtocolClassGenerator.class).to(ProtocolClassGen.class);
 		binder.bind(GenericActorClassGenerator.class).to(ActorClassGen.class);
 
 		binder.bind(ImportUriResolver.class).to(ModelLocatorUriResolver.class);
 
 		binder.bind(GlobalGeneratorSettings.class).to(GlobalSettings.class);
-
+	}
+	
+	@Override
+	public Class<? extends AbstractGenerator> bindAbstractGenerator() {
+		return Main.class;
 	}
 
 	@Override
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
index 95e9f10..c2d502a 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGeneratorBaseModule.java
@@ -70,6 +70,8 @@
 		binder.bind(IMessageIdGenerator.class).to(GenericProtocolClassGenerator.class);
 		binder.bind(IIfItemIdGenerator.class).to(GenericActorClassGenerator.class);
 		
+		if(bindAbstractGenerator() != null)
+			binder.bind(AbstractGenerator.class).to(bindAbstractGenerator());
 		binder.bind(IDetailCodeTranslator.class).to(AbstractGenerator.class);
 		
 		binder.bind(ILanguageExtensionBase.class).to(ILanguageExtension.class);
@@ -84,6 +86,12 @@
 		binder.bind(EValidator.Registry.class).toInstance(EValidator.Registry.INSTANCE);
 		binder.bind(org.eclipse.emf.ecore.util.Diagnostician.class).to(GenerationEMFDiagnostician.class).asEagerSingleton();
 	}
+	
+	/**
+	 * Abstract method that retrieves a class to which {@link AbstractGenerator} is bound
+	 * @return a Class extending {@link AbstractGenerator}
+	 */
+	public abstract Class<? extends AbstractGenerator> bindAbstractGenerator();
 
 	/**
 	 * Abstract method that retrieves a class to which {@link ILanguageExtension} is bound
