diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/commands/LoadCompleteOCLResourceHandler.java b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/commands/LoadCompleteOCLResourceHandler.java
index 21712f7..2f1d13d 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/commands/LoadCompleteOCLResourceHandler.java
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/commands/LoadCompleteOCLResourceHandler.java
@@ -1,7 +1,7 @@
 /**
  * <copyright>
  *
- * Copyright (c) 2012, 2013 E.D.Willink and others.
+ * Copyright (c) 2012, 2014 E.D.Willink and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,11 +9,14 @@
  *
  * Contributors:
  *   E.D.Willink - Initial API and implementation
+ *   Obeo - Enable export and re-use CompleteOCL files for validation
  *
  * </copyright>
  */
 package org.eclipse.ocl.examples.xtext.completeocl.ui.commands;
 
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -36,16 +39,19 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.edit.domain.EditingDomain;
 import org.eclipse.emf.edit.domain.IEditingDomainProvider;
 import org.eclipse.emf.edit.ui.action.LoadResourceAction.LoadResourceDialog;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.ocl.examples.domain.elements.DomainPackage;
 import org.eclipse.ocl.examples.pivot.Element;
 import org.eclipse.ocl.examples.pivot.ParserException;
@@ -57,7 +63,9 @@
 import org.eclipse.ocl.examples.pivot.utilities.PivotUtil;
 import org.eclipse.ocl.examples.pivot.validation.PivotEObjectValidator;
 import org.eclipse.ocl.examples.xtext.completeocl.CompleteOCLStandaloneSetup;
+import org.eclipse.ocl.examples.xtext.completeocl.internal.registry.CompleteOCLRegistry;
 import org.eclipse.ocl.examples.xtext.completeocl.ui.CompleteOCLUiModule;
+import org.eclipse.ocl.examples.xtext.completeocl.ui.messages.CompleteOCLUIMessages;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DropTarget;
@@ -65,14 +73,19 @@
 import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.FileTransfer;
 import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.FormAttachment;
 import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.ISources;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.eclipse.ui.part.ResourceTransfer;
 import org.eclipse.xtext.resource.XtextResource;
@@ -85,7 +98,7 @@
  * A LoadCompleteOCLResourceHandler supports the OCL->Load Document command.
  * 
  * It provides a pop-up dialog with DND capability for a Complete OCL document to be installed in the
