diff --git a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/Activator.class b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/Activator.class
index 703ea38..3b2e601 100644
--- a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/Activator.class
+++ b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/Activator.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/managers/GenerationManager.class b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/managers/GenerationManager.class
deleted file mode 100644
index 95476da..0000000
--- a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/managers/GenerationManager.class
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite$1.class b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite$1.class
index fdb6445..7e7a689 100644
--- a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite$1.class
+++ b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite.class b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite.class
index 86f387e..be60829 100644
--- a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite.class
+++ b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava$1.class b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava$1.class
index a01dfea..e390a01 100644
--- a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava$1.class
+++ b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava.class b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava.class
index 189a709..176e022 100644
--- a/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava.class
+++ b/org.eclipse.emf.refactor.metrics.generator/bin/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/Activator.java b/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/Activator.java
index 4afbfdb..d8fa7dd 100644
--- a/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/Activator.java
+++ b/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/Activator.java
@@ -1,6 +1,6 @@
 package org.eclipse.emf.refactor.metrics.generator;
 
-import org.eclipse.emf.refactor.metrics.generator.managers.GenerationManager;
+import org.eclipse.emf.refactor.metrics.generator.managers.MetricsGenerationManager;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
@@ -28,7 +28,7 @@
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
-		GenerationManager.getInstance();
+		MetricsGenerationManager.getInstance();
 	}
 
 	/*
diff --git a/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/managers/GenerationManager.java b/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/managers/MetricsGenerationManager.java
similarity index 96%
rename from org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/managers/GenerationManager.java
rename to org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/managers/MetricsGenerationManager.java
index 6759674..fc91a9e 100644
--- a/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/managers/GenerationManager.java
+++ b/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/managers/MetricsGenerationManager.java
@@ -26,9 +26,9 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.osgi.framework.Bundle;
 
-public class GenerationManager {
+public class MetricsGenerationManager {
 	
-	private static GenerationManager instance;
+	private static MetricsGenerationManager instance;
 	private static final String COMPOSITE_TEMPLATE_CLASS_NAME = "CompositeCalculateClassTemplate";
 	private static final String SKELETON_TEMPLATE_CLASS_NAME = "CalculateClassTemplate";
 	protected static final  String TEMPLATE_DIR = "/templates";
@@ -40,15 +40,15 @@
 	protected static String templateDirectory;
 	protected static List<IClasspathEntry> classpathEntries;
 	
-	protected GenerationManager() {
+	protected MetricsGenerationManager() {
 		templateDirectory = setTemplateDirectory();
 		classpathEntries = setClassPathEntries();
 		System.out.println("GenerationManager initialized!");
 	}
 	
-	public static GenerationManager getInstance() {
+	public static MetricsGenerationManager getInstance() {
 		if (instance == null) {
-			instance = new GenerationManager();
+			instance = new MetricsGenerationManager();
 		}
 		return instance;
 	}
diff --git a/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite.java b/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite.java
index 83d84c6..17e909a 100644
--- a/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite.java
+++ b/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardComposite.java
@@ -11,7 +11,7 @@
 import org.eclipse.emf.refactor.metrics.core.Metric;
 import org.eclipse.emf.refactor.metrics.generator.core.CompositeMetricInfo;
 import org.eclipse.emf.refactor.metrics.generator.interfaces.INewMetricWizard;
-import org.eclipse.emf.refactor.metrics.generator.managers.GenerationManager;
+import org.eclipse.emf.refactor.metrics.generator.managers.MetricsGenerationManager;
 import org.eclipse.emf.refactor.metrics.interfaces.IOperation;
 import org.eclipse.emf.refactor.metrics.managers.MetricManager;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -23,6 +23,7 @@
 
 public class NewMetricWizardComposite extends Wizard implements INewWizard, INewMetricWizard {
 	
+	private static final String ORG_ECLIPSE_PDE_PLUGIN_NATURE = "org.eclipse.pde.PluginNature";
 	private final String WINDOW_TITLE = "New Metric";
 	private MetricBasicDataWizardPage basicDataPage;
 	private CompositeDataWizardPage compositePage;
@@ -66,8 +67,8 @@
 		try{
 			getContainer().run(true, true, new IRunnableWithProgress(){
 				public void run(IProgressMonitor monitor)throws InvocationTargetException, InterruptedException{
-					GenerationManager.getInstance();
-					GenerationManager.createNewMetric(monitor, getMetricInfo(), targetProject);
+					MetricsGenerationManager.getInstance();
+					MetricsGenerationManager.createNewMetric(monitor, getMetricInfo(), targetProject);
 				}
 			});
 		}
@@ -89,7 +90,7 @@
 			if (project.isOpen()) {
 				IProjectNature nature = null;
 				try {
-					nature = project.getNature("org.eclipse.pde.PluginNature");
+					nature = project.getNature(ORG_ECLIPSE_PDE_PLUGIN_NATURE);
 				} catch (CoreException e) {
 					e.printStackTrace();
 				}
diff --git a/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava.java b/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava.java
index 97cdb8d..d518aeb 100644
--- a/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava.java
+++ b/org.eclipse.emf.refactor.metrics.generator/src/org/eclipse/emf/refactor/metrics/generator/ui/NewMetricWizardJava.java
@@ -10,7 +10,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.emf.refactor.metrics.generator.core.MetricInfo;
 import org.eclipse.emf.refactor.metrics.generator.interfaces.INewMetricWizard;
-import org.eclipse.emf.refactor.metrics.generator.managers.GenerationManager;
+import org.eclipse.emf.refactor.metrics.generator.managers.MetricsGenerationManager;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
@@ -20,6 +20,7 @@
 
 public class NewMetricWizardJava extends Wizard implements INewWizard, INewMetricWizard {
 	
+	private static final String ORG_ECLIPSE_PDE_PLUGIN_NATURE = "org.eclipse.pde.PluginNature";
 	private final String WINDOW_TITLE = "New Metric";
 	private MetricBasicDataWizardPage basicDataPage;
 	private String name, id, description, metamodel, context, jar;
@@ -60,8 +61,8 @@
 		try{
 			getContainer().run(true, true, new IRunnableWithProgress(){
 				public void run(IProgressMonitor monitor)throws InvocationTargetException, InterruptedException{
-					GenerationManager.getInstance();
-					GenerationManager.createNewMetric(monitor, getMetricInfo(), targetProject);
+					MetricsGenerationManager.getInstance();
+					MetricsGenerationManager.createNewMetric(monitor, getMetricInfo(), targetProject);
 				}
 			});
 		}
@@ -83,7 +84,7 @@
 			if (project.isOpen()) {
 				IProjectNature nature = null;
 				try {
-					nature = project.getNature("org.eclipse.pde.PluginNature");
+					nature = project.getNature(ORG_ECLIPSE_PDE_PLUGIN_NATURE);
 				} catch (CoreException e) {
 					e.printStackTrace();
 				}
diff --git a/org.eclipse.emf.refactor.metrics.xtext/bin/.gitignore b/org.eclipse.emf.refactor.metrics.henshin/bin/.gitignore
similarity index 100%
rename from org.eclipse.emf.refactor.metrics.xtext/bin/.gitignore
rename to org.eclipse.emf.refactor.metrics.henshin/bin/.gitignore
diff --git a/org.eclipse.emf.refactor.metrics.henshin/bin/org/eclipse/emf/refactor/metrics/henshin/managers/HenshinGenerationManager.class b/org.eclipse.emf.refactor.metrics.henshin/bin/org/eclipse/emf/refactor/metrics/henshin/managers/HenshinGenerationManager.class
index 39df964..a3105f8 100644
--- a/org.eclipse.emf.refactor.metrics.henshin/bin/org/eclipse/emf/refactor/metrics/henshin/managers/HenshinGenerationManager.class
+++ b/org.eclipse.emf.refactor.metrics.henshin/bin/org/eclipse/emf/refactor/metrics/henshin/managers/HenshinGenerationManager.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.henshin/src/org/eclipse/emf/refactor/metrics/henshin/managers/HenshinGenerationManager.java b/org.eclipse.emf.refactor.metrics.henshin/src/org/eclipse/emf/refactor/metrics/henshin/managers/HenshinGenerationManager.java
index 0ed1753..2284900 100644
--- a/org.eclipse.emf.refactor.metrics.henshin/src/org/eclipse/emf/refactor/metrics/henshin/managers/HenshinGenerationManager.java
+++ b/org.eclipse.emf.refactor.metrics.henshin/src/org/eclipse/emf/refactor/metrics/henshin/managers/HenshinGenerationManager.java
@@ -1,18 +1,25 @@
 package org.eclipse.emf.refactor.metrics.henshin.managers;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.emf.codegen.jet.JETEmitter;
 import org.eclipse.emf.codegen.jet.JETException;
-import org.eclipse.emf.refactor.metrics.generator.managers.GenerationManager;
+import org.eclipse.emf.codegen.util.CodeGenUtil;
+import org.eclipse.emf.refactor.metrics.generator.core.MetricInfo;
 import org.eclipse.emf.refactor.metrics.generator.managers.XMLPluginFileManager;
 import org.eclipse.emf.refactor.metrics.henshin.Activator;
 import org.eclipse.emf.refactor.metrics.henshin.core.HenshinMetricInfo;
@@ -20,10 +27,18 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.osgi.framework.Bundle;
 
-public class HenshinGenerationManager extends GenerationManager {
+public class HenshinGenerationManager {
 	
 	private static final String HENSHIN_TEMPLATE_CLASS_NAME = "HenshinCalculateClassTemplate";
 	private static HenshinGenerationManager instance;
+	private static final  String TEMPLATE_DIR = "/templates";
+	private static final String SOURCE_DIR = "/src/";
+	private static final  String TEMPLATE_FILE_EXTENSION = ".javajet";
+	private static final String JAVA_FILE_EXTENSION = ".java";
+	private static final String PLUGINSPATH = Platform.getInstallLocation().getURL().getPath() + "plugins/";
+	private static final String BUNDLEVERSION = "Bundle-Version";
+	protected static String templateDirectory;
+	protected static List<IClasspathEntry> classpathEntries;
 	
 	private HenshinGenerationManager() {
 		templateDirectory = setTemplateDirectory();
@@ -39,12 +54,17 @@
 	}
 	
 	protected List<IClasspathEntry> setClassPathEntries() {
-		List<IClasspathEntry> cpe = super.setClassPathEntries();
+		List<IClasspathEntry> cpe = new ArrayList<IClasspathEntry>();
 		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));
+	    // add org.eclipse.emf.refactor.metrics to class path
+	    bundle = Platform.getBundle(org.eclipse.emf.refactor.metrics.Activator.PLUGIN_ID);
+	    version = (String) bundle.getHeaders().get(BUNDLEVERSION);
+	    cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH + 
+	    		org.eclipse.emf.refactor.metrics.Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));	   
 	    return cpe;
 	}
 	
@@ -109,5 +129,29 @@
 		System.out.println(result);
 		return result;
 	}
+	
+	protected static void saveCode(IProgressMonitor monitor, String content, MetricInfo metricInfo) throws CoreException, JETException {
+		IContainer container = findOrCreatePackage(monitor, metricInfo);
+		if (container == null) {
+			throw new JETException("Could not find or create container for package " + metricInfo.getPackage() + " in " + metricInfo.getProjectName());
+		}
+		IFile file = container.getFile(new Path(metricInfo.getClassName() + JAVA_FILE_EXTENSION));
+		System.out.println("saving code into: "+file.getLocation());
+		InputStream inputStream = new ByteArrayInputStream(content.getBytes());
+		if (!file.exists()) {
+			file.create(inputStream, false, monitor);
+		} else {
+			container.refreshLocal(1, monitor);
+			file.setContents(inputStream, true, false, monitor);
+		}
+	}
+	
+	private static IContainer findOrCreatePackage(IProgressMonitor progressMonitor, MetricInfo metricInfo) throws CoreException {
+		IPath outputPath = new Path(metricInfo.getProjectName() + SOURCE_DIR + metricInfo.getPackage().replace('.', '/'));
+		IProgressMonitor subMonitor = new SubProgressMonitor(progressMonitor, 1);
+		IPath localLocation = null; 
+		IContainer container = CodeGenUtil.EclipseUtil.findOrCreateContainer(outputPath, true, localLocation, subMonitor);
+		return container;
+	}
 
 }
diff --git a/org.eclipse.emf.refactor.metrics.ocl/bin/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.class b/org.eclipse.emf.refactor.metrics.ocl/bin/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.class
index e3a124d..c2321b3 100644
--- a/org.eclipse.emf.refactor.metrics.ocl/bin/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.class
+++ b/org.eclipse.emf.refactor.metrics.ocl/bin/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.java b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.java
index a2ff5cb..9ceda6f 100644
--- a/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.java
+++ b/org.eclipse.emf.refactor.metrics.ocl/src/org/eclipse/emf/refactor/metrics/ocl/managers/OCLGenerationManager.java
@@ -1,18 +1,25 @@
 package org.eclipse.emf.refactor.metrics.ocl.managers;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.emf.codegen.jet.JETEmitter;
 import org.eclipse.emf.codegen.jet.JETException;
-import org.eclipse.emf.refactor.metrics.generator.managers.GenerationManager;
+import org.eclipse.emf.codegen.util.CodeGenUtil;
+import org.eclipse.emf.refactor.metrics.generator.core.MetricInfo;
 import org.eclipse.emf.refactor.metrics.generator.managers.XMLPluginFileManager;
 import org.eclipse.emf.refactor.metrics.ocl.Activator;
 import org.eclipse.emf.refactor.metrics.ocl.core.OCLMetricInfo;
@@ -20,10 +27,18 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.osgi.framework.Bundle;
 
-public class OCLGenerationManager extends GenerationManager {
+public class OCLGenerationManager {
 	
 	private static final String OCL_TEMPLATE_CLASS_NAME = "OCLCalculateClassTemplate";
 	private static OCLGenerationManager instance;
+	private static final  String TEMPLATE_DIR = "/templates";
+	private static final String SOURCE_DIR = "/src/";
+	private static final  String TEMPLATE_FILE_EXTENSION = ".javajet";
+	private static final String JAVA_FILE_EXTENSION = ".java";
+	private static final String PLUGINSPATH = Platform.getInstallLocation().getURL().getPath() + "plugins/";
+	private static final String BUNDLEVERSION = "Bundle-Version";
+	private static String templateDirectory;
+	private static List<IClasspathEntry> classpathEntries;
 	
 	private OCLGenerationManager() {
 		templateDirectory = setTemplateDirectory();
@@ -39,13 +54,18 @@
 	}
 	
 	protected List<IClasspathEntry> setClassPathEntries() {
-		List<IClasspathEntry> cpe = super.setClassPathEntries();
+		List<IClasspathEntry> cpe = new ArrayList<IClasspathEntry>();
 		Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
-	    // add org.eclipse.emf.refactor.metrics.ocl to class path
+		// add org.eclipse.emf.refactor.metrics.ocl 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;
+	    // add org.eclipse.emf.refactor.metrics to class path
+	    bundle = Platform.getBundle(org.eclipse.emf.refactor.metrics.Activator.PLUGIN_ID);
+	    version = (String) bundle.getHeaders().get(BUNDLEVERSION);
+	    cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH + 
+	    		org.eclipse.emf.refactor.metrics.Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));	    
+		return cpe;
 	}
 	
 	public static void createNewMetric(IProgressMonitor monitor,
@@ -109,5 +129,29 @@
 		System.out.println(result);
 		return result;
 	}
+	
+	protected static void saveCode(IProgressMonitor monitor, String content, MetricInfo metricInfo) throws CoreException, JETException {
+		IContainer container = findOrCreatePackage(monitor, metricInfo);
+		if (container == null) {
+			throw new JETException("Could not find or create container for package " + metricInfo.getPackage() + " in " + metricInfo.getProjectName());
+		}
+		IFile file = container.getFile(new Path(metricInfo.getClassName() + JAVA_FILE_EXTENSION));
+		System.out.println("saving code into: "+file.getLocation());
+		InputStream inputStream = new ByteArrayInputStream(content.getBytes());
+		if (!file.exists()) {
+			file.create(inputStream, false, monitor);
+		} else {
+			container.refreshLocal(1, monitor);
+			file.setContents(inputStream, true, false, monitor);
+		}
+	}
+	
+	private static IContainer findOrCreatePackage(IProgressMonitor progressMonitor, MetricInfo metricInfo) throws CoreException {
+		IPath outputPath = new Path(metricInfo.getProjectName() + SOURCE_DIR + metricInfo.getPackage().replace('.', '/'));
+		IProgressMonitor subMonitor = new SubProgressMonitor(progressMonitor, 1);
+		IPath localLocation = null; 
+		IContainer container = CodeGenUtil.EclipseUtil.findOrCreateContainer(outputPath, true, localLocation, subMonitor);
+		return container;
+	}
 
 }
diff --git a/org.eclipse.emf.refactor.metrics.reporter/bin/.gitignore b/org.eclipse.emf.refactor.metrics.reporter/bin/.gitignore
deleted file mode 100644
index 571ee51..0000000
--- a/org.eclipse.emf.refactor.metrics.reporter/bin/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/org
