diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java
index 22a9bd9..b60c34f 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java
@@ -75,13 +75,20 @@
 		actionsImport.add(new Action("Views", createImageDescriptor(ResourceProvider.IMG_Part)) {
 			@Override
 			public void run() {
-				handleImportChild(BasicPackageImpl.Literals.PART_DESCRIPTOR, RegistryUtil.HINT_VIEW);
+				handleImport(BasicPackageImpl.Literals.PART_DESCRIPTOR, RegistryUtil.HINT_VIEW);
 			}
 		});
 		actionsImport.add(new Action("Editors", createImageDescriptor(ResourceProvider.IMG_Part)) {
 			@Override
 			public void run() {
-				handleImportChild(BasicPackageImpl.Literals.PART_DESCRIPTOR, RegistryUtil.HINT_EDITOR);
+				handleImport(BasicPackageImpl.Literals.PART_DESCRIPTOR, RegistryUtil.HINT_EDITOR);
+			}
+		});
+
+		actionsImport.add(new Action("View as CompatibilityView", createImageDescriptor(ResourceProvider.IMG_Part)) {
+			@Override
+			public void run() {
+				handleImport(BasicPackageImpl.Literals.PART_DESCRIPTOR, RegistryUtil.HINT_COMPAT_VIEW);
 			}
 		});
 	}
@@ -253,7 +260,7 @@
 		}
 	}
 
-	protected void handleImportChild(EClass eClass, String hint) {
+	protected void handleImport(EClass eClass, String hint) {
 
 		if (eClass == BasicPackageImpl.Literals.PART_DESCRIPTOR) {
 			ModelImportWizard wizard = new ModelImportWizard(MPartDescriptor.class, this, hint);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java
index 0681bef..253b061 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java
@@ -23,7 +23,11 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider;
 import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
 import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.ViewerElement;
+import org.eclipse.e4.tools.emf.ui.internal.imp.ModelImportWizard;
+import org.eclipse.e4.tools.emf.ui.internal.imp.RegistryUtil;
 import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.basic.MInputPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.databinding.EMFDataBindingContext;
@@ -42,6 +46,7 @@
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
@@ -56,6 +61,7 @@
 	private EMFDataBindingContext context;
 	private StructuredViewer viewer;
 	private List<Action> actions = new ArrayList<Action>();
+	private List<Action> actionsImport = new ArrayList<Action>();
 
 	@Inject
 	IEclipseContext eclipseContext;
@@ -101,6 +107,28 @@
 				handleAdd(AdvancedPackageImpl.Literals.AREA);
 			}
 		});
+
+		// -- IMPORT ACTIONS --
+		actionsImport.add(new Action("Views", createImageDescriptor(ResourceProvider.IMG_Part)) {
+			@Override
+			public void run() {
+				handleImport(BasicPackageImpl.Literals.PART, RegistryUtil.HINT_VIEW);
+			}
+		});
+
+		actionsImport.add(new Action("Editors", createImageDescriptor(ResourceProvider.IMG_Part)) {
+			@Override
+			public void run() {
+				handleImport(BasicPackageImpl.Literals.INPUT_PART, RegistryUtil.HINT_EDITOR);
+			}
+		});
+
+		actionsImport.add(new Action("View as CompatibilityView", createImageDescriptor(ResourceProvider.IMG_Part)) {
+			@Override
+			public void run() {
+				handleImport(BasicPackageImpl.Literals.PART, RegistryUtil.HINT_COMPAT_VIEW);
+			}
+		});
 	}
 
 	@Override
@@ -248,6 +276,10 @@
 
 	protected void handleAdd(EClass eClass) {
 		EObject eObject = EcoreUtil.create(eClass);
+		addToModel(eObject);
+	}
+
+	private void addToModel(EObject eObject) {
 		setElementId(eObject);
 
 		Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS, eObject);
@@ -258,10 +290,40 @@
 		}
 	}
 
