diff --git a/examples/main.c b/examples/main.c
index a86cdc60a7473e84e8fba8c32417e7e19ebaeb60..c0b191d58ff6ac2acfdf6f6d184739ff17799f0c 100644
--- a/examples/main.c
+++ b/examples/main.c
@@ -153,12 +153,6 @@ int main(int argc, char *argv[]) {
 
 #endif
 
-/* Let's pin the main thread */
-#if defined(HAVE_SETAFFINITY) && defined(HAVE_LIBNUMA) && defined(_GNU_SOURCE)
-  if (((ENGINE_POLICY)&engine_policy_setaffinity) == engine_policy_setaffinity)
-    engine_pin();
-#endif
-
   /* Welcome to SWIFT, you made the right choice */
   if (myrank == 0) greetings();
 
@@ -329,6 +323,12 @@ int main(int argc, char *argv[]) {
     return 1;
   }
 
+/* Let's pin the main thread, now we know if affinity will be used. */
+#if defined(HAVE_SETAFFINITY) && defined(HAVE_LIBNUMA) && defined(_GNU_SOURCE)
+  if (with_aff && ((ENGINE_POLICY)&engine_policy_setaffinity) == engine_policy_setaffinity)
+    engine_pin();
+#endif
+
   /* Genesis 1.1: And then, there was time ! */
   clocks_set_cpufreq(cpufreq);
 
diff --git a/src/engine.c b/src/engine.c
index 65d541bab1c428aa6e0c719a847554563aa0b489..901824000ca9a4311ab1d19ac0da52f226d14990 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -4468,8 +4468,9 @@ void engine_init(struct engine *e, struct space *s,
   /* Avoid (unexpected) interference between engine and runner threads. We can
    * do this once we've made at least one call to engine_entry_affinity and
    * maybe numa_node_of_cpu(sched_getcpu()), even if the engine isn't already
-   * pinned. Also unpin this when asked to not pin at all (!with_aff). */
-  engine_unpin();
+   * pinned. */
+  if (with_aff)
+    engine_unpin();
 #endif
 
   if (with_aff) {