Index: uspace/lib/libc/generic/async.c
===================================================================
--- uspace/lib/libc/generic/async.c	(revision 4f5edcf6224db0fa0ebc1445b1e594be576a452e)
+++ uspace/lib/libc/generic/async.c	(revision f53cc810d7463aaaf19bb505007b1bede5cb3a96)
@@ -235,18 +235,18 @@
 static void insert_timeout(awaiter_t *wd)
 {
-	wd->timedout = false;
-	wd->inlist = true;
+	wd->to_event.occurred = false;
+	wd->to_event.inlist = true;
 	
 	link_t *tmp = timeout_list.next;
 	while (tmp != &timeout_list) {
-		awaiter_t *cur = list_get_instance(tmp, awaiter_t, link);
-		
-		if (tv_gteq(&cur->expires, &wd->expires))
+		awaiter_t *cur;
+		
+		cur = list_get_instance(tmp, awaiter_t, to_event.link);
+		if (tv_gteq(&cur->to_event.expires, &wd->to_event.expires))
 			break;
-		
 		tmp = tmp->next;
 	}
 	
-	list_append(&wd->link, tmp);
+	list_append(&wd->to_event.link, tmp);
 }
 
@@ -295,7 +295,7 @@
 		
 		/* If in timeout list, remove it */
-		if (conn->wdata.inlist) {
-			conn->wdata.inlist = false;
-			list_remove(&conn->wdata.link);
+		if (conn->wdata.to_event.inlist) {
+			conn->wdata.to_event.inlist = false;
+			list_remove(&conn->wdata.to_event.link);
 		}
 		
@@ -385,8 +385,8 @@
 	
 	if (usecs) {
-		gettimeofday(&conn->wdata.expires, NULL);
-		tv_add(&conn->wdata.expires, usecs);
+		gettimeofday(&conn->wdata.to_event.expires, NULL);
+		tv_add(&conn->wdata.to_event.expires, usecs);
 	} else
-		conn->wdata.inlist = false;
+		conn->wdata.to_event.inlist = false;
 	
 	/* If nothing in queue, wait until something arrives */
@@ -410,5 +410,5 @@
 		 */
 		futex_down(&async_futex);
-		if ((usecs) && (conn->wdata.timedout)
+		if ((usecs) && (conn->wdata.to_event.occurred)
 		    && (list_empty(&conn->msg_queue))) {
 			/* If we timed out -> exit */
@@ -605,14 +605,15 @@
 	link_t *cur = timeout_list.next;
 	while (cur != &timeout_list) {
-		awaiter_t *waiter = list_get_instance(cur, awaiter_t, link);
-		
-		if (tv_gt(&waiter->expires, &tv))
+		awaiter_t *waiter;
+		
+		waiter = list_get_instance(cur, awaiter_t, to_event.link);
+		if (tv_gt(&waiter->to_event.expires, &tv))
 			break;
-		
+
 		cur = cur->next;
-		
-		list_remove(&waiter->link);
-		waiter->inlist = false;
-		waiter->timedout = true;
+
+		list_remove(&waiter->to_event.link);
+		waiter->to_event.inlist = false;
+		waiter->to_event.occurred = true;
 		
 		/*
@@ -651,15 +652,16 @@
 		if (!list_empty(&timeout_list)) {
 			awaiter_t *waiter = list_get_instance(timeout_list.next,
-			    awaiter_t, link);
+			    awaiter_t, to_event.link);
 			
 			struct timeval tv;
 			gettimeofday(&tv, NULL);
 			
-			if (tv_gteq(&tv, &waiter->expires)) {
+			if (tv_gteq(&tv, &waiter->to_event.expires)) {
 				futex_up(&async_futex);
 				handle_expired_timeouts();
 				continue;
 			} else
-				timeout = tv_sub(&waiter->expires, &tv);
+				timeout = tv_sub(&waiter->to_event.expires,
+				    &tv);
 		} else
 			timeout = SYNCH_NO_TIMEOUT;
@@ -762,6 +764,6 @@
 	
 	/* Remove message from timeout list */
-	if (msg->wdata.inlist)
-		list_remove(&msg->wdata.link);
+	if (msg->wdata.to_event.inlist)
+		list_remove(&msg->wdata.to_event.link);
 	
 	msg->done = true;
@@ -802,5 +804,5 @@
 	msg->dataptr = dataptr;
 	
-	msg->wdata.inlist = false;
+	msg->wdata.to_event.inlist = false;
 	/* We may sleep in the next method, but it will use its own mechanism */
 	msg->wdata.active = true;
@@ -842,5 +844,5 @@
 	msg->dataptr = dataptr;
 	
-	msg->wdata.inlist = false;
+	msg->wdata.to_event.inlist = false;
 	/* We may sleep in next method, but it will use its own mechanism */
 	msg->wdata.active = true;
@@ -871,5 +873,5 @@
 	msg->wdata.fid = fibril_get_id();
 	msg->wdata.active = false;
-	msg->wdata.inlist = false;
+	msg->wdata.to_event.inlist = false;
 	
 	/* Leave the async_futex locked when entering this function */
@@ -909,6 +911,6 @@
 	}
 	
-	gettimeofday(&msg->wdata.expires, NULL);
-	tv_add(&msg->wdata.expires, timeout);
+	gettimeofday(&msg->wdata.to_event.expires, NULL);
+	tv_add(&msg->wdata.to_event.expires, timeout);
 	
 	msg->wdata.fid = fibril_get_id();
@@ -950,6 +952,6 @@
 	msg->wdata.active = false;
 	
-	gettimeofday(&msg->wdata.expires, NULL);
-	tv_add(&msg->wdata.expires, timeout);
+	gettimeofday(&msg->wdata.to_event.expires, NULL);
+	tv_add(&msg->wdata.to_event.expires, timeout);
 	
 	futex_down(&async_futex);
Index: uspace/lib/libc/include/async_priv.h
===================================================================
--- uspace/lib/libc/include/async_priv.h	(revision 4f5edcf6224db0fa0ebc1445b1e594be576a452e)
+++ uspace/lib/libc/include/async_priv.h	(revision f53cc810d7463aaaf19bb505007b1bede5cb3a96)
@@ -41,9 +41,6 @@
 #include <bool.h>
 
-/** Structures of this type represent a waiting fibril. */
+/** Structures of this type are used to track the timeout events. */
 typedef struct {
-	/** Expiration time. */
-	struct timeval expires;
-	
 	/** If true, this struct is in the timeout list. */
 	bool inlist;
@@ -52,4 +49,13 @@
 	link_t link;
 	
+	/** If true, we have timed out. */
+	bool occurred;
+
+	/** Expiration time. */
+	struct timeval expires;
+} to_event_t;
+
+/** Structures of this type represent a waiting fibril. */
+typedef struct {
 	/** Identification of and link to the waiting fibril. */
 	fid_t fid;
@@ -57,7 +63,7 @@
 	/** If true, this fibril is currently active. */
 	bool active;
-	
-	/** If true, we have timed out. */
-	bool timedout;
+
+	/** Timeout wait data. */
+	to_event_t to_event;
 } awaiter_t;
 
