diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/.classpath b/plugins/proxy/org.eclipse.papyrus.proxy.ui/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/.project b/plugins/proxy/org.eclipse.papyrus.proxy.ui/.project
new file mode 100644
index 0000000..169b589
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.papyrus.proxy.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/proxy/org.eclipse.papyrus.proxy.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/META-INF/MANIFEST.MF b/plugins/proxy/org.eclipse.papyrus.proxy.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..cbe34b6
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.proxy.ui;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.osgi;bundle-version="3.12.50",
+ org.eclipse.ui.workbench;bundle-version="3.110.1",
+ org.eclipse.core.runtime;bundle-version="3.13.0",
+ org.eclipse.ui;bundle-version="3.109.0",
+ org.eclipse.uml2.uml,
+ org.eclipse.papyrus.proxy;bundle-version="0.7.0",
+ org.eclipse.emf.edit.ui,
+ org.eclipse.core.resources,
+ org.eclipse.papyrus.infra.ui
+Bundle-Activator: org.eclipse.papyrus.proxy.ui.Activator
+Bundle-Vendor: %providerName
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/about.html b/plugins/proxy/org.eclipse.papyrus.proxy.ui/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/build.properties b/plugins/proxy/org.eclipse.papyrus.proxy.ui/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/plugin.properties b/plugins/proxy/org.eclipse.papyrus.proxy.ui/plugin.properties
new file mode 100644
index 0000000..ddcab68
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/plugin.properties
@@ -0,0 +1,14 @@
+#################################################################################
+# Copyright (c) 2008, 2017 CEA LIST.
+# 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:
+#     Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - initial API and implementation
+##################################################################################
+pluginName=GUI Proxy plugin
+providerName=Eclipse Modeling Project
+
+pluginDescription=The goal of this plugin is to bring GUI to connect other element of the environment
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/plugin.xml b/plugins/proxy/org.eclipse.papyrus.proxy.ui/plugin.xml
new file mode 100644
index 0000000..28c810c
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/plugin.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            categoryId="org.eclipse.papyrus.editor.category"
+            defaultHandler="org.eclipse.papyrus.proxy.ui.handler.LinkToEcoreModelHandler"
+            description="Link to ecore element"
+            id="org.eclipse.papyrus.proxy.ui.handler.LinkToEcoreModelHandler"
+            name="Link to ecore element">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            allPopups="false"
+            locationURI="popup:org.eclipse.papyrus.views.modelexplorer.modelexplorer.popup">
+         <command
+               commandId="org.eclipse.papyrus.proxy.ui.handler.LinkToEcoreModelHandler"
+               id="org.eclipse.papyrus.proxy.ui.handler.LinkToEcoreModelMenu"
+               label="Link to ecore element"
+               style="push">
+            <visibleWhen
+                  checkEnabled="true">
+            </visibleWhen>
+         </command>
+      </menuContribution>
+   </extension>
+   <extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.papyrus.proxy.ui.Activator">
+      </startup>
+   </extension>
+
+</plugin>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/Activator.java b/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/Activator.java
new file mode 100644
index 0000000..9122916
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/Activator.java
@@ -0,0 +1,61 @@
+package org.eclipse.papyrus.proxy.ui;
+
+import org.eclipse.ui.IStartup;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * This class manage the launch and stop of the plugin
+ *
+ */
+public class Activator extends AbstractUIPlugin implements IStartup {
+
+	/** The plug-in ID **/
+	public static final String PLUGIN_ID = "org.eclipse.papyrus.proxy.ui"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+	@Override
+	public void earlyStartup() {
+		// TODO Auto-generated method stub
+
+	}
+
+
+}
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/apiaccess/PapyrusResourceAccess.java b/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/apiaccess/PapyrusResourceAccess.java
new file mode 100644
index 0000000..100b8e1
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/apiaccess/PapyrusResourceAccess.java
@@ -0,0 +1,162 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ *  Patrick Tessier (CEA LIST) patrick.tessier@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.proxy.ui.apiaccess;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+import org.eclipse.ui.dialogs.PatternFilter;
+import org.eclipse.ui.model.BaseWorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.osgi.framework.ServiceException;
+
+
+/**
+ * This class is used to access of loading file by using papyrus
+ * 
+ */
+public class PapyrusResourceAccess {
+
+	protected ModelSet modelSet;
+
+	/**
+	 * 
+	 * @return the editing domain of papyrus
+	 */
+	public TransactionalEditingDomain getDomain() {
+		return getCurrentModelSet().getTransactionalEditingDomain();
+	}
+
+	public EObject getRootEObjectFromResource() {
+		ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(Display.getDefault().getActiveShell(), new WorkbenchLabelProvider(), new BaseWorkbenchContentProvider());
+		dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
+
+		PatternFilter UMLPattern = new PatternFilter() {
+			@Override
+			public boolean isElementVisible(Viewer viewer, Object element) {
+				if (viewer != null) {
+					return super.isElementVisible(viewer, element);
+				}
+				return true;
+			}
+		};
+		UMLPattern.setPattern("*.*");
+		dialog.setAllowMultiple(false);
+		dialog.addFilter(UMLPattern);
+		dialog.open();
+		if (dialog.getResult().length > 0) {
+			Object object = dialog.getResult()[0];
+			if (object instanceof IFile) {
+				IFile aReviewModel = ((IFile) object);
+				Resource tmpResource = getCurrentModelSet().getResource(URI.createPlatformResourceURI(aReviewModel.getFullPath().toOSString(), true), true);
+				return tmpResource.getContents().get(0);
+
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * used to get the the current workbenchPart
+	 * 
+	 * @return
+	 */
+	protected IWorkbenchPart getBootstrapPart() {
+
+
+		IWorkbenchPart part = null;
+		try {
+			IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+			if (activeWorkbenchWindow != null) {
+				IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
+				if (activePage != null) {
+					part = activePage.getActiveEditor();
+				}
+			}
+		} catch (NullPointerException e) {
+			// An element is not active yet
+			return null;
+		}
+		if (isImportant(part)) {
+			return part;
+		}
+		// The current active part is not for us.
+		return null;
+	}
+
+	/**
+	 * return true if the activated part is a {@link IMultiDiagramEditor}.
+	 *
+	 * @see org.eclipse.ui.part.PageBookView#isImportant(org.eclipse.ui.IWorkbenchPart)
+	 *
+	 * @param part
+	 * @return
+	 */
+	protected boolean isImportant(IWorkbenchPart part) {
+
+
+		if (part instanceof IMultiDiagramEditor) {
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * 
+	 * @return the current model set of papyrus.
+	 */
+	public ModelSet getCurrentModelSet() {
+		if (modelSet != null) {
+			return modelSet;
+		}
+		IWorkbenchPart part = getBootstrapPart();
+		if (part instanceof IMultiDiagramEditor) {
+			try {
+				modelSet = getServiceRegistry().getService(ModelSet.class);
+			} catch (ServiceException e) {
+				e.printStackTrace();
+			} catch (org.eclipse.papyrus.infra.core.services.ServiceException e) {
+				e.printStackTrace();
+			}
+		}
+		return modelSet;
+	}
+
+	/**
+	 * @return current service registry
+	 */
+	public ServicesRegistry getServiceRegistry() {
+		IWorkbenchPart part = getBootstrapPart();
+		if (part instanceof IMultiDiagramEditor) {
+			ServicesRegistry registry = ((IMultiDiagramEditor) part).getServicesRegistry();
+			return registry;
+		}
+		return null;
+	}
+
+}
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/handler/LinkToEcoreModelHandler.java b/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/handler/LinkToEcoreModelHandler.java
new file mode 100644
index 0000000..88fadd9
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/handler/LinkToEcoreModelHandler.java
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ *  Patrick Tessier (CEA LIST) patrick.tessier@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.proxy.ui.handler;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.proxy.command.SetEReferenceCommand;
+import org.eclipse.papyrus.proxy.proxy.EcoreReference;
+import org.eclipse.papyrus.proxy.ui.apiaccess.PapyrusResourceAccess;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+public class LinkToEcoreModelHandler extends ProxyAbstractHandler {
+
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		PapyrusResourceAccess papyrusResourceAccess = new PapyrusResourceAccess();
+		EObject root = papyrusResourceAccess.getRootEObjectFromResource();
+		if (root != null) {
+			SetEReferenceCommand setEReferenceCommand = new SetEReferenceCommand(papyrusResourceAccess.getDomain(), getSelection(), root);
+			papyrusResourceAccess.getDomain().getCommandStack().execute(setEReferenceCommand);
+		}
+		return null;
+	}
+
+
+	@Override
+	public boolean isEnabled() {
+		Element selectedElement = getSelection();
+		if (UMLUtil.getStereotypeApplication(selectedElement, EcoreReference.class) != null) {
+			return true;
+		}
+		return false;
+	}
+}
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/handler/ProxyAbstractHandler.java b/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/handler/ProxyAbstractHandler.java
new file mode 100644
index 0000000..39099e8
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy.ui/src/org/eclipse/papyrus/proxy/ui/handler/ProxyAbstractHandler.java
@@ -0,0 +1,92 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2017 CEA LIST.
+ *
+ *
+ * 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:
+ *  Patrick Tessier (CEA LIST) patrick.tessier@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.proxy.ui.handler;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.uml2.uml.Element;
+
+/**
+ * This is an abstract handler that can be used by other handlers. it provides methods to get list of selected elements.
+ *
+ */
+public abstract class ProxyAbstractHandler extends AbstractHandler {
+
+	/**
+	 * the constructor
+	 */
+	public ProxyAbstractHandler() {
+		super();
+	}
+
+	/**
+	 * getSelected element in the diagram or in hte model explorer
+	 * 
+	 * @return Element or null
+	 */
+	protected Element getSelection() {
+		org.eclipse.uml2.uml.Element selectedElement = null;
+		final ISelectionService selectionService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
+		final ISelection selection = selectionService.getSelection();
+
+		if (selection instanceof IStructuredSelection) {
+			final Object selectedobject = ((IStructuredSelection) selection).getFirstElement();
+
+			if (selectedobject instanceof IAdaptable) {
+				final EObject selectedEObject = ((IAdaptable) selectedobject).getAdapter(EObject.class);
+				if (selectedEObject instanceof org.eclipse.uml2.uml.Element) {
+					selectedElement = (Element) selectedEObject;
+				}
+			}
+
+			return selectedElement;
+		}
+		return null;
+	}
+
+	/**
+	 * getSelected element in the diagram or in hte model explorer
+	 * 
+	 * @return Element or null
+	 */
+	protected ArrayList<Element> getSelectionSet() {
+		ArrayList<Element> selectedSet = new ArrayList<Element>();
+		ISelectionService selectionService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
+		ISelection selection = selectionService.getSelection();
+
+		// look for papyrus
+
+		if (selection instanceof IStructuredSelection) {
+			@SuppressWarnings("rawtypes")
+			Iterator selectedobjectIteractor = ((IStructuredSelection) selection).iterator();
+			while (selectedobjectIteractor.hasNext()) {
+				Object currentSelection = selectedobjectIteractor.next();
+				if (currentSelection instanceof org.eclipse.uml2.uml.Element) {
+					selectedSet.add((Element) currentSelection);
+				}
+			}
+
+
+		}
+		return selectedSet;
+	}
+}
\ No newline at end of file
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/.classpath b/plugins/proxy/org.eclipse.papyrus.proxy/.classpath
new file mode 100644
index 0000000..2ff2a90
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen">
+		<attributes>
+			<attribute name="ignore_optional_problems" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/.project b/plugins/proxy/org.eclipse.papyrus.proxy/.project
new file mode 100644
index 0000000..776fe76
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.papyrus.proxy</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/.settings/org.eclipse.jdt.core.prefs b/plugins/proxy/org.eclipse.papyrus.proxy/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..beab376
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,26 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=error
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=error
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/META-INF/MANIFEST.MF b/plugins/proxy/org.eclipse.papyrus.proxy/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..643f47a
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.proxy;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.proxy,
+ org.eclipse.papyrus.proxy.command,
+ org.eclipse.papyrus.proxy.proxy,
+ org.eclipse.papyrus.proxy.proxy.impl,
+ org.eclipse.papyrus.proxy.proxy.util
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.osgi,
+ org.eclipse.ui.workbench,
+ org.eclipse.core.runtime;bundle-version="3.13.0",
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.uml2.types;visibility:=reexport,
+ org.eclipse.uml2.uml;visibility:=reexport,
+ org.eclipse.papyrus.uml.extensionpoints;bundle-version="1.3.0",
+ org.eclipse.ui;bundle-version="3.109.0",
+ org.eclipse.emf.transaction
+Bundle-Activator: org.eclipse.papyrus.proxy.Activator
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/about.html b/plugins/proxy/org.eclipse.papyrus.proxy/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/build.properties b/plugins/proxy/org.eclipse.papyrus.proxy/build.properties
new file mode 100644
index 0000000..cc3c96b
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/build.properties
@@ -0,0 +1,11 @@
+#
+
+bin.includes = .,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               resource/
+jars.compile.order = .
+source.. = src-gen/,\
+           src/
+output.. = bin/
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/plugin.properties b/plugins/proxy/org.eclipse.papyrus.proxy/plugin.properties
new file mode 100644
index 0000000..e28a64e
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/plugin.properties
@@ -0,0 +1,14 @@
+#################################################################################
+# Copyright (c) 2008, 2017 CEA LIST.
+# 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:
+#     Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - initial API and implementation
+##################################################################################
+pluginName=proxy plugin
+providerName=Eclipse Modeling Project
+
+pluginDescription=The goal of this plugin is to bring to other element of the environment
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/plugin.xml b/plugins/proxy/org.eclipse.papyrus.proxy/plugin.xml
new file mode 100644
index 0000000..a7b9aff
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/plugin.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated proxy -->
+      <package
+            uri="http://org.eclipse.papyrus/proxy"
+            class="org.eclipse.papyrus.proxy.proxy.ProxyPackage"
+            genModel="resource/profil/proxy.genmodel"/>
+   </extension>
+   <extension
+         point="org.eclipse.papyrus.uml.extensionpoints.UMLProfile">
+      <profile
+            description="This profile is used to connect to other model of file of this environment"
+            iconpath="resource/icons/reference.GIF"
+            name="Proxy profile"
+            path="platform:/plugin/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.uml"
+            qualifiednames="QSProject">
+      </profile>
+   </extension>
+   <extension
+         point="org.eclipse.uml2.uml.generated_package">
+      <profile
+            location="platform:/plugin/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.uml#_yTEaoK9cEeeX4J2fh1dVPQ"
+            uri="http://org.eclipse.papyrus/proxy">
+      </profile>
+   </extension>
+
+</plugin>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/resource/icons/reference.GIF b/plugins/proxy/org.eclipse.papyrus.proxy/resource/icons/reference.GIF
new file mode 100644
index 0000000..4914941
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/resource/icons/reference.GIF
Binary files differ
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.di b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.di
new file mode 100644
index 0000000..247ed5e
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<architecture:ArchitectureDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:architecture="http://www.eclipse.org/papyrus/infra/core/architecture" contextId="org.eclipse.papyrus.uml.architecture.Profile"/>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.notation b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.notation
new file mode 100644
index 0000000..e11d2de
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.notation
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/gmfdiag/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_yYRqwK9cEeeX4J2fh1dVPQ" type="PapyrusUMLProfileDiagram" name="Profile Diagram" measurementUnit="Pixel">
+  <children xmi:type="notation:Shape" xmi:id="_2OGFwK9cEeeX4J2fh1dVPQ" type="Class_MetaclassShape">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2P-VEK9cEeeX4J2fh1dVPQ" source="Stereotype_Annotation">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2P-8IK9cEeeX4J2fh1dVPQ" key="StereotypeWithQualifiedNameList" value=""/>
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2P-8Ia9cEeeX4J2fh1dVPQ" key="StereotypeList" value="StandardProfile::Metaclass"/>
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2P-8Iq9cEeeX4J2fh1dVPQ" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2P-8I69cEeeX4J2fh1dVPQ" key="PropStereoDisplay" value=""/>
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2P-8JK9cEeeX4J2fh1dVPQ" key="StereotypePropertyLocation" value="Compartment"/>
+    </eAnnotations>
+    <children xmi:type="notation:DecorationNode" xmi:id="_2POHIK9cEeeX4J2fh1dVPQ" type="Class_MetaclassNameLabel"/>
+    <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Element"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2POuMK9cEeeX4J2fh1dVPQ" x="380" y="80" width="141"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_2WVbwK9cEeeX4J2fh1dVPQ" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_2WVbwa9cEeeX4J2fh1dVPQ"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2WWC0K9cEeeX4J2fh1dVPQ" name="BASE_ELEMENT">
+      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Element"/>
+    </styles>
+    <element xsi:nil="true"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2WVbwq9cEeeX4J2fh1dVPQ" x="580" y="80"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_3OsAEK9cEeeX4J2fh1dVPQ" type="Stereotype_Shape">
+    <children xmi:type="notation:DecorationNode" xmi:id="_3OtOMK9cEeeX4J2fh1dVPQ" type="Stereotype_NameLabel"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_3OvDYK9cEeeX4J2fh1dVPQ" type="Stereotype_AttributeCompartment">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_e73QkLIpEeeoUNX41D-9qA" source="PapyrusCSSForceValue">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_e73QkbIpEeeoUNX41D-9qA" key="visible" value="true"/>
+      </eAnnotations>
+      <children xmi:type="notation:Shape" xmi:id="_gq4XILIpEeeoUNX41D-9qA" type="Property_ClassAttributeLabel">
+        <element xmi:type="uml:Property" href="Proxy.profile.uml#_gqTvYLIpEeeoUNX41D-9qA"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_gq4XIbIpEeeoUNX41D-9qA"/>
+      </children>
+      <styles xmi:type="notation:TitleStyle" xmi:id="_3OvDYa9cEeeX4J2fh1dVPQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3OvDYq9cEeeX4J2fh1dVPQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3OvqcK9cEeeX4J2fh1dVPQ"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3Ovqca9cEeeX4J2fh1dVPQ"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_3Ovqcq9cEeeX4J2fh1dVPQ" visible="false" type="Stereotype_OperationCompartment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_3Ovqc69cEeeX4J2fh1dVPQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_3OvqdK9cEeeX4J2fh1dVPQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_3Ovqda9cEeeX4J2fh1dVPQ"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3Ovqdq9cEeeX4J2fh1dVPQ"/>
+    </children>
+    <element xmi:type="uml:Stereotype" href="Proxy.profile.uml#_3OjdMK9cEeeX4J2fh1dVPQ"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3OsAEa9cEeeX4J2fh1dVPQ" x="520" y="420" height="81"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_bk1d8bC2EeeytNa0G5wlRQ" type="Stereotype_Shape">
+    <children xmi:type="notation:DecorationNode" xmi:id="_bk1d87C2EeeytNa0G5wlRQ" type="Stereotype_NameLabel"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_bk_O8LC2EeeytNa0G5wlRQ" type="Stereotype_AttributeCompartment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_bk_O8bC2EeeytNa0G5wlRQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_bk_O8rC2EeeytNa0G5wlRQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_bk_O87C2EeeytNa0G5wlRQ"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bk_O9LC2EeeytNa0G5wlRQ"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_bk_O9bC2EeeytNa0G5wlRQ" visible="false" type="Stereotype_OperationCompartment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_bk_O9rC2EeeytNa0G5wlRQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_bk_O97C2EeeytNa0G5wlRQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_bk_O-LC2EeeytNa0G5wlRQ"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bk_O-bC2EeeytNa0G5wlRQ"/>
+    </children>
+    <element xmi:type="uml:Stereotype" href="Proxy.profile.uml#_bk1d8LC2EeeytNa0G5wlRQ"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bk1d8rC2EeeytNa0G5wlRQ" x="380" y="220" width="141"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_-bGSMLC2EeeytNa0G5wlRQ" type="Stereotype_Shape">
+    <children xmi:type="notation:DecorationNode" xmi:id="_-bGSMrC2EeeytNa0G5wlRQ" type="Stereotype_NameLabel"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_-bGSM7C2EeeytNa0G5wlRQ" type="Stereotype_AttributeCompartment">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_PcN2QLIqEeeoUNX41D-9qA" source="PapyrusCSSForceValue">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_PcT84LIqEeeoUNX41D-9qA" key="visible" value="true"/>
+      </eAnnotations>
+      <children xmi:type="notation:Shape" xmi:id="_RDFtcLIqEeeoUNX41D-9qA" type="Property_ClassAttributeLabel">
+        <element xmi:type="uml:Property" href="Proxy.profile.uml#__zn1kK9cEeeX4J2fh1dVPQ"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_RDFtcbIqEeeoUNX41D-9qA"/>
+      </children>
+      <styles xmi:type="notation:TitleStyle" xmi:id="_-bGSNLC2EeeytNa0G5wlRQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_-bGSNbC2EeeytNa0G5wlRQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_-bGSNrC2EeeytNa0G5wlRQ"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-bGSN7C2EeeytNa0G5wlRQ"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_-bGSOLC2EeeytNa0G5wlRQ" visible="false" type="Stereotype_OperationCompartment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_-bGSObC2EeeytNa0G5wlRQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_-bGSOrC2EeeytNa0G5wlRQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_-bGSO7C2EeeytNa0G5wlRQ"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-bGSPLC2EeeytNa0G5wlRQ"/>
+    </children>
+    <element xmi:type="uml:Stereotype" href="Proxy.profile.uml#_-a8hMLC2EeeytNa0G5wlRQ"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-bGSMbC2EeeytNa0G5wlRQ" x="180" y="420" width="181" height="81"/>
+  </children>
+  <styles xmi:type="notation:StringValueStyle" xmi:id="_yYRqwa9cEeeX4J2fh1dVPQ" name="diagram_compatibility_version" stringValue="1.3.0"/>
+  <styles xmi:type="notation:DiagramStyle" xmi:id="_yYRqwq9cEeeX4J2fh1dVPQ"/>
+  <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_yYRqw69cEeeX4J2fh1dVPQ" diagramKindId="org.eclipse.papyrus.uml.diagram.profile">
+    <owner xmi:type="uml:Profile" href="Proxy.profile.uml#_yTEaoK9cEeeX4J2fh1dVPQ"/>
+  </styles>
+  <element xmi:type="uml:Profile" href="Proxy.profile.uml#_yTEaoK9cEeeX4J2fh1dVPQ"/>
+  <edges xmi:type="notation:Connector" xmi:id="_2WcwgK9cEeeX4J2fh1dVPQ" type="StereotypeCommentLink" source="_2OGFwK9cEeeX4J2fh1dVPQ" target="_2WVbwK9cEeeX4J2fh1dVPQ">
+    <styles xmi:type="notation:FontStyle" xmi:id="_2Wcwga9cEeeX4J2fh1dVPQ"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2WdXkq9cEeeX4J2fh1dVPQ" name="BASE_ELEMENT">
+      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Element"/>
+    </styles>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2Wcwgq9cEeeX4J2fh1dVPQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2WdXkK9cEeeX4J2fh1dVPQ"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2WdXka9cEeeX4J2fh1dVPQ"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_fhv_cLC2EeeytNa0G5wlRQ" type="Extension_Edge" source="_bk1d8bC2EeeytNa0G5wlRQ" target="_2OGFwK9cEeeX4J2fh1dVPQ">
+    <styles xmi:type="notation:FontStyle" xmi:id="_fhv_cbC2EeeytNa0G5wlRQ"/>
+    <element xmi:type="uml:Extension" href="Proxy.profile.uml#_fhKJkLC2EeeytNa0G5wlRQ"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fhv_crC2EeeytNa0G5wlRQ" points="[420, 220, -643984, -643984]$[440, 130, -643984, -643984]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fiV1ULC2EeeytNa0G5wlRQ" id="(0.425531914893617,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fiV1UbC2EeeytNa0G5wlRQ" id="(0.425531914893617,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_ucIUELC2EeeytNa0G5wlRQ" type="Generalization_Edge" source="_3OsAEK9cEeeX4J2fh1dVPQ" target="_bk1d8bC2EeeytNa0G5wlRQ" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_ucIUE7C2EeeytNa0G5wlRQ" type="Generalization_StereotypeLabel">
+      <styles xmi:type="notation:BooleanValueStyle" xmi:id="_wEIMoLC2EeeytNa0G5wlRQ" name="IS_UPDATED_POSITION" booleanValue="true"/>
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_ucIUFLC2EeeytNa0G5wlRQ" x="-1" y="58"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_ucIUEbC2EeeytNa0G5wlRQ"/>
+    <element xmi:type="uml:Generalization" href="Proxy.profile.uml#_ubieMLC2EeeytNa0G5wlRQ"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ucIUErC2EeeytNa0G5wlRQ" points="[580, 420, -643984, -643984]$[580, 380, -643984, -643984]$[480, 380, -643984, -643984]$[480, 330, -643984, -643984]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uclAALC2EeeytNa0G5wlRQ" id="(0.603448275862069,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uclAAbC2EeeytNa0G5wlRQ" id="(0.7092198581560284,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_IbHloLC3EeeytNa0G5wlRQ" type="Generalization_Edge" source="_-bGSMLC2EeeytNa0G5wlRQ" target="_bk1d8bC2EeeytNa0G5wlRQ" routing="Rectilinear">
+    <children xmi:type="notation:DecorationNode" xmi:id="_IbHlo7C3EeeytNa0G5wlRQ" type="Generalization_StereotypeLabel">
+      <styles xmi:type="notation:BooleanValueStyle" xmi:id="_Iz9jcLC3EeeytNa0G5wlRQ" name="IS_UPDATED_POSITION" booleanValue="true"/>
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_IbHlpLC3EeeytNa0G5wlRQ" y="59"/>
+    </children>
+    <styles xmi:type="notation:FontStyle" xmi:id="_IbHlobC3EeeytNa0G5wlRQ"/>
+    <element xmi:type="uml:Generalization" href="Proxy.profile.uml#_Ia0qsLC3EeeytNa0G5wlRQ"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IbHlorC3EeeytNa0G5wlRQ" points="[340, 420, -643984, -643984]$[340, 380, -643984, -643984]$[420, 380, -643984, -643984]$[440, 326, -643984, -643984]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IbkRkLC3EeeytNa0G5wlRQ" id="(0.6629834254143646,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IbkRkbC3EeeytNa0G5wlRQ" id="(0.28368794326241137,1.0)"/>
+  </edges>
+</notation:Diagram>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.uml b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.uml
new file mode 100644
index 0000000..a8cd637
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/Proxy.profile.uml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
+  <uml:Profile xmi:id="_yTEaoK9cEeeX4J2fh1dVPQ" name="Proxy" metaclassReference="_2NiFEK9cEeeX4J2fh1dVPQ">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_OZDN4K9dEeeX4J2fh1dVPQ" source="http://www.eclipse.org/uml2/2.0.0/UML"/>
+    <elementImport xmi:type="uml:ElementImport" xmi:id="_2NiFEK9cEeeX4J2fh1dVPQ" alias="Element">
+      <importedElement xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Element"/>
+    </elementImport>
+    <elementImport xmi:type="uml:ElementImport" xmi:id="_5ceMkLKZEeeXdNpCuqJQzg" alias="EObject">
+      <importedElement xmi:type="uml:Class" href="pathmap://UML_METAMODELS/Ecore.metamodel.uml#EObject"/>
+    </elementImport>
+    <packageImport xmi:type="uml:PackageImport" xmi:id="_yjh4gK9cEeeX4J2fh1dVPQ">
+      <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
+    </packageImport>
+    <packageImport xmi:type="uml:PackageImport" xmi:id="_yjk70K9cEeeX4J2fh1dVPQ">
+      <importedPackage xmi:type="uml:Model" href="pathmap://UML_METAMODELS/UML.metamodel.uml#_0"/>
+    </packageImport>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_3OjdMK9cEeeX4J2fh1dVPQ" name="EcoreReference">
+      <generalization xmi:type="uml:Generalization" xmi:id="_ubieMLC2EeeytNa0G5wlRQ" general="_bk1d8LC2EeeytNa0G5wlRQ"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_gqTvYLIpEeeoUNX41D-9qA" name="ref" visibility="public">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_METAMODELS/Ecore.metamodel.uml#EObject"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_uQyMILIpEeeoUNX41D-9qA"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_uQ6vALIpEeeoUNX41D-9qA" value="1"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_bk1d8LC2EeeytNa0G5wlRQ" name="Proxy" isAbstract="true">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_fhTTgbC2EeeytNa0G5wlRQ" name="base_Element" association="_fhKJkLC2EeeytNa0G5wlRQ">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Element"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Extension" xmi:id="_fhKJkLC2EeeytNa0G5wlRQ" name="E_Proxy_Element1" memberEnd="_fhTTgLC2EeeytNa0G5wlRQ _fhTTgbC2EeeytNa0G5wlRQ">
+      <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_fhTTgLC2EeeytNa0G5wlRQ" name="extension_Proxy" type="_bk1d8LC2EeeytNa0G5wlRQ" aggregation="composite" association="_fhKJkLC2EeeytNa0G5wlRQ"/>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_-a8hMLC2EeeytNa0G5wlRQ" name="FileReference">
+      <generalization xmi:type="uml:Generalization" xmi:id="_Ia0qsLC3EeeytNa0G5wlRQ" general="_bk1d8LC2EeeytNa0G5wlRQ"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="__zn1kK9cEeeX4J2fh1dVPQ" name="ref" visibility="public">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_H_tGMK9dEeeX4J2fh1dVPQ"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_H_5TcK9dEeeX4J2fh1dVPQ" value="1"/>
+        <defaultValue xmi:type="uml:LiteralString" xmi:id="_U-8dkLA-Eee0iN1NNqo2iQ" name="defaultValue" value=" "/>
+      </ownedAttribute>
+    </packagedElement>
+    <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_3d2l8LA3Eee0iN1NNqo2iQ">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3d_v4LA3Eee0iN1NNqo2iQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+        <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA"/>
+      </eAnnotations>
+      <appliedProfile xmi:type="uml:Profile" href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
+    </profileApplication>
+  </uml:Profile>
+  <Ecore:EPackage xmi:id="_4zZckLA3Eee0iN1NNqo2iQ" base_Package="_yTEaoK9cEeeX4J2fh1dVPQ" packageName="proxy" nsURI="http://org.eclipse.papyrus/proxy" basePackage="org.eclipse.papyrus.proxy" prefix="Proxy"/>
+</xmi:XMI>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/proxy.ecore b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/proxy.ecore
new file mode 100644
index 0000000..ade38b8
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/proxy.ecore
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="proxy" nsURI="http://org.eclipse.papyrus/proxy" nsPrefix="Proxy">
+  <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML">
+    <details key="originalName" value="Proxy"/>
+  </eAnnotations>
+  <eClassifiers xsi:type="ecore:EClass" name="EcoreReference" eSuperTypes="#//Proxy">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ref" ordered="false" eType="ecore:EClass ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Proxy" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="base_Element" ordered="false"
+        lowerBound="1" eType="ecore:EClass ../../../org.eclipse.uml2.uml/model/UML.ecore#//Element"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FileReference" eSuperTypes="#//Proxy">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="ref" ordered="false" eType="ecore:EDataType ../../../org.eclipse.uml2.types/model/Types.ecore#//String"
+        defaultValueLiteral=" "/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/proxy.genmodel b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/proxy.genmodel
new file mode 100644
index 0000000..fdfb1ce
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/resource/profil/proxy.genmodel
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/uml2/2.2.0/GenModel"
+    modelDirectory="/org.eclipse.papyrus.proxy/src-gen" editDirectory="/org.eclipse.papyrus.proxy.edit/src-gen"
+    editorDirectory="/org.eclipse.papyrus.proxy.editor/src-gen" modelPluginID="org.eclipse.papyrus.proxy"
+    modelName="Proxy" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="8.0" copyrightFields="false"
+    usedGenPackages="../../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../../org.eclipse.uml2.types/model/Types.genmodel#//types ../../../org.eclipse.uml2.uml/model/UML.genmodel#//uml"
+    operationReflection="true" importOrganizing="true">
+  <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/importer/org.eclipse.uml2.uml.ecore.importer">
+    <details key="OPPOSITE_ROLE_NAMES" value="IGNORE"/>
+    <details key="DUPLICATE_FEATURES" value="DISCARD"/>
+    <details key="ANNOTATION_DETAILS" value="PROCESS"/>
+    <details key="PROPERTY_DEFAULT_EXPRESSIONS" value="IGNORE"/>
+    <details key="DUPLICATE_FEATURE_INHERITANCE" value="DISCARD"/>
+    <details key="COMMENTS" value="PROCESS"/>
+    <details key="DERIVED_FEATURES" value="PROCESS"/>
+    <details key="SUPER_CLASS_ORDER" value="PROCESS"/>
+    <details key="DUPLICATE_OPERATION_INHERITANCE" value="DISCARD"/>
+    <details key="REDEFINING_OPERATIONS" value="REPORT"/>
+    <details key="INVARIANT_CONSTRAINTS" value="PROCESS"/>
+    <details key="UNION_PROPERTIES" value="REPORT"/>
+    <details key="DUPLICATE_OPERATIONS" value="DISCARD"/>
+    <details key="NON_API_INVARIANTS" value="IGNORE"/>
+    <details key="CAMEL_CASE_NAMES" value="IGNORE"/>
+    <details key="SUBSETTING_PROPERTIES" value="REPORT"/>
+    <details key="OPERATION_BODIES" value="IGNORE"/>
+    <details key="ECORE_TAGGED_VALUES" value="PROCESS"/>
+    <details key="UNTYPED_PROPERTIES" value="REPORT"/>
+    <details key="REDEFINING_PROPERTIES" value="REPORT"/>
+    <details key="INVOCATION_DELEGATES" value="IGNORE"/>
+    <details key="VALIDATION_DELEGATES" value="IGNORE"/>
+  </genAnnotations>
+  <foreignModel>Proxy.profile.uml</foreignModel>
+  <genPackages xsi:type="genmodel:GenPackage" prefix="Proxy" basePackage="org.eclipse.papyrus.proxy"
+      disposableProviderFactory="true" ecorePackage="proxy.ecore#/">
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="proxy.ecore#//EcoreReference">
+      <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+          createChild="true" ecoreFeature="ecore:EReference proxy.ecore#//EcoreReference/ref"/>
+    </genClasses>
+    <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="proxy.ecore#//Proxy">
+      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+          propertySortChoices="true" ecoreFeature="ecore:EReference proxy.ecore#//Proxy/base_Element"/>
+    </genClasses>
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="proxy.ecore#//FileReference">
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute proxy.ecore#//FileReference/ref"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/EcoreReference.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/EcoreReference.java
new file mode 100644
index 0000000..99db3ef
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/EcoreReference.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy;
+
+import org.eclipse.emf.ecore.EObject;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Ecore Reference</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.proxy.proxy.EcoreReference#getRef <em>Ref</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage#getEcoreReference()
+ * @model
+ * @generated
+ */
+public interface EcoreReference extends Proxy {
+
+	/**
+	 * Returns the value of the '<em><b>Ref</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Ref</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Ref</em>' reference.
+	 * @see #setRef(EObject)
+	 * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage#getEcoreReference_Ref()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	EObject getRef();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.proxy.proxy.EcoreReference#getRef <em>Ref</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Ref</em>' reference.
+	 * @see #getRef()
+	 * @generated
+	 */
+	void setRef(EObject value);
+} // EcoreReference
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/FileReference.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/FileReference.java
new file mode 100644
index 0000000..97ba139
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/FileReference.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>File Reference</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.proxy.proxy.FileReference#getRef <em>Ref</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage#getFileReference()
+ * @model
+ * @generated
+ */
+public interface FileReference extends Proxy {
+
+	/**
+	 * Returns the value of the '<em><b>Ref</b></em>' attribute.
+	 * The default value is <code>" "</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Ref</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Ref</em>' attribute.
+	 * @see #setRef(String)
+	 * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage#getFileReference_Ref()
+	 * @model default=" " dataType="org.eclipse.uml2.types.String" ordered="false"
+	 * @generated
+	 */
+	String getRef();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.proxy.proxy.FileReference#getRef <em>Ref</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Ref</em>' attribute.
+	 * @see #getRef()
+	 * @generated
+	 */
+	void setRef(String value);
+} // FileReference
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/Proxy.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/Proxy.java
new file mode 100644
index 0000000..3313a71
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/Proxy.java
@@ -0,0 +1,52 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Element;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Proxy</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.proxy.proxy.Proxy#getBase_Element <em>Base Element</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage#getProxy()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Proxy extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Element</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Element</em>' reference.
+	 * @see #setBase_Element(Element)
+	 * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage#getProxy_Base_Element()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Element getBase_Element();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.proxy.proxy.Proxy#getBase_Element <em>Base Element</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Element</em>' reference.
+	 * @see #getBase_Element()
+	 * @generated
+	 */
+	void setBase_Element(Element value);
+
+} // Proxy
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/ProxyFactory.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/ProxyFactory.java
new file mode 100644
index 0000000..fec923c
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/ProxyFactory.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage
+ * @generated
+ */
+public interface ProxyFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ProxyFactory eINSTANCE = org.eclipse.papyrus.proxy.proxy.impl.ProxyFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Ecore Reference</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Ecore Reference</em>'.
+	 * @generated
+	 */
+	EcoreReference createEcoreReference();
+
+	/**
+	 * Returns a new object of class '<em>File Reference</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>File Reference</em>'.
+	 * @generated
+	 */
+	FileReference createFileReference();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ProxyPackage getProxyPackage();
+
+} //ProxyFactory
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/ProxyPackage.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/ProxyPackage.java
new file mode 100644
index 0000000..88a26a4
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/ProxyPackage.java
@@ -0,0 +1,332 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.proxy.proxy.ProxyFactory
+ * @model kind="package"
+ *        annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='Proxy'"
+ * @generated
+ */
+public interface ProxyPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "proxy";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://org.eclipse.papyrus/proxy";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "Proxy";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ProxyPackage eINSTANCE = org.eclipse.papyrus.proxy.proxy.impl.ProxyPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.proxy.proxy.impl.ProxyImpl <em>Proxy</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.proxy.proxy.impl.ProxyImpl
+	 * @see org.eclipse.papyrus.proxy.proxy.impl.ProxyPackageImpl#getProxy()
+	 * @generated
+	 */
+	int PROXY = 1;
+
+	/**
+	 * The feature id for the '<em><b>Base Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROXY__BASE_ELEMENT = 0;
+
+	/**
+	 * The number of structural features of the '<em>Proxy</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROXY_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Proxy</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROXY_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.proxy.proxy.impl.EcoreReferenceImpl <em>Ecore Reference</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.proxy.proxy.impl.EcoreReferenceImpl
+	 * @see org.eclipse.papyrus.proxy.proxy.impl.ProxyPackageImpl#getEcoreReference()
+	 * @generated
+	 */
+	int ECORE_REFERENCE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Base Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ECORE_REFERENCE__BASE_ELEMENT = PROXY__BASE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Ref</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ECORE_REFERENCE__REF = PROXY_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Ecore Reference</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ECORE_REFERENCE_FEATURE_COUNT = PROXY_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Ecore Reference</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ECORE_REFERENCE_OPERATION_COUNT = PROXY_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.proxy.proxy.impl.FileReferenceImpl <em>File Reference</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.proxy.proxy.impl.FileReferenceImpl
+	 * @see org.eclipse.papyrus.proxy.proxy.impl.ProxyPackageImpl#getFileReference()
+	 * @generated
+	 */
+	int FILE_REFERENCE = 2;
+
+	/**
+	 * The feature id for the '<em><b>Base Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FILE_REFERENCE__BASE_ELEMENT = PROXY__BASE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Ref</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FILE_REFERENCE__REF = PROXY_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>File Reference</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FILE_REFERENCE_FEATURE_COUNT = PROXY_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>File Reference</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FILE_REFERENCE_OPERATION_COUNT = PROXY_OPERATION_COUNT + 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.papyrus.proxy.proxy.EcoreReference <em>Ecore Reference</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Ecore Reference</em>'.
+	 * @see org.eclipse.papyrus.proxy.proxy.EcoreReference
+	 * @generated
+	 */
+	EClass getEcoreReference();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.proxy.proxy.EcoreReference#getRef <em>Ref</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Ref</em>'.
+	 * @see org.eclipse.papyrus.proxy.proxy.EcoreReference#getRef()
+	 * @see #getEcoreReference()
+	 * @generated
+	 */
+	EReference getEcoreReference_Ref();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.papyrus.proxy.proxy.Proxy <em>Proxy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Proxy</em>'.
+	 * @see org.eclipse.papyrus.proxy.proxy.Proxy
+	 * @generated
+	 */
+	EClass getProxy();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.proxy.proxy.Proxy#getBase_Element <em>Base Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Element</em>'.
+	 * @see org.eclipse.papyrus.proxy.proxy.Proxy#getBase_Element()
+	 * @see #getProxy()
+	 * @generated
+	 */
+	EReference getProxy_Base_Element();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.papyrus.proxy.proxy.FileReference <em>File Reference</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>File Reference</em>'.
+	 * @see org.eclipse.papyrus.proxy.proxy.FileReference
+	 * @generated
+	 */
+	EClass getFileReference();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.proxy.proxy.FileReference#getRef <em>Ref</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Ref</em>'.
+	 * @see org.eclipse.papyrus.proxy.proxy.FileReference#getRef()
+	 * @see #getFileReference()
+	 * @generated
+	 */
+	EAttribute getFileReference_Ref();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ProxyFactory getProxyFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.papyrus.proxy.proxy.impl.EcoreReferenceImpl <em>Ecore Reference</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.papyrus.proxy.proxy.impl.EcoreReferenceImpl
+		 * @see org.eclipse.papyrus.proxy.proxy.impl.ProxyPackageImpl#getEcoreReference()
+		 * @generated
+		 */
+		EClass ECORE_REFERENCE = eINSTANCE.getEcoreReference();
+
+		/**
+		 * The meta object literal for the '<em><b>Ref</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ECORE_REFERENCE__REF = eINSTANCE.getEcoreReference_Ref();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.papyrus.proxy.proxy.impl.ProxyImpl <em>Proxy</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.papyrus.proxy.proxy.impl.ProxyImpl
+		 * @see org.eclipse.papyrus.proxy.proxy.impl.ProxyPackageImpl#getProxy()
+		 * @generated
+		 */
+		EClass PROXY = eINSTANCE.getProxy();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Element</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PROXY__BASE_ELEMENT = eINSTANCE.getProxy_Base_Element();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.papyrus.proxy.proxy.impl.FileReferenceImpl <em>File Reference</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.papyrus.proxy.proxy.impl.FileReferenceImpl
+		 * @see org.eclipse.papyrus.proxy.proxy.impl.ProxyPackageImpl#getFileReference()
+		 * @generated
+		 */
+		EClass FILE_REFERENCE = eINSTANCE.getFileReference();
+
+		/**
+		 * The meta object literal for the '<em><b>Ref</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FILE_REFERENCE__REF = eINSTANCE.getFileReference_Ref();
+
+	}
+
+} //ProxyPackage
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/EcoreReferenceImpl.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/EcoreReferenceImpl.java
new file mode 100644
index 0000000..0652627
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/EcoreReferenceImpl.java
@@ -0,0 +1,153 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.papyrus.proxy.proxy.EcoreReference;
+import org.eclipse.papyrus.proxy.proxy.ProxyPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Ecore Reference</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.proxy.proxy.impl.EcoreReferenceImpl#getRef <em>Ref</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class EcoreReferenceImpl extends ProxyImpl implements EcoreReference {
+	/**
+	 * The cached value of the '{@link #getRef() <em>Ref</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRef()
+	 * @generated
+	 * @ordered
+	 */
+	protected EObject ref;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EcoreReferenceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ProxyPackage.Literals.ECORE_REFERENCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject getRef() {
+		if (ref != null && ref.eIsProxy()) {
+			InternalEObject oldRef = (InternalEObject)ref;
+			ref = eResolveProxy(oldRef);
+			if (ref != oldRef) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProxyPackage.ECORE_REFERENCE__REF, oldRef, ref));
+			}
+		}
+		return ref;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject basicGetRef() {
+		return ref;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRef(EObject newRef) {
+		EObject oldRef = ref;
+		ref = newRef;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ProxyPackage.ECORE_REFERENCE__REF, oldRef, ref));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ProxyPackage.ECORE_REFERENCE__REF:
+				if (resolve) return getRef();
+				return basicGetRef();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ProxyPackage.ECORE_REFERENCE__REF:
+				setRef((EObject)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ProxyPackage.ECORE_REFERENCE__REF:
+				setRef((EObject)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ProxyPackage.ECORE_REFERENCE__REF:
+				return ref != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} // EcoreReferenceImpl
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/FileReferenceImpl.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/FileReferenceImpl.java
new file mode 100644
index 0000000..7e23955
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/FileReferenceImpl.java
@@ -0,0 +1,159 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.papyrus.proxy.proxy.FileReference;
+import org.eclipse.papyrus.proxy.proxy.ProxyPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>File Reference</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.proxy.proxy.impl.FileReferenceImpl#getRef <em>Ref</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FileReferenceImpl extends ProxyImpl implements FileReference {
+	/**
+	 * The default value of the '{@link #getRef() <em>Ref</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRef()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REF_EDEFAULT = " ";
+	/**
+	 * The cached value of the '{@link #getRef() <em>Ref</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRef()
+	 * @generated
+	 * @ordered
+	 */
+	protected String ref = REF_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FileReferenceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ProxyPackage.Literals.FILE_REFERENCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRef() {
+		return ref;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRef(String newRef) {
+		String oldRef = ref;
+		ref = newRef;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ProxyPackage.FILE_REFERENCE__REF, oldRef, ref));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ProxyPackage.FILE_REFERENCE__REF:
+				return getRef();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ProxyPackage.FILE_REFERENCE__REF:
+				setRef((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ProxyPackage.FILE_REFERENCE__REF:
+				setRef(REF_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ProxyPackage.FILE_REFERENCE__REF:
+				return REF_EDEFAULT == null ? ref != null : !REF_EDEFAULT.equals(ref);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (ref: ");
+		result.append(ref);
+		result.append(')');
+		return result.toString();
+	}
+
+} //FileReferenceImpl
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyFactoryImpl.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyFactoryImpl.java
new file mode 100644
index 0000000..738643c
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyFactoryImpl.java
@@ -0,0 +1,107 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.proxy.proxy.*;
+import org.eclipse.papyrus.proxy.proxy.EcoreReference;
+import org.eclipse.papyrus.proxy.proxy.FileReference;
+import org.eclipse.papyrus.proxy.proxy.ProxyFactory;
+import org.eclipse.papyrus.proxy.proxy.ProxyPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ProxyFactoryImpl extends EFactoryImpl implements ProxyFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ProxyFactory init() {
+		try {
+			ProxyFactory theProxyFactory = (ProxyFactory)EPackage.Registry.INSTANCE.getEFactory(ProxyPackage.eNS_URI);
+			if (theProxyFactory != null) {
+				return theProxyFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ProxyFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProxyFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ProxyPackage.ECORE_REFERENCE: return createEcoreReference();
+			case ProxyPackage.FILE_REFERENCE: return createFileReference();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EcoreReference createEcoreReference() {
+		EcoreReferenceImpl ecoreReference = new EcoreReferenceImpl();
+		return ecoreReference;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FileReference createFileReference() {
+		FileReferenceImpl fileReference = new FileReferenceImpl();
+		return fileReference;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProxyPackage getProxyPackage() {
+		return (ProxyPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ProxyPackage getPackage() {
+		return ProxyPackage.eINSTANCE;
+	}
+
+} // ProxyFactoryImpl
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyImpl.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyImpl.java
new file mode 100644
index 0000000..537996f
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyImpl.java
@@ -0,0 +1,158 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.papyrus.proxy.proxy.Proxy;
+import org.eclipse.papyrus.proxy.proxy.ProxyPackage;
+
+import org.eclipse.uml2.uml.Element;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Proxy</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.proxy.proxy.impl.ProxyImpl#getBase_Element <em>Base Element</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ProxyImpl extends MinimalEObjectImpl.Container implements Proxy {
+	/**
+	 * The cached value of the '{@link #getBase_Element() <em>Base Element</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Element()
+	 * @generated
+	 * @ordered
+	 */
+	protected Element base_Element;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ProxyImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ProxyPackage.Literals.PROXY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Element getBase_Element() {
+		if (base_Element != null && base_Element.eIsProxy()) {
+			InternalEObject oldBase_Element = (InternalEObject)base_Element;
+			base_Element = (Element)eResolveProxy(oldBase_Element);
+			if (base_Element != oldBase_Element) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProxyPackage.PROXY__BASE_ELEMENT, oldBase_Element, base_Element));
+			}
+		}
+		return base_Element;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Element basicGetBase_Element() {
+		return base_Element;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Element(Element newBase_Element) {
+		Element oldBase_Element = base_Element;
+		base_Element = newBase_Element;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ProxyPackage.PROXY__BASE_ELEMENT, oldBase_Element, base_Element));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ProxyPackage.PROXY__BASE_ELEMENT:
+				if (resolve) return getBase_Element();
+				return basicGetBase_Element();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ProxyPackage.PROXY__BASE_ELEMENT:
+				setBase_Element((Element)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ProxyPackage.PROXY__BASE_ELEMENT:
+				setBase_Element((Element)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ProxyPackage.PROXY__BASE_ELEMENT:
+				return base_Element != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ProxyImpl
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyPackageImpl.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyPackageImpl.java
new file mode 100644
index 0000000..4d6b480
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/impl/ProxyPackageImpl.java
@@ -0,0 +1,278 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.proxy.proxy.EcoreReference;
+import org.eclipse.papyrus.proxy.proxy.FileReference;
+import org.eclipse.papyrus.proxy.proxy.Proxy;
+import org.eclipse.papyrus.proxy.proxy.ProxyFactory;
+import org.eclipse.papyrus.proxy.proxy.ProxyPackage;
+import org.eclipse.uml2.types.TypesPackage;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ProxyPackageImpl extends EPackageImpl implements ProxyPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass ecoreReferenceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass proxyEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass fileReferenceEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ProxyPackageImpl() {
+		super(eNS_URI, ProxyFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ProxyPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ProxyPackage init() {
+		if (isInited) return (ProxyPackage)EPackage.Registry.INSTANCE.getEPackage(ProxyPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ProxyPackageImpl theProxyPackage = (ProxyPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ProxyPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ProxyPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+		TypesPackage.eINSTANCE.eClass();
+		UMLPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theProxyPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theProxyPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theProxyPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ProxyPackage.eNS_URI, theProxyPackage);
+		return theProxyPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEcoreReference() {
+		return ecoreReferenceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEcoreReference_Ref() {
+		return (EReference)ecoreReferenceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getProxy() {
+		return proxyEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getProxy_Base_Element() {
+		return (EReference)proxyEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getFileReference() {
+		return fileReferenceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFileReference_Ref() {
+		return (EAttribute)fileReferenceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProxyFactory getProxyFactory() {
+		return (ProxyFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		ecoreReferenceEClass = createEClass(ECORE_REFERENCE);
+		createEReference(ecoreReferenceEClass, ECORE_REFERENCE__REF);
+
+		proxyEClass = createEClass(PROXY);
+		createEReference(proxyEClass, PROXY__BASE_ELEMENT);
+
+		fileReferenceEClass = createEClass(FILE_REFERENCE);
+		createEAttribute(fileReferenceEClass, FILE_REFERENCE__REF);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+		TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		ecoreReferenceEClass.getESuperTypes().add(this.getProxy());
+		fileReferenceEClass.getESuperTypes().add(this.getProxy());
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(ecoreReferenceEClass, EcoreReference.class, "EcoreReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getEcoreReference_Ref(), theEcorePackage.getEObject(), null, "ref", null, 0, 1, EcoreReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(proxyEClass, Proxy.class, "Proxy", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getProxy_Base_Element(), theUMLPackage.getElement(), null, "base_Element", null, 1, 1, Proxy.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(fileReferenceEClass, FileReference.class, "FileReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getFileReference_Ref(), theTypesPackage.getString(), "ref", " ", 0, 1, FileReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+
+		// Create annotations
+		// http://www.eclipse.org/uml2/2.0.0/UML
+		createUMLAnnotations();
+	}
+
+	/**
+	 * Initializes the annotations for <b>http://www.eclipse.org/uml2/2.0.0/UML</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createUMLAnnotations() {
+		String source = "http://www.eclipse.org/uml2/2.0.0/UML";	
+		addAnnotation
+		  (this, 
+		   source, 
+		   new String[] {
+			 "originalName", "Proxy"
+		   });
+	}
+
+} //ProxyPackageImpl
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/util/ProxyAdapterFactory.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/util/ProxyAdapterFactory.java
new file mode 100644
index 0000000..f13cde4
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/util/ProxyAdapterFactory.java
@@ -0,0 +1,156 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.proxy.proxy.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage
+ * @generated
+ */
+public class ProxyAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ProxyPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProxyAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ProxyPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ProxySwitch<Adapter> modelSwitch =
+		new ProxySwitch<Adapter>() {
+			@Override
+			public Adapter caseEcoreReference(EcoreReference object) {
+				return createEcoreReferenceAdapter();
+			}
+			@Override
+			public Adapter caseProxy(Proxy object) {
+				return createProxyAdapter();
+			}
+			@Override
+			public Adapter caseFileReference(FileReference object) {
+				return createFileReferenceAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.proxy.proxy.EcoreReference <em>Ecore Reference</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.proxy.proxy.EcoreReference
+	 * @generated
+	 */
+	public Adapter createEcoreReferenceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.proxy.proxy.Proxy <em>Proxy</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.proxy.proxy.Proxy
+	 * @generated
+	 */
+	public Adapter createProxyAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.proxy.proxy.FileReference <em>File Reference</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.proxy.proxy.FileReference
+	 * @generated
+	 */
+	public Adapter createFileReferenceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ProxyAdapterFactory
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/util/ProxySwitch.java b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/util/ProxySwitch.java
new file mode 100644
index 0000000..dcd46be
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src-gen/org/eclipse/papyrus/proxy/proxy/util/ProxySwitch.java
@@ -0,0 +1,154 @@
+/**
+ */
+package org.eclipse.papyrus.proxy.proxy.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.papyrus.proxy.proxy.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.proxy.proxy.ProxyPackage
+ * @generated
+ */
+public class ProxySwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ProxyPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProxySwitch() {
+		if (modelPackage == null) {
+			modelPackage = ProxyPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ProxyPackage.ECORE_REFERENCE: {
+				EcoreReference ecoreReference = (EcoreReference)theEObject;
+				T result = caseEcoreReference(ecoreReference);
+				if (result == null) result = caseProxy(ecoreReference);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ProxyPackage.PROXY: {
+				Proxy proxy = (Proxy)theEObject;
+				T result = caseProxy(proxy);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ProxyPackage.FILE_REFERENCE: {
+				FileReference fileReference = (FileReference)theEObject;
+				T result = caseFileReference(fileReference);
+				if (result == null) result = caseProxy(fileReference);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Ecore Reference</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Ecore Reference</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseEcoreReference(EcoreReference object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Proxy</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Proxy</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseProxy(Proxy object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>File Reference</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>File Reference</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseFileReference(FileReference object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //ProxySwitch
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src/org/eclipse/papyrus/proxy/Activator.java b/plugins/proxy/org.eclipse.papyrus.proxy/src/org/eclipse/papyrus/proxy/Activator.java
new file mode 100644
index 0000000..17b55e4
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src/org/eclipse/papyrus/proxy/Activator.java
@@ -0,0 +1,54 @@
+package org.eclipse.papyrus.proxy;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * This class manage the launch and stop of the plugin
+ *
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/** The plug-in ID **/
+	public static final String PLUGIN_ID = "org.eclipse.papyrus.proxy"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+
+}
diff --git a/plugins/proxy/org.eclipse.papyrus.proxy/src/org/eclipse/papyrus/proxy/command/SetEReferenceCommand.java b/plugins/proxy/org.eclipse.papyrus.proxy/src/org/eclipse/papyrus/proxy/command/SetEReferenceCommand.java
new file mode 100644
index 0000000..0ca763b
--- /dev/null
+++ b/plugins/proxy/org.eclipse.papyrus.proxy/src/org/eclipse/papyrus/proxy/command/SetEReferenceCommand.java
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * Copyright (c)  2017 CEA LIST.
+ *
+ *
+ * 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:
+ *  Patrick Tessier (CEA LIST) patrick.tessier@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.proxy.command;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.proxy.proxy.EcoreReference;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+/**
+ * this command is used to create a refeence to an EcoreReference Sterotype application
+ *
+ */
+public class SetEReferenceCommand extends RecordingCommand {
+
+
+	private Element ecoreReferenceElement;
+	private EObject eobject;
+
+	/**
+	 * use to create a review
+	 * 
+	 * @param domain
+	 *            the transactional editing domain in order to execute the command
+	 * @param ecoreReferenceElement
+	 *            the uml element that can reference an eObject
+	 * @param eobject
+	 *            the eobject
+	 */
+	public SetEReferenceCommand(TransactionalEditingDomain domain, Element ecoreReferenceElement, EObject eobject) {
+		super(domain, "create Review");
+		this.ecoreReferenceElement = ecoreReferenceElement;
+		this.eobject = eobject;
+	}
+
+	@Override
+	protected void doExecute() {
+
+		EcoreReference ecoreReferenceApp = UMLUtil.getStereotypeApplication(ecoreReferenceElement, EcoreReference.class);
+		ecoreReferenceApp.setRef(eobject);
+	}
+
+}
