diff --git a/cps/tests/org.eclipse.viatra.examples.cps.tests.util/samples/cps2dep_sample.properties b/cps/tests/org.eclipse.viatra.examples.cps.tests.util/samples/cps2dep_sample.properties
index b2b33da..33953f2 100644
--- a/cps/tests/org.eclipse.viatra.examples.cps.tests.util/samples/cps2dep_sample.properties
+++ b/cps/tests/org.eclipse.viatra.examples.cps.tests.util/samples/cps2dep_sample.properties
@@ -14,7 +14,7 @@
 # log level for generator
 cps.generator.loglevel = INFO
 
-# log level for EMF-IncQuery and EVM
+# log level for VIATRA Query and EVM
 org.eclipse.viatra.query.loglevel = INFO
 
 # log level for BenchmarkResult
@@ -32,6 +32,8 @@
 # 	BATCH_OPTIMIZED
 # 	BATCH_VIATRA_QUERY_RETE
 # 	BATCH_VIATRA_QUERY_LOCAL_SEARCH
+# 	BATCH_VIATRA_QUERY_LOCAL_SEARCH_GENERIC
+# 	BATCH_VIATRA_QUERY_LOCAL_SEARCH_WO_INDEXER
 # 	BATCH_VIATRA_TRANSFORMATION
 # 	INCR_VIATRA_QUERY_RESULT_TRACEABILITY
 # 	INCR_VIATRA_EXPLICIT_TRACEABILITY
diff --git a/cps/transformations/org.eclipse.viatra.examples.cps.xform.m2m.launcher/src/org/eclipse/viatra/examples/cps/xform/m2m/launcher/TransformationType.java b/cps/transformations/org.eclipse.viatra.examples.cps.xform.m2m.launcher/src/org/eclipse/viatra/examples/cps/xform/m2m/launcher/TransformationType.java
index dcfc201..7ff4934 100644
--- a/cps/transformations/org.eclipse.viatra.examples.cps.xform.m2m.launcher/src/org/eclipse/viatra/examples/cps/xform/m2m/launcher/TransformationType.java
+++ b/cps/transformations/org.eclipse.viatra.examples.cps.xform.m2m.launcher/src/org/eclipse/viatra/examples/cps/xform/m2m/launcher/TransformationType.java
@@ -22,7 +22,6 @@
 import org.eclipse.viatra.query.runtime.localsearch.matcher.integration.LocalSearchHints;
 import org.eclipse.viatra.query.runtime.localsearch.planner.cost.IConstraintEvaluationContext;
 import org.eclipse.viatra.query.runtime.localsearch.planner.cost.impl.StatisticsBasedConstraintCostFunction;
-import org.eclipse.viatra.query.runtime.localsearch.planner.cost.impl.VariableBindingBasedCostFunction;
 import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
 import org.eclipse.viatra.query.runtime.matchers.context.IInputKey;
 import org.eclipse.viatra.query.runtime.rete.matcher.ReteBackendFactory;
@@ -44,57 +43,17 @@
     },
     BATCH_VIATRA_QUERY_LOCAL_SEARCH {
     	public CPSTransformationWrapper getWrapper() {
-	    	QueryEvaluationHint hint = LocalSearchHints.getDefaultFlatten().build();
-			return new BatchQueryLocalSearch(hint, hint);
+			QueryEvaluationHint hint = LocalSearchHints.getDefaultFlatten().build();
+			QueryEvaluationHint traceHint = LocalSearchHints.getDefaultFlatten().setCostFunction(new EndOfTransformationCostFunction()).build();
+			return new BatchQueryLocalSearch(hint, traceHint);
 	    }
     },
