diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
index 19f61ea4e3258e1668b039d9aacee0a6d7f83016..7b145caaa8a69eddcaebd596683ccbe93a32e9fe 100644
--- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
+++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
@@ -2,6 +2,7 @@ package explorviz.live_trace_processing.filter.reconstruction;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Stack;
 
 import explorviz.live_trace_processing.Constants;
 import explorviz.live_trace_processing.reader.TimeProvider;
@@ -75,6 +76,18 @@ class TraceReconstructionBuffer {
 	}
 
 	public final Trace toTrace(final boolean valid) {
+		final Stack<AbstractEventRecord> stack = new Stack<AbstractEventRecord>();
+		for (final AbstractEventRecord event : events) {
+			if (event instanceof AbstractBeforeEventRecord) {
+				stack.push(event);
+			} else if ((event instanceof AbstractAfterEventRecord)
+					|| (event instanceof AbstractAfterFailedEventRecord)) {
+				final AbstractEventRecord beforeEvent = stack.pop();
+
+				final long time = event.getLoggingTimestamp() - beforeEvent.getLoggingTimestamp();
+				beforeEvent.getRuntime().set(time);
+			}
+		}
 		return new Trace(events, valid);
 	}
 }
diff --git a/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java b/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java
index 046c6e8605b642ee994015035b6fc6493faba8cd..a7cba068b83fcb8898ae80ca1abba0faf3e4a5eb 100644
--- a/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java
+++ b/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java
@@ -2,6 +2,7 @@ package explorviz.live_trace_processing.filter.reduction.summarization;
 
 import java.util.List;
 
+import explorviz.live_trace_processing.record.event.AbstractBeforeEventRecord;
 import explorviz.live_trace_processing.record.event.AbstractEventRecord;
 import explorviz.live_trace_processing.record.trace.Trace;
 
@@ -25,12 +26,14 @@ class TracePatternSummarizationBuffer {
 		if (accumulator == null) {
 			accumulator = trace;
 		} else {
-			final List<AbstractEventRecord> aggregatedRecords = accumulator
-					.getTraceEvents();
+			final List<AbstractEventRecord> aggregatedRecords = accumulator.getTraceEvents();
 			final List<AbstractEventRecord> records = trace.getTraceEvents();
 
 			for (int i = 0; i < aggregatedRecords.size(); i++) {
-				aggregatedRecords.get(i).getRuntime().merge(records.get(i).getRuntime());
+				final AbstractEventRecord event = aggregatedRecords.get(i);
+				if (event instanceof AbstractBeforeEventRecord) {
+					aggregatedRecords.get(i).getRuntime().merge(records.get(i).getRuntime());
+				}
 			}
 		}
 	}
diff --git a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
index ef6fd8c352ff722ea13d8ef87f21bd4760794008..961c686c98a9a6b8154ac172ac4da26497779b23 100644
--- a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
+++ b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
@@ -21,6 +21,9 @@ import explorviz.live_trace_processing.record.event.constructor.BeforeConstructo
 import explorviz.live_trace_processing.record.event.normal.AfterFailedOperationEventRecord;
 import explorviz.live_trace_processing.record.event.normal.AfterOperationEventRecord;
 import explorviz.live_trace_processing.record.event.normal.BeforeOperationEventRecord;
+import explorviz.live_trace_processing.record.event.statics.AfterFailedStaticOperationEventRecord;
+import explorviz.live_trace_processing.record.event.statics.AfterStaticOperationEventRecord;
+import explorviz.live_trace_processing.record.event.statics.BeforeStaticOperationEventRecord;
 import explorviz.live_trace_processing.record.misc.StringRegistryRecord;
 import explorviz.live_trace_processing.record.misc.SystemMonitoringRecord;
 import explorviz.live_trace_processing.record.misc.TimedPeriodRecord;
