diff --git a/org.eclipse.emf.refactor.metrics.ocl/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.metrics.ocl/META-INF/MANIFEST.MF
index fd4e570..ca49f55 100644
--- a/org.eclipse.emf.refactor.metrics.ocl/META-INF/MANIFEST.MF
+++ b/org.eclipse.emf.refactor.metrics.ocl/META-INF/MANIFEST.MF
@@ -16,3 +16,5 @@
  org.eclipse.emf.codegen;bundle-version="2.8.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.emf.refactor.metrics.ocl.core,
+ org.eclipse.emf.refactor.metrics.ocl.managers
diff --git a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/handler/GenerateNewMetricOCLCommandHandler.java b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/handler/GenerateNewMetricOCLCommandHandler.java
new file mode 100644
index 0000000..2355895
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/handler/GenerateNewMetricOCLCommandHandler.java
@@ -0,0 +1,54 @@
+package org.eclipse.emf.refactor.metrics.ocl.handler;
+
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.commands.IHandlerListener;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.refactor.metrics.managers.SelectionManager;
+import org.eclipse.emf.refactor.metrics.ocl.ui.NewMetricWizardOCL;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+public class GenerateNewMetricOCLCommandHandler implements IHandler {
+
+	@Override
+	public void addHandlerListener(IHandlerListener handlerListener) { }
+
+	@Override
+	public void dispose() { }
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchWindow win = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		ISelection selection = win.getSelectionService().getSelection();
+		List<EObject> context = SelectionManager.getESelection(selection);
+		EObject selectedEObject = context.get(0);
+		String metamodel = ((EPackage) selectedEObject.eClass().eContainer()).getNsURI();		
+		String contextType = selectedEObject.eClass().getInstanceClass().getSimpleName();		
+		NewMetricWizardOCL wizard = new NewMetricWizardOCL(metamodel, contextType);
+		wizard.init(win.getWorkbench(), (IStructuredSelection) selection);
+		WizardDialog dialog = new WizardDialog(win.getShell(), wizard);
+		return dialog.open();
+	}
+
+	@Override
+	public boolean isEnabled() {
+		return true;
+	}
+
+	@Override
+	public boolean isHandled() {
+		return true;
+	}
+
+	@Override
+	public void removeHandlerListener(IHandlerListener handlerListener) { }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.ocl/templates/OCLCalculateClassTemplate.javajet b/org.eclipse.emf.refactor.metrics.ocl/templates/OCLCalculateClassTemplate.javajet
new file mode 100644
index 0000000..9d52243
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.ocl/templates/OCLCalculateClassTemplate.javajet
@@ -0,0 +1,28 @@
+<%@ jet package="org.eclipse.emf.refactor.metrics" class="OCLCalculateClass"
+imports="org.eclipse.emf.refactor.metrics.ocl.core.OCLMetricInfo"%>
+<%OCLMetricInfo info = (OCLMetricInfo) argument; %>
+package <%=info.getPackage()%>;
+
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.ocl.managers.OCLManager;
+
+
+public final class <%=info.getClassName()%> implements IMetricCalculator {
+
+	private final String expression = 
+		"<%=info.getExpression()%>";	
+	private List<EObject> context; 
+		
+	@Override
+	public void setContext(List<EObject> context) {
+		this.context = context;
+	}	
+		
+	@Override
+	public double calculate() {	
+		EObject contextObject = context.get(0);
+		return OCLManager.evaluateOCLOnContextObject(contextObject, expression);
+	}
+}
\ No newline at end of file
