diff --git a/emper/strategies/laws/LawsScheduler.cpp b/emper/strategies/laws/LawsScheduler.cpp
index aa39a51480da9b7498416e8fbb054e0a48b4b9d7..138d9ef47a7f6c3016e44a02781bcbab66def4dc 100644
--- a/emper/strategies/laws/LawsScheduler.cpp
+++ b/emper/strategies/laws/LawsScheduler.cpp
@@ -22,6 +22,7 @@ LawsScheduler::LawsScheduler(Runtime& runtime) : AbstractWorkStealingScheduler(r
 	addNewWorkerHook(newWorkerHook);
 }
 
+template <CallerEnvironment callerEnvironment>
 void LawsScheduler::tryScheduleToPriorityQueue(Fiber& fiber) {
 	workeraffinity_t* const affinity_buffer = getAffinityBuffer(fiber);
 	if (!affinity_buffer) {
@@ -29,9 +30,12 @@ void LawsScheduler::tryScheduleToPriorityQueue(Fiber& fiber) {
 	}
 
 	workeraffinity_t affinity = *affinity_buffer;
-	workerid_t workerId = Runtime::getWorkerId();
-	if (affinity == workerId) {
-		return;
+
+	if constexpr (callerEnvironment == CallerEnvironment::EMPER) {
+		workerid_t workerId = Runtime::getWorkerId();
+		if (affinity == workerId) {
+			return;
+		}
 	}
 
 	if (affinity == Fiber::NOT_AFFINE) {
@@ -46,12 +50,12 @@ void LawsScheduler::tryScheduleToPriorityQueue(Fiber& fiber) {
 }
 
 void LawsScheduler::scheduleInternal(Fiber& fiber) {
-	tryScheduleToPriorityQueue(fiber);
+	tryScheduleToPriorityQueue<CallerEnvironment::EMPER>(fiber);
 	scheduleViaWorkStealing(fiber);
 }
 
 void LawsScheduler::scheduleFromAnywhereInternal(Fiber& fiber) {
-	tryScheduleToPriorityQueue(fiber);
+	tryScheduleToPriorityQueue<CallerEnvironment::ANYWHERE>(fiber);
 	enqueueInAnywhereQueue(fiber);
 	onNewWork<CallerEnvironment::ANYWHERE>();
 }
@@ -59,7 +63,7 @@ void LawsScheduler::scheduleFromAnywhereInternal(Fiber& fiber) {
 void LawsScheduler::scheduleFromAnywhereInternal(Fiber** fibers, unsigned count) {
 	for (unsigned i = 0; i < count; ++i) {
 		Fiber& fiber = *fibers[i];
-		tryScheduleToPriorityQueue(fiber);
+		tryScheduleToPriorityQueue<CallerEnvironment::ANYWHERE>(fiber);
 	}
 	insertInAnywhereQueue(fibers, count);
 	onNewWork<CallerEnvironment::ANYWHERE>();
diff --git a/emper/strategies/laws/LawsScheduler.hpp b/emper/strategies/laws/LawsScheduler.hpp
index 43f7f12b2cf71ac7cc79ef6b319dc208e5a154cc..8f9c168288c1029435ccd936e7b4cc392f0b40a7 100644
--- a/emper/strategies/laws/LawsScheduler.hpp
+++ b/emper/strategies/laws/LawsScheduler.hpp
@@ -2,6 +2,7 @@
 // Copyright © 2020-2021 Florian Schmaus
 #pragma once
 
+#include "CallerEnvironment.hpp"
 #include "Fiber.hpp"
 #include "lib/adt/MpscQueue.hpp"
 #include "strategies/AbstractWorkStealingScheduler.hpp"
@@ -17,6 +18,7 @@ class LawsScheduler : public AbstractWorkStealingScheduler {
 
 	static thread_local LawsMpscQueue priorityQueue;
 
+	template <CallerEnvironment callerEnvironment>
 	void tryScheduleToPriorityQueue(Fiber& fiber);
 
  protected: