diff --git a/tools/compile-results/src/main/java/moobench/tools/compile/results/CompileResultsMain.java b/tools/compile-results/src/main/java/moobench/tools/compile/results/CompileResultsMain.java
index 0358eeb4c5da2e01825213602f891b7ad604683d..5e458f0c81e6f497cc712eae8070f8073f2c0f36 100644
--- a/tools/compile-results/src/main/java/moobench/tools/compile/results/CompileResultsMain.java
+++ b/tools/compile-results/src/main/java/moobench/tools/compile/results/CompileResultsMain.java
@@ -41,11 +41,15 @@ public class CompileResultsMain {
 	private static final String NO_INSTRUMENTATION = "No instrumentation";
 	private static final String PARTIAL_RESULT_FILENAME = "partial-results.json";
 	private static final String RELATIVE_RESULT_FILENAME = "relative-results.json";
-
+	private static final int WINDOW_LENGTH = 100;
+	private static final String BUILD_LABEL = "build";
+	private static final String TIME_LABEL = "time";
+	private static final String RESULTS_LABEL = "results";
+	
 	public static void main(String[] args) {
 		try {
 			final JsonNode rootNode;
-			
+							
 			File jsonMainFile = Paths.get(args[1]).toFile();
 			
 			if (jsonMainFile.exists()) {
@@ -58,7 +62,7 @@ public class CompileResultsMain {
 			File jsonPartialFile = new File(jsonMainFile.getParentFile().getPath() + File.separator + PARTIAL_RESULT_FILENAME);
 			File jsonRelativeFile = new File(jsonMainFile.getParentFile().getPath() + File.separator + RELATIVE_RESULT_FILENAME);
 
-			JsonNode resultsNode = rootNode.get("results");
+			JsonNode resultsNode = rootNode.get(RESULTS_LABEL);
 			
 			if (!(resultsNode instanceof ArrayNode)) {
 				System.exit(1);
@@ -78,8 +82,8 @@ public class CompileResultsMain {
 			/** Put CSV data in main JSON. */
 			for (CSVRecord record : csvParser.getRecords()) {
 				Map<String, JsonNode> recordMap = new HashMap<>();
-				recordMap.put("time",new LongNode(new Date().getTime()));
-				recordMap.put("build",new LongNode(build++));
+				recordMap.put(TIME_LABEL, new LongNode(new Date().getTime()));
+				recordMap.put(BUILD_LABEL, new LongNode(build++));
 				for (int i=0; i < record.size(); i++) {
 					recordMap.put(header.get(i).trim(), new DoubleNode(Double.parseDouble(record.get(i))));
 				}
@@ -88,7 +92,7 @@ public class CompileResultsMain {
 			
 			/** Produce alternative outputs. */
 			JsonNode partialRootNode = createPartialResultList(arrayResultsNode);
-			JsonNode relativeRootNode = createRelativeResultList((ArrayNode)partialRootNode.get("results"));
+			JsonNode relativeRootNode = createRelativeResultList((ArrayNode)partialRootNode.get(RESULTS_LABEL));
 
 			/** Write JSON files. */
 			new ObjectMapper().writeValue(jsonMainFile, rootNode);
@@ -116,12 +120,14 @@ public class CompileResultsMain {
 				ObjectNode objectNode = (ObjectNode)node;
 				
 				Iterator<Entry<String, JsonNode>> iterator = objectNode.fields();
-				while (iterator.hasNext()) {
+				Map<String, JsonNode> map = new HashMap<>();
+ 				while (iterator.hasNext()) {
 					Entry<String, JsonNode> entry = iterator.next();
-					objectNode.remove(entry.getKey());
-					objectNode.set(entry.getKey().trim(), entry.getValue());
+					map.put(entry.getKey().trim(), entry.getValue());
 				}
-				
+				objectNode.removeAll();
+				objectNode.setAll(map);
+ 				
 				JsonNode buildValue = objectNode.get("build");
 				if (buildValue != null) {
 					if (build <= buildValue.asLong()) {
@@ -147,12 +153,17 @@ public class CompileResultsMain {
 			Iterator<Entry<String, JsonNode>> elementValueIterator = element.fields();
 			while (elementValueIterator.hasNext()) {
 				Entry<String, JsonNode> value = elementValueIterator.next();
-				valueMap.put(value.getKey(), new DoubleNode((value.getValue().asDouble()-baseline)/baseline));
+				if (BUILD_LABEL.equals(value.getKey()) || TIME_LABEL.equals(value.getKey())) {
+					valueMap.put(value.getKey(), value.getValue());					
+				} else {
+					valueMap.put(value.getKey(), new DoubleNode(value.getValue().asDouble()/baseline));
+				}
 			}
+			relativeResultsNode.add(new ObjectNode(factory, valueMap));
 		}
 
 		Map<String, JsonNode> map = new HashMap<>();
-		map.put("results", relativeResultsNode);
+		map.put(RESULTS_LABEL, relativeResultsNode);
 
 		return new ObjectNode(factory, map);
 	}
@@ -162,7 +173,8 @@ public class CompileResultsMain {
 
 		ArrayNode partialResultsNode = new ArrayNode(factory);
 
-		for (int i=0; i < arrayNode.size(); i++) {
+		int start = arrayNode.size()>WINDOW_LENGTH?arrayNode.size()-WINDOW_LENGTH:0;
+		for (int i=start; i < arrayNode.size(); i++) {
 			JsonNode element = arrayNode.get(i);
 			Map<String, JsonNode> valueMap = new HashMap<>();
 			Iterator<Entry<String, JsonNode>> elementValueIterator = element.fields();
@@ -170,10 +182,11 @@ public class CompileResultsMain {
 				Entry<String, JsonNode> value = elementValueIterator.next();
 				valueMap.put(value.getKey(), value.getValue());
 			}
+			partialResultsNode.add(new ObjectNode(factory, valueMap));
 		}
 		
 		Map<String, JsonNode> map = new HashMap<>();
-		map.put("results", partialResultsNode);
+		map.put(RESULTS_LABEL, partialResultsNode);
 
 		return new ObjectNode(factory, map);
 	}