diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinLoaders.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinLoaders.java
index cd445c4..a70053a 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinLoaders.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinLoaders.java
@@ -1,75 +1,91 @@
-/**
- * <copyright>
- * Copyright (c) 2010-2014 Henshin developers. 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
- * </copyright>
- */
-package org.eclipse.emf.henshin.tests.framework;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
-import org.eclipse.emf.henshin.interpreter.EGraph;
-import org.eclipse.emf.henshin.interpreter.InterpreterFactory;
-import org.eclipse.emf.henshin.interpreter.impl.EGraphImpl;
-import org.eclipse.emf.henshin.model.Module;
-import org.eclipse.emf.henshin.model.resource.HenshinResourceSet;
-
-/**
- * Methods for loading test Henshin files, models and graphs.
- * 
- * @see Tools
- * @author Felix Rieger
- * @author Stefan Jurack
- * 
- */
-public class HenshinLoaders {
-
-	/**
-	 * Load a Henshin file.
-	 * 
-	 * @param fileName Path to the Henshin file
-	 * @return Module Loaded module
-	 */
-	public static Module loadHenshin(String fileName) {
-		HenshinResourceSet resourceSet = new HenshinResourceSet();
-		return resourceSet.getModule(fileName, false);
-	}
-
-	/**
-	 * Load model from file and create an {@link EGraph}.
-	 * 
-	 * @param modelFileName Path to the model file
-	 * @param modelFileExt model file extension
-	 * @return EmfGraph
-	 */
-	public static EGraph loadGraph(String modelFileName, String modelFileExt) {
-		HenshinResourceSet resourceSet = new HenshinResourceSet();
-		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("testmodel",
-				new XMIResourceFactoryImpl());
-		resourceSet.registerXMIResourceFactories(modelFileExt);
-		Resource resource = resourceSet.getResource(modelFileName);
-		return new EGraphImpl(resource);
-	}
-
-	/**
-	 * Load a graph.
-	 * 
-	 * @param graphUri URI to the model file
-	 * @return The loaded file
-	 */
-	public static EGraph loadGraph(URI graphUri) {
-		ResourceSetImpl resourceSet = new ResourceSetImpl();
-		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("testmodel",
-				new XMIResourceFactoryImpl());
-		Resource resource = resourceSet.getResource(graphUri, true);
-		EGraph graph = InterpreterFactory.INSTANCE.createEGraph();
-		graph.addTree(resource.getContents().get(0));
-		return graph;
-	}
-
-}
+/**
+ * <copyright>
+ * Copyright (c) 2010-2014 Henshin developers. 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
+ * </copyright>
+ */
+package org.eclipse.emf.henshin.tests.framework;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.emf.henshin.interpreter.EGraph;
+import org.eclipse.emf.henshin.interpreter.InterpreterFactory;
+import org.eclipse.emf.henshin.interpreter.impl.EGraphImpl;
+import org.eclipse.emf.henshin.model.Module;
+import org.eclipse.emf.henshin.model.resource.HenshinResourceSet;
+
+/**
+ * Methods for loading test Henshin files, models and graphs.
+ * 
+ * @see Tools
+ * @author Felix Rieger
+ * @author Stefan Jurack
+ * 
+ */
+public class HenshinLoaders {
+
+	/**
+	 * Load a Henshin file.
+	 * 
+	 * @param fileName Path to the Henshin file
+	 * @return Module Loaded module
+	 */
+	public static Module loadHenshin(String fileName) {
+		HenshinResourceSet resourceSet = new HenshinResourceSet();
+		return resourceSet.getModule(fileName, false);
+	}
+	
+	/**
+	 * Load a Henshin file.
+	 * 
+	 * @param fileName Path to the Henshin file
+	 * @return Module Loaded module
+	 */
+	public static Module loadHenshin(String fileName, HenshinResourceSet resourceSet) {
+		return resourceSet.getModule(fileName, false);
+	}
+
+	/**
+	 * Load model from file and create an {@link EGraph}.
+	 * 
+	 * @param modelFileName Path to the model file
+	 * @param modelFileExt model file extension
+	 * @return EmfGraph
+	 */
+	public static EGraph loadGraph(String modelFileName, String modelFileExt) {
+		HenshinResourceSet resourceSet = new HenshinResourceSet();
+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("testmodel",
+				new XMIResourceFactoryImpl());
+		resourceSet.registerXMIResourceFactories(modelFileExt);
+		Resource resource = resourceSet.getResource(modelFileName);
+		return new EGraphImpl(resource);
+	}
+
+	/**
+	 * Load a graph.
+	 * 
+	 * @param graphUri URI to the model file
+	 * @return The loaded file
+	 */
+	public static EGraph loadGraph(URI graphUri) {
+		return loadGraph(graphUri, new HenshinResourceSet());
+	}
+
+	/**
+	 * Load a graph.
+	 * 
+	 * @param graphUri URI to the model file
+	 * @return The loaded file
+	 */
+	public static EGraph loadGraph(URI graphUri, HenshinResourceSet resourceSet) {
+		Resource resource = resourceSet.getResource(graphUri, true);
+		EGraph graph = InterpreterFactory.INSTANCE.createEGraph();
+		graph.addTree(resource.getContents().get(0));
+		return graph;
+	}
+}
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
index e473190..f73f2ba 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
@@ -17,6 +17,8 @@
 import java.util.Map.Entry;
 
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
 import org.eclipse.emf.henshin.interpreter.EGraph;
 import org.eclipse.emf.henshin.interpreter.Engine;
 import org.eclipse.emf.henshin.interpreter.InterpreterFactory;
