Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision 40a606d2c7b826dafaa8f9aec47556b5b57893ac)
+++ libcfa/src/concurrency/io.cfa	(revision 623d1c82a303ef12ad4e404e9aff8f8f81e42dec)
@@ -175,5 +175,5 @@
 			/* paranoid */ verify( ! __preemption_enabled() );
 
-			ctx.proc->io.pending = false;
+			__atomic_store_n(&ctx.proc->io.pending, false, __ATOMIC_RELAXED);
 		}
 
@@ -304,6 +304,6 @@
 		sq.to_submit += have;
 
-		ctx->proc->io.pending = true;
-		ctx->proc->io.dirty   = true;
+		__atomic_store_n(&ctx->proc->io.pending, true, __ATOMIC_RELAXED);
+		__atomic_store_n(&ctx->proc->io.dirty  , true, __ATOMIC_RELAXED);
 	}
 
@@ -499,5 +499,5 @@
 		bool we = enqueue(ctx->ext_sq, (__outstanding_io&)ei);
 
-		ctx->proc->io.pending = true;
+		__atomic_store_n(&ctx->proc->io.pending, true, __ATOMIC_SEQ_CST);
 
 		if( we ) {
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision 40a606d2c7b826dafaa8f9aec47556b5b57893ac)
+++ libcfa/src/concurrency/kernel.cfa	(revision 623d1c82a303ef12ad4e404e9aff8f8f81e42dec)
@@ -251,5 +251,5 @@
 			if( __atomic_load_n(&this->do_terminate, __ATOMIC_SEQ_CST) ) break MAIN_LOOP;
 
-			if(this->io.pending && !this->io.dirty) {
+			if(__atomic_load_n(&this->io.pending, __ATOMIC_RELAXED) && !__atomic_load_n(&this->io.dirty, __ATOMIC_RELAXED)) {
 				__IO_STATS__(true, io.flush.dirty++; )
 				__cfa_io_flush( this, 0 );
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision 40a606d2c7b826dafaa8f9aec47556b5b57893ac)
+++ libcfa/src/concurrency/kernel.hfa	(revision 623d1c82a303ef12ad4e404e9aff8f8f81e42dec)
@@ -92,6 +92,6 @@
 	struct {
 		$io_context * ctx;
-		bool pending;
-		bool dirty;
+		volatile bool pending;
+		volatile bool dirty;
 	} io;
 
