diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/BaseStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/BaseStandaloneSetup.java
index 0144c43..08f614e 100644
--- a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/BaseStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/BaseStandaloneSetup.java
@@ -17,10 +17,12 @@
 
 package org.eclipse.ocl.examples.xtext.base;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EValidator;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.examples.pivot.PivotStandaloneSetup;
 import org.eclipse.ocl.examples.xtext.base.basecs.BaseCSPackage;
 import org.eclipse.ocl.examples.xtext.base.basecs.util.BaseCSValidator;
@@ -38,7 +40,7 @@
 	
 	public static void doSetup() {
 		if (injector == null) {
-			new BaseStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new BaseStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -56,10 +58,21 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new BaseStandaloneSetup().createInjector();	
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
+	@SuppressWarnings("null")
+	@NonNull
 	public Injector createInjector() {
 		if (Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().containsKey("xmi"))
 			Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().remove("xmi");
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/InjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/InjectorProvider.java
new file mode 100644
index 0000000..050dda5
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/InjectorProvider.java
@@ -0,0 +1,12 @@
+package org.eclipse.ocl.examples.xtext.base;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+import com.google.inject.Injector;
+
+
+public interface InjectorProvider {
+
+	@NonNull
+	public Injector getInjector();
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASFactory.java
new file mode 100644
index 0000000..739c99f
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASFactory.java
@@ -0,0 +1,24 @@
+package org.eclipse.ocl.examples.xtext.base.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+public class BaseCS2ASFactory implements ICS2ASFactory {
+	
+	private final InjectorProvider injectorProvider;
+	
+	@Inject
+	public BaseCS2ASFactory(InjectorProvider injectorProvider) {
+		this.injectorProvider = injectorProvider;
+	}
+	
+	public Continuations createContinuations() {
+		return getInjector().getInstance(Continuations.class);
+	}
+	
+	protected final Injector getInjector() {
+		return injectorProvider.getInjector();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASRuntimeModule.java
new file mode 100644
index 0000000..2b64614
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCS2ASRuntimeModule.java
@@ -0,0 +1,16 @@
+package org.eclipse.ocl.examples.xtext.base.cs2as;
+
+import org.eclipse.xtext.service.AbstractGenericModule;
+
+
+/**
+ * Google Guice runtime module to define the bindings for the CS2AS framework
+ * 
+ * @author asbh
+ */
+public abstract class BaseCS2ASRuntimeModule extends AbstractGenericModule{
+
+	public Class<? extends Continuations> bindContinuations() {
+		return Continuations.class;
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCSPreOrderVisitor.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCSPreOrderVisitor.java
index 754a08c..5bebe40 100644
--- a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCSPreOrderVisitor.java
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/BaseCSPreOrderVisitor.java
@@ -67,8 +67,14 @@
 import org.eclipse.ocl.examples.xtext.base.basecs.util.VisitableCS;
 import org.eclipse.ocl.examples.xtext.base.utilities.ElementUtil;
 
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
 public class BaseCSPreOrderVisitor extends AbstractExtendingBaseCSVisitor<Continuation<?>, CS2PivotConversion>
 {
+	@Inject
+	ICS2ASFactory cs2asFactory;
+	
 	protected static class ClassSupersContinuation extends SingleContinuation<ClassCS>
 	{
 		private static Dependency[] computeDependencies(@NonNull CS2PivotConversion context, @NonNull ClassCS csElement) {
@@ -377,8 +383,17 @@
 	}
 
 	public BaseCSPreOrderVisitor(@NonNull CS2PivotConversion context) {
-		super(context);
+		super(context);	
+		getInjector().injectMembers(this); // FIXME workaround since this class is not injected by Guice yet.
 	}
+	
+	
+	// FIXME workaround since this class is not injected by guice yet
+	protected Injector getInjector() {
+		// overriden by derived classes
+		return null;
+	}
+	
 
 	public Continuation<?> visiting(@NonNull VisitableCS visitable) {
 		throw new IllegalArgumentException("Unsupported " + visitable.eClass().getName() + " for CS2Pivot PreOrder pass");
@@ -395,7 +410,7 @@
 		if (pivotElement == null) {
 			return null;
 		}
-		Continuations continuations = new Continuations();
+		Continuations continuations = cs2asFactory.createContinuations();
 		if (csClass.getOwnedTemplateSignature() != null) {
 			continuations.add(new TemplateSignatureContinuation(context, pivotElement, csClass));
 		}
@@ -536,4 +551,4 @@
 	public Continuation<?> visitWildcardTypeRefCS(@NonNull WildcardTypeRefCS csWildcardTypeRef) {
 		return null;
 	}
-}
\ No newline at end of file
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/ICS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/ICS2ASFactory.java
new file mode 100644
index 0000000..ce2dfae
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/cs2as/ICS2ASFactory.java
@@ -0,0 +1,14 @@
+package org.eclipse.ocl.examples.xtext.base.cs2as;
+
+
+
+/**
+ * The CS2AS framework classes Factory
+ * 
+ * @author asbh
+ */
+public interface ICS2ASFactory {
+		
+	Continuations createContinuations();
+
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/utilities/BaseCSResource.java b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/utilities/BaseCSResource.java
index 841716f..9a2f234 100644
--- a/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/utilities/BaseCSResource.java
+++ b/examples/org.eclipse.ocl.examples.xtext.base/src/org/eclipse/ocl/examples/xtext/base/utilities/BaseCSResource.java
@@ -33,8 +33,12 @@
 public interface BaseCSResource extends BaseResource
 {
 	/**
-	 * Create the CS2AS converter for the cs2asResourceMap conversions using metaModelManager.
+	 * @param cs2asResourceMap
+	 * @param metaModelManager
+	 * @return the CS2AS converter for the cs2asResourceMap conversions using metaModelManager.
+	 * @deprecated Google Injection use. It will removed to simplify API
 	 */
+	@Deprecated
 	@NonNull CS2Pivot createCS2Pivot(@NonNull Map<? extends Resource, ? extends ASResource> cs2asResourceMap, @NonNull MetaModelManager metaModelManager);
 
 	/**
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLInjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLInjectorProvider.java
new file mode 100644
index 0000000..1747f55
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLInjectorProvider.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.completeocl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Injector;
+
+
+public class CompleteOCLInjectorProvider implements InjectorProvider{
+
+	@NonNull
+	public Injector getInjector() {
+		return CompleteOCLStandaloneSetup.getInjector();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLRuntimeModule.java
index 88247ca..78f30d4 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLRuntimeModule.java
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLRuntimeModule.java
@@ -17,6 +17,7 @@
 package org.eclipse.ocl.examples.xtext.completeocl;
 
 import org.antlr.runtime.TokenSource;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
 import org.eclipse.ocl.examples.xtext.completeocl.parser.antlr.CompleteOCLParser;
 import org.eclipse.ocl.examples.xtext.completeocl.scoping.CompleteOCLScopeProvider;
 import org.eclipse.ocl.examples.xtext.completeocl.services.CompleteOCLHiddenTokenSequencer;
@@ -34,11 +35,6 @@
  */
 public class CompleteOCLRuntimeModule extends org.eclipse.ocl.examples.xtext.completeocl.AbstractCompleteOCLRuntimeModule
 {
-	@Override
-	public void configure(Binder binder) {
-		super.configure(binder);
-		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
-	}
 	
 	@SuppressWarnings("restriction")
 	@Override
@@ -68,4 +64,15 @@
 	public Class<? extends XtextResource> bindXtextResource() {
 		return CompleteOCLCSResource.class;
 	}
+	
+	/**
+	 * @return The language injector provider
+	 */
+	public Class<? extends InjectorProvider> bindInjectorProvider() {
+		return CompleteOCLInjectorProvider.class;
+	}
+	
+	public void configureEObjectValidation(Binder binder) {
+		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
+	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLStandaloneSetup.java
index 48de874..f307aae 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/CompleteOCLStandaloneSetup.java
@@ -16,8 +16,11 @@
  */
 package org.eclipse.ocl.examples.xtext.completeocl;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.examples.xtext.completeocl.completeoclcs.CompleteOCLCSPackage;
+import org.eclipse.ocl.examples.xtext.completeocl.cs2as.CompleteOCLCS2ASRuntimeModule;
 import org.eclipse.ocl.examples.xtext.completeocl.scoping.CompleteOCLScoping;
 import org.eclipse.ocl.examples.xtext.completeocl.utilities.CompleteOCLASResourceFactory;
 
@@ -32,8 +35,9 @@
 	private static Injector injector = null;
 	
 	public static void doSetup() {
+		assert !EMFPlugin.IS_ECLIPSE_RUNNING;			// Enforces Bug 382058 fix
 		if (injector == null) {
-			new CompleteOCLStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new CompleteOCLStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -50,14 +54,24 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new CompleteOCLStandaloneSetup().createInjector();
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
 	@Override
 	public Injector createInjector() {
 		init();
-		injector = super.createInjector();
+		injector = super.createInjector()
+				.createChildInjector(new CompleteOCLCS2ASRuntimeModule());
 		return injector;
 	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASFactory.java
new file mode 100644
index 0000000..6d20f55
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASFactory.java
@@ -0,0 +1,14 @@
+package org.eclipse.ocl.examples.xtext.completeocl.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+import org.eclipse.ocl.examples.xtext.essentialocl.cs2as.EssentialOCLCS2ASFactory;
+
+import com.google.inject.Inject;
+
+public class CompleteOCLCS2ASFactory extends EssentialOCLCS2ASFactory {
+
+	@Inject
+	public CompleteOCLCS2ASFactory(InjectorProvider injectorProvider) {
+		super(injectorProvider);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASRuntimeModule.java
new file mode 100644
index 0000000..483929f
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/cs2as/CompleteOCLCS2ASRuntimeModule.java
@@ -0,0 +1,12 @@
+package org.eclipse.ocl.examples.xtext.completeocl.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.cs2as.BaseCS2ASRuntimeModule;
+import org.eclipse.ocl.examples.xtext.base.cs2as.ICS2ASFactory;
+
+
+public class CompleteOCLCS2ASRuntimeModule extends BaseCS2ASRuntimeModule {
+		 
+	public Class<? extends ICS2ASFactory> bindICS2ASFactory() {
+		return CompleteOCLCS2ASFactory.class;
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLInjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLInjectorProvider.java
new file mode 100644
index 0000000..157b359
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLInjectorProvider.java
@@ -0,0 +1,14 @@
+package org.eclipse.ocl.examples.xtext.essentialocl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Injector;
+
+
+public class EssentialOCLInjectorProvider implements InjectorProvider {
+
+	public @NonNull	Injector getInjector() {
+		return EssentialOCLStandaloneSetup.getInjector();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLRuntimeModule.java
index c2ecd9c..4ced0a3 100644
--- a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLRuntimeModule.java
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLRuntimeModule.java
@@ -17,6 +17,7 @@
 package org.eclipse.ocl.examples.xtext.essentialocl;
 
 import org.antlr.runtime.TokenSource;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
 import org.eclipse.ocl.examples.xtext.essentialocl.parser.antlr.EssentialOCLParser;
 import org.eclipse.ocl.examples.xtext.essentialocl.services.RetokenizingTokenSource;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream;
@@ -30,13 +31,7 @@
 public class EssentialOCLRuntimeModule extends org.eclipse.ocl.examples.xtext.essentialocl.AbstractEssentialOCLRuntimeModule
 {	
 	public static final String LANGUAGE_ID = "org.eclipse.ocl.examples.xtext.essentialocl.EssentialOCL";
-
-	@Override
-	public void configure(Binder binder) {
-		super.configure(binder);
-		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
-	}
-	
+		
 	@Override
 	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
 		return RetokenizingEssentialOCLParser.class;
@@ -64,4 +59,19 @@
 			return super.createTokenStream(new RetokenizingTokenSource(tokenSource, getTokenDefProvider().getTokenDefMap()));
 		}
 	}
+	
+	/**
+	 * @return the language injector provider
+	 */
+	public Class<? extends InjectorProvider> bindInjectorProvider() {
+		return EssentialOCLInjectorProvider.class;
+	}
+	
+	public void configureEObjectValidation(Binder binder) {
+		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
+	}
+	
+//	public void configureCS2PivotResourceAdapter(Binder binder) {
+//		binder.bind(CS2PivotResourceAdapter.class);
+//	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLStandaloneSetup.java
index ac90f09..a2bccb6 100644
--- a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/EssentialOCLStandaloneSetup.java
@@ -23,7 +23,9 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.examples.xtext.base.BaseStandaloneSetup;
+import org.eclipse.ocl.examples.xtext.essentialocl.cs2as.EssentialOCLCS2ASRuntimeModule;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.EssentialOCLCSPackage;
 import org.eclipse.ocl.examples.xtext.essentialocl.scoping.EssentialOCLScoping;
 import org.eclipse.ocl.examples.xtext.essentialocl.utilities.EssentialOCLASResourceFactory;
@@ -41,7 +43,7 @@
 	public static void doSetup() {
 		assert !EMFPlugin.IS_ECLIPSE_RUNNING;			// Enforces Bug 382058 fix
 		if (injector == null) {
-			new EssentialOCLStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new EssentialOCLStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -62,7 +64,16 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new EssentialOCLStandaloneSetup().createInjector();
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
@@ -73,7 +84,8 @@
 			globalExtensionToFactoryMap.remove("xmi");
 		if (!globalExtensionToFactoryMap.containsKey(Resource.Factory.Registry.DEFAULT_EXTENSION))
 			globalExtensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
-		injector = super.createInjector();
+		injector = super.createInjector()
+				.createChildInjector(new EssentialOCLCS2ASRuntimeModule());
 		return injector;
 	}
 
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASFactory.java
new file mode 100644
index 0000000..1338a8e
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASFactory.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.essentialocl.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+import org.eclipse.ocl.examples.xtext.base.cs2as.BaseCS2ASFactory;
+
+import com.google.inject.Inject;
+
+
+public class EssentialOCLCS2ASFactory extends BaseCS2ASFactory {
+
+	@Inject
+	public EssentialOCLCS2ASFactory(InjectorProvider injectorProvider) {
+		super(injectorProvider);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASRuntimeModule.java
new file mode 100644
index 0000000..2c669aa
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCS2ASRuntimeModule.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.essentialocl.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.cs2as.BaseCS2ASRuntimeModule;
+import org.eclipse.ocl.examples.xtext.base.cs2as.ICS2ASFactory;
+
+
+public class EssentialOCLCS2ASRuntimeModule extends BaseCS2ASRuntimeModule {
+		
+	/**
+	 * @return 
+	 */ 
+	public Class<? extends ICS2ASFactory> bindICS2ASFactory() {
+		return EssentialOCLCS2ASFactory.class;
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCSPreOrderVisitor.java b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCSPreOrderVisitor.java
index 84b8aef..5c28de8 100644
--- a/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCSPreOrderVisitor.java
+++ b/examples/org.eclipse.ocl.examples.xtext.essentialocl/src/org/eclipse/ocl/examples/xtext/essentialocl/cs2as/EssentialOCLCSPreOrderVisitor.java
@@ -37,6 +37,7 @@
 import org.eclipse.ocl.examples.xtext.base.cs2as.CS2PivotConversion;
 import org.eclipse.ocl.examples.xtext.base.cs2as.Continuation;
 import org.eclipse.ocl.examples.xtext.base.cs2as.SingleContinuation;
+import org.eclipse.ocl.examples.xtext.essentialocl.EssentialOCLStandaloneSetup;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.CollectionTypeCS;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.ConstructorExpCS;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.ContextCS;
@@ -51,6 +52,8 @@
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.VariableCS;
 import org.eclipse.ocl.examples.xtext.essentialocl.essentialoclcs.util.AbstractEssentialOCLCSPreOrderVisitor;
 
+import com.google.inject.Injector;
+
 public class EssentialOCLCSPreOrderVisitor extends AbstractEssentialOCLCSPreOrderVisitor
 {
 	protected static class CollectionTypeContinuation extends SingleContinuation<CollectionTypeCS>
@@ -210,4 +213,9 @@
 	public Continuation<?> visitVariableCS(@NonNull VariableCS csVariable) {
 		return null;
 	}
+	
+	@Override
+	protected Injector getInjector() {
+		return EssentialOCLStandaloneSetup.getInjector();
+	}	
 }
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.markup/src/org/eclipse/ocl/examples/xtext/markup/MarkupStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.markup/src/org/eclipse/ocl/examples/xtext/markup/MarkupStandaloneSetup.java
index be3d7c8..8af79ff 100644
--- a/examples/org.eclipse.ocl.examples.xtext.markup/src/org/eclipse/ocl/examples/xtext/markup/MarkupStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.markup/src/org/eclipse/ocl/examples/xtext/markup/MarkupStandaloneSetup.java
@@ -32,7 +32,7 @@
 	
 	public static void doSetup() {
 		if (injector == null) {
-			new MarkupStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new MarkupStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreInjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreInjectorProvider.java
new file mode 100644
index 0000000..4cbf7ab
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreInjectorProvider.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.oclinecore;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Injector;
+
+
+public class OCLinEcoreInjectorProvider implements InjectorProvider{
+
+	@NonNull
+	public Injector getInjector() {
+		return OCLinEcoreStandaloneSetup.getInjector();
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreRuntimeModule.java
index 9dc5bdf..879e351 100644
--- a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreRuntimeModule.java
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreRuntimeModule.java
@@ -17,6 +17,7 @@
 package org.eclipse.ocl.examples.xtext.oclinecore;
 
 import org.antlr.runtime.TokenSource;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
 import org.eclipse.ocl.examples.xtext.essentialocl.services.RetokenizingTokenSource;
 import org.eclipse.ocl.examples.xtext.oclinecore.parser.antlr.OCLinEcoreParser;
 import org.eclipse.ocl.examples.xtext.oclinecore.services.OCLinEcoreValueConverterService;
@@ -33,17 +34,6 @@
  */
 public class OCLinEcoreRuntimeModule extends AbstractOCLinEcoreRuntimeModule
 {
-	@Override
-	public void configure(Binder binder) {
-		super.configure(binder);
-		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
-	}
-	
-	@Override
-	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
-		return RetokenizingOCLinEcoreParser.class;
-	}
-
 	public static class RetokenizingOCLinEcoreParser extends OCLinEcoreParser
 	{
 		@Override
@@ -51,7 +41,12 @@
 			return super.createTokenStream(new RetokenizingTokenSource(tokenSource, getTokenDefProvider().getTokenDefMap()));
 		}
 	}
-
+	
+	@Override
+	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
+		return RetokenizingOCLinEcoreParser.class;
+	}
+	
 	@Override
 	public Class<? extends IValueConverterService> bindIValueConverterService() {
 		return OCLinEcoreValueConverterService.class;
@@ -61,4 +56,15 @@
 	public Class<? extends XtextResource> bindXtextResource() {
 		return OCLinEcoreCSResource.class;
 	}
+	
+	/**
+	 * @return The language injector provider
+	 */
+	public Class<? extends InjectorProvider> bindInjectorProvider() {
+		return OCLinEcoreInjectorProvider.class;
+	}
+	
+	public void configureEObjectValidation(Binder binder) {
+		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
+	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreStandaloneSetup.java
index 2605d81..da3effd 100644
--- a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/OCLinEcoreStandaloneSetup.java
@@ -17,7 +17,10 @@
 
 package org.eclipse.ocl.examples.xtext.oclinecore;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.oclinecore.cs2as.OCLinEcoreCS2ASRuntimeModule;
 import org.eclipse.ocl.examples.xtext.oclinecore.oclinecorecs.OCLinEcoreCSPackage;
 import org.eclipse.ocl.examples.xtext.oclinecore.utilities.OCLinEcoreASResourceFactory;
 
@@ -33,7 +36,7 @@
 	
 	public static void doSetup() {
 		if (injector == null) {
-			new OCLinEcoreStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new OCLinEcoreStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -50,14 +53,24 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new OCLinEcoreStandaloneSetup().createInjector();
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
 	@Override
 	public Injector createInjector() {
 		init();
-		injector = super.createInjector();
+		injector = super.createInjector()
+			.createChildInjector(new OCLinEcoreCS2ASRuntimeModule());
 		return injector;
 	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASFactory.java
new file mode 100644
index 0000000..58a5eac
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASFactory.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.oclinecore.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+import org.eclipse.ocl.examples.xtext.essentialocl.cs2as.EssentialOCLCS2ASFactory;
+
+import com.google.inject.Inject;
+
+
+public class OCLinEcoreCS2ASFactory extends EssentialOCLCS2ASFactory {
+
+	@Inject
+	public OCLinEcoreCS2ASFactory(InjectorProvider injectorProvider) {
+		super(injectorProvider);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASRuntimeModule.java
new file mode 100644
index 0000000..25d6d9b
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclinecore/src/org/eclipse/ocl/examples/xtext/oclinecore/cs2as/OCLinEcoreCS2ASRuntimeModule.java
@@ -0,0 +1,11 @@
+package org.eclipse.ocl.examples.xtext.oclinecore.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.cs2as.BaseCS2ASRuntimeModule;
+import org.eclipse.ocl.examples.xtext.base.cs2as.ICS2ASFactory;
+
+public class OCLinEcoreCS2ASRuntimeModule extends BaseCS2ASRuntimeModule {
+
+	public Class<? extends ICS2ASFactory> bindICS2ASFactory() {
+		return OCLinEcoreCS2ASFactory.class;
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibInjectorProvider.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibInjectorProvider.java
new file mode 100644
index 0000000..2426725
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibInjectorProvider.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.oclstdlib;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+
+import com.google.inject.Injector;
+
+
+public class OCLstdlibInjectorProvider implements InjectorProvider {
+	
+	@NonNull
+	public Injector getInjector() {
+		return OCLstdlibStandaloneSetup.getInjector();
+	}
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibRuntimeModule.java
index 1f9761d..99102be 100644
--- a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibRuntimeModule.java
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibRuntimeModule.java
@@ -18,6 +18,7 @@
 package org.eclipse.ocl.examples.xtext.oclstdlib;
 
 import org.antlr.runtime.TokenSource;
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
 import org.eclipse.ocl.examples.xtext.essentialocl.services.RetokenizingTokenSource;
 import org.eclipse.ocl.examples.xtext.oclstdlib.parser.antlr.OCLstdlibParser;
 import org.eclipse.ocl.examples.xtext.oclstdlib.scoping.OCLstdlibScopeProvider;
@@ -39,12 +40,7 @@
  */
 @SuppressWarnings("restriction")
 public class OCLstdlibRuntimeModule extends org.eclipse.ocl.examples.xtext.oclstdlib.AbstractOCLstdlibRuntimeModule
-{	
-	@Override
-	public void configure(Binder binder) {
-		super.configure(binder);
-		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
-	}
+{
 
 	public Class<? extends CompositeEValidator> bindCompositeEValidator() {
 		return OCLstdlibCompositeEValidator.class;
@@ -81,4 +77,16 @@
 	public Class<? extends XtextResource> bindXtextResource() {
 		return OCLstdlibCSResource.class;
 	}
+	
+	/**
+	 * @return The language injector provider
+	 */
+	public Class<? extends InjectorProvider> bindInjectorProvider() {
+		return OCLstdlibInjectorProvider.class;
+	}
+	
+	
+	public void configureEObjectValidation(Binder binder) {
+		binder.bindConstant().annotatedWith(Names.named(org.eclipse.xtext.validation.CompositeEValidator.USE_EOBJECT_VALIDATOR)).to(false);
+	}
 }
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibStandaloneSetup.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibStandaloneSetup.java
index 0517703..ed04bb1 100644
--- a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibStandaloneSetup.java
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/OCLstdlibStandaloneSetup.java
@@ -17,8 +17,11 @@
 
 package org.eclipse.ocl.examples.xtext.oclstdlib;
 
+import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.examples.xtext.oclstdlib.cs2as.OCLstdlibCS2ASRuntimeModule;
 import org.eclipse.ocl.examples.xtext.oclstdlib.oclstdlibcs.OCLstdlibCSPackage;
 import org.eclipse.ocl.examples.xtext.oclstdlib.oclstdlibcs.util.OCLstdlibCSValidator;
 import org.eclipse.ocl.examples.xtext.oclstdlib.scoping.OCLstdlibScoping;
@@ -35,8 +38,9 @@
 	private static Injector injector = null;
 	
 	public static void doSetup() {
+		assert !EMFPlugin.IS_ECLIPSE_RUNNING;			// Enforces Bug 382058 fix
 		if (injector == null) {
-			new OCLstdlibStandaloneSetup().createInjectorAndDoEMFRegistration();
+			injector = new OCLstdlibStandaloneSetup().createInjectorAndDoEMFRegistration();
 		}
 	}
 	
@@ -55,15 +59,24 @@
 	/**
 	 * Return the Injector for this plugin.
 	 */
+	@SuppressWarnings("null")
+	@NonNull
 	public static final Injector getInjector() {
+		if (injector == null) {
+			if (EMFPlugin.IS_ECLIPSE_RUNNING) {
+				injector =  new OCLstdlibStandaloneSetup().createInjector();
+			} else {
+				doSetup();
+			}
+		}
 		return injector;
 	}
 
 	@Override
 	public Injector createInjector() {
 		init();
-		injector = super.createInjector();
+		injector = super.createInjector()
+				.createChildInjector(new OCLstdlibCS2ASRuntimeModule());
 		return injector;
 	}
-}
-
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASFactory.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASFactory.java
new file mode 100644
index 0000000..1a9a405
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASFactory.java
@@ -0,0 +1,15 @@
+package org.eclipse.ocl.examples.xtext.oclstdlib.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.InjectorProvider;
+import org.eclipse.ocl.examples.xtext.essentialocl.cs2as.EssentialOCLCS2ASFactory;
+
+import com.google.inject.Inject;
+
+
+public class OCLstdlibCS2ASFactory extends EssentialOCLCS2ASFactory {
+
+	@Inject
+	public OCLstdlibCS2ASFactory(InjectorProvider injectorProvider) {
+		super(injectorProvider);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASRuntimeModule.java b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASRuntimeModule.java
new file mode 100644
index 0000000..18252ad
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.oclstdlib/src/org/eclipse/ocl/examples/xtext/oclstdlib/cs2as/OCLstdlibCS2ASRuntimeModule.java
@@ -0,0 +1,12 @@
+package org.eclipse.ocl.examples.xtext.oclstdlib.cs2as;
+
+import org.eclipse.ocl.examples.xtext.base.cs2as.ICS2ASFactory;
+import org.eclipse.xtext.service.AbstractGenericModule;
+
+
+public class OCLstdlibCS2ASRuntimeModule extends AbstractGenericModule {
+	
+	public Class<? extends ICS2ASFactory> bindICS2ASFactory() {
+		return OCLstdlibCS2ASFactory.class;
+	}
+}
\ No newline at end of file
