diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml b/bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml
index 95ff227..0eb33e7 100644
--- a/bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml
+++ b/bundles/org.eclipse.e4.tools.emf.editor3x/plugin.xml
@@ -29,6 +29,9 @@
       <contributionClassCreator
             class="org.eclipse.e4.tools.emf.editor3x.extension.ToolControlContributionEditor">
       </contributionClassCreator>
+      <contributionClassCreator
+            class="org.eclipse.e4.tools.emf.editor3x.extension.ImperativeExpressionContributionEditor">
+      </contributionClassCreator>
    </extension>
    <extension
          point="org.eclipse.ui.preferencePages">
diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/extension/ImperativeExpressionContributionEditor.java b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/extension/ImperativeExpressionContributionEditor.java
new file mode 100644
index 0000000..a08260d
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/extension/ImperativeExpressionContributionEditor.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2016 vogella GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.editor3x.extension;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.e4.internal.tools.wizards.classes.NewImperativeExpressionClassWizard;
+import org.eclipse.e4.tools.emf.editor3x.Messages;
+import org.eclipse.e4.tools.emf.ui.common.IContributionClassCreator;
+import org.eclipse.e4.ui.model.application.MContribution;
+import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PartInitException;
+
+@SuppressWarnings("restriction")
+public class ImperativeExpressionContributionEditor implements IContributionClassCreator {
+	@Override
+	public void createOpen(MContribution contribution, EditingDomain domain, IProject project, Shell shell) {
+		createOpen(contribution, domain, project, shell, false);
+	}
+
+	private void createOpen(MContribution contribution, EditingDomain domain, IProject project, Shell shell,
+			boolean forceNew) {
+		if (forceNew || contribution.getContributionURI() == null
+				|| contribution.getContributionURI().trim().length() == 0
+				|| !contribution.getContributionURI().startsWith("bundleclass:")) { //$NON-NLS-1$
+			NewImperativeExpressionClassWizard wizard = new NewImperativeExpressionClassWizard(contribution.getContributionURI());
+			wizard.init(null, new StructuredSelection(project));
+			WizardDialog dialog = new WizardDialog(shell, wizard);
+			if (dialog.open() == Window.OK) {
+				final IFile f = wizard.getFile();
+				final ICompilationUnit el = JavaCore.createCompilationUnitFrom(f);
+				try {
+					String fullyQualified;
+					if (el.getPackageDeclarations() != null && el.getPackageDeclarations().length > 0) {
+						final String packageName = el.getPackageDeclarations()[0].getElementName();
+						final String className = wizard.getDomainClass().getName();
+						if (packageName.trim().length() > 0) {
+							fullyQualified = packageName + "." + className; //$NON-NLS-1$
+						} else {
+							fullyQualified = className;
+						}
+					} else {
+						fullyQualified = wizard.getDomainClass().getName();
+					}
+
+					final Command cmd = SetCommand.create(domain, contribution,
+							ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI,
+							"bundleclass://" + Util.getBundleSymbolicName(f.getProject()) + "/" + fullyQualified); //$NON-NLS-1$//$NON-NLS-2$
+					if (cmd.canExecute()) {
+						domain.getCommandStack().execute(cmd);
+					}
+				} catch (final JavaModelException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		} else {
+			final URI uri = URI.createURI(contribution.getContributionURI());
+			if (uri.hasAuthority() && uri.segmentCount() == 1) {
+				final String symbolicName = uri.authority();
+				final String fullyQualified = uri.segment(0);
+				IProject p = ResourcesPlugin.getWorkspace().getRoot()
+						.getProject(symbolicName);
+
+				if (!p.exists()) {
+					for (final IProject check : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
+						final String name = Util.getBundleSymbolicName(check);
+						if (symbolicName.equals(name)) {
+							p = check;
+							break;
+						}
+					}
+				}
+
+				// TODO If this is not a WS-Resource we need to open differently
+				if (p != null) {
+					final IJavaProject jp = JavaCore.create(p);
+					IType t = null;
+					try {
+						if (p.exists()) {
+							t = jp.findType(fullyQualified);
+						}
+						else
+						{
+							final IJavaProject pprim = JavaCore.create(project);
+							t = pprim.findType(fullyQualified);
+						}
+						if (t != null) {
+							JavaUI.openInEditor(t);
+						} else {
+							createOpen(contribution, domain, project, shell, true);
+						}
+					} catch (final JavaModelException e) {
+						createOpen(contribution, domain, project, shell, true);
+					} catch (final PartInitException e) {
+						MessageDialog.openError(shell, Messages.ContributionEditor_FailedToOpenEditor, e.getMessage());
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+				}
+			} else {
+				MessageDialog.openError(shell, Messages.ContributionEditor_InvalidURL,
+						Messages.ContributionEditor_CurrentURLIsInvalid);
+			}
+		}
+	}
+
+	@Override
+	public boolean isSupported(EClass element) {
+		return Util.isTypeOrSuper(UiPackageImpl.Literals.IMPERATIVE_EXPRESSION, element);
+	}
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
index 705731e..68def5f 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
@@ -678,6 +678,10 @@
 	public String CoreExpressionEditor_TreeLabelDescription;
 	public String CoreExpressionEditor_ExpressionId;
 
+	public String ImperativeExpressionEditor_TreeLabel;
+	public String ImperativeExpressionEditor_TreeLabelDescription;
+	public String ImperativeExpressionEditor_TrackingLabel;
+
 	public String ExpressionIdDialog_ShellTitle;
 	public String ExpressionIdDialog_DialogTitle;
 	public String ExpressionIdDialog_DialogMessage;
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
index 6b7cf65..e5c7249 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
@@ -685,6 +685,10 @@
 CoreExpressionEditor_TreeLabelDescription=Core Expression
 CoreExpressionEditor_ExpressionId=Expression ID
 
+ImperativeExpressionEditor_TreeLabel=Imperative Expression
+ImperativeExpressionEditor_TreeLabelDescription=Imperative Expression
+ImperativeExpressionEditor_TrackingLabel=Tracking
+
 ExpressionIdDialog_ShellTitle=Find Expression ID
 ExpressionIdDialog_DialogTitle=Find Expression ID
 ExpressionIdDialog_DialogMessage=Find the expression ID defined through the 'org.eclipse.core.expressions.definitions' extension point
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
index 0c9706c..6fd042a 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
@@ -91,6 +91,7 @@
 import org.eclipse.e4.tools.emf.ui.internal.common.component.HandledMenuItemEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.HandledToolItemEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.HandlerEditor;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.ImperativeExpressionEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.KeyBindingEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.MenuContributionEditor;
 import org.eclipse.e4.tools.emf.ui.internal.common.component.MenuEditor;
@@ -1368,6 +1369,8 @@
 
 		registerEditor(UiPackageImpl.Literals.CORE_EXPRESSION,
 				ContextInjectionFactory.make(CoreExpressionEditor.class, context));
+		registerEditor(UiPackageImpl.Literals.IMPERATIVE_EXPRESSION,
+				ContextInjectionFactory.make(ImperativeExpressionEditor.class, context));
 
 		registerEditor(BasicPackageImpl.Literals.COMPOSITE_PART,
 				ContextInjectionFactory.make(CompositePartEditor.class, context));
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ImperativeExpressionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ImperativeExpressionEditor.java
new file mode 100644
index 0000000..90406f4
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ImperativeExpressionEditor.java
@@ -0,0 +1,210 @@
+/*******************************************************************************
+ * Copyright (c) 2016 vogella GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.internal.common.component;
+
+import javax.inject.Inject;
+
+import org.eclipse.core.databinding.Binding;
+import org.eclipse.core.databinding.UpdateValueStrategy;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.tools.emf.ui.common.ContributionURIValidator;
+import org.eclipse.e4.tools.emf.ui.common.IContributionClassCreator;
+import org.eclipse.e4.tools.emf.ui.common.Util;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.ContributionClassDialog;
+import org.eclipse.e4.ui.model.application.MContribution;
+import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.MImperativeExpression;
+import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.emf.databinding.EMFDataBindingContext;
+import org.eclipse.emf.databinding.edit.EMFEditProperties;
+import org.eclipse.jface.databinding.swt.ISWTObservableValue;
+import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Text;
+
+public class ImperativeExpressionEditor extends AbstractComponentEditor {
+	private Composite composite;
+	private EMFDataBindingContext context;
+
+	@Inject
+	IEclipseContext eclipseContext;
+
+	@Inject
+	public ImperativeExpressionEditor() {
+		super();
+	}
+
+	@Override
+	public Image getImage(Object element) {
+		return getImage(element, ResourceProvider.IMG_Obj16_class_obj);
+	}
+
+	@Override
+	public String getLabel(Object element) {
+		return Messages.ImperativeExpressionEditor_TreeLabel;
+	}
+
+	@Override
+	public String getDetailLabel(Object element) {
+		String contributionURI = ((MImperativeExpression) element).getContributionURI();
+		if (contributionURI != null && contributionURI.trim().length() > 0) {
+			int lastIndexOf = contributionURI.lastIndexOf("."); //$NON-NLS-1$
+			if (contributionURI.length() > lastIndexOf + 1) {
+				return contributionURI.substring(lastIndexOf + 1);
+			}
+			return contributionURI;
+		}
+		return null;
+	}
+
+	@Override
+	public String getDescription(Object element) {
+		return Messages.CoreExpressionEditor_TreeLabelDescription;
+	}
+
+	@Override
+	public Composite doGetEditor(Composite parent, Object object) {
+		if (composite == null) {
+			context = new EMFDataBindingContext();
+			composite = new Composite(parent, SWT.NONE);
+			composite.setLayout(new FillLayout());
+			createForm(composite, context, getMaster());
+		}
+		getMaster().setValue(object);
+		return composite;
+	}
+
+	private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) {
+		final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
+
+		CTabItem item = new CTabItem(folder, SWT.NONE);
+		item.setText(Messages.ModelTooling_Common_TabDefault);
+
+		parent = createScrollableContainer(folder);
+		item.setControl(parent.getParent());
+
+		if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
+			ControlFactory.createXMIId(parent, this);
+		}
+
+		final IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify);
+
+		final Link lnk;
+		{
+			final IContributionClassCreator c = getEditor()
+					.getContributionCreator(UiPackageImpl.Literals.IMPERATIVE_EXPRESSION);
+			if (project != null && c != null) {
+				lnk = new Link(parent, SWT.NONE);
+				lnk.setText("<A>" + Messages.HandlerEditor_ClassURI + "</A>"); //$NON-NLS-1$//$NON-NLS-2$
+				lnk.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+				lnk.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						c.createOpen((MContribution) getMaster().getValue(), getEditingDomain(), project,
+								lnk.getShell());
+					}
+				});
+			} else {
+				lnk = null;
+				final Label l = new Label(parent, SWT.NONE);
+				l.setText(Messages.HandlerEditor_ClassURI);
+				l.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+			}
+
+			final Text t = new Text(parent, SWT.BORDER);
+			TextPasteHandler.createFor(t);
+			t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			t.addModifyListener(new ModifyListener() {
+
+				@Override
+				public void modifyText(ModifyEvent e) {
+					if (lnk != null) {
+						lnk.setToolTipText(((Text) e.getSource()).getText());
+					}
+				}
+			});
+			final Binding binding = context.bindValue(textProp.observeDelayed(200, t),
+					EMFEditProperties
+					.value(getEditingDomain(), ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI)
+					.observeDetail(getMaster()),
+					new UpdateValueStrategy().setAfterConvertValidator(new ContributionURIValidator()),
+					new UpdateValueStrategy());
+			Util.addDecoration(t, binding);
+
+			final Button b = new Button(parent, SWT.PUSH | SWT.FLAT);
+			b.setImage(createImage(ResourceProvider.IMG_Obj16_zoom));
+			b.setText(Messages.ModelTooling_Common_FindEllipsis);
+			b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));
+			b.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					final ContributionClassDialog dialog = new ContributionClassDialog(b.getShell(), eclipseContext,
+							getEditingDomain(), (MContribution) getMaster().getValue(),
+							ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI, Messages);
+					dialog.open();
+				}
+			});
+
+			final Label l = new Label(parent, SWT.NONE);
+			l.setText(Messages.ImperativeExpressionEditor_TrackingLabel);
+			l.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+
+			Button trackingButton = new Button(parent, SWT.CHECK);
+			ISWTObservableValue observeTrackingSelection = WidgetProperties.selection().observe(trackingButton);
+			context.bindValue(observeTrackingSelection,
+					EMFEditProperties
+					.value(getEditingDomain(), UiPackageImpl.Literals.IMPERATIVE_EXPRESSION__TRACKING)
+					.observeDetail(getMaster()));
+		}
+
+		item = new CTabItem(folder, SWT.NONE);
+		item.setText(Messages.ModelTooling_Common_TabSupplementary);
+
+		parent = createScrollableContainer(folder);
+		item.setControl(parent.getParent());
+
+		ControlFactory.createStringListWidget(parent, Messages, this, Messages.CategoryEditor_Tags,
+				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__TAGS, VERTICAL_LIST_WIDGET_INDENT);
+		ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
+				ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__PERSISTED_STATE, VERTICAL_LIST_WIDGET_INDENT);
+
+		createContributedEditorTabs(folder, context, getMaster(), MImperativeExpression.class);
+
+		folder.setSelection(0);
+
+		return folder;
+	}
+
+	@Override
+	public IObservableList getChildList(Object element) {
+		return null;
+	}
+
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuEditor.java
index c511eba..f6bb192 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuEditor.java
@@ -339,6 +339,7 @@
 			final List<Object> list = new ArrayList<>();
 			list.add(Messages.MenuItemEditor_NoExpression);
 			list.add(UiPackageImpl.Literals.CORE_EXPRESSION);
+			list.add(UiPackageImpl.Literals.IMPERATIVE_EXPRESSION);
 			list.addAll(getEditor().getFeatureClasses(UiPackageImpl.Literals.EXPRESSION,
 					UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN));
 			combo.setInput(list);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuItemEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuItemEditor.java
index 7b533fa..5527052 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuItemEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuItemEditor.java
@@ -306,6 +306,7 @@
 			final List<Object> list = new ArrayList<>();
 			list.add(Messages.MenuItemEditor_NoExpression);
 			list.add(UiPackageImpl.Literals.CORE_EXPRESSION);
+			list.add(UiPackageImpl.Literals.IMPERATIVE_EXPRESSION);
 			list.addAll(getEditor().getFeatureClasses(UiPackageImpl.Literals.EXPRESSION,
 					UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN));
 			combo.setInput(list);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolItemEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolItemEditor.java
index 32f300a..0fc349a 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolItemEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolItemEditor.java
@@ -315,6 +315,7 @@
 			final List<Object> list = new ArrayList<>();
 			list.add(Messages.ToolItemEditor_NoExpression);
 			list.add(UiPackageImpl.Literals.CORE_EXPRESSION);
+			list.add(UiPackageImpl.Literals.IMPERATIVE_EXPRESSION);
 			list.addAll(getEditor().getFeatureClasses(UiPackageImpl.Literals.EXPRESSION, UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN));
 			combo.setInput(list);
 			context.bindValue(ViewerProperties.singleSelection().observe(combo), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE_WHEN).observeDetail(getMaster()), new UpdateValueStrategy().setConverter(new EClass2EObject(Messages)), new UpdateValueStrategy().setConverter(new EObject2EClass(Messages)));
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/Messages.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/Messages.java
index 5d0840c..70551d8 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/Messages.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/Messages.java
@@ -73,6 +73,9 @@
 	public static String NewHandlerClassWizard_CreateNewHandler;
 	public static String NewHandlerClassWizard_ExecuteMethod;
 	public static String NewHandlerClassWizard_NewHandler;
+	public static String NewImperativeExpressionClassWizard_CreateNewImperativeExpression;
+	public static String NewImperativeExpressionClassWizard_EvaluateMethod;
+	public static String NewImperativeExpressionClassWizard_NewImperativeExpression;
 	public static String NewModelFilePage_Browse;
 	public static String NewModelFilePage_Container;
 	public static String NewModelFilePage_FileContainerMustBeSpecified;
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/messages.properties b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/messages.properties
index 7bd9193..33c49ca 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/messages.properties
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/messages.properties
@@ -53,6 +53,9 @@
 NewHandlerClassWizard_CreateNewHandler=Create a new handler class
 NewHandlerClassWizard_ExecuteMethod=Execute Method
 NewHandlerClassWizard_NewHandler=New Handler
+NewImperativeExpressionClassWizard_CreateNewImperativeExpression=Create a new Imperative expression class
+NewImperativeExpressionClassWizard_EvaluateMethod=Evaluate method
+NewImperativeExpressionClassWizard_NewImperativeExpression=New Imperative Expression
 NewModelFilePage_Browse=Browse...
 NewModelFilePage_Container=&Container:
 NewModelFilePage_FileContainerMustBeSpecified=File container must be specified
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java
new file mode 100644
index 0000000..cad413b
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewImperativeExpressionClassWizard.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2016 vogella GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.internal.tools.wizards.classes;
+
+import java.util.Set;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.e4.internal.tools.Messages;
+import org.eclipse.e4.internal.tools.wizards.classes.AbstractNewClassPage.JavaClass;
+import org.eclipse.e4.internal.tools.wizards.classes.templates.ImperativeExpressionTemplate;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class NewImperativeExpressionClassWizard extends AbstractNewClassWizard {
+	private static final String EVALUATE_METHOD_NAME = "evaluateMethodName"; //$NON-NLS-1$
+
+	private String initialString;
+
+	public NewImperativeExpressionClassWizard(String contributionURI) {
+		initialString = contributionURI;
+	}
+
+	public NewImperativeExpressionClassWizard() {
+		// Intentially left empty
+	}
+
+	@Override
+	protected String getContent() {
+		final ImperativeExpressionTemplate template = new ImperativeExpressionTemplate();
+		return template.generate(getDomainClass());
+	}
+
+	@Override
+	public void addPages() {
+		addPage(new AbstractNewClassPage(
+				"Classinformation", //$NON-NLS-1$
+				Messages.NewImperativeExpressionClassWizard_NewImperativeExpression,
+				Messages.NewImperativeExpressionClassWizard_CreateNewImperativeExpression, root,
+				ResourcesPlugin.getWorkspace().getRoot(),
+				initialString) {
+
+			@Override
+			protected JavaClass createInstance() {
+				return new ImperativeExpressionClass(root);
+			}
+
+			@Override
+			protected void createFields(Composite parent, DataBindingContext dbc) {
+				final IWidgetValueProperty textProp = WidgetProperties
+						.text(SWT.Modify);
+
+				{
+					Label l = new Label(parent, SWT.NONE);
+					l.setText(Messages.NewImperativeExpressionClassWizard_EvaluateMethod);
+
+					final Text t = new Text(parent, SWT.BORDER);
+					t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+					dbc.bindValue(
+							textProp.observe(t),
+							BeanProperties.value(EVALUATE_METHOD_NAME).observe(
+									getClazz()));
+
+					l = new Label(parent, SWT.NONE);
+				}
+			}
+		});
+	}
+
+	@Override
+	protected Set<String> getRequiredBundles() {
+		final Set<String> set = super.getRequiredBundles();
+		set.add("org.eclipse.e4.core.di"); //$NON-NLS-1$
+		return set;
+	}
+
+	public static class ImperativeExpressionClass extends JavaClass {
+		private String evaluateMethodName = "evaluate"; //$NON-NLS-1$
+
+		public ImperativeExpressionClass(IPackageFragmentRoot root) {
+			super(root);
+		}
+
+		public String getEvaluateMethodName() {
+			return evaluateMethodName;
+		}
+
+		public void setEvaluateMethodName(String evaluateMethodName) {
+			support.firePropertyChange(EVALUATE_METHOD_NAME,
+					this.evaluateMethodName,
+					this.evaluateMethodName = evaluateMethodName);
+		}
+
+	}
+}
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/templates/ImperativeExpressionTemplate.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/templates/ImperativeExpressionTemplate.java
new file mode 100644
index 0000000..9ddc137
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/templates/ImperativeExpressionTemplate.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2016 vogella GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.internal.tools.wizards.classes.templates;
+
+import org.eclipse.e4.internal.tools.wizards.classes.NewImperativeExpressionClassWizard.ImperativeExpressionClass;
+
+public class ImperativeExpressionTemplate
+{
+	protected static String nl;
+	public static synchronized ImperativeExpressionTemplate create(String lineSeparator)
+	{
+		nl = lineSeparator;
+		ImperativeExpressionTemplate result = new ImperativeExpressionTemplate();
+		nl = null;
+		return result;
+	}
+
+	public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
+	protected final String TEXT_1 = " ";
+	protected final String TEXT_2 = NL + "package ";
+	protected final String TEXT_3 = ";";
+	protected final String TEXT_4 = NL + NL
+			+ "import org.eclipse.e4.core.di.annotations.Evaluate;" + NL + NL + "public class ";
+	protected final String TEXT_7 = " {" + NL + "\t@Evaluate" + NL + "\tpublic boolean ";
+	protected final String TEXT_8 = "() {" + NL + "\t\treturn true;" + NL + "\t}" + NL + "}" + NL;
+
+	public String generate(Object argument)
+	{
+		final StringBuffer stringBuffer = new StringBuffer();
+		ImperativeExpressionClass domainClass = (ImperativeExpressionClass) argument;
+		stringBuffer.append(TEXT_1);
+		if( domainClass.getPackageFragment() != null && domainClass.getPackageFragment().getElementName().trim().length() > 0 ) {
+			stringBuffer.append(TEXT_2);
+			stringBuffer.append( domainClass.getPackageFragment().getElementName() );
+			stringBuffer.append(TEXT_3);
+		}
+		stringBuffer.append(TEXT_4);
+		stringBuffer.append( domainClass.getName() );
+		stringBuffer.append(TEXT_7);
+		stringBuffer.append(domainClass.getEvaluateMethodName());
+		stringBuffer.append(TEXT_8);
+		return stringBuffer.toString();
+	}
+}
