Index: uspace/lib/c/generic/adt/list.c
===================================================================
--- uspace/lib/c/generic/adt/list.c	(revision b76ce3fafabca2ee4bc41e417ad02ab3546c67f2)
+++ uspace/lib/c/generic/adt/list.c	(revision 58fa3e668549d763497f0c6b6a9059794bb2ff4a)
@@ -69,24 +69,26 @@
 }
 
-/** Concatenate two lists
+/** Moves items of one list into another after the specified item.
  *
- * Concatenate lists @a list1 and @a list2, producing a single
- * list @a list1 containing items from both (in @a list1, @a list2
- * order) and empty list @a list2.
+ * Inserts all items of @a list after item at @a pos in another list.
+ * Both lists may be empty.
  *
- * @param list1		First list and concatenated output
- * @param list2 	Second list and empty output.
- *
+ * @param list Source list to move after pos. Empty afterwards.
+ * @param pos Source items will be placed after this item.
  */
-void list_concat(list_t *list1, list_t *list2)
+void list_splice(list_t *list, link_t *pos)
 {
-	if (list_empty(list2))
+	if (list_empty(list)) 
 		return;
-
-	list2->head.next->prev = list1->head.prev;
-	list2->head.prev->next = &list1->head;
-	list1->head.prev->next = list2->head.next;
-	list1->head.prev = list2->head.prev;
-	list_initialize(list2);
+	
+	/* Attach list to destination. */
+	list->head.next->prev = pos;
+	list->head.prev->next = pos->next;
+	
+	/* Link destination list to the added list. */
+	pos->next->prev = list->head.prev;
+	pos->next = list->head.next;
+	
+	list_initialize(list);
 }
 
Index: uspace/lib/c/include/adt/list.h
===================================================================
--- uspace/lib/c/include/adt/list.h	(revision b76ce3fafabca2ee4bc41e417ad02ab3546c67f2)
+++ uspace/lib/c/include/adt/list.h	(revision 58fa3e668549d763497f0c6b6a9059794bb2ff4a)
@@ -54,5 +54,5 @@
 
 extern bool list_member(const link_t *, const list_t *);
-extern void list_concat(list_t *, list_t *);
+extern void list_splice(list_t *, link_t *);
 extern unsigned long list_count(const list_t *);
 
@@ -351,4 +351,19 @@
 }
 
+/** Concatenate two lists
+ *
+ * Concatenate lists @a list1 and @a list2, producing a single
+ * list @a list1 containing items from both (in @a list1, @a list2
+ * order) and empty list @a list2.
+ *
+ * @param list1		First list and concatenated output
+ * @param list2 	Second list and empty output.
+ *
+ */
+NO_TRACE static inline void list_concat(list_t *list1, list_t *list2)
+{
+	list_splice(list2, list1->head.prev);
+}
+
 /** Get n-th item in a list.
  *
@@ -399,5 +414,4 @@
 }
 
-
 #endif
 
