diff --git a/emper/io/IoContext.cpp b/emper/io/IoContext.cpp
index 8d8aaa31d303fdbb8f872ec3485f69911957195b..d1fec427ab31318cc87833f221ac57957fd929f0 100644
--- a/emper/io/IoContext.cpp
+++ b/emper/io/IoContext.cpp
@@ -168,11 +168,10 @@ auto IoContext::reapCompletions() -> std::vector<Fiber *> {
 
 	uint32_t maxRaceFreeCompleterAttempts = 1;
 
-	using Completion = std::pair<uint32_t, TaggedPtr>;
+	using Completion = std::pair<uint32_t, void *>;
 	// vector to store seen cqes to make the critical section
 	// where cq_lock is held as small as possible
-	std::vector<Completion> reapedCompletions;
-	reapedCompletions.reserve(CQE_BATCH_COUNT);
+	std::array<Completion, CQE_BATCH_COUNT> reapedCompletions;
 
 	// Vector returned containing all reaped completions in form of fibers.
 	std::vector<Fiber *> continuationFibers;
@@ -208,14 +207,10 @@ reap_cqes:
 	for (unsigned i = 0; i < count; ++i) {
 		struct io_uring_cqe *cqe = cqes[i];
 		void *cqe_data = io_uring_cqe_get_data(cqe);
-		TaggedPtr tptr(cqe_data);
-
-		// Got a CQE for a forgotten Future
-		if (!tptr) {
-			continue;
-		}
 
-		reapedCompletions.emplace_back(cqe->res, tptr);
+		auto &reapedCompletion = reapedCompletions[i];
+		reapedCompletion.first = cqe->res;
+		reapedCompletion.second = cqe_data;
 	}
 
 	io_uring_cq_advance(&ring, count);
@@ -251,11 +246,18 @@ reap_cqes:
 
 	stats.record_reaps<callerEnvironment>(count);
 
-	continuationFibers.reserve(reapedCompletions.size());
+	continuationFibers.reserve(count);
 
-	for (auto &completion : reapedCompletions) {
+	for (unsigned i = 0; i < count; ++i) {
+		auto &completion = reapedCompletions[i];
 		auto res = completion.first;
-		auto tptr = completion.second;
+		auto *cqe_data = completion.second;
+
+		TaggedPtr tptr(cqe_data);
+		// Got a CQE for a forgotten Future.
+		if (!tptr) {
+			continue;
+		}
 
 		auto tag = static_cast<PointerTags>(tptr.getTag());
 		switch (tag) {
@@ -305,7 +307,6 @@ reap_cqes:
 		if (reReap) {
 			// schedule all already collected continuation fibers
 			runtime.schedule(continuationFibers.begin(), continuationFibers.end());
-			reapedCompletions.clear();
 			continuationFibers.clear();
 
 			goto reap_cqes;