diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
index b923155178f1ea5945e44459af23a1ea26a2a895..9ec0ec2d847e4107a92a02a57200ce17001f5c29 100644
--- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
+++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
@@ -8,7 +8,9 @@ import explorviz.live_trace_processing.Constants;
 import explorviz.live_trace_processing.reader.TimeProvider;
 import explorviz.live_trace_processing.record.event.AbstractAfterEventRecord;
 import explorviz.live_trace_processing.record.event.AbstractAfterFailedEventRecord;
+import explorviz.live_trace_processing.record.event.AbstractAfterRemoteEventRecord;
 import explorviz.live_trace_processing.record.event.AbstractBeforeEventRecord;
+import explorviz.live_trace_processing.record.event.AbstractBeforeRemoteEventRecord;
 import explorviz.live_trace_processing.record.event.AbstractEventRecord;
 import explorviz.live_trace_processing.record.trace.RuntimeStatisticInformation;
 import explorviz.live_trace_processing.record.trace.Trace;
@@ -28,19 +30,15 @@ class TraceReconstructionBuffer {
 		updatedInThisPeriod = true;
 		setMaxOrderIndex(event);
 
-		if (event instanceof AbstractBeforeEventRecord) {
+		if ((event instanceof AbstractBeforeEventRecord)
+				|| (event instanceof AbstractBeforeRemoteEventRecord)) {
 			openEvents++;
 			final AbstractBeforeEventRecord beforeEvent = (AbstractBeforeEventRecord) event;
-			beforeEvent.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1, -1, -1)); // TODO
-
-			// if
-			// invalid,
-			// trace
-			// would
-			// be
-			// null...
+			beforeEvent.setRuntimeStatisticInformation(new RuntimeStatisticInformation(1, -1, -1));
+			// TODO if invalid, trace would be null...
 		} else if ((event instanceof AbstractAfterFailedEventRecord)
-				|| (event instanceof AbstractAfterEventRecord)) {
+				|| (event instanceof AbstractAfterEventRecord)
+				|| (event instanceof AbstractAfterRemoteEventRecord)) {
 			openEvents--;
 		}
 
diff --git a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
index e671bcf001d2102569c7cf2bb2b445870b0fb0d0..f91d611bf333072532f3bcd7747aa89524fb2ed4 100644
--- a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
+++ b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
@@ -28,9 +28,12 @@ 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.remote.ReceivedRemoteCallRecord;
-import explorviz.live_trace_processing.record.event.remote.SentRemoteCallRecord;
-import explorviz.live_trace_processing.record.event.remote.UnknownReceivedRemoteCallRecord;
+import explorviz.live_trace_processing.record.event.remote.AfterReceivedRemoteCallRecord;
+import explorviz.live_trace_processing.record.event.remote.AfterSentRemoteCallRecord;
+import explorviz.live_trace_processing.record.event.remote.AfterUnknownReceivedRemoteCallRecord;
+import explorviz.live_trace_processing.record.event.remote.BeforeReceivedRemoteCallRecord;
+import explorviz.live_trace_processing.record.event.remote.BeforeSentRemoteCallRecord;
+import explorviz.live_trace_processing.record.event.remote.BeforeUnknownReceivedRemoteCallRecord;
 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;
@@ -235,9 +238,9 @@ class TCPReaderOneClient extends Thread {
 					buffer.compact();
 					return;
 				}
