diff --git a/src/META-INF/explorviz.live_trace_processing.default.properties b/src/META-INF/explorviz.live_trace_processing.default.properties
index 96d199a978e03088eccd1bcc21e732ec34236c59..c92159f13cca0262ac8fc793c8b59e77eacb9169 100644
--- a/src/META-INF/explorviz.live_trace_processing.default.properties
+++ b/src/META-INF/explorviz.live_trace_processing.default.properties
@@ -9,7 +9,7 @@ explorviz.live_trace_processing.writer_load_balancing_port=9999
 explorviz.live_trace_processing.writer_load_balancing_wait_time=20000
 explorviz.live_trace_processing.writer_load_balancing_scaling_group=analysis-worker
 
-explorviz.live_trace_processing.sending_buffer_size=2097152
+explorviz.live_trace_processing.sending_buffer_size=262144
 
 ######################## Monitoring ########################
 
diff --git a/src/explorviz/live_trace_processing/connector/TCPConnector.java b/src/explorviz/live_trace_processing/connector/TCPConnector.java
index dc575be5e23702dfb718fb19292ae0ddf2082d23..8b313f7d079819b07a58a5471dc7d91b78e3a600 100644
--- a/src/explorviz/live_trace_processing/connector/TCPConnector.java
+++ b/src/explorviz/live_trace_processing/connector/TCPConnector.java
@@ -6,6 +6,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
+import java.util.List;
 
 import explorviz.live_trace_processing.Constants;
 import explorviz.live_trace_processing.StringRegistry;
@@ -14,22 +15,25 @@ import explorviz.live_trace_processing.filter.AbstractSink;
 import explorviz.live_trace_processing.filter.SinglePipeConnector;
 import explorviz.live_trace_processing.record.IRecord;
 import explorviz.live_trace_processing.record.ISerializableRecord;
+import explorviz.live_trace_processing.record.event.AbstractEventRecord;
 import explorviz.live_trace_processing.record.misc.StringRegistryRecord;
 import explorviz.live_trace_processing.record.misc.TerminateRecord;
 import explorviz.live_trace_processing.record.misc.TimedPeriodRecord;
+import explorviz.live_trace_processing.record.trace.Trace;
 import explorviz.live_trace_processing.writer.IRecordSender;
 import explorviz.live_trace_processing.writer.IStringRecordSender;
 import explorviz.live_trace_processing.writer.IWriter;
 
 public class TCPConnector extends AbstractSink implements IWriter, IStringRecordSender,