+	protected void handleImport(EClass eClass, String hint) {
+		if (eClass == BasicPackageImpl.Literals.PART) {
+			ModelImportWizard wizard = new ModelImportWizard(MPart.class, this, hint);
+			WizardDialog wizardDialog = new WizardDialog(viewer.getControl().getShell(), wizard);
+			if (wizardDialog.open() == WizardDialog.OK) {
+				MPart[] parts = (MPart[]) wizard.getElements(MPart.class);
+				for (MPart part : parts) {
+					addToModel((EObject) part);
+				}
+			}
+		}
+		if (eClass == BasicPackageImpl.Literals.INPUT_PART) {
+			ModelImportWizard wizard = new ModelImportWizard(MInputPart.class, this, hint);
+			WizardDialog wizardDialog = new WizardDialog(viewer.getControl().getShell(), wizard);
+			if (wizardDialog.open() == WizardDialog.OK) {
+				MInputPart[] parts = (MInputPart[]) wizard.getElements(MInputPart.class);
+				for (MInputPart part : parts) {
+					addToModel((EObject) part);
+				}
+			}
+		}
+	}
+
 	@Override
 	public List<Action> getActions(Object element) {
 		ArrayList<Action> l = new ArrayList<Action>(super.getActions(element));
 		l.addAll(actions);
 		return l;
 	}
+
+	@Override
+	public List<Action> getActionsImport(Object element) {
+		ArrayList<Action> l = new ArrayList<Action>(super.getActionsImport(element));
+		l.addAll(actionsImport);
+		return l;
+	}
 }
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/RegistryUtil.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/RegistryUtil.java
index 7e35e8f..a8d1b1a 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/RegistryUtil.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/RegistryUtil.java
@@ -32,7 +32,9 @@
 import org.eclipse.e4.ui.model.application.ui.basic.MInputPart;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
 import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.workbench.UIEvents.ApplicationElement;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.osgi.framework.BundleContext;
@@ -44,6 +46,7 @@
 
 	public final static String HINT_VIEW = "view";
 	public final static String HINT_EDITOR = "editor";
+	public final static String HINT_COMPAT_VIEW = "compatibilityView";
 
 	/**
 	 * 
@@ -64,6 +67,8 @@
 			return getCategories(elements);
 		} else if (t.equals(MPerspective.class)) {
 			return getPerspectives(elements);
+		} else if (t.equals(MPart.class) && HINT_COMPAT_VIEW.equals(hint)) {
+			return getViewsAsCompatibilityViews(elements);
 		} else if (t.equals(MPart.class)) {
 			return getViews(elements);
 		} else if (t.equals(MInputPart.class)) {
@@ -74,6 +79,8 @@
 			return getEditorPartDescriptors(elements);
 		} else if (t.equals(MPartDescriptor.class) && HINT_VIEW.equals(hint)) {
 			return getViewPartDescriptors(elements);
+		} else if (t.equals(MPartDescriptor.class) && HINT_COMPAT_VIEW.equals(hint)) {
+			return getPartDescriptorsAsCompatibilyViews(elements);
 		}
 		return new MApplicationElement[0];
 	}
@@ -157,32 +164,74 @@
 			part.setContributionURI(getContributionURI(element, "class"));
 			part.setToBeRendered(true);
 			part.setVisible(true);
-			part.setToolbar(MMenuFactory.INSTANCE.createToolBar());
+			part.setToolbar(createToolBar(part));
+			part.getMenus().add(createViewMenu(part));
 			part.setCloseable(true);
+			part.getTags().add("View");
+			if (element.getAttribute("category") != null) {
+				part.getTags().add("categoryTag:" + element.getAttribute("category"));
+			}
+
 			result.add(part);
 		}
 
 		return result.toArray(new MPart[0]);
 	}
 
+	private static MToolBar createToolBar(MPart part) {
+		MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar();
+		toolBar.setElementId(part.getElementId());
+		return toolBar;
+	}
+
+	private static MMenu createViewMenu(MPart part) {
+		MMenu menu = MMenuFactory.INSTANCE.createMenu();
+		menu.setElementId(part.getElementId());
+		menu.getTags().add("ViewMenu");
+		return menu;
+	}
+
+	private static MPart[] getViewsAsCompatibilityViews(IConfigurationElement[] elements) {
+		ArrayList<MPart> result = new ArrayList<MPart>();
+		MPart[] parts = getViews(elements);
+		for (MPart part : parts) {
+			part.setContributionURI("bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView");
+			result.add(part);
+		}
+		return result.toArray(new MPart[0]);
+	}
+
+	private static MPartDescriptor[] getPartDescriptorsAsCompatibilyViews(IConfigurationElement[] elements) {
+		ArrayList<MPartDescriptor> result = new ArrayList<MPartDescriptor>();
+		MPartDescriptor[] parts = getViewPartDescriptors(elements);
+		for (MPartDescriptor part : parts) {
+			part.setContributionURI("bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView");
+			result.add(part);
+		}
+		return result.toArray(new MPartDescriptor[0]);
+	}
+
 	private static MInputPart[] getEditors(IConfigurationElement[] elements) {
 
 		ArrayList<MInputPart> result = new ArrayList<MInputPart>();
 		for (IConfigurationElement element : elements) {
-			MInputPart part = (MInputPart) EcoreUtil.create(BasicPackageImpl.Literals.INPUT_PART);
-			part.setElementId(element.getAttribute("id"));
-			part.setLabel(element.getAttribute("name"));
-			part.setIconURI(getIconURI(element, "icon"));
-			if (element.getAttribute("class") != null) {
-				part.setContributionURI(getContributionURI(element, "class"));
-			} else {
-				part.setContributionURI(getContributionURI(element, "launcher"));
+			if ("editor".equals(element.getName())) /* Sanity Check */{
+				MInputPart part = (MInputPart) EcoreUtil.create(BasicPackageImpl.Literals.INPUT_PART);
+				part.setElementId(element.getAttribute("id"));
+				part.setLabel(element.getAttribute("name"));
+				part.setIconURI(getIconURI(element, "icon"));
+				if (element.getAttribute("class") != null) {
+					part.setContributionURI(getContributionURI(element, "class"));
+				} else {
+					part.setContributionURI(getContributionURI(element, "launcher"));
+				}
+				part.setToBeRendered(true);
+				part.setVisible(true);
+				part.setToolbar(createToolBar(part));
+				part.getMenus().add(createViewMenu(part));
+				part.setCloseable(true);
+				result.add(part);
 			}
-			part.setToBeRendered(true);
-			part.setVisible(true);
-			part.setToolbar(MMenuFactory.INSTANCE.createToolBar());
-			part.setCloseable(true);
-			result.add(part);
 		}
 
 		return result.toArray(new MInputPart[0]);
@@ -203,7 +252,16 @@
 			}
 			part.setDirtyable(true);
 			part.setAllowMultiple(true);
-			part.setToolbar(MMenuFactory.INSTANCE.createToolBar());
+
+			MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar();
+			toolBar.setElementId(part.getElementId());
+			part.setToolbar(toolBar);
+
+			MMenu menu = MMenuFactory.INSTANCE.createMenu();
+			menu.setElementId(part.getElementId());
+			menu.getTags().add("ViewMenu");
+			part.getMenus().add(menu);
+
 			part.setCloseable(true);
 			result.add(part);
 		}
@@ -219,8 +277,16 @@
 			part.setElementId(element.getAttribute("id"));
 			part.setLabel(element.getAttribute("name"));
 			part.setIconURI(getIconURI(element, "icon"));
-			part.setContributionURI(getContributionURI(element, "class"));
-			part.setToolbar(MMenuFactory.INSTANCE.createToolBar());
+
+			MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar();
+			toolBar.setElementId(part.getElementId());
+			part.setToolbar(toolBar);
+
+			MMenu menu = MMenuFactory.INSTANCE.createMenu();
+			menu.setElementId(part.getElementId());
+			menu.getTags().add("ViewMenu");
+			part.getMenus().add(menu);
+
 			part.setCloseable(true);
 			result.add(part);
 		}
@@ -367,7 +433,7 @@
 		else if (applicationElement == MPartDescriptor.class) {
 			if (hint == HINT_EDITOR)
 				return new RegistryStruct("", "org.eclipse.ui.editors", "editor", "name");
-			if (hint == HINT_VIEW)
+			if (hint == HINT_VIEW || hint == HINT_COMPAT_VIEW)
 				return new RegistryStruct("", "org.eclipse.ui.views", "view", "name");
 		}
 