-				case ReceivedRemoteCallRecord.CLAZZ_ID: {
-					if (buffer.remaining() >= ReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-						readInReceivedRemoteCallEvent(buffer);
+				case BeforeReceivedRemoteCallRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= BeforeReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
+						readInBeforeReceivedRemoteCallEvent(buffer);
 						break;
 					}
 					buffer.position(buffer.position() - 1);
@@ -271,18 +274,45 @@ class TCPReaderOneClient extends Thread {
 					buffer.compact();
 					return;
 				}
-				case SentRemoteCallRecord.CLAZZ_ID: {
-					if (buffer.remaining() >= SentRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-						readInSentRemoteCallEvent(buffer);
+				case BeforeSentRemoteCallRecord.CLAZZ_ID: {
+					if (buffer.remaining() >= BeforeSentRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
+						readInBeforeSentRemoteCallEvent(buffer);
 						break;
 					}
 					buffer.position(buffer.position() - 1);
 					buffer.compact();
 					return;
 				}
-				case UnknownReceivedRemoteCallRecord.CLAZZ_ID: {
-					if (buffer.remaining() >= UnknownReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH) {
-						readInUnknownReceivedRemoteCallEvent(buffer);
+				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;
 					}
 					buffer.position(buffer.position() - 1);
@@ -421,7 +451,7 @@ class TCPReaderOneClient extends Thread {
 				hostApplicationMetadata));
 	}
 
-	private final void readInReceivedRemoteCallEvent(final ByteBuffer buffer) {
+	private final void readInBeforeReceivedRemoteCallEvent(final ByteBuffer buffer) {
 		final long callerTraceId = buffer.getLong();
 		final int callerOrderIndex = buffer.getInt();
 
@@ -429,8 +459,8 @@ class TCPReaderOneClient extends Thread {
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
 
-		putInRingBuffer(new ReceivedRemoteCallRecord(timestamp, callerTraceId, callerOrderIndex,
-				traceId, orderIndex, hostApplicationMetadata));
+		putInRingBuffer(new BeforeReceivedRemoteCallRecord(timestamp, callerTraceId,
+				callerOrderIndex, traceId, orderIndex, hostApplicationMetadata));
 	}
 
 	private final void readInBeforeStaticOperationEvent(final ByteBuffer buffer) {
@@ -480,22 +510,33 @@ class TCPReaderOneClient extends Thread {
 				hostApplicationMetadata));
 	}
 
-	private final void readInSentRemoteCallEvent(final ByteBuffer buffer) {
+	private final void readInBeforeSentRemoteCallEvent(final ByteBuffer buffer) {
 		final long timestamp = buffer.getLong();
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
-		final int destinationId = buffer.getInt();
+		final int technologyId = buffer.getInt();
 
 		try {
-			putInRingBuffer(new SentRemoteCallRecord(timestamp,
-					stringRegistry.getStringFromId(destinationId), traceId, orderIndex,
+			putInRingBuffer(new BeforeSentRemoteCallRecord(timestamp,
+					stringRegistry.getStringFromId(technologyId), traceId, orderIndex,
 					hostApplicationMetadata));
 		} catch (final IdNotAvailableException e) {
-			putInWaitingMessages(buffer, SentRemoteCallRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
+			putInWaitingMessages(buffer,
+					BeforeSentRemoteCallRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
 		}
 	}
 
-	private final void readInUnknownReceivedRemoteCallEvent(final ByteBuffer buffer) {
+	private final void readInAfterSentRemoteCallEvent(final ByteBuffer buffer) {
+		final long timestamp = buffer.getLong();
+		final long traceId = buffer.getLong();
+		final int orderIndex = buffer.getInt();
+
+		putInRingBuffer(new AfterSentRemoteCallRecord(timestamp, traceId, orderIndex,
+				hostApplicationMetadata));
+
+	}
+
+	private final void readInBeforeUnknownReceivedRemoteCallEvent(final ByteBuffer buffer) {
 		final long timestamp = buffer.getLong();
 		final long traceId = buffer.getLong();
 		final int orderIndex = buffer.getInt();
@@ -504,16 +545,35 @@ class TCPReaderOneClient extends Thread {
 		final int destionationId = buffer.getInt();
 
 		try {
-			putInRingBuffer(new UnknownReceivedRemoteCallRecord(timestamp,
+			putInRingBuffer(new BeforeUnknownReceivedRemoteCallRecord(timestamp,
 					stringRegistry.getStringFromId(senderId),
 					stringRegistry.getStringFromId(destionationId), traceId, orderIndex,
 					hostApplicationMetadata));
 		} catch (final IdNotAvailableException e) {
 			putInWaitingMessages(buffer,
-					UnknownReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
+					BeforeUnknownReceivedRemoteCallRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID);
 		}
 	}
 
+	private final void readInAfterUnknownReceivedRemoteCallEvent(final ByteBuffer buffer) {
+		final long timestamp = buffer.getLong();
+		final long traceId = buffer.getLong();
+		final int orderIndex = buffer.getInt();
+
+		putInRingBuffer(new AfterUnknownReceivedRemoteCallRecord(timestamp, traceId, orderIndex,
+				hostApplicationMetadata));
+
+	}
+
+	private final void readInAfterReceivedRemoteCallEvent(final ByteBuffer buffer) {
+		final long timestamp = buffer.getLong();
+		final long traceId = buffer.getLong();
+		final int orderIndex = buffer.getInt();
+
+		putInRingBuffer(new AfterReceivedRemoteCallRecord(timestamp, traceId, orderIndex,
+				hostApplicationMetadata));
+	}
+
 	private final void putInWaitingMessages(final ByteBuffer buffer, final int length) {
 		final byte[] message = new byte[length];
 		buffer.position(buffer.position() - length);
@@ -553,8 +613,8 @@ class TCPReaderOneClient extends Thread {
 				case AfterConstructorEventRecord.CLAZZ_ID:
 					readInAfterConstructorEvent(buffer);
 					break;
-				case ReceivedRemoteCallRecord.CLAZZ_ID:
-					readInReceivedRemoteCallEvent(buffer);
+				case BeforeReceivedRemoteCallRecord.CLAZZ_ID:
+					readInBeforeReceivedRemoteCallEvent(buffer);
 					break;
 				case BeforeStaticOperationEventRecord.CLAZZ_ID:
 					readInBeforeStaticOperationEvent(buffer);
@@ -565,11 +625,20 @@ class TCPReaderOneClient extends Thread {
 				case AfterStaticOperationEventRecord.CLAZZ_ID:
 					readInAfterStaticOperationEvent(buffer);
 					break;
-				case SentRemoteCallRecord.CLAZZ_ID:
-					readInSentRemoteCallEvent(buffer);
+				case BeforeSentRemoteCallRecord.CLAZZ_ID:
+					readInBeforeSentRemoteCallEvent(buffer);
+					break;
+				case AfterSentRemoteCallRecord.CLAZZ_ID:
+					readInAfterSentRemoteCallEvent(buffer);
+					break;
+				case BeforeUnknownReceivedRemoteCallRecord.CLAZZ_ID:
+					readInBeforeUnknownReceivedRemoteCallEvent(buffer);
+					break;
+				case AfterUnknownReceivedRemoteCallRecord.CLAZZ_ID:
+					readInAfterUnknownReceivedRemoteCallEvent(buffer);
 					break;
-				case UnknownReceivedRemoteCallRecord.CLAZZ_ID:
-					readInUnknownReceivedRemoteCallEvent(buffer);
+				case AfterReceivedRemoteCallRecord.CLAZZ_ID:
+					readInAfterReceivedRemoteCallEvent(buffer);
 					break;
 				default:
 					break;