diff --git a/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/model/BaseCSorASDocumentProvider.java b/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/model/BaseCSorASDocumentProvider.java
index 2c8c7fc..de68b1e 100644
--- a/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/model/BaseCSorASDocumentProvider.java
+++ b/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/model/BaseCSorASDocumentProvider.java
@@ -49,6 +49,7 @@
 import org.eclipse.ocl.pivot.PivotPackage;
 import org.eclipse.ocl.pivot.internal.resource.OCLASResourceFactory;
 import org.eclipse.ocl.pivot.internal.resource.StandaloneProjectMap;
+import org.eclipse.ocl.pivot.internal.utilities.EnvironmentFactoryInternal;
 import org.eclipse.ocl.pivot.internal.utilities.PivotConstantsInternal;
 import org.eclipse.ocl.pivot.resource.ASResource;
 import org.eclipse.ocl.pivot.resource.CSResource;
@@ -550,8 +551,28 @@
 
 	@Override
 	protected void setDocumentResource(XtextDocument xtextDocument, IEditorInput editorInput, String encoding) throws CoreException {
-		super.setDocumentResource(xtextDocument, editorInput, encoding);
 		String loadedAs = loadedAsMap.get(xtextDocument);
+		boolean needModify = false;
+		if (!isText(loadedAs) && (xtextDocument instanceof BaseDocument)) {
+			EnvironmentFactoryInternal environmentFactory = ((BaseDocument)xtextDocument).basicGetEnvironmentFactory();
+			if (environmentFactory != null) {
+				needModify = true;
+			}
+		}
+		if (!needModify) {
+			super.setDocumentResource(xtextDocument, editorInput, encoding);
+		}
+		else {		// Fix Bug 573982 avoid concurrent load / reconcile
+			xtextDocument.modify(new IUnitOfWork<Object, XtextResource>()
+			{
+				@Override
+				public Object exec(XtextResource state) throws Exception {
+					BaseCSorASDocumentProvider.super.setDocumentResource(xtextDocument, editorInput, encoding);
+					return null;
+				}
+			});
+		}
+		assert loadedAs == loadedAsMap.get(xtextDocument);
 		if (!isText(loadedAs)) {
 			xtextDocument.readOnly(new IUnitOfWork<Object, XtextResource>()
 			{
diff --git a/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/model/BaseDocument.java b/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/model/BaseDocument.java
index 7240f24..86ddbec 100644
--- a/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/model/BaseDocument.java
+++ b/plugins/org.eclipse.ocl.xtext.base.ui/src/org/eclipse/ocl/xtext/base/ui/model/BaseDocument.java
@@ -61,6 +61,10 @@
 			super();
 		}
 
+		public @Nullable EnvironmentFactoryInternal basicGetEnvironmentFactory() {
+			return environmentFactory;
+		}
+
 		public void initEnvironmentFactory(@Nullable EnvironmentFactoryInternal environmentFactory) {
 			this.environmentFactory = environmentFactory;
 		}
@@ -121,6 +125,10 @@
 		super(tokenSource, composer);
 	}
 
+	public @Nullable EnvironmentFactoryInternal basicGetEnvironmentFactory() {
+		return baseStateAccess != null ? baseStateAccess.basicGetEnvironmentFactory() : null;
+	}
+
 	protected void checkForErrors(Resource resource) throws CoreException {
 		List<Resource.Diagnostic> errors = resource.getErrors();
 		if (errors.size() > 0) {