@@ -85,42 +88,39 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 				case HostApplicationMetaDataRecord.CLAZZ_ID: {
 					if (buffer.remaining() >= HostApplicationMetaDataRecord.BYTE_LENGTH) {
 						readInHostApplicationMetaData(buffer);
-					} else {
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 				}
 				case BeforeOperationEventRecord.CLAZZ_ID: {
 					if (buffer.remaining() >= BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
 						readInBeforeOperationEvent(buffer);
-					} else {
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 				}
 				case AfterFailedOperationEventRecord.CLAZZ_ID: {
 					if (buffer.remaining() >= AfterFailedOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
 						readInAfterFailedOperationEvent(buffer);
-					} else {
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
+
 				}
 				case AfterOperationEventRecord.CLAZZ_ID: {
 					if (buffer.remaining() >= AfterOperationEventRecord.COMPRESSED_BYTE_LENGTH) {
 						readInAfterOperationEvent(buffer);
-					} else {
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 				}
 				case StringRegistryRecord.CLAZZ_ID: {
 					int mapId = 0;
@@ -152,12 +152,11 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 				case SystemMonitoringRecord.CLAZZ_ID: {
 					if (buffer.remaining() >= SystemMonitoringRecord.BYTE_LENGTH) {
 						readInSystemMonitoringRecord(buffer);
-					} else {
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 				}
 				case Trace.CLAZZ_ID: {
 					if (buffer.remaining() >= 9) {
@@ -184,48 +183,69 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 							}
 
 							putInRingBuffer(new Trace(events, valid));
-						} else {
-							buffer.position(buffer.position() - 10);
-							buffer.compact();
-							return;
+							break;
 						}
-					} else {
-						buffer.position(buffer.position() - 1);
+						buffer.position(buffer.position() - 10);
 						buffer.compact();
 						return;
 					}
-
-					break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 				}
 				case BeforeConstructorEventRecord.CLAZZ_ID: {
 					if (buffer.remaining() >= BeforeConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
 						readInBeforeConstructorEvent(buffer);
-					} else {
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 				}
 				case AfterFailedConstructorEventRecord.CLAZZ_ID: {
 					if (buffer.remaining() >= AfterFailedConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
 						readInAfterFailedConstructorEvent(buffer);
-					} else {
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					break;
+					buffer.position(buffer.position() - 1);
+					buffer.compact();
+					return;
 				}
 				case AfterConstructorEventRecord.CLAZZ_ID: {
 					if (buffer.remaining() >= AfterConstructorEventRecord.COMPRESSED_BYTE_LENGTH) {
 						readInAfterConstructorEvent(buffer);
-					} else {
-						buffer.position(buffer.position() - 1);
-						buffer.compact();
-						return;
+						break;
 					}
-					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;
 				}
 				default: {
 					System.out.println("unknown class id " + clazzId + " at offset "
@@ -264,11 +284,9 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 			final String operation = stringRegistry.getStringFromId(operationId);
 
 			putInRingBuffer(new BeforeOperationEventRecord(timestamp, traceId, orderIndex,
-					objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation(
-							timestamp)));
+					objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation()));
 		} catch (final IdNotAvailableException e) {
-			putInWaitingMessages(buffer,
-					BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
+			putInWaitingMessages(buffer, BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH + 1);
 		}
 	}
 
@@ -286,7 +304,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 
 			putInRingBuffer(new AfterFailedOperationEventRecord(timestamp, traceId, orderIndex,
 					objectId, operation, cause, hostApplicationMetadata,
-					new RuntimeStatisticInformation(timestamp)));
+					new RuntimeStatisticInformation()));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
 					AfterFailedOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
@@ -304,7 +322,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 			final String operation = stringRegistry.getStringFromId(operationId);
 
 			putInRingBuffer(new AfterOperationEventRecord(timestamp, traceId, orderIndex, objectId,
-					operation, hostApplicationMetadata, new RuntimeStatisticInformation(timestamp)));
+					operation, hostApplicationMetadata, new RuntimeStatisticInformation()));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
 					AfterOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
@@ -332,8 +350,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 			final String operation = stringRegistry.getStringFromId(operationId);
 
 			putInRingBuffer(new BeforeConstructorEventRecord(timestamp, traceId, orderIndex,
-					objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation(
-							timestamp)));
+					objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation()));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
 					BeforeConstructorEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
@@ -354,7 +371,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 
 			putInRingBuffer(new AfterFailedConstructorEventRecord(timestamp, traceId, orderIndex,
 					objectId, operation, cause, hostApplicationMetadata,
-					new RuntimeStatisticInformation(timestamp)));
+					new RuntimeStatisticInformation()));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
 					AfterFailedConstructorEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