@@ -26,6 +28,8 @@
 import org.eclipse.emf.henshin.model.Rule;
 import org.eclipse.emf.henshin.model.Unit;
 import org.eclipse.emf.henshin.model.resource.HenshinResource;
+import org.eclipse.emf.henshin.model.resource.HenshinResourceSet;
+import org.eclipse.emf.henshin.tests.testmodel.TestmodelFactory;
 import org.junit.After;
 
 /**
@@ -48,6 +52,11 @@
 public class HenshinTest {
 
 	/**
+	 * Resource set which has been automatically created for you to use.
+	 */
+	protected HenshinResourceSet resourceSet;
+	
+	/**
 	 * Module which has been automatically loaded and set-up for you to use.
 	 */
 	protected Module htModule;
@@ -111,10 +120,20 @@
 	 * @param henshinFile Henshin file to be loaded.
 	 */
 	protected void init(String henshinFile) {
-		htModule = (Module) HenshinLoaders.loadHenshin(henshinFile);
+		if (resourceSet == null)
+			resourceSet = new HenshinResourceSet();
+		htModule = (Module) HenshinLoaders.loadHenshin(henshinFile, resourceSet);
 		htEngine = InterpreterFactory.INSTANCE.createEngine();
 	}
+	
 
+
+	protected void initFactory(String extension, XMIResourceFactoryImpl xmiResourceFactoryImpl) {
+		if (resourceSet == null)
+			resourceSet = new HenshinResourceSet();
+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(extension, xmiResourceFactoryImpl);
+	}
+	
 	/**
 	 * Initialize the tests. Loads a module, a model graph and creates an engine.
 	 * 
@@ -268,7 +287,7 @@
 	protected void loadEGraph(String graphName) {
 		URI graphURI = URI.createFileURI(new File(graphBasePath + graphName + "." + graphFileExtension)
 				.getAbsolutePath());
-		loadEGraph(HenshinLoaders.loadGraph(graphURI));
+		loadEGraph(HenshinLoaders.loadGraph(graphURI, resourceSet));
 	}
 
 	/**
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/Matches.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/Matches.java
index 5fa492e..f4de886 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/Matches.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/Matches.java
@@ -9,8 +9,10 @@
  */
 package org.eclipse.emf.henshin.tests.framework;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map.Entry;
 
 import org.eclipse.emf.ecore.EObject;
@@ -19,7 +21,9 @@
 import org.eclipse.emf.henshin.interpreter.Match;
 import org.eclipse.emf.henshin.interpreter.RuleApplication;
 import org.eclipse.emf.henshin.interpreter.UnitApplication;
+import org.eclipse.emf.henshin.interpreter.util.InterpreterUtil;
 import org.eclipse.emf.henshin.model.Rule;
+import org.junit.internal.runners.statements.Fail;
 
 /**
  * Assertions for everything related to matches, e.g. matches produced by {@link RuleApplication}s,
@@ -345,5 +349,30 @@
 			}
 		}
 	}
+	
+	public static void assertOverlappingMultiMatchesRemoved(Rule rule, EGraph graph, Match partialMatch, Engine engine,
+			Collection<? extends EObject> group) throws AssertionError {
+		
+		//Just trying to print information on matches
+		System.out.println("RUNNING FILTER TEST");
+		List<Match> matches = new ArrayList<Match>();
+		int count = 0;
+		for(Rule r : rule.getAllMultiRules()){
+			System.out.println("Is Multirule? " + r.isMultiRule());
+			if(r.isMultiRule()){
+				for (Match m : engine.findMatches(rule, graph, null)) {
+					matches = InterpreterUtil.removeOverlappingMultiMatches(m, r);
+					for (Match m2 : matches){//m.getMultiMatches(r)){
+						System.out.println(m2.toString());
+						count = count + 1;
+					}
+				}
+			}
+		}
+		System.out.println(count);
+		/*if(!group.containsAll(matches)){
+			throw new AssertionError("expected: group contains all target nodes, but not all target nodes were contained");
+		}*/
+	}
 
 }
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
index b452ef7..ddae9de 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
@@ -27,13 +27,13 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.Node#getHasVals <em>Has Vals</em>}</li>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.Node#getParentNode <em>Parent Node</em>}</li>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.Node#getChildNodes <em>Child Nodes</em>}</li>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.Node#getNodename <em>Nodename</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getNode()
  * @model kind="class"
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
index 3babd29..caca445 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
@@ -23,12 +23,12 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.Val#getIntvl <em>Intvl</em>}</li>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.Val#getValname <em>Valname</em>}</li>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.Val#getIntlist <em>Intlist</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getVal()
  * @model kind="class"
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/cont.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/cont.java
index 166882f..721e853 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/cont.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/cont.java
@@ -24,11 +24,11 @@
  *
  * <p>
  * The following features are supported:
+ * </p>
  * <ul>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.cont#getContainsNode <em>Contains Node</em>}</li>
  *   <li>{@link org.eclipse.emf.henshin.tests.testmodel.cont#getContainsVal <em>Contains Val</em>}</li>
  * </ul>
- * </p>
  *
  * @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getcont()
  * @model kind="class"