-IRecordSender {
+		IRecordSender {
 	private URL providerURL;
 
 	private SocketChannel socketChannel;
 
 	private final StringRegistry stringRegistry = new StringRegistry(this);
 
-	private final ByteBuffer buffer = ByteBuffer.allocateDirect(Constants.SENDING_BUFFER_SIZE);
+	private final ByteBuffer sendingBuffer = ByteBuffer.allocate(Constants.SENDING_BUFFER_SIZE);
+	private final ByteBuffer stringBuffer = ByteBuffer.allocate(Constants.SENDING_BUFFER_SIZE);
 
 	private volatile boolean shouldDisconnect = false;
 
@@ -38,7 +42,7 @@ IRecordSender {
 	public TCPConnector(final SinglePipeConnector<IRecord> tcpConnectorConnector,
 			final String hostname, final int port, final Configuration configuration) {
 		this.tcpConnectorConnector = tcpConnectorConnector;
-		buffer.clear();
+		sendingBuffer.clear();
 		try {
 			setProviderURL(new URL("http://" + hostname + ":" + port));
 		} catch (final MalformedURLException e) {
@@ -77,24 +81,31 @@ IRecordSender {
 
 	@Override
 	public void sendOutStringRecord(final StringRegistryRecord record) {
-		final ByteBuffer stringBuffer = ByteBuffer.allocate(record.getRecordSizeInBytes());
 		record.putIntoByteBuffer(stringBuffer, stringRegistry, this);
 		send(stringBuffer);
 	}
 
 	@Override
 	public void processRecord(final IRecord record) {
-		if (record instanceof ISerializableRecord) {
+		if (record instanceof Trace) {
+			final Trace trace = (Trace) record;
+			final List<AbstractEventRecord> traceEvents = trace.getTraceEvents();
+			for (final AbstractEventRecord event : traceEvents) {
+				if (sendingBuffer.remaining() < event.getRecordSizeInBytes()) {
+					send(sendingBuffer);
+				}
+				event.putIntoByteBuffer(sendingBuffer, stringRegistry, this);
+			}
+			send(sendingBuffer);
+		} else if (record instanceof ISerializableRecord) {
 			final ISerializableRecord serializableRecord = (ISerializableRecord) record;
-			if (buffer.remaining() < serializableRecord.getRecordSizeInBytes()) {
-				send(buffer);
-				System.out.println("required: " + serializableRecord.getRecordSizeInBytes()
-						+ " and capacity is " + buffer.capacity());
+			if (sendingBuffer.remaining() < serializableRecord.getRecordSizeInBytes()) {
+				send(sendingBuffer);
 			}
-			serializableRecord.putIntoByteBuffer(buffer, stringRegistry, this);
+			serializableRecord.putIntoByteBuffer(sendingBuffer, stringRegistry, this);
 		} else if (record instanceof TimedPeriodRecord) {
 			// send(buffer);
-			// this the end of timedperiodrecords - master has own
+			// this the end of timedperiodrecords - master has its own
 		} else if (record instanceof TerminateRecord) {
 			terminate();
 		}
diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
index a45d4d87cddab0c197667416168f13db5b6578a6..eb1cc607f78efddab96d5a70a86e425845d7b203 100644
--- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
+++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
@@ -77,7 +77,7 @@ class TraceReconstructionBuffer {
 		return ((openEvents != 0) || events.isEmpty() || ((maxOrderIndex + 1) != events.size()));
 	}
 
-	public final Trace toTrace(final boolean valid) {
+	public final Trace toTrace() {
 		final Stack<AbstractBeforeEventRecord> stack = new Stack<AbstractBeforeEventRecord>();
 		boolean containsRemoteRecord = false;
 
@@ -89,21 +89,30 @@ class TraceReconstructionBuffer {
 						|| (event instanceof BeforeSentRemoteCallRecord)) {
 					containsRemoteRecord = true;
 				}
-			} else if ((event instanceof AbstractAfterEventRecord)
-					|| (event instanceof AbstractAfterFailedEventRecord)) {
+			} else if (event instanceof AbstractAfterEventRecord) {
+				final AbstractAfterEventRecord abstractAfterEventRecord = (AbstractAfterEventRecord) event;
 				if (!stack.isEmpty()) {
 					final AbstractBeforeEventRecord beforeEvent = stack.pop();
 
 					if (beforeEvent.getRuntimeStatisticInformation() == null) {
-						final long time = event.getLoggingTimestamp()
-								- beforeEvent.getLoggingTimestamp();
+						final long time = abstractAfterEventRecord.getMethodDuration();
+						beforeEvent.setRuntimeStatisticInformation(new RuntimeStatisticInformation(
+								1, time, time * time));
+					}
+				}
+			} else if (event instanceof AbstractAfterFailedEventRecord) {
+				final AbstractAfterFailedEventRecord abstractAfterFailedEventRecord = (AbstractAfterFailedEventRecord) event;
+				if (!stack.isEmpty()) {
+					final AbstractBeforeEventRecord beforeEvent = stack.pop();
+
+					if (beforeEvent.getRuntimeStatisticInformation() == null) {
+						final long time = abstractAfterFailedEventRecord.getMethodDuration();
 						beforeEvent.setRuntimeStatisticInformation(new RuntimeStatisticInformation(
 								1, time, time * time));
 					}
 				}
 			}
 		}
-		return new Trace(new ArrayList<AbstractEventRecord>(events), valid, containsRemoteRecord,
-				events.size());
+		return new Trace(new ArrayList<AbstractEventRecord>(events), containsRemoteRecord);
 	}
 }
diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java
index 56a44c6e2197f87653c8f9e4311e8a8ede9c51b6..74c545c07e368c99044b8b96fe3ab8966c037cf8 100644
--- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java
+++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java
@@ -1,7 +1,6 @@
 package explorviz.live_trace_processing.filter.reconstruction;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Queue;
@@ -14,7 +13,6 @@ import explorviz.live_trace_processing.record.IRecord;
 import explorviz.live_trace_processing.record.event.AbstractEventRecord;
 import explorviz.live_trace_processing.record.misc.TerminateRecord;
 import explorviz.live_trace_processing.record.misc.TimedPeriodRecord;
-import explorviz.live_trace_processing.record.trace.Trace;
 
 public final class TraceReconstructionFilter extends AbstractFilter implements Runnable {
 	private final long maxTraceTimeout;
@@ -46,16 +44,9 @@ public final class TraceReconstructionFilter extends AbstractFilter implements R
 			traceBuffer.insertEvent(abstractOperationEvent);
 
 			if (traceBuffer.isFinished()) {
-				deliver(traceBuffer.toTrace(true));
+				deliver(traceBuffer.toTrace());
 				traceId2trace.remove(traceId);
 			}
-		} else if (record instanceof Trace) {
-			final Trace trace = (Trace) record;
-			if (trace.isValid()) {
-				deliver(trace);
-			} else {
-				getBufferForTraceId(trace.getTraceEvents().get(0).getTraceId());
-			}
 		} else if (record instanceof TimedPeriodRecord) {
 			checkForTimeouts(TimeProvider.getCurrentTimestamp());
 			deliver(record);
@@ -78,9 +69,12 @@ public final class TraceReconstructionFilter extends AbstractFilter implements R
 
 	private void checkForTimeouts(final long timestamp) {
 		final long traceTimeout = timestamp - maxTraceTimeout;
-		final List<Long> traceIdsToRemove = new ArrayList<Long>();
 
-		for (final Entry<Long, TraceReconstructionBuffer> entry : traceId2trace.entrySet()) {
+		final Iterator<Entry<Long, TraceReconstructionBuffer>> iterator = traceId2trace.entrySet()
+				.iterator();
+
+		while (iterator.hasNext()) {
+			final Entry<Long, TraceReconstructionBuffer> entry = iterator.next();
 			final TraceReconstructionBuffer traceBuffer = entry.getValue();
 			if (traceBuffer.isUpdatedInThisPeriod()) {
 				traceBuffer.setUpdatedInThisPeriod(false);
@@ -88,20 +82,16 @@ public final class TraceReconstructionFilter extends AbstractFilter implements R
 				traceBuffer.updateLastBufferInsert();
 
 				if ((timestamp - traceBuffer.getLastBufferInsert()) <= traceTimeout) {
-					deliver(traceBuffer.toTrace(false));
-					traceIdsToRemove.add(entry.getKey());
+					deliver(traceBuffer.toTrace());
+					iterator.remove();
 				}
 			}
 		}
-
-		for (final long traceIdToRemove : traceIdsToRemove) {
-			traceId2trace.remove(traceIdToRemove);
-		}
 	}
 
 	private void terminate() {
 		for (final TraceReconstructionBuffer entry : traceId2trace.values()) {
-			deliver(entry.toTrace(false));
+			deliver(entry.toTrace());
 		}
 		traceId2trace.clear();
 	}
diff --git a/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java b/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java
index a0a97af99ea4e1c5f6623ff94193dec580e0ac17..8f1481e251541fda70dbbb44c3f00ff9cd805d4f 100644
--- a/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java
+++ b/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java
@@ -45,15 +45,10 @@ public class TracesSummarizationFilter extends AbstractFilter {
 		if (record instanceof Trace) {
 			final Trace trace = (Trace) record;
 
-			if (trace.isValid()) {
-				if (!trace.containsRemoteRecord()) {
-					insertIntoBuffer(trace);
-				} else {
-					// trace with remote records cant be reduced
-					makeTraceElementsAccumulator(trace);
-					deliver(trace);
-				}
+			if (!trace.containsRemoteRecord()) {
+				insertIntoBuffer(trace);
 			} else {
+				// trace with remote records cant be reduced
 				makeTraceElementsAccumulator(trace);
 				deliver(trace);
 			}
@@ -91,7 +86,7 @@ public class TracesSummarizationFilter extends AbstractFilter {
 					final AbstractBeforeOperationEventRecord abstractBeforeOperationEventRecord = (AbstractBeforeOperationEventRecord) abstractBeforeEventRecord;
 
 					abstractBeforeOperationEventRecord.getRuntimeStatisticInformation()
-					.makeAccumulator(abstractBeforeOperationEventRecord.getObjectId());
+							.makeAccumulator(abstractBeforeOperationEventRecord.getObjectId());
 				} else {
 					abstractBeforeEventRecord.getRuntimeStatisticInformation().makeAccumulator(0);
 
diff --git a/src/explorviz/live_trace_processing/main/FilterConfiguration.java b/src/explorviz/live_trace_processing/main/FilterConfiguration.java
index e480365a55823ba631e4b8accf5928c34f6e774d..cc946c6d27398e8cbf022e1d9ef99589500bbfe7 100644
--- a/src/explorviz/live_trace_processing/main/FilterConfiguration.java
+++ b/src/explorviz/live_trace_processing/main/FilterConfiguration.java
@@ -19,13 +19,13 @@ public class FilterConfiguration {
 		final SinglePipeConnector<IRecord> traceReductionConnector = new SinglePipeConnector<IRecord>(
 				Constants.TRACE_RECONSTRUCTION_DISRUPTOR_SIZE);
 
-		new TracesSummarizationFilter(traceReductionConnector, TimeUnit.SECONDS.toNanos(4), sink)
+		new TracesSummarizationFilter(traceReductionConnector, TimeUnit.SECONDS.toNanos(3), sink)
 		.start();
 
 		final PipesMerger<IRecord> traceReconstructionMerger = new PipesMerger<IRecord>(
 				Constants.TCP_READER_DISRUPTOR_SIZE);
 
-		new TraceReconstructionFilter(traceReconstructionMerger, TimeUnit.SECONDS.toNanos(4),
+		new TraceReconstructionFilter(traceReconstructionMerger, TimeUnit.SECONDS.toNanos(3),
 				traceReductionConnector.registerProducer()).start();
 
 		new TCPReader(configuration.getIntProperty(ConfigurationFactory.READER_LISTENING_PORT,
diff --git a/src/explorviz/live_trace_processing/reader/TCPReader.java b/src/explorviz/live_trace_processing/reader/TCPReader.java
index 733df3b48d38200efd7d1e8e47b68347d4048346..5fe8ef294782288fb9ca28d4929f1bbb1df4cebf 100644
--- a/src/explorviz/live_trace_processing/reader/TCPReader.java
+++ b/src/explorviz/live_trace_processing/reader/TCPReader.java
@@ -3,9 +3,6 @@ package explorviz.live_trace_processing.reader;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.nio.channels.ServerSocketChannel;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import java.util.Queue;
 import java.util.concurrent.TimeUnit;
 
@@ -25,9 +22,6 @@ public final class TCPReader implements IPeriodicTimeSignalReceiver {
 
 	private ServerSocketChannel serversocket;
 
-	private final List<TCPReaderOneClient> threads = Collections
-			.synchronizedList(new ArrayList<TCPReaderOneClient>());
-
 	private final PipesMerger<IRecord> merger;
 
 	public TCPReader(final int listeningPort, final PipesMerger<IRecord> traceReconstructionMerger) {
@@ -55,10 +49,7 @@ public final class TCPReader implements IPeriodicTimeSignalReceiver {
 		try {
 			open();
 			while (active) {
-				final TCPReaderOneClient thread = new TCPReaderOneClient(serversocket.accept(),
-						merger);
-				thread.start();
-				threads.add(thread);
+				new TCPReaderOneClient(serversocket.accept(), merger).start();
 			}
 		} catch (final IOException ex) {
 			LOG.info("Error in read() " + ex.getMessage());
diff --git a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
index 13efffb30a62679e6b4b603b5e694e5e088f4598..47fa7fbd33a34dee02d0072edcdd730e000d1b9b 100644
--- a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
+++ b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
@@ -15,7 +15,6 @@ import explorviz.live_trace_processing.IdNotAvailableException;
 import explorviz.live_trace_processing.StringRegistry;
 import explorviz.live_trace_processing.filter.PipesMerger;
 import explorviz.live_trace_processing.record.IRecord;
-import explorviz.live_trace_processing.record.event.AbstractEventRecord;
 import explorviz.live_trace_processing.record.event.constructor.AfterConstructorEventRecord;
 import explorviz.live_trace_processing.record.event.constructor.AfterFailedConstructorEventRecord;
 import explorviz.live_trace_processing.record.event.constructor.BeforeConstructorEventRecord;
@@ -34,7 +33,6 @@ import explorviz.live_trace_processing.record.event.statics.BeforeStaticOperatio
 import explorviz.live_trace_processing.record.misc.StringRegistryRecord;
 import explorviz.live_trace_processing.record.misc.SystemMonitoringRecord;
 import explorviz.live_trace_processing.record.trace.HostApplicationMetaDataRecord;
-import explorviz.live_trace_processing.record.trace.Trace;
 
 class TCPReaderOneClient extends Thread {
 
@@ -47,10 +45,6 @@ class TCPReaderOneClient extends Thread {
 
 	private final SocketChannel socketChannel;
 
-	private final String remoteAddress = "";
-
-	private Trace currentlyOpenTrace;
-
 	private final Queue<IRecord> queue;
 	private final PipesMerger<IRecord> merger;
 
@@ -62,9 +56,9 @@ class TCPReaderOneClient extends Thread {
 
 	@Override
 	public void run() {
-		final ByteBuffer buffer = ByteBuffer.allocate(2 * 1024 * 1024);
+		final ByteBuffer buffer = ByteBuffer.allocate(256 * 1024);
+		String remoteAddress = "";
 		try {
-			String remoteAddress = "";
 			if (socketChannel.isConnected()) {
 				remoteAddress = ((InetSocketAddress) socketChannel.getRemoteAddress())
 						.getHostName();
@@ -100,328 +94,428 @@ class TCPReaderOneClient extends Thread {
 	// }
 
 	private final void messagesfromByteArray(final ByteBuffer buffer) {
-		boolean shouldProceed = true;
-		if (currentlyOpenTrace != null) {
-			shouldProceed = readInTraceRecordChunks(buffer);
-		}
-
-		if (shouldProceed) {
-			while (buffer.remaining() > 0) {
-				final byte clazzId = buffer.get();
-				switch (clazzId) {
-					case HostApplicationMetaDataRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= HostApplicationMetaDataRecord.BYTE_LENGTH) {
-							readInHostApplicationMetaData(buffer);
-							break;
-						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+		while (buffer.remaining() > 0) {
+			final byte clazzId = buffer.get();
+			switch (clazzId) {
+				case HostApplicationMetaDataRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= HostApplicationMetaDataRecord.BYTE_LENGTH) {
+						readInHostApplicationMetaData(buffer);
+						break;
 					}
-					case BeforeOperationEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInBeforeOperationEvent(buffer);
-							break;
-						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeOperationEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInBeforeOperationEvent(buffer);
+						break;
 					}
-					case AfterFailedOperationEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterFailedOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterFailedOperationEvent(buffer);
-							break;
-						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterFailedOperationEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterFailedOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterFailedOperationEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 
+				}
+				case AfterOperationEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterOperationEvent(buffer);
+						break;
 					}
-					case AfterOperationEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterOperationEvent(buffer);
-							break;
-						}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case StringRegistryRecord.CLAZZ_ID: {
+					int mapId = 0;
+					int stringLength = 0;
+					if (buffer.remaining() >= 8) {
+						mapId = buffer.getInt();
+						stringLength = buffer.getInt();
+					} else {
 						buffer.position(buffer.position() - 1);
 						buffer.compact();
 						return;
 					}
-					case StringRegistryRecord.CLAZZ_ID: {
-						int mapId = 0;
-						int stringLength = 0;
-						if (buffer.remaining() >= 8) {
-							mapId = buffer.getInt();
-							stringLength = buffer.getInt();
-						} else {
-							buffer.position(buffer.position() - 1);
-							buffer.compact();
-							return;
-						}
 
-						if (buffer.remaining() >= stringLength) {
-							final byte[] stringByteArray = new byte[stringLength];
+					if (buffer.remaining() >= stringLength) {
+						final byte[] stringByteArray = new byte[stringLength];
 
-							buffer.get(stringByteArray);
+						buffer.get(stringByteArray);
 
-							stringRegistry.putStringRecord(mapId, new String(stringByteArray));
+						stringRegistry.putStringRecord(mapId, new String(stringByteArray));
 
-							checkWaitingMessages();
-						} else {
-							buffer.position(buffer.position() - 9);
-							buffer.compact();
-							return;
-						}
-						break;
-					}
-					case SystemMonitoringRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= SystemMonitoringRecord.COMPRESSED_BYTE_LENGTH) {
-							readInSystemMonitoringRecord(buffer);
-							break;
-						}
-						buffer.position(buffer.position() - 1);
+						checkWaitingMessages();
+					} else {
+						buffer.position(buffer.position() - 9);
 						buffer.compact();
 						return;
 					}
-					case Trace.CLAZZ_ID: {
-						if (buffer.remaining() >= Trace.BYTE_LENGTH) {
-							final byte validByte = buffer.get();
-							boolean valid = true;
-							if (validByte == (byte) 0) {
-								valid = false;
-							}
-							final byte containsRemoteRecordByte = buffer.get();
-							boolean containsRemoteRecord = true;
-							if (containsRemoteRecordByte == (byte) 0) {
-								containsRemoteRecord = false;
-							}
-							final int eventsLength = buffer.getInt();
-
-							final List<AbstractEventRecord> events = new ArrayList<AbstractEventRecord>(
-									eventsLength);
-							currentlyOpenTrace = new Trace(events, valid, containsRemoteRecord,
-									eventsLength);
-
-							if (!readInTraceRecordChunks(buffer)) {
-								return;
-							}
-							break;
-						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+					break;
+				}
+				case SystemMonitoringRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= SystemMonitoringRecord.COMPRESSED_BYTE_LENGTH) {
+						readInSystemMonitoringRecord(buffer);
+						break;
 					}
-					case BeforeConstructorEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= BeforeConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInBeforeConstructorEvent(buffer);
-							break;
-						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeConstructorEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= BeforeConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInBeforeConstructorEvent(buffer);
+						break;
 					}
-					case AfterFailedConstructorEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterFailedConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterFailedConstructorEvent(buffer);
-							break;
-						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterFailedConstructorEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterFailedConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterFailedConstructorEvent(buffer);
+						break;
 					}
-					case AfterConstructorEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterConstructorEvent(buffer);
-							break;
-						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterConstructorEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterConstructorEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeReceivedRemoteCallRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= BeforeReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
+						readInBeforeReceivedRemoteCallEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeStaticOperationEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= BeforeStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInBeforeStaticOperationEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterFailedStaticOperationEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterFailedStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterFailedStaticOperationEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterStaticOperationEventRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterStaticOperationEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeSentRemoteCallRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= BeforeSentRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
+						readInBeforeSentRemoteCallEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterSentRemoteCallRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterSentRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterSentRemoteCallEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeUnknownReceivedRemoteCallRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= BeforeUnknownReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
+						readInBeforeUnknownReceivedRemoteCallEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterUnknownReceivedRemoteCallRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterUnknownReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterUnknownReceivedRemoteCallEvent(buffer);
+						break;
+					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterReceivedRemoteCallRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= AfterReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
+						readInAfterReceivedRemoteCallEvent(buffer);
+						break;
 					}
-					case BeforeReceivedRemoteCallRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= BeforeReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-							readInBeforeReceivedRemoteCallEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeOperationEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= BeforeOperationEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new BeforeOperationEventRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case BeforeStaticOperationEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= BeforeStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInBeforeStaticOperationEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterFailedOperationEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterFailedOperationEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterFailedOperationEventRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case AfterFailedStaticOperationEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterFailedStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterFailedStaticOperationEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterOperationEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterOperationEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterOperationEventRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case AfterStaticOperationEventRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterStaticOperationEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case SystemMonitoringRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= SystemMonitoringRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(SystemMonitoringRecord.createFromByteBuffer(buffer,
+									stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case BeforeSentRemoteCallRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= BeforeSentRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-							readInBeforeSentRemoteCallEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeConstructorEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= BeforeConstructorEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new BeforeConstructorEventRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case AfterSentRemoteCallRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterSentRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterSentRemoteCallEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterFailedConstructorEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterFailedConstructorEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterFailedConstructorEventRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case BeforeUnknownReceivedRemoteCallRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= BeforeUnknownReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-							readInBeforeUnknownReceivedRemoteCallEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterConstructorEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterConstructorEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterConstructorEventRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case AfterUnknownReceivedRemoteCallRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterUnknownReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterUnknownReceivedRemoteCallEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeReceivedRemoteCallRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= BeforeReceivedRemoteCallRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new BeforeReceivedRemoteCallRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case AfterReceivedRemoteCallRecord.CLAZZ_ID: {
-						if (buffer.remaining() >= AfterReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-							readInAfterReceivedRemoteCallEvent(buffer);
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case BeforeStaticOperationEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= BeforeStaticOperationEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new BeforeStaticOperationEventRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					case SystemMonitoringRecord.CLAZZ_ID_FROM_WORKER: {
-						if (buffer.remaining() >= SystemMonitoringRecord.BYTE_LENGTH) {
-							try {
-								putInQueue(SystemMonitoringRecord.createFromByteBuffer(buffer,
-										stringRegistry));
-							} catch (final IdNotAvailableException e) {
-								// should not happen
-								e.printStackTrace();
-							}
-							break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterFailedStaticOperationEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterFailedStaticOperationEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterFailedStaticOperationEventRecord(buffer,
+									stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					default: {
-						System.out.println("unknown class id " + clazzId + " at offset "
-								+ (buffer.position() - 1));
-						buffer.clear();
-						return;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterStaticOperationEventRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterStaticOperationEventRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterStaticOperationEventRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
+						}
+						break;
 					}
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 				}
-			}
-
-			buffer.clear();
-		}
-	}
-
-	private boolean readInTraceRecordChunks(final ByteBuffer buffer) {
-		if (buffer.remaining() >= 1) {
-			final byte clazzId = buffer.get();
-
-			if (clazzId == StringRegistryRecord.CLAZZ_ID) {
-				int mapId = 0;
-				int stringLength = 0;
-				if (buffer.remaining() >= 8) {
-					mapId = buffer.getInt();
-					stringLength = buffer.getInt();
-				} else {
+				case BeforeSentRemoteCallRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= BeforeSentRemoteCallRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new BeforeSentRemoteCallRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
+						}
+						break;
+					}
 					buffer.position(buffer.position() - 1);
 					buffer.compact();
-					return false;
+					return;
 				}
-
-				if (buffer.remaining() >= stringLength) {
-					final byte[] stringByteArray = new byte[stringLength];
-
-					buffer.get(stringByteArray);
-
-					stringRegistry.putStringRecord(mapId, new String(stringByteArray));
-
-					checkWaitingMessages();
-
-					boolean cleared = false;
-					if (buffer.remaining() == 0) {
-						buffer.clear();
-						cleared = true;
+				case AfterSentRemoteCallRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterSentRemoteCallRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterSentRemoteCallRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
+						}
+						break;
 					}
-					return !cleared;
-				} else {
-					buffer.position(buffer.position() - 9);
+					buffer.position(buffer.position() - 1);
 					buffer.compact();
+					return;
 				}
-			} else if (buffer.remaining() >= (4 + 4)) {
-				int recordAmountNowComming = buffer.getInt();
-				final int bytesComming = buffer.getInt();
-				if (buffer.remaining() >= bytesComming) {
-					while (recordAmountNowComming > 0) {
+				case BeforeUnknownReceivedRemoteCallRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= BeforeUnknownReceivedRemoteCallRecord.BYTE_LENGTH) {
 						try {
-							final AbstractEventRecord fromByteBuffer = AbstractEventRecord
-									.createFromByteBuffer(buffer, stringRegistry);
-							currentlyOpenTrace.getTraceEvents().add(fromByteBuffer);
+							putInQueue(new BeforeUnknownReceivedRemoteCallRecord(buffer,
+									stringRegistry));
 						} catch (final IdNotAvailableException e) {
 							// should not happen
 							e.printStackTrace();
 						}
-						recordAmountNowComming--;
+						break;
 					}
-
-					boolean cleared = false;
-					if (buffer.remaining() == 0) {
-						buffer.clear();
-						cleared = true;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterUnknownReceivedRemoteCallRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterUnknownReceivedRemoteCallRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterUnknownReceivedRemoteCallRecord(buffer,
+									stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
+						}
+						break;
 					}
-
-					if (currentlyOpenTrace.getTraceEvents().size() == currentlyOpenTrace
-							.getEventsLength()) {
-						final List<AbstractEventRecord> traceEvents = currentlyOpenTrace
-								.getTraceEvents();
-						for (final AbstractEventRecord event : traceEvents) {
-							putInQueue(event);
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+				}
+				case AfterReceivedRemoteCallRecord.CLAZZ_ID_FROM_WORKER: {
+					if (buffer.remaining() >= AfterReceivedRemoteCallRecord.BYTE_LENGTH) {
+						try {
+							putInQueue(new AfterReceivedRemoteCallRecord(buffer, stringRegistry));
+						} catch (final IdNotAvailableException e) {
+							// should not happen
+							e.printStackTrace();
 						}
-						currentlyOpenTrace = null;
-						return !cleared;
+						break;
 					}
-				} else {
-					buffer.position(buffer.position() - 4 - 4 - 1);
+					buffer.position(buffer.position() - 1);
 					buffer.compact();
+					return;
+				}
+				default: {
+					System.out.println("unknown class id " + clazzId + " at offset "
+							+ (buffer.position() - 1));
+					buffer.clear();
+					return;
 				}
 			}
-		} else {
-			buffer.compact();
 		}
-		return false;
+
+		buffer.clear();
 	}
 
 	private final void readInHostApplicationMetaData(final ByteBuffer buffer) {
@@ -446,7 +540,6 @@ class TCPReaderOneClient extends Thread {
 	}
 
 	private final void readInBeforeOperationEvent(final ByteBuffer buffer) {
-		final long timestamp = buffer.getLong();
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
 		final int objectId = buffer.getInt();
@@ -459,8 +552,8 @@ class TCPReaderOneClient extends Thread {
 			final String clazz = stringRegistry.getStringFromId(clazzId);
 			final String implementedInterface = stringRegistry.getStringFromId(interfaceId);
 
-			putInQueue(new BeforeOperationEventRecord(timestamp, traceId, orderIndex, objectId,
-					operation, clazz, implementedInterface, hostApplicationMetadata));
+			putInQueue(new BeforeOperationEventRecord(traceId, orderIndex, objectId, operation,
+					clazz, implementedInterface, hostApplicationMetadata));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer, BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH + 1);
 		}
@@ -501,7 +594,6 @@ class TCPReaderOneClient extends Thread {
 	}
 
 	private final void readInBeforeConstructorEvent(final ByteBuffer buffer) {
-		final long timestamp = buffer.getLong();
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
 		final int objectId = buffer.getInt();
@@ -514,8 +606,8 @@ class TCPReaderOneClient extends Thread {
 			final String clazz = stringRegistry.getStringFromId(clazzId);
 			final String implementedInterface = stringRegistry.getStringFromId(interfaceId);
 
-			putInQueue(new BeforeConstructorEventRecord(timestamp, traceId, orderIndex, objectId,
-					operation, clazz, implementedInterface, hostApplicationMetadata));
+			putInQueue(new BeforeConstructorEventRecord(traceId, orderIndex, objectId, operation,
+					clazz, implementedInterface, hostApplicationMetadata));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
 					BeforeConstructorEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
@@ -550,16 +642,14 @@ class TCPReaderOneClient extends Thread {
 		final long callerTraceId = buffer.getLong();
 		final int callerOrderIndex = buffer.getInt();
 
-		final long timestamp = buffer.getLong();
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
 
-		putInQueue(new BeforeReceivedRemoteCallRecord(timestamp, callerTraceId, callerOrderIndex,
-				traceId, orderIndex, hostApplicationMetadata));
+		putInQueue(new BeforeReceivedRemoteCallRecord(callerTraceId, callerOrderIndex, traceId,
+				orderIndex, hostApplicationMetadata));
 	}
 
 	private final void readInBeforeStaticOperationEvent(final ByteBuffer buffer) {
-		final long timestamp = buffer.getLong();
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
 		final int operationId = buffer.getInt();
@@ -571,8 +661,8 @@ class TCPReaderOneClient extends Thread {
 			final String clazz = stringRegistry.getStringFromId(clazzId);
 			final String implementedInterface = stringRegistry.getStringFromId(interfaceId);
 
-			putInQueue(new BeforeStaticOperationEventRecord(timestamp, traceId, orderIndex,
-					operation, clazz, implementedInterface, hostApplicationMetadata));
+			putInQueue(new BeforeStaticOperationEventRecord(traceId, orderIndex, operation, clazz,
+					implementedInterface, hostApplicationMetadata));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
 					BeforeStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
@@ -606,15 +696,13 @@ class TCPReaderOneClient extends Thread {
 	}
 
 	private final void readInBeforeSentRemoteCallEvent(final ByteBuffer buffer) {
-		final long timestamp = buffer.getLong();
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
 		final int technologyId = buffer.getInt();
 
 		try {
-			putInQueue(new BeforeSentRemoteCallRecord(timestamp,
-					stringRegistry.getStringFromId(technologyId), traceId, orderIndex,
-					hostApplicationMetadata));
+			putInQueue(new BeforeSentRemoteCallRecord(stringRegistry.getStringFromId(technologyId),
+					traceId, orderIndex, hostApplicationMetadata));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
 					BeforeSentRemoteCallRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
@@ -632,7 +720,6 @@ class TCPReaderOneClient extends Thread {
 	}
 
 	private final void readInBeforeUnknownReceivedRemoteCallEvent(final ByteBuffer buffer) {
-		final long timestamp = buffer.getLong();
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
 
@@ -640,7 +727,7 @@ class TCPReaderOneClient extends Thread {
 		final int destionationId = buffer.getInt();
 
 		try {
-			putInQueue(new BeforeUnknownReceivedRemoteCallRecord(timestamp,
+			putInQueue(new BeforeUnknownReceivedRemoteCallRecord(
 					stringRegistry.getStringFromId(senderId),
 					stringRegistry.getStringFromId(destionationId), traceId, orderIndex,
 					hostApplicationMetadata));
diff --git a/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java b/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java
index 33e9ae6cf7e98e9ce83e11653fe9abb57eb5594d..8af6f34a0ac38434dff6f30c50dcd58604abd8c2 100644
--- a/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java
+++ b/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java
@@ -12,7 +12,7 @@ public class TraceReconstructionBufferTest {
 	@Test
 	public void testInsertEvent() throws Exception {
 		final TraceReconstructionBuffer traceReconstructionBuffer = new TraceReconstructionBuffer();
-		traceReconstructionBuffer.insertEvent(new BeforeOperationEventRecord(1000, 1, 0, 0, "test",
+		traceReconstructionBuffer.insertEvent(new BeforeOperationEventRecord(1, 0, 0, "test",
 				"TestClazz", "", new HostApplicationMetaDataRecord("testSystem", "testIp",
 						"testHost", "testApp", "Java")));
 		assertTrue(true);
diff --git a/test/explorviz/live_trace_processing/filter/reduction/PatternSummarizationTest.java b/test/explorviz/live_trace_processing/filter/reduction/PatternSummarizationTest.java
deleted file mode 100644
index ff50167402eaa3194b1386b72b18bbe633d59367..0000000000000000000000000000000000000000
--- a/test/explorviz/live_trace_processing/filter/reduction/PatternSummarizationTest.java
+++ /dev/null
@@ -1,270 +0,0 @@
-package explorviz.live_trace_processing.filter.reduction;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import explorviz.live_trace_processing.record.event.AbstractEventRecord;
-import explorviz.live_trace_processing.record.event.normal.AfterOperationEventRecord;
-import explorviz.live_trace_processing.record.event.normal.BeforeOperationEventRecord;
-import explorviz.live_trace_processing.record.trace.HostApplicationMetaDataRecord;
-import explorviz.live_trace_processing.record.trace.RuntimeStatisticInformation;
-
-public class PatternSummarizationTest {
-
-	@Before
-	public void init() {
-		final List<AbstractEventRecord> traceEvents = new ArrayList<AbstractEventRecord>();
-
-		final BeforeOperationEventRecord beforeEvent = new BeforeOperationEventRecord(1L, 1L, 0, 0,
-				"test.package.Clazz.A()", "ClazzA", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent.setRuntimeStatisticInformation(new RuntimeStatisticInformation(31L));
-		traceEvents.add(beforeEvent);
-
-		final BeforeOperationEventRecord beforeEvent1 = new BeforeOperationEventRecord(2L, 1L, 1,
-				0, "test.package.Clazz.B()", "ClazzB", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent1.setRuntimeStatisticInformation(new RuntimeStatisticInformation(2L));
-		traceEvents.add(beforeEvent1);
-
-		final AfterOperationEventRecord afterEvent1 = new AfterOperationEventRecord(4L, 1L, 2,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent1);
-
-		final BeforeOperationEventRecord beforeEvent2 = new BeforeOperationEventRecord(5L, 1L, 3,
-				0, "test.package.Clazz.C()", "ClazzC", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent2.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent2);
-
-		final AfterOperationEventRecord afterEvent2 = new AfterOperationEventRecord(6L, 1L, 4,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent2);
-
-		final BeforeOperationEventRecord beforeEvent3 = new BeforeOperationEventRecord(7L, 1L, 5,
-				0, "test.package.Clazz.D()", "ClazzD", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent3.setRuntimeStatisticInformation(new RuntimeStatisticInformation(9L));
-		traceEvents.add(beforeEvent3);
-
-		final BeforeOperationEventRecord beforeEvent4 = new BeforeOperationEventRecord(8L, 1L, 6,
-				0, "test.package.Clazz.E()", "ClazzE", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent4.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent4);
-
-		final AfterOperationEventRecord afterEvent4 = new AfterOperationEventRecord(9L, 1L, 7,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent4);
-
-		final BeforeOperationEventRecord beforeEvent5 = new BeforeOperationEventRecord(10L, 1L, 8,
-				0, "test.package.Clazz.F()", "ClazzF", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent5.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent5);
-
-		final AfterOperationEventRecord afterEvent5 = new AfterOperationEventRecord(11L, 1L, 9,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent5);
-
-		final BeforeOperationEventRecord beforeEvent6 = new BeforeOperationEventRecord(12L, 1L, 10,
-				0, "test.package.Clazz.E()", "ClazzE", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent6.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent6);
-
-		final AfterOperationEventRecord afterEvent6 = new AfterOperationEventRecord(13L, 1L, 11,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent6);
-
-		final BeforeOperationEventRecord beforeEvent7 = new BeforeOperationEventRecord(14L, 1L, 12,
-				0, "test.package.Clazz.F()", "ClazzF", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent7.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent7);
-
-		final AfterOperationEventRecord afterEvent7 = new AfterOperationEventRecord(15L, 1L, 13,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent7);
-
-		final AfterOperationEventRecord afterEvent3 = new AfterOperationEventRecord(16L, 1L, 14,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent3);
-
-		final BeforeOperationEventRecord beforeEvent8 = new BeforeOperationEventRecord(17L, 1L, 15,
-				0, "test.package.Clazz.B()", "ClazzB", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent8.setRuntimeStatisticInformation(new RuntimeStatisticInformation(2L));
-		traceEvents.add(beforeEvent8);
-
-		final AfterOperationEventRecord afterEvent8 = new AfterOperationEventRecord(19L, 1L, 16,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent8);
-
-		final BeforeOperationEventRecord beforeEvent9 = new BeforeOperationEventRecord(20L, 1L, 17,
-				0, "test.package.Clazz.C()", "ClazzC", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent9.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent9);
-
-		final AfterOperationEventRecord afterEvent9 = new AfterOperationEventRecord(21L, 1L, 18,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent9);
-
-		final BeforeOperationEventRecord beforeEvent10 = new BeforeOperationEventRecord(22L, 1L,
-				19, 0, "test.package.Clazz.D()", "ClazzD", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent10.setRuntimeStatisticInformation(new RuntimeStatisticInformation(9L));
-		traceEvents.add(beforeEvent10);
-
-		final BeforeOperationEventRecord beforeEvent11 = new BeforeOperationEventRecord(23L, 1L,
-				20, 0, "test.package.Clazz.E()", "ClazzE", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent11.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent11);
-
-		final AfterOperationEventRecord afterEvent11 = new AfterOperationEventRecord(24L, 1L, 21,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent11);
-
-		final BeforeOperationEventRecord beforeEvent12 = new BeforeOperationEventRecord(25L, 1L,
-				22, 0, "test.package.Clazz.F()", "ClazzF", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent12.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent12);
-
-		final AfterOperationEventRecord afterEvent12 = new AfterOperationEventRecord(26L, 1L, 23,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent12);
-
-		final BeforeOperationEventRecord beforeEvent13 = new BeforeOperationEventRecord(27L, 1L,
-				24, 0, "test.package.Clazz.E()", "ClazzE", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent13.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent13);
-
-		final AfterOperationEventRecord afterEvent13 = new AfterOperationEventRecord(28L, 1L, 25,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent13);
-
-		final BeforeOperationEventRecord beforeEvent14 = new BeforeOperationEventRecord(29L, 1L,
-				26, 0, "test.package.Clazz.F()", "ClazzF", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent14.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1L));
-		traceEvents.add(beforeEvent14);
-
-		final AfterOperationEventRecord afterEvent14 = new AfterOperationEventRecord(30L, 1L, 27,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent14);
-
-		final AfterOperationEventRecord afterEvent10 = new AfterOperationEventRecord(31L, 1L, 28,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent10);
-
-		final AfterOperationEventRecord afterEvent = new AfterOperationEventRecord(32L, 1L, 29,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent);
-
-		// trace = new Trace(traceEvents, true);
-	}
-
-	@Test
-	public void testReduction() {
-		final List<AbstractEventRecord> traceEvents = new ArrayList<AbstractEventRecord>();
-
-		final BeforeOperationEventRecord beforeEvent = new BeforeOperationEventRecord(1L, 1L, 0, 0,
-				"test.package.Clazz.A()", "ClazzA", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent.setRuntimeStatisticInformation(new RuntimeStatisticInformation(31L));
-		traceEvents.add(beforeEvent);
-
-		final BeforeOperationEventRecord beforeEvent1 = new BeforeOperationEventRecord(2L, 1L, 1,
-				0, "test.package.Clazz.B()", "ClazzB", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent1.setRuntimeStatisticInformation(new RuntimeStatisticInformation(2, 4, 8));
-		traceEvents.add(beforeEvent1);
-
-		final AfterOperationEventRecord afterEvent1 = new AfterOperationEventRecord(4L, 1L, 2,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent1);
-
-		final BeforeOperationEventRecord beforeEvent2 = new BeforeOperationEventRecord(5L, 1L, 3,
-				0, "test.package.Clazz.C()", "ClazzC", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent2.setRuntimeStatisticInformation(new RuntimeStatisticInformation(2, 2, 2));
-		traceEvents.add(beforeEvent2);
-
-		final AfterOperationEventRecord afterEvent2 = new AfterOperationEventRecord(6L, 1L, 4,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent2);
-
-		final BeforeOperationEventRecord beforeEvent3 = new BeforeOperationEventRecord(7L, 1L, 5,
-				0, "test.package.Clazz.D()", "ClazzD", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent3.setRuntimeStatisticInformation(new RuntimeStatisticInformation(2, 18, 162));
-		traceEvents.add(beforeEvent3);
-
-		final BeforeOperationEventRecord beforeEvent4 = new BeforeOperationEventRecord(8L, 1L, 6,
-				0, "test.package.Clazz.E()", "ClazzE", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent4.setRuntimeStatisticInformation(new RuntimeStatisticInformation(4, 4, 4));
-		traceEvents.add(beforeEvent4);
-
-		final AfterOperationEventRecord afterEvent4 = new AfterOperationEventRecord(9L, 1L, 7,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent4);
-
-		final BeforeOperationEventRecord beforeEvent5 = new BeforeOperationEventRecord(10L, 1L, 8,
-				0, "test.package.Clazz.F()", "ClazzF", "", new HostApplicationMetaDataRecord(
-						"testSystem", "testIp", "host", "application", "Java"));
-		beforeEvent5.setRuntimeStatisticInformation(new RuntimeStatisticInformation(4, 4, 4));
-		traceEvents.add(beforeEvent5);
-
-		final AfterOperationEventRecord afterEvent5 = new AfterOperationEventRecord(11L, 1L, 9,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent5);
-
-		final AfterOperationEventRecord afterEvent3 = new AfterOperationEventRecord(16L, 1L, 14,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent3);
-
-		final AfterOperationEventRecord afterEvent = new AfterOperationEventRecord(32L, 1L, 29,
-				new HostApplicationMetaDataRecord("testSystem", "testIp", "host", "application",
-						"Java"));
-		traceEvents.add(afterEvent);
-
-		// final Trace compareTrace = new Trace(traceEvents, true);
-		// final PatternSummarizationFilter patternSummarizationFilter = new
-		// PatternSummarizationFilter(
-		// null, PatternSummarizationFilter.DEFAULT_DISTANCE,
-		// PatternSummarizationFilter.DEFAULT_NESTINGLEVEL);
-		// final Trace reducedTrace =
-		// patternSummarizationFilter.testReduction(trace);
-		// Assert.assertTrue(compareTrace.compareTo(reducedTrace) == 0);
-
-	}
-
-}