diff --git a/org.eclipse.emf.refactor.metrics.henshin/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.metrics.henshin/META-INF/MANIFEST.MF
index 772d7a7..5e6cb18 100644
--- a/org.eclipse.emf.refactor.metrics.henshin/META-INF/MANIFEST.MF
+++ b/org.eclipse.emf.refactor.metrics.henshin/META-INF/MANIFEST.MF
@@ -7,10 +7,12 @@
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.core.resources;bundle-version="3.8.0",
+ org.eclipse.jdt.core;bundle-version="3.8.1",
  org.eclipse.emf.ecore;bundle-version="2.8.1",
  org.eclipse.emf.refactor.metrics;bundle-version="0.7.0",
  org.eclipse.emf.refactor.metrics.generator;bundle-version="0.7.0",
- org.eclipse.emf.henshin.interpreter;bundle-version="0.9.2"
+ org.eclipse.emf.henshin.interpreter;bundle-version="0.9.2",
+ org.eclipse.emf.codegen;bundle-version="2.8.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Export-Package: org.eclipse.emf.refactor.metrics.henshin.managers
diff --git a/org.eclipse.emf.refactor.metrics.henshin/src/org/eclipse/emf/refactor/metrics/henshin/HenshinGenerationManager.java b/org.eclipse.emf.refactor.metrics.henshin/src/org/eclipse/emf/refactor/metrics/henshin/HenshinGenerationManager.java
new file mode 100644
index 0000000..f2a673e
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.henshin/src/org/eclipse/emf/refactor/metrics/henshin/HenshinGenerationManager.java
@@ -0,0 +1,75 @@
+package org.eclipse.emf.refactor.metrics.henshin;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.codegen.jet.JETException;
+import org.eclipse.emf.refactor.metrics.generator.managers.DependenciesManager;
+import org.eclipse.emf.refactor.metrics.generator.managers.GenerationManager;
+import org.eclipse.emf.refactor.metrics.generator.managers.XMLPluginFileManager;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.JavaCore;
+import org.osgi.framework.Bundle;
+
+public class HenshinGenerationManager extends GenerationManager {
+	
+	private static final String HENSHIN_TEMPLATE_CLASS_NAME = "HenshinCalculateClassTemplate";
+	
+	private HenshinGenerationManager() {
+		templateDirectory = setTemplateDirectory();
+		classpathEntries = setClassPathEntries();
+		System.out.println("HenshinGenerationManager initialized!");
+	}
+	
+	public static HenshinGenerationManager getInstance() {
+		if (instance == null) {
+			instance = new HenshinGenerationManager();
+		}
+		return (HenshinGenerationManager) instance;
+	}
+	
+	protected List<IClasspathEntry> setClassPathEntries() {
+		List<IClasspathEntry> cpe = super.setClassPathEntries();
+		Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+	    // add org.eclipse.emf.refactor.metrics.henshin to class path
+	    String version = (String) bundle.getHeaders().get(BUNDLEVERSION);
+	    cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH + 
+	    		Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));
+	    return cpe;
+	}
+	
+	public static void createNewMetric(IProgressMonitor monitor,
+			HenshinMetricInfo metricInfo, IProject targetProject) {
+		System.out.println(metricInfo);
+		DependenciesManager.updateDependencies(metricInfo);
+		createCalculateClass(monitor, metricInfo);		
+		XMLPluginFileManager.createMetricEntry(metricInfo.getProjectPath(), 
+				metricInfo.getName(), metricInfo.getId(), 
+				metricInfo.getDescription(), metricInfo.getMetamodel(), 
+				metricInfo.getContext(), metricInfo.getPackage()+"."+metricInfo.getClassName());
+		try {
+			targetProject.refreshLocal(IProject.DEPTH_INFINITE, monitor);
+			targetProject.refreshLocal(IProject.DEPTH_INFINITE, monitor);
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private static void createCalculateClass(IProgressMonitor monitor, HenshinMetricInfo metricInfo) {
+		String generatedCode = "";
+		String templateName = HENSHIN_TEMPLATE_CLASS_NAME;
+		try {
+			generatedCode = generateCode(monitor, templateName, metricInfo);
+		    saveCode(monitor, generatedCode, metricInfo);
+		} catch (JETException e) {
+			e.printStackTrace();
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+
+}
