diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
index 7ce0d52b169a05aa689f7b63c20d4ce6722e7f81..094dc86976846579c2c5d2cee8a0fe92c508a386 100644
--- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
+++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
@@ -10,6 +10,8 @@ import explorviz.live_trace_processing.record.event.AbstractAfterEventRecord;
 import explorviz.live_trace_processing.record.event.AbstractAfterFailedEventRecord;
 import explorviz.live_trace_processing.record.event.AbstractBeforeEventRecord;
 import explorviz.live_trace_processing.record.event.AbstractEventRecord;
+import explorviz.live_trace_processing.record.event.remote.BeforeReceivedRemoteCallRecord;
+import explorviz.live_trace_processing.record.event.remote.BeforeSentRemoteCallRecord;
 import explorviz.live_trace_processing.record.trace.RuntimeStatisticInformation;
 import explorviz.live_trace_processing.record.trace.Trace;
 
@@ -75,10 +77,16 @@ class TraceReconstructionBuffer {
 
 	public final Trace toTrace(final boolean valid) {
 		final Stack<AbstractBeforeEventRecord> stack = new Stack<AbstractBeforeEventRecord>();
+		boolean containsRemoteRecord = false;
+
 		for (final AbstractEventRecord event : events) {
 			if (event instanceof AbstractBeforeEventRecord) {
 				final AbstractBeforeEventRecord beforeEvent = (AbstractBeforeEventRecord) event;
 				stack.push(beforeEvent);
+				if ((event instanceof BeforeReceivedRemoteCallRecord)
+						|| (event instanceof BeforeSentRemoteCallRecord)) {
+					containsRemoteRecord = true;
+				}
 			} else if ((event instanceof AbstractAfterEventRecord)
 					|| (event instanceof AbstractAfterFailedEventRecord)) {
 				if (!stack.isEmpty()) {
@@ -91,6 +99,6 @@ class TraceReconstructionBuffer {
 				}
 			}
 		}
-		return new Trace(new ArrayList<AbstractEventRecord>(events), valid, 1);
+		return new Trace(new ArrayList<AbstractEventRecord>(events), valid, containsRemoteRecord, 1);
 	}
 }
diff --git a/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java b/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java
index fc24b69869d6a62b98683e07ddf40ba5e7beb2fe..c5bcd3e7ca3ce7e40731a3f00bb4756320b3f358 100644
--- a/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java
+++ b/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java
@@ -38,7 +38,13 @@ public class TracesSummarizationFilter extends AbstractFilter implements ITraceR
 			final Trace trace = (Trace) record;
 
 			if (trace.isValid()) {
-				insertIntoBuffer(trace);
+				if (!trace.containsRemoteRecord()) {
+					insertIntoBuffer(trace);
+				} else {
+					// trace with remote records cant be reduced
+					makeTraceElementsAccumulator(trace);
+					deliver(trace);
+				}
 			} else {
 				makeTraceElementsAccumulator(trace);
 				deliver(trace);
@@ -77,7 +83,7 @@ public class TracesSummarizationFilter extends AbstractFilter implements ITraceR
 					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/reader/TCPReaderOneClient.java b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
index f91d611bf333072532f3bcd7747aa89524fb2ed4..b7c9deebf4ca398daf7c98f19519f5f661780cbf 100644
--- a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
+++ b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
@@ -184,6 +184,11 @@ class TCPReaderOneClient extends Thread {
 						if (validByte == (byte) 0) {
 							valid = false;
 						}
+						final byte containsRemoteRecordByte = buffer.get();
+						boolean containsRemoteRecord = true;
+						if (containsRemoteRecordByte == (byte) 0) {
+							containsRemoteRecord = false;
+						}
 						final int calledTimes = buffer.getInt();
 						final int eventsLength = buffer.getInt();
 						final int byteLength = buffer.getInt();
@@ -200,7 +205,8 @@ class TCPReaderOneClient extends Thread {
 								}
 							}
 
-							putInRingBuffer(new Trace(events, valid, calledTimes));
+							putInRingBuffer(new Trace(events, valid, containsRemoteRecord,
+									calledTimes));
 							break;
 						}
 						buffer.position(buffer.position() - 10);