diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/PerformanceMetricsQueryConnectorImpl.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/PerformanceMetricsQueryConnectorImpl.java
index c77af396996e8de3c0b98b0850211661691c5ccd..5bd4f127e99824fb4103a78ad857e7266d5d87b8 100644
--- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/PerformanceMetricsQueryConnectorImpl.java
+++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/PerformanceMetricsQueryConnectorImpl.java
@@ -1,13 +1,32 @@
 package tools.descartes.dql.connector.kieker;
 
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 
+import org.apache.log4j.Logger;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 
+import kieker.common.record.system.CPUUtilizationRecord;
 import tools.descartes.dql.connector.AbstractOSGiQueryConnector;
 import tools.descartes.dql.connector.PerformanceMetricsQueryConnector;
 import tools.descartes.dql.connector.QueryProgressListener;
@@ -15,6 +34,7 @@ import tools.descartes.dql.connector.kieker.filter.SessionFilter;
 import tools.descartes.dql.connector.kieker.structures.Component;
 import tools.descartes.dql.connector.kieker.structures.Resource;
 import tools.descartes.dql.connector.kieker.structures.ResourceContent;
+import tools.descartes.dql.connector.kieker.structures.ResourceContent.ResourceContentType;
 import tools.descartes.dql.connector.kieker.structures.Session;
 import tools.descartes.dql.connector.kieker.structures.Trace;
 import tools.descartes.dql.connector.kieker.structures.identifier.ResourceIdentifier;
@@ -22,12 +42,17 @@ import tools.descartes.dql.connector.kieker.structures.records.EventRecord;
 import tools.descartes.dql.connector.kieker.structures.records.ResourceRecord;
 import tools.descartes.dql.connector.kieker.util.KiekerHelper;
 import tools.descartes.dql.connector.kieker.util.KiekerManager;
+import tools.descartes.dql.core.engine.util.DQLLogger;
+import tools.descartes.dql.core.engine.util.DoFCrossProductHelper;
 import tools.descartes.dql.models.mapping.domain.ContinuousSeriesResult;
+import tools.descartes.dql.models.mapping.domain.DecimalResult;
+import tools.descartes.dql.models.mapping.domain.DoF;
 import tools.descartes.dql.models.mapping.domain.DomainFactory;
 import tools.descartes.dql.models.mapping.domain.Entity;
 import tools.descartes.dql.models.mapping.domain.Probe;
 import tools.descartes.dql.models.mapping.domain.SeriesResultElement;
 import tools.descartes.dql.models.mapping.domain.StatType;
+import tools.descartes.dql.models.mapping.domain.StringResult;
 import tools.descartes.dql.models.mapping.mapping.EntityMapping;
 import tools.descartes.dql.models.mapping.mapping.MappingFactory;
 