@@ -372,8 +389,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 			final String operation = stringRegistry.getStringFromId(operationId);
 
 			putInRingBuffer(new AfterConstructorEventRecord(timestamp, traceId, orderIndex,
-					objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation(
-							timestamp)));
+					objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation()));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
 					AfterConstructorEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
@@ -381,6 +397,61 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 
 	}
 
+	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();
+
+		try {
+			final String operation = stringRegistry.getStringFromId(operationId);
+
+			putInRingBuffer(new BeforeStaticOperationEventRecord(timestamp, traceId, orderIndex,
+					operation, hostApplicationMetadata, new RuntimeStatisticInformation()));
+		} catch (final IdNotAvailableException e) {
+			putInWaitingMessages(buffer,
+					BeforeStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
+		}
+	}
+
+	private final void readInAfterFailedStaticOperationEvent(final ByteBuffer buffer) {
+		final long timestamp = buffer.getLong();
+		final long traceId = buffer.getLong();
+		final int orderIndex = buffer.getInt();
+		final int operationId = buffer.getInt();
+		final int causeId = buffer.getInt();
+
+		try {
+			final String operation = stringRegistry.getStringFromId(operationId);
+			final String cause = stringRegistry.getStringFromId(causeId);
+
+			putInRingBuffer(new AfterFailedStaticOperationEventRecord(timestamp, traceId,
+					orderIndex, operation, cause, hostApplicationMetadata,
+					new RuntimeStatisticInformation()));
+		} catch (final IdNotAvailableException e) {
+			putInWaitingMessages(buffer,
+					AfterFailedStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
+		}
+	}
+
+	private final void readInAfterStaticOperationEvent(final ByteBuffer buffer) {
+		final long timestamp = buffer.getLong();
+		final long traceId = buffer.getLong();
+		final int orderIndex = buffer.getInt();
+		final int operationId = buffer.getInt();
+
+		try {
+			final String operation = stringRegistry.getStringFromId(operationId);
+
+			putInRingBuffer(new AfterStaticOperationEventRecord(timestamp, traceId, orderIndex,
+					operation, hostApplicationMetadata, new RuntimeStatisticInformation()));
+		} catch (final IdNotAvailableException e) {
+			putInWaitingMessages(buffer,
+					AfterStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
+		}
+
+	}
+
 	private final void putInWaitingMessages(final ByteBuffer buffer, final int length) {
 		final byte[] message = new byte[length];
 		buffer.position(buffer.position() - length);
@@ -411,6 +482,24 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 				case AfterOperationEventRecord.CLAZZ_ID:
 					readInAfterOperationEvent(buffer);
 					break;
+				case BeforeConstructorEventRecord.CLAZZ_ID:
+					readInBeforeConstructorEvent(buffer);
+					break;
+				case AfterFailedConstructorEventRecord.CLAZZ_ID:
+					readInAfterFailedConstructorEvent(buffer);
+					break;
+				case AfterConstructorEventRecord.CLAZZ_ID:
+					readInAfterConstructorEvent(buffer);
+					break;
+				case BeforeStaticOperationEventRecord.CLAZZ_ID:
+					readInBeforeStaticOperationEvent(buffer);
+					break;
+				case AfterFailedStaticOperationEventRecord.CLAZZ_ID:
+					readInAfterFailedStaticOperationEvent(buffer);
+					break;
+				case AfterStaticOperationEventRecord.CLAZZ_ID:
+					readInAfterStaticOperationEvent(buffer);
+					break;
 				default:
 					break;
 			}
diff --git a/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java b/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java
index 9a452571dbfcfe1dc4917e83cfc5e9fd45cc8a1f..9f5ec67ecf14f6c41daecf64bc2cc80127098ab7 100644
--- a/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java
+++ b/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java
@@ -15,7 +15,7 @@ public class TraceReconstructionBufferTest {
 		final TraceReconstructionBuffer traceReconstructionBuffer = new TraceReconstructionBuffer();
 		traceReconstructionBuffer.insertEvent(new BeforeOperationEventRecord(1000, 1, 0, 0, "test",
 				new HostApplicationMetaDataRecord("testHost", "testApp"),
-				new RuntimeStatisticInformation(1000)));
+				new RuntimeStatisticInformation()));
 		assertTrue(true); // TODO
 	}