Index: uspace/srv/bd/hr/fge.c
===================================================================
--- uspace/srv/bd/hr/fge.c	(revision 083ce3373c724b1b122c23ca81d25750922569c4)
+++ uspace/srv/bd/hr/fge.c	(revision 5ee5f670536520c30820ddd6c0085d559657991b)
@@ -106,7 +106,6 @@
 	size_t own_used;
 	errno_t final_errno;
-	atomic_size_t finished_okay;
-	atomic_size_t finished_fail;
-	atomic_size_t wus_started;
+	size_t finished_okay;
+	size_t finished_fail;
 	fibril_mutex_t lock;
 	fibril_condvar_t all_done;
@@ -235,5 +234,4 @@
 	result->finished_okay = 0;
 	result->finished_fail = 0;
-	result->wus_started = 0;
 
 	fibril_mutex_initialize(&result->lock);
@@ -281,5 +279,5 @@
 {
 	fibril_mutex_lock(&group->lock);
-	assert(group->submitted + 1 <= group->wu_cnt);
+	assert(group->submitted < group->wu_cnt);
 
 	fge_fibril_data_t executor;
@@ -301,8 +299,10 @@
 errno_t hr_fgroup_wait(hr_fgroup_t *group, size_t *rokay, size_t *rfailed)
 {
+	assert(group->submitted == group->wu_cnt);
+
 	fibril_mutex_lock(&group->lock);
 	while (true) {
 		size_t finished = group->finished_fail + group->finished_okay;
-		if (group->wus_started != 0 && group->wus_started == finished)
+		if (group->wu_cnt == finished)
 			break;
 
@@ -316,5 +316,5 @@
 
 	errno_t rc = EOK;
-	if (group->finished_okay != group->wus_started)
+	if (group->finished_okay != group->wu_cnt)
 		rc = EIO;
 
@@ -382,15 +382,15 @@
 		hr_fgroup_t *group = executor.group;
 
-		atomic_fetch_add_explicit(&group->wus_started, 1,
-		    memory_order_relaxed);
-
 		errno_t rc = executor.wu(executor.arg);
 
-		if (rc == EOK)
-			atomic_fetch_add_explicit(&group->finished_okay, 1,
-			    memory_order_relaxed);
-		else
-			atomic_fetch_add_explicit(&group->finished_fail, 1,
-			    memory_order_relaxed);
+		if (rc == EOK) {
+			fibril_mutex_lock(&group->lock);
+			group->finished_okay++;
+			fibril_mutex_unlock(&group->lock);
+		} else {
+			fibril_mutex_lock(&group->lock);
+			group->finished_fail++;
+			fibril_mutex_unlock(&group->lock);
+		}
 
 		fibril_mutex_lock(&pool->lock);
@@ -400,7 +400,8 @@
 		}
 
-		size_t group_total_done = group->finished_fail +
-		    group->finished_okay;
-		if (group->wus_started == group_total_done)
+		fibril_mutex_lock(&group->lock);
+		size_t finished = group->finished_fail + group->finished_okay;
+		fibril_mutex_unlock(&group->lock);
+		if (finished == group->wu_cnt)
 			fibril_condvar_signal(&group->all_done);
 
