diff --git a/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/loc/dashboard/ui/panel/DashboardPanelPart.java b/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/loc/dashboard/ui/panel/DashboardPanelPart.java
index a43587190..8f46cb251 100644
--- a/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/loc/dashboard/ui/panel/DashboardPanelPart.java
+++ b/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/loc/dashboard/ui/panel/DashboardPanelPart.java
@@ -16,6 +16,7 @@
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 
+import org.eclipse.e4.core.contexts.EclipseContextFactory;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.di.annotations.Optional;
 import org.eclipse.e4.ui.di.Focus;
@@ -23,6 +24,7 @@
 import org.eclipse.e4.ui.di.UIEventTopic;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.passage.lic.emf.meta.ComposableClassMetadata;
 import org.eclipse.passage.lic.features.FeatureDescriptor;
 import org.eclipse.passage.lic.features.FeatureSetDescriptor;
 import org.eclipse.passage.lic.features.FeatureVersionDescriptor;
@@ -42,8 +44,13 @@
 import org.eclipse.passage.lic.users.UserOriginDescriptor;
 import org.eclipse.passage.lic.users.registry.UserRegistry;
 import org.eclipse.passage.lic.users.registry.UserRegistryEvents;
+import org.eclipse.passage.moveto.lic.internal.features.model.FeaturesClassMetadata;
+import org.eclipse.passage.moveto.lic.internal.licenses.model.LicensesClassMetadata;
+import org.eclipse.passage.moveto.lic.internal.products.model.ProductsClassMetadata;
+import org.eclipse.passage.moveto.lic.internal.users.model.UsersClassMetadata;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
+import org.osgi.framework.FrameworkUtil;
 
 public class DashboardPanelPart {
 
@@ -78,6 +85,14 @@ public void postConstruct(Composite parent, IEclipseContext context) {
 		createUserInfo(area);
 		createLicenseInfo(area);
 		createFooterInfo(area);
+		// FIXME: replace this with OSGi component registration
+		ComposableClassMetadata metadata = EclipseContextFactory
+				.getServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext())
+				.get(ComposableClassMetadata.class);
+		metadata.consider(new FeaturesClassMetadata());
+		metadata.consider(new ProductsClassMetadata());
+		metadata.consider(new UsersClassMetadata());
+		metadata.consider(new LicensesClassMetadata());
 	}
 
 	protected void createHeaderInfo(Composite parent) {
diff --git a/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/loc/dashboard/ui/wizards/IssueLicenseWizard.java b/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/loc/dashboard/ui/wizards/IssueLicenseWizard.java
index d32ec4b6a..862a2c14d 100644
--- a/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/loc/dashboard/ui/wizards/IssueLicenseWizard.java
+++ b/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/loc/dashboard/ui/wizards/IssueLicenseWizard.java
@@ -16,7 +16,6 @@
 
 import org.eclipse.core.runtime.jobs.IJobChangeEvent;
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.e4.core.contexts.EclipseContextFactory;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.services.events.IEventBroker;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -27,7 +26,6 @@
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.passage.lic.api.LicensingResult;
 import org.eclipse.passage.lic.api.access.LicensingRequest;
-import org.eclipse.passage.lic.emf.meta.ComposableClassMetadata;
 import org.eclipse.passage.lic.licenses.LicensePackDescriptor;
 import org.eclipse.passage.lic.licenses.LicensePlanDescriptor;
 import org.eclipse.passage.lic.products.ProductVersionDescriptor;
@@ -38,11 +36,8 @@
 import org.eclipse.passage.loc.internal.dashboard.ui.i18n.IssueLicensePageMessages;
 import org.eclipse.passage.loc.users.ui.UsersUi;
 import org.eclipse.passage.loc.workbench.LocWokbench;
-import org.eclipse.passage.moveto.lic.internal.products.model.ProductsClassMetadata;
-import org.eclipse.passage.moveto.lic.internal.users.model.UsersClassMetadata;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
-import org.osgi.framework.FrameworkUtil;
 
 public class IssueLicenseWizard extends Wizard {
 
@@ -65,12 +60,6 @@ public void init(LicensePlanDescriptor plan, UserDescriptor user, ProductVersion
 		this.licensePlanDescriptor = plan;
 		this.userDescriptor = user;
 		this.productVersionDescriptor = version;
-		// FIXME: replace this with OSGi component registration
-		ComposableClassMetadata metadata = EclipseContextFactory
-				.getServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext())
-				.get(ComposableClassMetadata.class);
-		metadata.consider(new UsersClassMetadata());
-		metadata.consider(new ProductsClassMetadata());
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/moveto/lic/internal/features/model/FeaturesClassMetadata.java b/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/moveto/lic/internal/features/model/FeaturesClassMetadata.java
new file mode 100644
index 000000000..5e6f03d0e
--- /dev/null
+++ b/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/moveto/lic/internal/features/model/FeaturesClassMetadata.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.internal.features.model;
+
+import java.beans.FeatureDescriptor;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+import org.eclipse.passage.lic.emf.meta.ClassMetadata;
+import org.eclipse.passage.lic.emf.meta.EntityMetadata;
+import org.eclipse.passage.lic.emf.meta.PlainEntityMetadata;
+import org.eclipse.passage.lic.features.FeatureSetDescriptor;
+import org.eclipse.passage.lic.features.model.meta.FeaturesPackage;
+
+//FIXME: AF: remove restriction after moving to the right bundle
+@SuppressWarnings("restriction")
+public final class FeaturesClassMetadata implements ClassMetadata {
+
+	private final FeaturesPackage meta;
+	private final Map<Class<?>, EntityMetadata> map;
+
+	public FeaturesClassMetadata() {
+		meta = FeaturesPackage.eINSTANCE;
+		map = new HashMap<Class<?>, EntityMetadata>();
+		map.put(FeatureSetDescriptor.class, //
+				new PlainEntityMetadata(//
+						meta.getFeatureSet(), //
+						meta.getFeatureSet_Identifier(), //
+						meta.getFeatureSet_Name()));
+		map.put(FeatureDescriptor.class, //
+				new PlainEntityMetadata(//
+						meta.getFeature(), //
+						meta.getFeature_Identifier(), //
+						meta.getFeature_Name()));
+	}
+
+	@Override
+	public Optional<EntityMetadata> find(Class<?> clazz) {
+		return Optional.ofNullable(map.get(clazz));
+	}
+
+}
diff --git a/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/moveto/lic/internal/licenses/model/LicensesClassMetadata.java b/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/moveto/lic/internal/licenses/model/LicensesClassMetadata.java
new file mode 100644
index 000000000..dcc062fee
--- /dev/null
+++ b/bundles/org.eclipse.passage.loc.dashboard.ui/src/org/eclipse/passage/moveto/lic/internal/licenses/model/LicensesClassMetadata.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.internal.licenses.model;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+import org.eclipse.passage.lic.emf.meta.ClassMetadata;
+import org.eclipse.passage.lic.emf.meta.EntityMetadata;
+import org.eclipse.passage.lic.emf.meta.PlainEntityMetadata;
+import org.eclipse.passage.lic.licenses.LicensePlanDescriptor;
+import org.eclipse.passage.lic.licenses.model.meta.LicensesPackage;
+
+//FIXME: AF: remove restriction after moving to the right bundle
+@SuppressWarnings("restriction")
+public final class LicensesClassMetadata implements ClassMetadata {
+
+	private final LicensesPackage meta;
+	private final Map<Class<?>, EntityMetadata> map;
+
+	public LicensesClassMetadata() {
+		meta = LicensesPackage.eINSTANCE;
+		map = new HashMap<Class<?>, EntityMetadata>();
+		map.put(LicensePlanDescriptor.class, //
+				new PlainEntityMetadata(//
+						meta.getLicensePlan(), //
+						meta.getLicensePlan_Identifier(), //
+						meta.getLicensePlan_Name()));
+	}
+
+	@Override
+	public Optional<EntityMetadata> find(Class<?> clazz) {
+		return Optional.ofNullable(map.get(clazz));
+	}
+
+}
diff --git a/bundles/org.eclipse.passage.loc.products.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.loc.products.core/META-INF/MANIFEST.MF
index 4aa252709..5f248b7e3 100644
--- a/bundles/org.eclipse.passage.loc.products.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.passage.loc.products.core/META-INF/MANIFEST.MF
@@ -7,11 +7,12 @@ Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Copyright: %Bundle-Copyright
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.eclipse.osgi;bundle-version="0.0.0",
+Require-Bundle: org.eclipse.e4.core.services;bundle-version="0.0.0",
+ org.eclipse.osgi;bundle-version="0.0.0",
  org.eclipse.osgi.services;bundle-version="0.0.0",
- org.eclipse.e4.core.services;bundle-version="0.0.0",
- org.eclipse.passage.lic.equinox;bundle-version="0.0.0",
  org.eclipse.passage.lic.emf;bundle-version="0.0.0",
+ org.eclipse.passage.lic.equinox;bundle-version="0.0.0",
+ org.eclipse.passage.lic.products.edit;bundle-version="0.5.100",
  org.eclipse.passage.lic.products.model;bundle-version="0.0.0";visibility:=reexport,
  org.eclipse.passage.loc.api;bundle-version="0.0.0"
 Service-Component: OSGI-INF/*.xml
diff --git a/bundles/org.eclipse.passage.loc.workbench/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.loc.workbench/META-INF/MANIFEST.MF
index 318b7c198..3da279a63 100644
--- a/bundles/org.eclipse.passage.loc.workbench/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.passage.loc.workbench/META-INF/MANIFEST.MF
@@ -42,6 +42,8 @@ Export-Package: org.eclipse.passage.loc.internal.workbench;
  org.eclipse.passage.loc.workbench.dialogs,
  org.eclipse.passage.loc.workbench.handlers,
  org.eclipse.passage.loc.workbench.parts,
- org.eclipse.passage.loc.workbench.viewers
+ org.eclipse.passage.loc.workbench.viewers,
+ org.eclipse.passage.moveto.lic.emf.edit;x-internal:=true,
+ org.eclipse.passage.moveto.lic.internal.emf.edit.i18n;x-internal:=true
 Bundle-ActivationPolicy: lazy
 Service-Component: OSGI-INF/*.xml
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateClassifier.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateClassifier.java
index 6d1251165..94bbe7263 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateClassifier.java
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateClassifier.java
@@ -16,8 +16,11 @@
 import java.util.Optional;
 import java.util.function.Supplier;
 
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.passage.lic.emf.ecore.EditingDomainRegistry;
 import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
 import org.eclipse.passage.lic.emf.edit.EditingDomainRegistryAccess;
@@ -27,6 +30,7 @@
 import org.eclipse.passage.lic.jface.resource.LicensingImages;
 import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
 import org.eclipse.passage.loc.internal.workbench.wizards.BaseClassifierWizard;
+import org.eclipse.passage.moveto.lic.emf.edit.EClassResources;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Shell;
 
@@ -76,20 +80,26 @@ public Optional<C> get() {
 	protected Optional<EObject> showWizard(Class<C> type, ClassifierInitializer initializer,
 			EditingDomainRegistry<?> registry) {
 		EntityMetadata metadata = context.get(ComposableClassMetadata.class).find(type).get();
+		EClass eClass = metadata.eClass();
+		ResourceLocator resourceLocator = new EClassResources(eClass).get();
+		String typeName = resourceLocator.getString(NLS.bind("_UI_{0}_type", eClass.getName())); //$NON-NLS-1$
 		BaseClassifierWizard<?> wizard = createWizard(type, metadata, initializer, registry);
-		WizardDialog dialog = new WizardDialog(context.get(Shell.class), wizard);
+		Shell parentShell = context.get(Shell.class);
+		WizardDialog dialog = new WizardDialog(parentShell, wizard);
 		dialog.create();
-		dialog.setTitle(initializer.newObjectTitle());
-		dialog.setMessage(initializer.newFileMessage());
+		dialog.setTitle(typeName);
+		dialog.setMessage(dialogMessage(typeName));
 		Shell createdShell = dialog.getShell();
 		Point location = createdShell.getLocation();
 		createdShell.setLocation(location.x + 40, location.y + 40);
-		createdShell.setText(initializer.newObjectMessage());
-		createdShell.setImage(LicensingImages.getImage(metadata.eClass().getName()));
+		createdShell.setText(NLS.bind(WorkbenchMessages.CreateClassifier_text_new_type, typeName));
+		createdShell.setImage(LicensingImages.getImage(eClass.getName()));
 		dialog.open();
 		return wizard.created();
 	}
 
+	protected abstract String dialogMessage(String typeName);
+
 	protected abstract BaseClassifierWizard<?> createWizard(Class<C> type, EntityMetadata metadata,
 			ClassifierInitializer initializer, EditingDomainRegistry<?> registry);
 
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateInner.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateInner.java
index eb861b498..56df505c2 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateInner.java
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateInner.java
@@ -14,10 +14,12 @@
 
 import java.util.Optional;
 
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.passage.lic.emf.ecore.EditingDomainRegistry;
 import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
 import org.eclipse.passage.lic.emf.meta.EntityMetadata;
 import org.eclipse.passage.lic.internal.api.MandatoryService;
+import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
 import org.eclipse.passage.loc.internal.workbench.wizards.BaseClassifierWizard;
 import org.eclipse.passage.loc.internal.workbench.wizards.InnerClassifierWizard;
 import org.eclipse.passage.loc.internal.workbench.wizards.RootClassifierWizard;
@@ -56,4 +58,9 @@ protected BaseClassifierWizard<?> createWizard(Class<I> clazz, EntityMetadata me
 		return new InnerClassifierWizard<I, R>(clazz, metadata, initializer, registry, request, context);
 	}
 
+	@Override
+	protected String dialogMessage(String typeName) {
+		return NLS.bind(WorkbenchMessages.CreateInner_message_new_type, typeName);
+	}
+
 }
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateRoot.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateRoot.java
index f0d4e4ddf..a729e274d 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateRoot.java
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/CreateRoot.java
@@ -14,10 +14,12 @@
 
 import java.util.Optional;
 
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.passage.lic.emf.ecore.EditingDomainRegistry;
 import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
 import org.eclipse.passage.lic.emf.meta.EntityMetadata;
 import org.eclipse.passage.lic.internal.api.MandatoryService;
+import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
 import org.eclipse.passage.loc.internal.workbench.wizards.BaseClassifierWizard;
 import org.eclipse.passage.loc.internal.workbench.wizards.RootClassifierWizard;
 
@@ -51,4 +53,9 @@ protected BaseClassifierWizard<?> createWizard(Class<R> clazz, EntityMetadata me
 		return new RootClassifierWizard(metadata, initializer, registry);
 	}
 
+	@Override
+	protected String dialogMessage(String typeName) {
+		return NLS.bind(WorkbenchMessages.CreateRoot_message_new_type, typeName);
+	}
+
 }
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/i18n/WorkbenchMessages.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/i18n/WorkbenchMessages.java
index 144a6c31a..eb082efa7 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/i18n/WorkbenchMessages.java
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/i18n/WorkbenchMessages.java
@@ -21,6 +21,7 @@ public class WorkbenchMessages extends NLS {
 	public static String Appearance_e_null_title;
 	public static String BaseClassifierWizardPage_e_null_initializer;
 	public static String BaseClassifierWizardPage_e_null_metadata;
+	public static String CreateClassifier_text_new_type;
 	public static String CreateDomainResource_e_null_classifier;
 	public static String CreateDomainResource_e_null_context;
 	public static String CreateDomainResource_e_null_domain;
@@ -33,6 +34,8 @@ public class WorkbenchMessages extends NLS {
 	public static String CreateFileWizardPage_label_file;
 	public static String CreateFileWizardPage_label_identifier;
 	public static String CreateFileWizardPage_label_name;
+	public static String CreateInner_message_new_type;
+	public static String CreateRoot_message_new_type;
 	public static String ExitWorkbenchHandler_exit_message;
 	public static String ExitWorkbenchHandler_exit_title;
 	public static String FileContentDialog_e_unable_read;
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/i18n/WorkbenchMessages.properties b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/i18n/WorkbenchMessages.properties
index e487d3722..ab7c5784f 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/i18n/WorkbenchMessages.properties
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/i18n/WorkbenchMessages.properties
@@ -16,6 +16,7 @@ Appearance_e_null_image=Image must not be null
 Appearance_e_null_labels=LabelProvider must not be null
 BaseClassifierWizardPage_e_null_initializer=Initializer must not be null
 BaseClassifierWizardPage_e_null_metadata=Metadata must not be null
+CreateClassifier_text_new_type=New {0}
 CreateDomainResource_e_null_classifier=Classifier must not be null
 CreateDomainResource_e_null_context=Context must not be null
 CreateDomainResource_e_null_domain=Domain must not be null
@@ -28,6 +29,8 @@ CreateFileWizardPage_e_specify_path=Please specify a file path
 CreateFileWizardPage_label_file=&File:
 CreateFileWizardPage_label_identifier=&Identifier:
 CreateFileWizardPage_label_name=&Name:
+CreateInner_message_new_type=Please specify properties for new {0}
+CreateRoot_message_new_type=Please specify a file name to store new {0}
 ExitWorkbenchHandler_exit_message=Do you want to exit the product?
 ExitWorkbenchHandler_exit_title=Exit dialog
 FileContentDialog_e_unable_read=Error unable to read:
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/BaseClassifierWizardPage.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/BaseClassifierWizardPage.java
index fa59e17ad..bab69817f 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/BaseClassifierWizardPage.java
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/BaseClassifierWizardPage.java
@@ -23,6 +23,8 @@
 import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
 import org.eclipse.passage.lic.emf.meta.EntityMetadata;
 import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
+import org.eclipse.passage.moveto.lic.emf.edit.EObjectDefaultIdentifier;
+import org.eclipse.passage.moveto.lic.emf.edit.EObjectDefaultName;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.widgets.Composite;
@@ -106,8 +108,8 @@ private void createIdentifierGroup(Composite composite) {
 	}
 
 	protected void initControls(ClassifierInitializer initializer) {
-		textId.setText(initializer.newObjectIdentifier());
-		textName.setText(initializer.newObjectName());
+		textId.setText(new EObjectDefaultIdentifier(eClass).get());
+		textName.setText(new EObjectDefaultName(eClass).get());
 	}
 
 	protected boolean validatePage() {
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/InnerClassifierWizard.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/InnerClassifierWizard.java
index cbb7e19e7..48806c0c6 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/InnerClassifierWizard.java
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/InnerClassifierWizard.java
@@ -3,6 +3,7 @@
 import java.util.NoSuchElementException;
 import java.util.Optional;
 
+import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -73,13 +74,16 @@ protected void store(Optional<R> container, EObject candidate) {
 		if (!container.isPresent()) {
 			return;
 		}
-		EReference reference = candidate.eClass().getEAllReferences().stream()//
-				.filter(r -> r.isContainer())//
-				.findFirst()//
-				.get();
+		EReference reference = containerEReference(candidate.eClass()).get();
 		candidate.eSet(reference, container.get());
 		Resource resource = candidate.eResource();
-		Optional.ofNullable(resource).ifPresent(r -> LocWokbench.save(r));
+		Optional.ofNullable(resource).ifPresent(LocWokbench::save);
+	}
+
+	private Optional<EReference> containerEReference(EClass eClass) {
+		return eClass.getEAllReferences().stream()//
+				.filter(EReference::isContainer)//
+				.findFirst();
 	}
 
 }
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/InnerClassifierWizardPage.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/InnerClassifierWizardPage.java
index 7c0b995b6..6870c18ef 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/InnerClassifierWizardPage.java
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/internal/workbench/wizards/InnerClassifierWizardPage.java
@@ -8,6 +8,7 @@
 import java.util.Optional;
 import java.util.function.Supplier;
 
+import org.eclipse.e4.core.contexts.EclipseContextFactory;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
@@ -16,13 +17,17 @@
 import org.eclipse.passage.lic.internal.api.MandatoryService;
 import org.eclipse.passage.loc.internal.api.ComposableClassSupply;
 import org.eclipse.passage.loc.internal.api.InstanceSupply;
+import org.eclipse.passage.loc.internal.workbench.MandatoryEclipseContext;
 import org.eclipse.passage.loc.internal.workbench.SelectRequest;
 import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
+import org.eclipse.passage.moveto.lic.emf.edit.EClassName;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.osgi.framework.FrameworkUtil;
 
 /**
  * Provides UI to to fulfill the field values for an inner classifier to be
@@ -37,6 +42,7 @@ public final class InnerClassifierWizardPage<R> extends BaseClassifierWizardPage
 
 	private final SelectRequest<R> request;
 	private final MandatoryService context;
+	private final MandatoryEclipseContext forward;
 
 	private Text text;
 
@@ -45,18 +51,18 @@ protected InnerClassifierWizardPage(EntityMetadata metadata, ClassifierInitializ
 		super(InnerClassifierWizardPage.class.getSimpleName(), metadata, initializer);
 		this.request = request;
 		this.context = context;
+		this.forward = new MandatoryEclipseContext(EclipseContextFactory
+				.createServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext()).createChild());
 	}
 
 	@Override
 	protected void createFieldControls(Composite composite) {
-		text = createTextButtonBlock(composite, labelForContainer(), () -> selectContainer());
+		text = createTextButtonBlock(composite, //
+				new EClassName(containerMetadata().get().eClass()).get(), //
+				this::selectContainer);
 		super.createFieldControls(composite);
 	}
 
-	private String labelForContainer() {
-		return containerMetadata().get().eClass().getName();
-	}
-
 	private Optional<EntityMetadata> containerMetadata() {
 		return context.get(ComposableClassMetadata.class).find(request.target());
 	}
@@ -70,6 +76,7 @@ private Text createTextButtonBlock(Composite composite, String labelText, Suppli
 		parent.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
 		Button select = new Button(composite, SWT.PUSH);
 		select.setText(WorkbenchMessages.InnerClassifierWizardPage_text_select);
+		forward.get().set(Shell.class, getShell());
 		select.addSelectionListener(widgetSelectedAdapter(event -> updateText(supplier.get())));
 		select.setLayoutData(GridDataFactory.fillDefaults().create());
 		return parent;
@@ -96,7 +103,7 @@ protected void initControls(ClassifierInitializer initializer) {
 	private Optional<?> selectContainer() {
 		Collection<R> initial = new ArrayList<>();
 		container().ifPresent(initial::add);
-		Optional<InstanceSupply<?>> found = context.get(ComposableClassSupply.class).find(request.target(), context);
+		Optional<InstanceSupply<?>> found = context.get(ComposableClassSupply.class).find(request.target(), forward);
 		if (found.isPresent()) {
 			return found.get().supply();
 		}
@@ -106,8 +113,8 @@ private Optional<?> selectContainer() {
 	@Override
 	protected boolean validatePage() {
 		if (!Optional.ofNullable(text.getData()).isPresent()) {
-			setErrorMessage(
-					NLS.bind(WorkbenchMessages.InnerClassifierWizardPage_e_specify_container, labelForContainer()));
+			setErrorMessage(NLS.bind(WorkbenchMessages.InnerClassifierWizardPage_e_specify_container,
+					new EClassName(containerMetadata().get().eClass()).get()));
 			return false;
 		}
 		return super.validatePage();
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/workbench/LocWokbench.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/workbench/LocWokbench.java
index fc68fce88..50831c2b3 100644
--- a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/workbench/LocWokbench.java
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/loc/workbench/LocWokbench.java
@@ -32,17 +32,13 @@
 import org.eclipse.equinox.app.IApplicationContext;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.passage.lic.emf.ecore.EditingDomainRegistry;
-import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
 import org.eclipse.passage.lic.emf.edit.ComposedAdapterFactoryProvider;
 import org.eclipse.passage.lic.emf.edit.EditingDomainRegistryAccess;
-import org.eclipse.passage.lic.emf.meta.PlainEntityMetadata;
 import org.eclipse.passage.lic.jface.resource.LicensingImages;
+import org.eclipse.passage.loc.internal.workbench.CreateRoot;
+import org.eclipse.passage.loc.internal.workbench.MandatoryEclipseContext;
 import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
-import org.eclipse.passage.loc.internal.workbench.wizards.RootClassifierWizard;
 import org.eclipse.passage.loc.jface.dialogs.FilteredSelectionDialog;
 import org.eclipse.passage.loc.jface.dialogs.LabelSearchFilter;
 import org.eclipse.passage.loc.workbench.viewers.DomainRegistryLabelProvider;
@@ -89,20 +85,9 @@ private static String maskExtension(String extension) {
 
 	public static void createDomainResource(IEclipseContext context, String domain, String perspectiveId) {
 		EditingDomainRegistryAccess registryAccess = context.get(EditingDomainRegistryAccess.class);
-		ClassifierInitializer initializer = registryAccess.getClassifierInitializer(domain);
 		EditingDomainRegistry<?> registry = registryAccess.getDomainRegistry(domain);
-		PlainEntityMetadata metadata = new PlainEntityMetadata(registry.getContentClassifier(),
-				registry.getContentIdentifierAttribute(), registry.getContentNameAttribute());
-		Wizard wizard = new RootClassifierWizard(metadata, initializer, registry);
-		WizardDialog dialog = new WizardDialog(context.get(Shell.class), wizard);
-		dialog.create();
-		dialog.setTitle(initializer.newObjectTitle());
-		dialog.setMessage(initializer.newFileMessage());
-		Shell createdShell = dialog.getShell();
-		createdShell.setText(initializer.newObjectMessage());
-		createdShell.setImage(LicensingImages.getImage(registry.getContentClassifier().getName()));
-		int open = dialog.open();
-		if (open == Window.OK) {
+		if (new CreateRoot<>(new MandatoryEclipseContext(context), domain, registry.getContentClass()).get()
+				.isPresent()) {
 			LocWokbench.switchPerspective(context, perspectiveId);
 		}
 	}
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EClassName.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EClassName.java
new file mode 100644
index 000000000..e0fdec58c
--- /dev/null
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EClassName.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.emf.edit;
+
+import java.util.Objects;
+import java.util.function.Supplier;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * 
+ * Retrieves localized name for a given {@link EClass}
+ *
+ */
+public class EClassName implements Supplier<String> {
+
+	private final EClassResources resources;
+
+	public EClassName(EClassResources resources) {
+		Objects.requireNonNull(resources, "Null EClassResources"); //$NON-NLS-1$
+		this.resources = resources;
+	}
+
+	public EClassName(EClass eClass) {
+		Objects.requireNonNull(eClass, "Null EClass"); //$NON-NLS-1$
+		this.resources = new EClassResources(eClass);
+	}
+
+	@Override
+	public String get() {
+		return resources.get().getString(NLS.bind("_UI_{0}_type", resources.eClass().getName())); //$NON-NLS-1$
+	}
+
+}
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EClassResources.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EClassResources.java
new file mode 100644
index 000000000..bd7edb82f
--- /dev/null
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EClassResources.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.emf.edit;
+
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Supplier;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.EMFEditPlugin;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+
+/**
+ * 
+ * Supplies EMF {@link ResourceLocator} for a given {@link EObject} or
+ * {@link EClass}
+ *
+ */
+public class EClassResources implements Supplier<ResourceLocator> {
+
+	private final ComposedAdapterFactory adapterFactory;
+	private final EObject eObject;
+
+	public EClassResources(EObject eObject) {
+		this(eObject, //
+				new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE));
+	}
+
+	public EClassResources(EClass eClass) {
+		this(eClass.getEPackage().getEFactoryInstance().create(eClass),
+				new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE));
+	}
+
+	public EClassResources(EObject eObject, ComposedAdapterFactory adapterFactory) {
+		Objects.requireNonNull(eObject, "Null EObject"); //$NON-NLS-1$
+		Objects.requireNonNull(adapterFactory, "Null ComposedAdapterFactory"); //$NON-NLS-1$
+		this.eObject = eObject;
+		this.adapterFactory = adapterFactory;
+	}
+
+	/**
+	 * The {@link EClass} that these resources dedicated for
+	 * 
+	 * @return the {@link EClass}
+	 */
+	public EClass eClass() {
+		return eObject.eClass();
+	}
+
+	/**
+	 * The {@link ComposedAdapterFactory} that will be used to resolve resoures
+	 * 
+	 * @return the {@link EClass}
+	 */
+	public ComposedAdapterFactory adapterFactory() {
+		return adapterFactory;
+	}
+
+	@Override
+	public ResourceLocator get() {
+		return Optional.ofNullable(//
+				adapterFactory.adapt(eObject, IItemLabelProvider.class))//
+				.filter(ResourceLocator.class::isInstance)//
+				.map(ResourceLocator.class::cast)//
+				.orElse(EMFEditPlugin.INSTANCE);
+	}
+
+}
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EObjectDefaultIdentifier.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EObjectDefaultIdentifier.java
new file mode 100644
index 000000000..8d4b71395
--- /dev/null
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EObjectDefaultIdentifier.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.emf.edit;
+
+import java.util.Objects;
+import java.util.function.Supplier;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * 
+ * Retrieves localized name for a new {@link EObject}
+ *
+ */
+public class EObjectDefaultIdentifier implements Supplier<String> {
+
+	private final EObjectDefaultName name;
+
+	public EObjectDefaultIdentifier(EClassResources resources) {
+		Objects.requireNonNull(resources, "Null EClassResources"); //$NON-NLS-1$
+		this.name = new EObjectDefaultName(resources);
+	}
+
+	public EObjectDefaultIdentifier(EClass eClass) {
+		Objects.requireNonNull(eClass, "Null EClass"); //$NON-NLS-1$
+		this.name = new EObjectDefaultName(eClass);
+	}
+
+	@Override
+	public String get() {
+		return name.get().replace(' ', '.').toLowerCase();
+	}
+
+}
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EObjectDefaultName.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EObjectDefaultName.java
new file mode 100644
index 000000000..563881237
--- /dev/null
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/emf/edit/EObjectDefaultName.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.emf.edit;
+
+import java.util.Objects;
+import java.util.function.Supplier;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.passage.moveto.lic.internal.emf.edit.i18n.EmfEditMessages;
+
+/**
+ * 
+ * Retrieves localized name for a new {@link EObject}
+ *
+ */
+public class EObjectDefaultName implements Supplier<String> {
+
+	private final EClassResources resources;
+
+	public EObjectDefaultName(EClassResources resources) {
+		Objects.requireNonNull(resources, "Null EClassResources"); //$NON-NLS-1$
+		this.resources = resources;
+	}
+
+	public EObjectDefaultName(EClass eClass) {
+		Objects.requireNonNull(eClass, "Null EClass"); //$NON-NLS-1$
+		this.resources = new EClassResources(eClass);
+	}
+
+	@Override
+	public String get() {
+		return NLS.bind(EmfEditMessages.EObjectDefaultName_new, new EClassName(resources).get());
+	}
+
+}
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/internal/emf/edit/i18n/EmfEditMessages.java b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/internal/emf/edit/i18n/EmfEditMessages.java
new file mode 100644
index 000000000..52b027d41
--- /dev/null
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/internal/emf/edit/i18n/EmfEditMessages.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.internal.emf.edit.i18n;
+
+import org.eclipse.osgi.util.NLS;
+
+public class EmfEditMessages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.passage.moveto.lic.internal.emf.edit.i18n.EmfEditMessages"; //$NON-NLS-1$
+	public static String EObjectDefaultName_new;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, EmfEditMessages.class);
+	}
+
+	private EmfEditMessages() {
+	}
+}
diff --git a/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/internal/emf/edit/i18n/EmfEditMessages.properties b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/internal/emf/edit/i18n/EmfEditMessages.properties
new file mode 100644
index 000000000..7fc739162
--- /dev/null
+++ b/bundles/org.eclipse.passage.loc.workbench/src/org/eclipse/passage/moveto/lic/internal/emf/edit/i18n/EmfEditMessages.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2020 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+#     ArSysOp - initial API and implementation
+###############################################################################
+
+EObjectDefaultName_new=New {0}
diff --git a/tests/org.eclipse.passage.loc.workbench.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.passage.loc.workbench.tests/META-INF/MANIFEST.MF
index 5438cd120..a0dcb26bd 100644
--- a/tests/org.eclipse.passage.loc.workbench.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.passage.loc.workbench.tests/META-INF/MANIFEST.MF
@@ -8,4 +8,5 @@ Bundle-Vendor: %Bundle-Vendor
 Bundle-Copyright: %Bundle-Copyright
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Fragment-Host: org.eclipse.passage.loc.workbench
-Require-Bundle: org.junit;bundle-version="4.12.0"
+Require-Bundle: org.eclipse.emf.ecore.edit;bundle-version="2.13.0",
+ org.junit;bundle-version="4.12.0"
diff --git a/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EClassNameTest.java b/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EClassNameTest.java
new file mode 100644
index 000000000..8e27141a6
--- /dev/null
+++ b/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EClassNameTest.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.emf.edit.tests;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.passage.moveto.lic.emf.edit.EClassName;
+import org.eclipse.passage.moveto.lic.emf.edit.EClassResources;
+import org.junit.Test;
+
+public class EClassNameTest {
+
+	@Test(expected = NullPointerException.class)
+	public void nullEClass() {
+		new EClassName((EClass) null);
+	}
+
+	@Test(expected = NullPointerException.class)
+	public void nullEClassResources() {
+		new EClassName((EClassResources) null);
+	}
+
+	@Test
+	public void positive() {
+		EClassResources resources = new EClassResources(EcorePackage.eINSTANCE.getEReference());
+		resources.adapterFactory().addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		assertEquals("EReference", new EClassName(resources).get()); //$NON-NLS-1$
+	}
+
+}
diff --git a/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EClassResourcesTest.java b/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EClassResourcesTest.java
new file mode 100644
index 000000000..5b0ef777a
--- /dev/null
+++ b/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EClassResourcesTest.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.emf.edit.tests;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.provider.EReferenceItemProvider;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.passage.moveto.lic.emf.edit.EClassResources;
+import org.junit.Test;
+
+public class EClassResourcesTest {
+
+	@Test(expected = NullPointerException.class)
+	public void nullEClass() {
+		new EClassResources((EClass) null);
+	}
+
+	@Test(expected = NullPointerException.class)
+	public void nullEObject() {
+		new EClassResources((EObject) null);
+	}
+
+	@Test
+	public void positive() {
+		EClassResources resources = new EClassResources(EcorePackage.eINSTANCE.getEReference());
+		resources.adapterFactory().addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		assertEquals(EReferenceItemProvider.class, resources.get().getClass()); // $NON-NLS-1$
+	}
+
+}
diff --git a/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EObjectDefaultIdentifierTest.java b/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EObjectDefaultIdentifierTest.java
new file mode 100644
index 000000000..515ec4eb9
--- /dev/null
+++ b/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EObjectDefaultIdentifierTest.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.emf.edit.tests;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.passage.moveto.lic.emf.edit.EClassResources;
+import org.eclipse.passage.moveto.lic.emf.edit.EObjectDefaultIdentifier;
+import org.junit.Test;
+
+public class EObjectDefaultIdentifierTest {
+
+	@Test(expected = NullPointerException.class)
+	public void nullEClass() {
+		new EObjectDefaultIdentifier((EClass) null);
+	}
+
+	@Test(expected = NullPointerException.class)
+	public void nullEClassResources() {
+		new EObjectDefaultIdentifier((EClassResources) null);
+	}
+
+	@Test
+	public void positive() {
+		EClassResources resources = new EClassResources(EcorePackage.eINSTANCE.getEReference());
+		resources.adapterFactory().addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		assertEquals("new.ereference", new EObjectDefaultIdentifier(resources).get()); //$NON-NLS-1$
+	}
+
+}
diff --git a/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EObjectDefaultNameTest.java b/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EObjectDefaultNameTest.java
new file mode 100644
index 000000000..a88302d2d
--- /dev/null
+++ b/tests/org.eclipse.passage.loc.workbench.tests/src/org/eclipse/passage/moveto/lic/emf/edit/tests/EObjectDefaultNameTest.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.moveto.lic.emf.edit.tests;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.passage.moveto.lic.emf.edit.EClassResources;
+import org.eclipse.passage.moveto.lic.emf.edit.EObjectDefaultName;
+import org.junit.Test;
+
+public class EObjectDefaultNameTest {
+
+	@Test(expected = NullPointerException.class)
+	public void nullEClass() {
+		new EObjectDefaultName((EClass) null);
+	}
+
+	@Test(expected = NullPointerException.class)
+	public void nullEClassResources() {
+		new EObjectDefaultName((EClassResources) null);
+	}
+
+	@Test
+	public void positive() {
+		EClassResources resources = new EClassResources(EcorePackage.eINSTANCE.getEReference());
+		resources.adapterFactory().addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		assertEquals("New EReference", new EObjectDefaultName(resources).get()); //$NON-NLS-1$
+	}
+
+}