diff --git a/org.eclipse.osbp.xtext.messagedsl.ui/src-gen/org/eclipse/osbp/xtext/messagedsl/ui/internal/MessageDslActivator.java b/org.eclipse.osbp.xtext.messagedsl.ui/src-gen/org/eclipse/osbp/xtext/messagedsl/ui/internal/MessageDslActivator.java
deleted file mode 100644
index e68c248..0000000
--- a/org.eclipse.osbp.xtext.messagedsl.ui/src-gen/org/eclipse/osbp/xtext/messagedsl/ui/internal/MessageDslActivator.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * generated by Xtext 2.11.0
- */
-package org.eclipse.osbp.xtext.messagedsl.ui.internal;
-
-import com.google.common.collect.Maps;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-import java.util.Collections;
-import java.util.Map;
-import org.apache.log4j.Logger;
-import org.eclipse.osbp.xtext.messagedsl.MessageDslRuntimeModule;
-import org.eclipse.osbp.xtext.messagedsl.ui.MessageDslUiModule;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.eclipse.xtext.ui.shared.SharedStateModule;
-import org.eclipse.xtext.util.Modules2;
-import org.osgi.framework.BundleContext;
-
-/**
- * This class was generated. Customizations should only happen in a newly
- * introduced subclass. 
- */
-public class MessagedslActivator extends AbstractUIPlugin {
-
-	public static final String ORG_ECLIPSE_OSBP_XTEXT_MESSAGEDSL_MESSAGEDSL = "org.eclipse.osbp.xtext.messagedsl.MessageDsl";
-	
-	private static final Logger logger = Logger.getLogger(MessagedslActivator.class);
-	
-	private static MessagedslActivator INSTANCE;
-	
-	private Map<String, Injector> injectors = Collections.synchronizedMap(Maps.<String, Injector> newHashMapWithExpectedSize(1));
-	
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		INSTANCE = this;
-	}
-	
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		injectors.clear();
-		INSTANCE = null;
-		super.stop(context);
-	}
-	
-	public static MessagedslActivator getInstance() {
-		return INSTANCE;
-	}
-	
-	public Injector getInjector(String language) {
-		synchronized (injectors) {
-			Injector injector = injectors.get(language);
-			if (injector == null) {
-				injectors.put(language, injector = createInjector(language));
-			}
-			return injector;
-		}
-	}
-	
-	protected Injector createInjector(String language) {
-		try {
-			Module runtimeModule = getRuntimeModule(language);
-			Module sharedStateModule = getSharedStateModule();
-			Module uiModule = getUiModule(language);
-			Module mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule);
-			return Guice.createInjector(mergedModule);
-		} catch (Exception e) {
-			logger.error("Failed to create injector for " + language);
-			logger.error(e.getMessage(), e);
-			throw new RuntimeException("Failed to create injector for " + language, e);
-		}
-	}
-	
-	protected Module getRuntimeModule(String grammar) {
-		if (ORG_ECLIPSE_OSBP_XTEXT_MESSAGEDSL_MESSAGEDSL.equals(grammar)) {
-			return new MessageDslRuntimeModule();
-		}
-		throw new IllegalArgumentException(grammar);
-	}
-	
-	protected Module getUiModule(String grammar) {
-		if (ORG_ECLIPSE_OSBP_XTEXT_MESSAGEDSL_MESSAGEDSL.equals(grammar)) {
-			return new MessageDslUiModule(this);
-		}
-		throw new IllegalArgumentException(grammar);
-	}
-	
-	protected Module getSharedStateModule() {
-		return new SharedStateModule();
-	}
-	
-}