-    BATCH_VIATRA_QUERY_LOCAL_SEARCH_TRACE_STATS {
+    BATCH_VIATRA_QUERY_LOCAL_SEARCH_GENERIC {
         public CPSTransformationWrapper getWrapper() {
-            QueryEvaluationHint hint = LocalSearchHints.getDefaultFlatten().build();
-            final Map<IInputKey, IInputKey> substitutions = Maps.newHashMap();
-            substitutions.put(new EClassTransitiveInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            substitutions.put(new EClassTransitiveInstancesKey(DeploymentPackage.Literals.DEPLOYMENT_ELEMENT), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE__CPS_ELEMENTS), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE__DEPLOYMENT_ELEMENTS), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS_TO_DEPLOYMENT__TRACES), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
-            QueryEvaluationHint traceHint = LocalSearchHints.getDefaultFlatten().setCostFunction(new StatisticsBasedConstraintCostFunction() {
-                
-                @Override
-                public long countTuples(IConstraintEvaluationContext input, IInputKey supplierKey) {
-                    if (supplierKey instanceof EClassTransitiveInstancesKey){
-                        EClass eclass = ((EClassTransitiveInstancesKey) supplierKey).getEmfKey();
-                        if (TraceabilityPackage.Literals.CPS_TO_DEPLOYMENT.equals(eclass)){
-                            return 1l;
-                        }
-                    }
-                    if (substitutions.containsKey(supplierKey)){
-                        return input.getRuntimeContext().countTuples(substitutions.get(supplierKey), null);
-                    }
-                    
-                    return input.getRuntimeContext().countTuples(supplierKey, null);
-                }
-            }).build();
-            return new BatchQueryLocalSearch(hint, traceHint);
+            QueryEvaluationHint hint = LocalSearchHints.getDefaultGeneric().build();
+            return new BatchQueryLocalSearch(hint, hint);
         }
     },
-    BATCH_VIATRA_QUERY_LOCAL_SEARCH_NO_FLAT {
-        public CPSTransformationWrapper getWrapper() {
-            QueryEvaluationHint hint = LocalSearchHints.getDefault().build();
-			return new BatchQueryLocalSearch(hint, hint);
-        }
-    },
-    BATCH_VIATRA_QUERY_LOCAL_SEARCH_DUMB_PLANNER {
-        public CPSTransformationWrapper getWrapper() {
-            QueryEvaluationHint hint = LocalSearchHints.getDefaultFlatten().setCostFunction(new VariableBindingBasedCostFunction()).build();
-			return new BatchQueryLocalSearch(hint, hint);
-        }
-    },
-    BATCH_VIATRA_QUERY_LOCAL_SEARCH_STATISTICS {
-    	public CPSTransformationWrapper getWrapper() {
-    		QueryEvaluationHint hint = LocalSearchHints.getDefault().setUseBase(false).build();
-			return new BatchQueryLocalSearch(hint, hint);
-    	}
-    },
     BATCH_VIATRA_QUERY_LOCAL_SEARCH_WO_INDEXER {
         public CPSTransformationWrapper getWrapper() {
             QueryEvaluationHint hint = LocalSearchHints.getDefaultNoBase().build();
@@ -104,6 +63,7 @@
     BATCH_VIATRA_TRANSFORMATION {
         public CPSTransformationWrapper getWrapper() {return new BatchViatra();}
 
+        @Override
         public boolean isDebuggable() {
             return true;
         }
@@ -120,11 +80,41 @@
     INCR_VIATRA_TRANSFORMATION {
         public CPSTransformationWrapper getWrapper() {return new ViatraTransformation();}
 
+        @Override
         public boolean isDebuggable() {
             return true;
         }
     };
 
+    private final class EndOfTransformationCostFunction extends StatisticsBasedConstraintCostFunction {
+        final Map<IInputKey, IInputKey> substitutions;
+
+        public EndOfTransformationCostFunction() {
+            super();
+            substitutions = Maps.newHashMap();
+            substitutions.put(new EClassTransitiveInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+            substitutions.put(new EClassTransitiveInstancesKey(DeploymentPackage.Literals.DEPLOYMENT_ELEMENT), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE__CPS_ELEMENTS), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS2_DEPLOYMENT_TRACE__DEPLOYMENT_ELEMENTS), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+            substitutions.put(new EStructuralFeatureInstancesKey(TraceabilityPackage.Literals.CPS_TO_DEPLOYMENT__TRACES), new EClassTransitiveInstancesKey(CyberPhysicalSystemPackage.Literals.IDENTIFIABLE));
+        }
+
+        @Override
+        public long countTuples(IConstraintEvaluationContext input, IInputKey supplierKey) {
+            if (supplierKey instanceof EClassTransitiveInstancesKey){
+                EClass eclass = ((EClassTransitiveInstancesKey) supplierKey).getEmfKey();
+                if (TraceabilityPackage.Literals.CPS_TO_DEPLOYMENT.equals(eclass)){
+                    return 1l;
+                }
+            }
+            if (substitutions.containsKey(supplierKey)){
+                return input.getRuntimeContext().countTuples(substitutions.get(supplierKey), null);
+            }
+            
+            return input.getRuntimeContext().countTuples(supplierKey, null);
+        }
+    }
+
     public abstract CPSTransformationWrapper getWrapper();
 
     public boolean isDebuggable() {