@@ -35,6 +60,9 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 		implements PerformanceMetricsQueryConnector {
 
 	private final DomainFactory domainFactory = DomainFactory.eINSTANCE;
+	
+	private static final Logger log = DQLLogger.getLogger(PerformanceMetricsQueryConnectorImpl.class.getName());
+
 
 	@Override
 	public EntityMapping requestMetrics(final EntityMapping request) {
@@ -45,15 +73,92 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 		manager.run();
 		Trace result = manager.getAnalysisResult();
 		long firstTs = manager.getStartingTime();
+		long lastTs = manager.getEndTime();
 
 		// Process the trace back to a DQL result
 		// Kieker ergebnisse filtern
-		processPerformanceResults(response, result, firstTs);
+		processPerformanceResults(response, result, firstTs, lastTs);
 		return response;
 	}
+	
+	@Override
+	public List<EntityMapping> requestDoFMetrics(final EntityMapping request) {
+		final ArrayList<EntityMapping> results = new ArrayList<EntityMapping>();
+			
+		String location = request.getModelLocation();
+		int index = location.lastIndexOf(File.separator);
+		String substring = location.substring(index);
+		boolean isPropertiesFileVariation;
+		if(substring.contains(".properties")) {
+			log.info("Varying properties configuration");
+			isPropertiesFileVariation = true;
+			substring = substring.replace(".properties", "");
+			substring.replaceAll("\\d","");
+		}else{
+			log.info("Varying path to search subdirectories");			
+			isPropertiesFileVariation = false;
+		}
+		
+		List<HashMap<DoF, String>> doFs = new DoFCrossProductHelper().calculateCrossProduct(request);
+		for (HashMap<DoF, String> configuration : doFs) {
+			for (Entry<DoF, String> configurationPoint : configuration.entrySet()) {
+				if(isPropertiesFileVariation) {
+					String newLocation = location.substring(0, index) + File.separator+substring+ configurationPoint.getValue()+".properties";
+					File f = new File(newLocation);
+					if(f.exists() && !f.isDirectory()) { 
+						request.setModelLocation(newLocation);
+					}else {
+						log.error("No configuration file at:" + newLocation);
+						log.info("Skipping DoF " +configurationPoint.getValue());
+						continue;
+					}
+						
+				}else{
+					request.setModelLocation(location.substring(0, index) + File.separator+ configurationPoint.getValue()+ File.separator);					
+				}
+				EntityMapping subResult = requestMetrics(request);
+				addDoFSetting(configurationPoint.getKey().getIdentifier(), configurationPoint.getValue(), subResult);
+				results.add(subResult);
+			}
+		}
+		return results;
+	}
+	
+	private void addDoFSetting(String identifier, String value, EntityMapping newRequest) {
+		for (DoF dof : newRequest.getDoF())
+			if (dof.getIdentifier().contains(identifier)) {
+				dof.setEntityType("DOF");
+				dof.setAlias(dof.getIdentifier());
+				Probe p = DomainFactory.eINSTANCE.createProbe();
+				dof.getProbes().add(p);
+				StatType st = DomainFactory.eINSTANCE.createStatType();
+				p.getStatTypes().add(st);
+				StringResult result = DomainFactory.eINSTANCE.createStringResult();
+				// instruction variation e.g. migrate
+				if (value.contains(";;;;;"))
+					result.setValue("Target deployment ID " + value.split(";;;;;")[1]);
+				// value variation e.g. ADD 10
+				else
+					result.setValue(value);
+				result.setValid(true);
+				st.setResult(result);
+			}
+	}
+	
+//	private EntityMapping requestMetrics(EntityMapping request, HashMap<DoF, String> configuration,
+//			Properties properties, String outputDirectory) {
+//		final EntityMapping response = EcoreUtil.copy(request);
+//		for (Entry<DoF, String> configurationPoint : configuration.entrySet()) {
+////			addDoFSetting(configurationPoint.getKey().getIdentifier(), configurationPoint.getValue(), response);
+////			models = ModelAdapter.adaptModel(models, configurationPoint.getKey(), configurationPoint.getValue());
+//			
+//		}
+//		return requestMetrics(properties, response, outputDirectory);
+//	}
+	
 
 	/* Modifies response to include the results of Kieker */
-	private void processPerformanceResults(EntityMapping response, Trace kiekerResults, long firstTs) {
+	private void processPerformanceResults(EntityMapping response, Trace kiekerResults, long firstTs, long lastTs) {
 
 		Map<Resource, Trace> resources = kiekerResults.getResourceToTraceMap();
 		Map<ResourceIdentifier, Resource> resourceIds = kiekerResults.getResourceIdentifierToResourceMap();
@@ -63,37 +168,43 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 		// and try to replace the probe with a result
 		for (Entity ent : response.getEntities()) {
 			if (ent.getIdentifier().equals("session") | ent.getAlias().equals("session")) {
-				addSessionResults(ent, resourceIds, firstTs);
-			}else if (ent.getIdentifier().equals("system") | ent.getAlias().equals("system")) {
-				ResourceIdentifier systemidentifier = ResourceIdentifier.createResourceIdentifier("system", "system");
-				ContinuousSeriesResult result = DomainFactory.eINSTANCE.createContinuousSeriesResult();
-				result.setXAxisDescription("time in ms");
-				result.setYAxisDescription("%"); // (between 0 and 1)");
-				
-				List<ResourceRecord> system_utilization = new ArrayList<ResourceRecord>();
-				for (ResourceIdentifier resourceID : resourceIds.keySet()) {
-					List<ResourceRecord> cpu_utilization = resources.get(resourceID).getResources();
-					for(int i=0; i<cpu_utilization.size(); i++) {
-						if(i < system_utilization.size()) {
-							if(system_utilization.get(i).getTimestamp() == cpu_utilization.get(i).getTimestamp()) {
-								double sum = system_utilization.get(i).getContent().get(ResourceContent.UTILIZATION) + 	cpu_utilization.get(i).getContent().get(ResourceContent.UTILIZATION);
-								system_utilization.get(i).getContent().set(ResourceContent.UTILIZATION, sum);
-							}else {
-								//log.error();
-							}
-						}else {
-							system_utilization.add(new ResourceRecord(systemidentifier, cpu_utilization.get(i).getTimestamp(), cpu_utilization.get(i).getContent()));
-						}
+				for (Probe dqlProbe : ent.getProbes()) {
+					if(dqlProbe.getMetricName().equals(KiekerHelper.METRIC_THROUGHPUT)) {
+						addSessionThroughput(ent, dqlProbe, firstTs, lastTs);
+					}else {
+						addSessionResponseTimes(ent, dqlProbe, firstTs);
 					}
-					ent.getProbes().get(0).setMetricName("UTILIZTATION");
-					ent.getProbes().get(0).getStatTypes().get(0).setTypeName("sample");
-					ent.getProbes().get(0).getStatTypes().get(0).setResult(result);
-				}		
+				}
+			}else if (ent.getIdentifier().equals("system") | ent.getAlias().equals("system")) {
+				addSystemUtilization(firstTs, resources, resourceIds, ent);
+			
 			} else {
 				for (Probe dqlProbe : ent.getProbes()) {
+					if(dqlProbe.getStatTypes().isEmpty()) {
+						//dqlProbe.getStatTypes().add(new )
+						log.error("NEED TO ADD DEFAULT STAT TYPE");
+					}
 					for (StatType st : dqlProbe.getStatTypes()) {
-						if (KiekerHelper.METRIC_UTILIZATION.equalsIgnoreCase(dqlProbe.getMetricName())) {
-							if (st.getTypeName().equals("DEFAULT") || st.getTypeName().equals("SAMPLE")) {
+						if (st.getTypeName().equalsIgnoreCase("mean")){
+							ResourceIdentifier dqlId = ResourceIdentifier.createResourceIdentifier("",
+									ent.getIdentifier());
+							Resource res = resourceIds.get(dqlId);
+							if (res != null && resources.get(res) != null
+									&& resources.get(res).getResources().size() > 0) {
+								try {
+									double value=0;
+									int cnt = 0;
+									for (ResourceRecord record : resources.get(res).getResources()) {
+										value += record.getContent().get(ResourceContent.UTILIZATION) / 1000000000.0;
+										cnt++;
+									}
+									createUtilization(ent, st, value/cnt);
+								} catch (NumberFormatException exc) {
+									System.out.println("Error "+exc.getStackTrace());
+								}
+							}
+						}else if (KiekerHelper.METRIC_UTILIZATION.equalsIgnoreCase(dqlProbe.getMetricName())) {
+							if (st.getTypeName().equalsIgnoreCase("DEFAULT") || st.getTypeName().equalsIgnoreCase("SAMPLE")) {
 								ContinuousSeriesResult result = DomainFactory.eINSTANCE.createContinuousSeriesResult();
 								result.setXAxisDescription("time in ms");
 								result.setYAxisDescription("%"); // (between 0 and 1)");
@@ -109,23 +220,22 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 											// "+ent.getIdentifier()+": Time"
 											// +record.getTimestamp()+" / Util:
 											// "+record.getContent().get(2));
-											result.getElements().add(KiekerHelper.getSeriesResultElement(
-													record.getTimestamp(), record.getContent().get(ResourceContent.UTILIZATION), firstTs));
+											KiekerHelper.addToResult(result, record.getTimestamp(), record.getContent().get(ResourceContent.UTILIZATION), firstTs);
 										}
 										result.setValid(true);
 									} catch (NumberFormatException exc) {
+										System.out.println("Error "+exc.getStackTrace());
 										result.setValid(false);
 									}
 									st.setResult(result);
 								}
-
 							} else {
 								// do nothing
 							}
 						} else if (KiekerHelper.METRIC_RESPONSE_TIME.equalsIgnoreCase(dqlProbe.getMetricName())) {
-							if (st.getTypeName().equals("DEFAULT") || st.getTypeName().equals("SAMPLE")) {
+							if (st.getTypeName().equalsIgnoreCase("DEFAULT") || st.getTypeName().equalsIgnoreCase("SAMPLE")) {
 								ContinuousSeriesResult res = DomainFactory.eINSTANCE.createContinuousSeriesResult();
-								res.setXAxisDescription("ms");
+								res.setXAxisDescription("in s");	//seconds
 								res.setYAxisDescription("arrival time in ms");
 								if (services != null) {
 									try {
@@ -141,8 +251,7 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 													kiekerId += "." + er.getIdentifier().getInterfaceID();
 												}
 												if (kiekerId.contains(dqlId)) {
-													res.getElements().add(KiekerHelper.getSeriesResultElement(
-															er.getTimestamp(), er.getRuntime(), firstTs));
+													KiekerHelper.addToResult(res, er.getTimestamp(), er.getRuntime() / 1000000000.0, firstTs);
 												}
 
 											}
@@ -150,11 +259,16 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 										}
 
 									} catch (NumberFormatException exc) {
+										log.warn("NumberFormatException occured");
+										log.info(exc);
 										res.setValid(false);
 									}
 									st.setResult(res);
 								}
 							}
+							
+						} else if (KiekerHelper.METRIC_THROUGHPUT.equalsIgnoreCase(dqlProbe.getMetricName())) {
+							addServiceThroughput(firstTs, lastTs, services, ent, dqlProbe);
 
 						}
 
@@ -162,27 +276,164 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 				}
 			}
 		}
+		//DEBUG OUTPUT
+		
+
+		log.info("--------------------------------------------------------------------------------");
+		log.info("\t\t\tListing results");
+		log.info("--------------------------------------------------------------------------------");
+		for(Entity entity:response.getEntities()) {
+			log.info(entity.getIdentifier());
+			for(Probe probe:entity.getProbes()) {
+				log.info("\t"+probe.getMetricName() );
+				//log.info("\t\t"+probe.getStatTypes());
+				for (StatType statType:probe.getStatTypes()) {
+					if(statType.getResult() instanceof ContinuousSeriesResult) {
+						log.info("\t\t"+((ContinuousSeriesResult)statType.getResult()).getElements().size()+" values");				
+					}else if (statType.getResult() instanceof DecimalResult) {
+						//log.info("\t\t"+statType.getTypeName());
+						log.info("\t\t"+((DecimalResult)statType.getResult()).getValue());				
+					}
+				
+				}
+			}
+
+			
 
+		}
 	}
 
-	private void addSessionResults(Entity entity, Map<ResourceIdentifier, Resource> resourceIds,
+private void addSystemUtilization(long firstTs, Map<Resource, Trace> resources,
+		Map<ResourceIdentifier, Resource> resourceIds, Entity ent) {
+	ContinuousSeriesResult result = DomainFactory.eINSTANCE.createContinuousSeriesResult();
+	result.setXAxisDescription("time in ms");
+	result.setYAxisDescription("%"); // (between 0 and 1)");
+	ResourceIdentifier systemidentifier = ResourceIdentifier.createResourceIdentifier("system", "system");
+	
+	List<ResourceRecord> system_utilization = new ArrayList<ResourceRecord>();
+	
+	log.info("Merging the results of "+ resourceIds.keySet().size()+ " cores to calculate utilization of system --- START");
+
+	
+	for (ResourceIdentifier resourceID : resourceIds.keySet()) {
+		Resource resource = resourceIds.get(resourceID);
+		List<ResourceRecord> cpu_utilization = resources.get(resource).getResources();
+//		System.out.println("--------------------------------------------------------------------------------");
+//		System.out.println("\t "+ resource.getName() +" has "+ cpu_utilization.size() + " entries");
+//		System.out.println("--------------------------------------------------------------------------------");
+		
+		Comparator<? super ResourceRecord> resourceRecordComparator = new Comparator<ResourceRecord>() 
+		{
+			public int compare(ResourceRecord o1, ResourceRecord o2) {
+				if(o2.getTimestamp() == o1.getTimestamp()) {
+					return 0;
+				}else if (o2.getTimestamp() - o1.getTimestamp() > 0){
+					return -1;
+				}else {
+					return 1;
+				}
+			};
+		};
+		Collections.sort(cpu_utilization, resourceRecordComparator);
+		
+		for(int i=0; i<cpu_utilization.size(); i++) {
+			if(i < system_utilization.size()) {
+//				if(system_utilization.get(i).getTimestamp() == cpu_utilization.get(i).getTimestamp()) {
+//				}else {
+//					System.out.println("Timestamp missmatch "+(resource.getName()) +" "+ ((system_utilization.get(i).getTimestamp() - cpu_utilization.get(i).getTimestamp())/1000.0/1000.0) + " ms");
+//				}
+				double sum = system_utilization.get(i).getContent().get(ResourceContent.UTILIZATION) + 	cpu_utilization.get(i).getContent().get(ResourceContent.UTILIZATION);
+				system_utilization.get(i).getContent().set(ResourceContent.UTILIZATION, sum);
+			}else {
+				system_utilization.add(new ResourceRecord(systemidentifier, cpu_utilization.get(i).getTimestamp(), cpu_utilization.get(i).getContent().clone()));
+			}
+		}
+	}
+	for(ResourceRecord record:system_utilization) {
+		KiekerHelper.addToResult(result, record.getTimestamp(), record.getContent().get(ResourceContent.UTILIZATION) 
+				/ (double)resourceIds.keySet().size() //
+				, firstTs);
+		
+	}
+	log.info("Merging the results of "+ resourceIds.keySet().size()+ " cores to calculate utilization of system --- FINISHED");
+	
+	ent.getProbes().get(0).setMetricName("utilization");
+	ent.getProbes().get(0).getStatTypes().get(0).setTypeName("sample");
+	ent.getProbes().get(0).getStatTypes().get(0).setResult(result);
+}
+
+	private void addServiceThroughput(long firstTs, long lastTs, Map<Component, Trace> services, Entity ent,
+			Probe dqlProbe) {
+		StatType statType = dqlProbe.getStatTypes().get(0);
+		int cnt = 0;
+		try {
+			Component comp = new Component(
+					KiekerHelper.getComponentString(ent.getIdentifier()));
+			Trace tr = services.get(comp);
+			if (tr != null && tr.getEvents().size() > 0) {
+				for (EventRecord er : tr.getEvents()) {
+					String dqlId = ent.getIdentifier();
+
+					String kiekerId = er.getIdentifier().getComponentID();
+					if (er.getIdentifier().isInterfaceIdentifier()) {
+						kiekerId += "." + er.getIdentifier().getInterfaceID();
+					}
+					if (kiekerId.contains(dqlId)) {
+						cnt++;
+					}
+
+				}
+			}
+
+		} catch (NumberFormatException exc) {
+			log.error(exc);
+		}
+
+		createThroughput(firstTs, lastTs, ent, statType, cnt);
+	}
+
+	private void createThroughput(long firstTs, long lastTs, Entity ent, StatType statType, int cnt) {
+		DecimalResult result = DomainFactory.eINSTANCE.createDecimalResult();
+		double interval = ((lastTs - firstTs)/1000.0/1000.0/1000.0);	//in seconds, micro, nano, milli
+		long value = (long) (cnt / interval);
+		log.info("requests "+ent.getIdentifier()+": "+cnt);
+		log.info("interval "+ interval + "       ["+firstTs+" : "+lastTs+"]");
+		log.info("througput" + new BigDecimal(value));
+		result.setValue(new BigDecimal(value));
+		result.setValid(true);
+		statType.setResult(result);
+	}
+	
+	private void createUtilization(Entity ent, StatType statType, double value) {
+		DecimalResult result = DomainFactory.eINSTANCE.createDecimalResult();
+		result.setValue(new BigDecimal(value));
+		result.setValid(true);
+		statType.setResult(result);
+	}
+
+	private void addSessionResponseTimes(Entity entity, Probe dqlProbe,
 			long firstTs) {
-		StatType statType = entity.getProbes().get(0).getStatTypes().get(0);
+		StatType statType = dqlProbe.getStatTypes().get(0);
 
 		ContinuousSeriesResult result = DomainFactory.eINSTANCE.createContinuousSeriesResult();
-		result.setXAxisDescription("ms");
-		result.setYAxisDescription("% (between 0 and 1)");
+		result.setXAxisDescription("response time in ms");
+		result.setYAxisDescription("arrival time in ms");
 //		String abc = "session"; // ent.getIdentifier();
 //		ResourceIdentifier dqlId = ResourceIdentifier.createResourceIdentifier("", abc);
 //		Resource res = new Resource("session");// resourceIds.get(dqlId);
 		// resourceIds.put(dqlId, res);
 		for (Session session : SessionFilter.sessionTimes) {
-			SeriesResultElement resultElement = KiekerHelper.getSeriesResultElement(session.start, session.duration,
+			KiekerHelper.addToResult(result, session.start, session.duration / 1000000.0,
 					firstTs);
-			result.getElements().add(resultElement);
 		}
 		statType.setResult(result);
 	}
+	
+	private void addSessionThroughput(Entity entity, Probe dqlProbe, long firstTs, long lastTs) {
+		StatType statType = dqlProbe.getStatTypes().get(0);
+		createThroughput(firstTs, lastTs, entity, statType, SessionFilter.sessionTimes.size());
+	}
+	
 
 	public void reset() {
 		// Nothing to do here
@@ -234,11 +485,6 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 		return null;
 	}
 
-	@Override
-	public List<EntityMapping> requestDoFMetrics(final EntityMapping request) {
-		return null;
-	}
-
 	@Override
 	public void setConstraint(final String constraint) {
 	}
@@ -270,7 +516,7 @@ public class PerformanceMetricsQueryConnectorImpl extends AbstractOSGiQueryConne
 
 	@Override
 	public boolean supportsDoFRequests() {
-		return false;
+		return true;
 	}
 
 	@Override
diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/SessionFilter.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/SessionFilter.java
index 48fb351ba4b9f98f842853678369033374bd404c..cd141eb6c9f23f8976f8c1b4ce22143ad16290ce 100644
--- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/SessionFilter.java
+++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/SessionFilter.java
@@ -53,8 +53,8 @@ public class SessionFilter extends AbstractMessageTraceProcessingFilter {
 
 		Operation operation = message.getReceivingExecution().getOperation();
 		String id = mt.getSessionId();
-		System.out.println(id + ":" + time + "\txxx" + (time3 - time2) * 0.000001 + "\t\t "
-				+ operation.getSignature().getName() + " \t\t||| " + start);
+//		System.out.println(id + ":" + time + "\txxx" + (time3 - time2) * 0.000001 + "\t\t "
+//				+ operation.getSignature().getName() + " \t\t||| " + start);
 
 		// addTimeStamp(id, mt.getStartTimestamp());
 		// addTimeStamp(id, mt.getEndTimestamp());
@@ -62,7 +62,7 @@ public class SessionFilter extends AbstractMessageTraceProcessingFilter {
 		addTimeStamp(id, message.getReceivingExecution().getTin());
 		addTimeStamp(id, message.getReceivingExecution().getTout());
 		long value = (time3 - time2); //* 0.000001;
-		System.out.println("\t\t\t"+value);
+//		System.out.println("\t\t\t"+value);
 		addToSumMap(id, value);
 		// addTimeStamp(id, message.getReceivingExecution().getTout());
 		sortMessageTrace(mt);
@@ -86,15 +86,16 @@ public class SessionFilter extends AbstractMessageTraceProcessingFilter {
 			}
 		};
 		Collections.sort(messages, timeComparator);
-		for (AbstractMessage message : messages) {
-			if(message.getReceivingExecution().getEoi() == 0){
-				System.out.println(
-					"==>" + message.getReceivingExecution().getOperation().getSignature().getName() + " " + message.getReceivingExecution().getEoi());
-			}else{
-				System.out.println(
-						"" + message.getReceivingExecution().getOperation().getSignature().getName() + " " + message.getReceivingExecution().getEoi());
-			}
-		}
+//		if(log.getLevel() & log.getLevel()>Level.)		//if log level is high ...
+//		for (AbstractMessage message : messages) {
+//			if(message.getReceivingExecution().getEoi() == 0){
+//				System.out.println(
+//					"==>" + message.getReceivingExecution().getOperation().getSignature().getName() + " " + message.getReceivingExecution().getEoi());
+//			}else{
+//				System.out.println(
+//						"" + message.getReceivingExecution().getOperation().getSignature().getName() + " " + message.getReceivingExecution().getEoi());
+//			}
+//		}
 	}
 
 	AbstractMessage getStartMessage(final MessageTrace mt) {
diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/structures/ResourceContent.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/structures/ResourceContent.java
index 2fea2aeed6b2464d6edf7bcb43001223f66c82d9..579b13846744050dd11596760a061f31eee5c417 100644
--- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/structures/ResourceContent.java
+++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/structures/ResourceContent.java
@@ -79,6 +79,14 @@ public class ResourceContent {
 		return content.clone();
 	}
 
+		
+	public ResourceContent clone() {
+		ResourceContent clone = new ResourceContent(this.type);
+		clone.content = getAllValues();
+		clone.idx = this.idx;
+		return clone;
+	}
+
 	public String toString() {
 		StringBuilder builder = new StringBuilder();
 		for (int i = 0; i < content.length; i++) {
diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/util/KiekerHelper.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/util/KiekerHelper.java
index 2a057a5d2158795f3e1e09e0d525ee9df490bcb7..6eca3b92ced36b49d266d3fa4ff14dc600060c38 100644
--- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/util/KiekerHelper.java
+++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/util/KiekerHelper.java
@@ -28,6 +28,7 @@ import tools.descartes.dql.connector.kieker.structures.identifier.ResourceIdenti
 import tools.descartes.dql.connector.kieker.structures.records.EventRecord;
 import tools.descartes.dql.connector.kieker.structures.records.ResourceRecord;
 import tools.descartes.dql.core.engine.util.DQLLogger;
+import tools.descartes.dql.models.mapping.domain.AbstractSeriesResult;
 import tools.descartes.dql.models.mapping.domain.ContinuousSeriesResult;
 import tools.descartes.dql.models.mapping.domain.DomainFactory;
 import tools.descartes.dql.models.mapping.domain.Entity;
@@ -62,6 +63,12 @@ public class KiekerHelper {
 	public static final String METRIC_THROUGHPUT = "throughput";
 
 	private static final Logger log = DQLLogger.getLogger(KiekerHelper.class.getName());
+	public static double lowerBound = Double.MIN_VALUE;
+	public static double upperBound = Double.MAX_VALUE;
+	//int lowerBound = 114000; int upperBound = 140000;
+	//TODO remove this quick fix
+	//lowerBound = 100000; int upperBound = 140000;
+//
 
 	
 	/**
@@ -217,18 +224,15 @@ public class KiekerHelper {
 	}
 
 
-
-	
-	
-	public static SeriesResultElement getSeriesResultElement(long timeStamp, double value, long firstTimestamp){
-		SeriesResultElement e = DomainFactory.eINSTANCE.createSeriesResultElement();
+	public static void addToResult(AbstractSeriesResult result, long timeStamp, double value, long firstTimestamp) {
+		SeriesResultElement resultElement = DomainFactory.eINSTANCE.createSeriesResultElement();
 		// convert ts to millis
-		BigDecimal time = new BigDecimal(
-				((timeStamp - firstTimestamp) / 1000000.0));
-		BigDecimal responsetime = new BigDecimal(value / 1000000.0);
-		e.setX(time);
-		e.setY(responsetime);
-		return e;
+		double time = ((timeStamp - firstTimestamp) / 1000000.0);
+		if( time> lowerBound && time < upperBound ) {
+			resultElement.setX(new BigDecimal(time));
+			resultElement.setY(new BigDecimal(value));
+			result.getElements().add(resultElement);
+		}
 	}
 	
 	public static String getComponentString (String identifier){
@@ -262,37 +266,37 @@ public class KiekerHelper {
 	}
 	
 	
-	public static Configuration createAnalysisConfig(EntityMapping request, String outputPath, String hostname){
+	public static Configuration createAnalysisConfig(EntityMapping request, String outputPath, String hostname) {
 		File[] traceFolders = KiekerHelper.getTraceFolders(outputPath);
-		 Configuration readerConfig = new Configuration();
-		 
-		 for (int i = 0; i< traceFolders.length; i++){
-			 readerConfig.setProperty("TRACE_"+i, traceFolders[i].getAbsolutePath());
-		 }
-		 
+		Configuration readerConfig = new Configuration();
+
+		for (int i = 0; i < traceFolders.length; i++) {
+			readerConfig.setProperty("TRACE_" + i, traceFolders[i].getAbsolutePath());
+		}
+
 		for (Entity e : request.getEntities()) {
-			if (e.getEntityType().equals("RESOURCE")){
-				if(e.getIdentifier().contains("system") || e.getAlias().contains("system")){
+			if (e.getEntityType().equals("RESOURCE")) {
+				if (e.getIdentifier().contains("system") || e.getAlias().contains("system")) {
 					continue;
 				}
 				String r_id = e.getIdentifier();
 				String r_value = hostname;
-				readerConfig.setProperty("RESOURCE_"+r_id, r_value);
+				readerConfig.setProperty("RESOURCE_" + r_id, r_value);
 			}
-		  }
-		 
-		 int i = 0;
+		}
+
+		int i = 0;
 		for (Entity e : request.getEntities()) {
 			if (e.getEntityType().equals("SERVICE")) {
-					if(e.getIdentifier().contains("session") || e.getAlias().contains("session")){
-						continue;
-					}
-					String component = getComponentString(e.getIdentifier());
-					String identifier = hostname + " & " + component;
-					readerConfig.setProperty("COMPONENT_c" + i, identifier);
-					i++;
+				if (e.getIdentifier().contains("session") || e.getAlias().contains("session")) {
+					continue;
+				}
+				String component = getComponentString(e.getIdentifier());
+				String identifier = hostname + " & " + component;
+				readerConfig.setProperty("COMPONENT_c" + i, identifier);
+				i++;
 			}
-		  }
+		}
 		return readerConfig;
 	}