diff --git a/emper/io/Future.hpp b/emper/io/Future.hpp
index 463cad7bc90fa2dc82fa2566f9ee5420a5d7a3c9..ea6f49e56a917607257dd8fb57259b463253555f 100644
--- a/emper/io/Future.hpp
+++ b/emper/io/Future.hpp
@@ -18,8 +18,9 @@
 #include "BinaryPrivateSemaphore.hpp"	 // for BPS
 #include "CallerEnvironment.hpp"			 // for CallerEnvironment, ANYWHERE
 #include "Common.hpp"
-#include "Debug.hpp"				 // for LOGD, LogSubsystem, LogSubsyst...
-#include "Emper.hpp"				 // for DEBUG
+#include "Debug.hpp"	// for LOGD, LogSubsystem, LogSubsyst...
+#include "Emper.hpp"	// for DEBUG
+#include "Runtime.hpp"
 #include "io/Operation.hpp"	 // for Operation, operator<<, Operati...
 
 struct io_uring_sqe;
@@ -387,7 +388,15 @@ class PartialCompletableFuture : public Future {
 	}
 
 	auto completeAndGetContinuation(int32_t res) -> Fiber* override {
-		CompletionType completion = tryComplete<CallerEnvironment::ANYWHERE>(res);
+		CompletionType completion;
+
+		// If there is no completer we must be in a emper worker
+		// Otherwise decide at runtime where the possible partialCompletion should be resubmitted
+		if (emper::IO_COMPLETER_BEHAVIOR == emper::IoCompleterBehavior::none || Runtime::inRuntime()) {
+			completion = tryComplete<CallerEnvironment::EMPER>(res);
+		} else {
+			completion = tryComplete<CallerEnvironment::ANYWHERE>(res);
+		}
 
 		switch (completion) {
 			case CompletionType::Resubmission: