diff --git a/apps/EchoClient.cpp b/apps/EchoClient.cpp
index 612e4436babd4e88d0cdc6e601d5f4dfb70f63cf..606f031b3901e06b8921161cb9968b2692a944ba 100644
--- a/apps/EchoClient.cpp
+++ b/apps/EchoClient.cpp
@@ -129,7 +129,7 @@ class Client {
 	static auto startNew(Semaphore& readySem, Semaphore& startSem, CPS& cps) -> bool;
 
  private:
-	inline auto shouldTerminate() const -> bool {
+	[[nodiscard]] auto shouldTerminate() const -> bool {
 		return iteration >= iterations || terminate.load(std::memory_order_relaxed);
 	}
 
@@ -506,10 +506,12 @@ auto main(int argc, char* argv[]) -> int {
 			readySemaphore.acquire();
 		}
 
+		high_resolution_clock::time_point echoTerminationTime;
 		if (execution_seconds) {
 			iterations = SIZE_MAX;
-			terminator = std::thread([] {
+			terminator = std::thread([&] {
 				std::this_thread::sleep_for(seconds(execution_seconds));
+				echoTerminationTime = high_resolution_clock::now();
 				terminate.store(true);
 			});
 		}
@@ -531,6 +533,11 @@ auto main(int argc, char* argv[]) -> int {
 		}
 
 		auto connect_duration = duration_cast<nanoseconds>(echo_start - connect_start).count();
+		uint64_t echoDurationUntilTermination;
+		if (execution_seconds) {
+			echoDurationUntilTermination =
+					duration_cast<nanoseconds>(echoTerminationTime - echo_start).count();
+		}
 		auto echo_duration = duration_cast<nanoseconds>(echo_end - echo_start).count();
 		auto total_duration = duration_cast<nanoseconds>(echo_end - connect_start).count();
 
@@ -561,6 +568,9 @@ auto main(int argc, char* argv[]) -> int {
 		sst << "total_unexpected_echos = " << total_unexpected_echos << std::endl;
 		sst << "avg_ns = " << avg_ns.getAverage() << std::endl;
 		sst << "connect_duration = " << connect_duration << std::endl;
+		if (execution_seconds) {
+			sst << "execution_duration = " << echoDurationUntilTermination << std::endl;
+		}
 		sst << "echo_duration = " << echo_duration << std::endl;
 		sst << "total_duration = " << total_duration << std::endl;
 		sst << std::endl;