- * ResourceSet associatied with the invoking selection.
+ * ResourceSet associated with the invoking selection.
  */
 public class LoadCompleteOCLResourceHandler extends AbstractHandler
 {
@@ -139,6 +152,7 @@
 		protected final Shell parent;
 		protected final @NonNull ResourceSet resourceSet;
 		private DropTarget target;
+		private Set<URI> registeredURIsForResourceSet;
 		
 		protected ResourceDialog(Shell parent, EditingDomain domain, @NonNull ResourceSet resourceSet) {
 			super(parent, domain);
@@ -168,7 +182,27 @@
 		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite createDialogArea = (Composite) super.createDialogArea(parent);
-			
+
+			// Button composite is the first children and we are expected to retrieve it as such...
+			Composite buttonComposite = (Composite)createDialogArea.getChildren()[0];
+
+			Button browseRegisteredOCLFiles = new Button(buttonComposite, SWT.PUSH);
+			browseRegisteredOCLFiles.setText(CompleteOCLUIMessages.LoadCompleteOCLResource_browseOCLFiles);
+			prepareBrowseRegisteredOCLFiles(browseRegisteredOCLFiles);
+			registeredURIsForResourceSet = CompleteOCLRegistry.getRegisteredResourceURIs(resourceSet);
+			if (registeredURIsForResourceSet.isEmpty()) {
+				browseRegisteredOCLFiles.setEnabled(false);
+			} else {
+				browseRegisteredOCLFiles.setEnabled(true);
+			}
+
+			{
+				FormData data = new FormData();
+				Control [] children = buttonComposite.getChildren();
+				data.right = new FormAttachment(children[0], -CONTROL_OFFSET);
+				browseRegisteredOCLFiles.setLayoutData(data);
+			}
+
 			Label helpLabel = new Label(createDialogArea, SWT.CENTER);
 		    helpLabel.setText("You may Drag and Drop from an Eclipse or Operating System Explorer.");
 		    {
@@ -182,6 +216,53 @@
 			return createDialogArea;
 		}
 		
+		private void prepareBrowseRegisteredOCLFiles(Button browseRegisteredOCLFiles) {
+			browseRegisteredOCLFiles.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent event) {
+					RegisteredOCLFilesDialog registeredOCLFilesDialog = new RegisteredOCLFilesDialog(getShell());
+					registeredOCLFilesDialog.open();
+					Object[] result = registeredOCLFilesDialog.getResult();
+					if (result != null) {
+						StringBuffer uris = new StringBuffer();
+
+						for (int i = 0, length = result.length; i < length; i++) {
+							uris.append(result[i]);
+							uris.append("  ");
+						}
+						uriField.setText((uriField.getText() + "  " + uris.toString()).trim());
+					}
+				}
+			});
+		}
+		
+		private class RegisteredOCLFilesDialog extends ElementListSelectionDialog
+		{
+			public RegisteredOCLFilesDialog(Shell parent) {
+				super(parent, new LabelProvider() {
+					@Override
+					public Image getImage(Object element) {
+						return ExtendedImageRegistry.getInstance().getImage(EcoreEditPlugin.INSTANCE.getImage("full/obj16/EPackage"));
+					}
+				});
+
+				setMultipleSelection(true);
+				setMessage(CompleteOCLUIMessages.LoadCompleteOCLResource_SelectRegisteredOCLFileURI);
+				setFilter("*");
+				setTitle(CompleteOCLUIMessages.LoadCompleteOCLResource_OCLFileSelection_label);
+			}
+			
+			@Override
+			protected Control createDialogArea(Composite parent)
+			{
+				Composite result = (Composite)super.createDialogArea(parent);
+				URI[] uris = registeredURIsForResourceSet.toArray(new URI[registeredURIsForResourceSet.size()]);
+				Arrays.sort(uris, new URIComparator());
+				setListElements(uris);
+				return result;
+			}
+		}
+
 		/**
 		 * Generate a popup to display a primaryMessage and optionally a detailMessage too.
 		 * @param primaryMessage
@@ -400,6 +481,12 @@
 			return asResource;
 		}
 	}
+	
+	public static class URIComparator implements Comparator<URI> {
+		public int compare(URI o1, URI o2) {
+			return o1.toString().compareTo(o2.toString());
+		}
+	}
 
 	public @Nullable Object execute(ExecutionEvent event) throws ExecutionException {
 		Object applicationContext = event.getApplicationContext();
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/messages/CompleteOCLUIMessages.java b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/messages/CompleteOCLUIMessages.java
index 10dcb08..c16d6ffe 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/messages/CompleteOCLUIMessages.java
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/messages/CompleteOCLUIMessages.java
@@ -1,7 +1,7 @@
 /**
  * <copyright>
  *
- * Copyright (c) 2013 Obeo and others.
+ * Copyright (c) 2013, 2014 Obeo and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,4 +32,8 @@
 	public static String NewWizardPage_pageDescription;
 	public static String NewWizardPage_pageSummary;
 	public static String NewWizardPage_pageTitle;
+	
+	public static String LoadCompleteOCLResource_browseOCLFiles;
+	public static String LoadCompleteOCLResource_SelectRegisteredOCLFileURI;
+	public static String LoadCompleteOCLResource_OCLFileSelection_label;
 }
\ No newline at end of file
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/messages/CompleteOCLUIMessages.properties b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/messages/CompleteOCLUIMessages.properties
index 0942f57..a0484de 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/messages/CompleteOCLUIMessages.properties
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl.ui/src/org/eclipse/ocl/examples/xtext/completeocl/ui/messages/CompleteOCLUIMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2013 Obeo and others.
+# Copyright (c) 2013, 2014 Obeo and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -14,3 +14,7 @@
 NewWizardPage_pageDescription=Creates a new Complete OCL file to complement a given metamodel.
 NewWizardPage_pageSummary=Complete OCL File
 NewWizardPage_pageTitle=New Complete OCL File
+
+LoadCompleteOCLResource_browseOCLFiles=Browse &Registered OCL Files...
+LoadCompleteOCLResource_SelectRegisteredOCLFileURI = &Select a registered OCL File URI: 
+LoadCompleteOCLResource_OCLFileSelection_label = OCL File Selection
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.xtext.completeocl/META-INF/MANIFEST.MF
index 8fd3d18..b073c51 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/META-INF/MANIFEST.MF
@@ -19,6 +19,7 @@
  org.eclipse.ocl.examples.xtext.completeocl.completeoclcs.util,
  org.eclipse.ocl.examples.xtext.completeocl.cs2as,
  org.eclipse.ocl.examples.xtext.completeocl.formatting,
+ org.eclipse.ocl.examples.xtext.completeocl.internal.registry;x-friends:="org.eclipse.ocl.examples.xtext.completeocl.ui",
  org.eclipse.ocl.examples.xtext.completeocl.parser.antlr,
  org.eclipse.ocl.examples.xtext.completeocl.parser.antlr.internal;x-friends:="org.eclipse.ocl.examples.xtext.completeocl.ui",
  org.eclipse.ocl.examples.xtext.completeocl.pivot2cs,
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/plugin.xml b/examples/org.eclipse.ocl.examples.xtext.completeocl/plugin.xml
index 79a0209..226d2ea 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl/plugin.xml
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/plugin.xml
@@ -2,6 +2,7 @@
 <?eclipse version="3.0"?>
 
 <plugin>
+  <extension-point id="complete_ocl_registry" name="Complete OCL Registry" schema="schema/complete_ocl_registry.exsd"/>
 
   <extension point="org.eclipse.core.contenttype.contentTypes">
 	<content-type id="org.eclipse.ocl.examples.completeOCL" name="%completeOCLName" 
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/schema/complete_ocl_registry.exsd b/examples/org.eclipse.ocl.examples.xtext.completeocl/schema/complete_ocl_registry.exsd
new file mode 100644
index 0000000..9b5aa3b
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/schema/complete_ocl_registry.exsd
@@ -0,0 +1,101 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.ocl.examples.xtext.completeocl" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.ocl.examples.xtext.completeocl" id="complete_ocl_registry" name="Complete OCL Registry"/>
+      </appInfo>
+      <documentation>
+         The complete OCL Registry allows clients to register their completeOCL files so that they can be reused to validate workspace models when the contributing plugin is installed.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="1" maxOccurs="unbounded">
+            <element ref="completeOCLResource"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="completeOCLResource">
+      <complexType>
+         <attribute name="resource" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A completeOCL file.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="resource"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.4.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         This could be used to register the CompleteOCL file &quot;EcoreValidation.ocl&quot; located within a &quot;model&quot; subfolder at the root of the plugin :
+
+&lt;extension point=&quot;org.eclipse.ocl.examples.xtext.completeocl.complete_ocl_registry&quot;&gt;
+	&lt;completeOCLResource resource=&quot;model/EcoreValidation.ocl&quot;&gt;
+&lt;/completeOCLResource&gt;
+      </documentation>
+   </annotation>
+
+
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2013 Obeo and others.
+
+All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at &lt;a 
+href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/internal/registry/CompleteOCLRegistry.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/internal/registry/CompleteOCLRegistry.java
new file mode 100644
index 0000000..40b965a
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/internal/registry/CompleteOCLRegistry.java
@@ -0,0 +1,100 @@
+/**
+ * Copyright (c) 2014 Obeo and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Obeo - initial API and implementation 
+ */
+package org.eclipse.ocl.examples.xtext.completeocl.internal.registry;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.ocl.examples.pivot.utilities.BaseResource;
+import org.eclipse.ocl.examples.xtext.base.basecs.impl.ImportCSImpl;
+
+/**
+ * This registry will be used to hold all complete ocl resources that have been
+ * made available through the extension point.
+ * 
+ * @author <a href="mailto:marwa.rostren@obeo.fr">Marwa Rostren</a>
+ */
+public class CompleteOCLRegistry {
+	private static final Set<URI> REGISTERED_URIS = new LinkedHashSet<URI>();
+
+	private CompleteOCLRegistry() {
+		// prevents instantiation
+	}
+
+	public static void addURI(URI resourceURI) {
+		REGISTERED_URIS.add(resourceURI);
+	}
+
+	public static void removeURI(URI resourceURI) {
+		REGISTERED_URIS.remove(resourceURI);
+	}
+
+	public static void clear() {
+		REGISTERED_URIS.clear();
+	}
+	
+	/**
+	 * Returns all registered URIs for a specific resources in resourceSet
+	 * 
+	 * @param resourceSet
+	 *            the resourceSet
+	 * @return all registered URIs for all resources in resourceSet
+	 */
+	public static Set<URI> getRegisteredResourceURIs(ResourceSet resourceSet) {
+		Set<URI> concernedRegisteredURIs = new LinkedHashSet<URI>();
+		
+		for (Resource resource : resourceSet.getResources()) {
+			EPackage epack = resource.getContents().get(0).eClass().getEPackage();
+			concernedRegisteredURIs.addAll(CompleteOCLRegistry
+				.getRegisteredResourceURIs(epack.getNsURI()));
+		}
+		return Collections.unmodifiableSet(concernedRegisteredURIs);
+	}
+	
+	/**
+	 * Returns a set of registered URIs for a specific model nsURI
+	 * 
+	 * @param modelNsURI
+	 *            a specific model nsURI
+	 * @return A set of registered URIs for a specific model nsURI
+	 */
+	private static Set<URI> getRegisteredResourceURIs(String modelNsURI) {
+		Set<URI> modelRegisteredURIs = new LinkedHashSet<URI>();
+		ResourceSet resourceSet = new ResourceSetImpl();
+		
+		for (URI uri: REGISTERED_URIS){
+			final BaseResource xtextResource;
+			if (uri.isPlatformResource()) {
+				xtextResource = (BaseResource) resourceSet.getResource(URI.createPlatformPluginURI(uri.toPlatformString(false), false), true);
+			} else {
+				xtextResource = (BaseResource) resourceSet.getResource(uri, true);
+			}
+			for (TreeIterator<EObject> iterator = xtextResource.getAllContents(); iterator.hasNext(); ) {
+				EObject eObject = iterator.next();
+				if (eObject instanceof ImportCSImpl) {
+					ImportCSImpl importObject = (ImportCSImpl) eObject;
+					if (("'" + modelNsURI + "'").equals(importObject.getPathName().toString())){
+						modelRegisteredURIs.add(uri);
+					}
+				}
+			}
+		}
+		return Collections.unmodifiableSet(modelRegisteredURIs);
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/internal/registry/CompleteOCLRegistryReader.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/internal/registry/CompleteOCLRegistryReader.java
new file mode 100644
index 0000000..a0e4a57
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/internal/registry/CompleteOCLRegistryReader.java
@@ -0,0 +1,69 @@
+/**
+ * Copyright (c) 2014 Obeo and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Obeo - initial API and implementation 
+ */
+package org.eclipse.ocl.examples.xtext.completeocl.internal.registry;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.plugin.RegistryReader;
+import org.eclipse.ocl.examples.xtext.completeocl.utilities.CompleteOCLPlugin;
+
+/**
+ * A plugin extension reader that populates the complete OCL resource registry.
+ * 
+ * @author <a href="mailto:marwa.rostren@obeo.fr">Marwa Rostren</a>
+ */
+public class CompleteOCLRegistryReader
+		extends RegistryReader {
+	private static final String TAG_RESOURCE = "completeOCLResource";
+
+	private static final String ATTRIBUTE_RESOURCE = "resource";
+
+	public CompleteOCLRegistryReader() {
+		super(Platform.getExtensionRegistry(), CompleteOCLPlugin.getPlugin()
+			.getBundle().getSymbolicName(),
+			CompleteOCLPlugin.OCL_RESOURCE_REGISTRY_PID);
+	}
+
+	@Override
+	protected boolean readElement(IConfigurationElement element, boolean add) {
+		if (!TAG_RESOURCE.equals(element.getName())) {
+			return false;
+		}
+
+		final String filePath = element.getAttribute(ATTRIBUTE_RESOURCE);
+		final boolean recognized;
+		if (filePath == null) {
+			logMissingAttribute(element, ATTRIBUTE_RESOURCE);
+			recognized = false;
+		} else {
+			final URI fileURI = makeFileURI(element, filePath);
+			if (add) {
+				CompleteOCLRegistry.addURI(fileURI);
+			} else {
+				CompleteOCLRegistry.removeURI(fileURI);
+			}
+			recognized = true;
+		}
+
+		return recognized;
+	}
+
+	private URI makeFileURI(IConfigurationElement element, String path) {
+		URI resourceURI = URI.createURI(path);
+		if (resourceURI.isRelative()) {
+			resourceURI = URI.createPlatformPluginURI(element
+				.getDeclaringExtension().getContributor().getName()
+				+ '/' + path, true);
+		}
+		return resourceURI;
+	}
+}
diff --git a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/utilities/CompleteOCLPlugin.java b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/utilities/CompleteOCLPlugin.java
index 00c0b66..c23ab16 100644
--- a/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/utilities/CompleteOCLPlugin.java
+++ b/examples/org.eclipse.ocl.examples.xtext.completeocl/src/org/eclipse/ocl/examples/xtext/completeocl/utilities/CompleteOCLPlugin.java
@@ -1,7 +1,7 @@
 /**
  * <copyright>
  *
- * Copyright (c) 2010, 2013 E.D.Willink and others.
+ * Copyright (c) 2010, 2014 E.D.Willink and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *
  * Contributors:
  *   E.D.Willink - Initial API and implementation
+ *   Obeo - Add complete ocl registry to enable export and re-use CompleteOCL files
  *
  * </copyright>
  *
@@ -21,6 +22,7 @@
 import org.eclipse.emf.common.EMFPlugin;
 import org.eclipse.emf.common.util.ResourceLocator;
 import org.eclipse.ocl.examples.xtext.completeocl.CompleteOCLStandaloneSetup;
+import org.eclipse.ocl.examples.xtext.completeocl.internal.registry.CompleteOCLRegistryReader;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -32,6 +34,7 @@
 public final class CompleteOCLPlugin extends EMFPlugin {
 	public static final String PLUGIN_ID = "org.eclipse.ocl.examples.xtext.completeocl";
 	public static final String LANGUAGE_ID = "org.eclipse.ocl.examples.xtext.completeocl.CompleteOCL";
+	public static final String OCL_RESOURCE_REGISTRY_PID = "complete_ocl_registry";
 	/**
 	 * Keep track of the singleton.
 	 * <!-- begin-user-doc -->
