Index: kernel/generic/include/adt/list.h
===================================================================
--- kernel/generic/include/adt/list.h	(revision 2e16033115d5c1a9a9095d87b471d2db4bf1dc88)
+++ kernel/generic/include/adt/list.h	(revision c14762e308251eb9ee22f1638076409ea9196fc9)
@@ -51,4 +51,10 @@
 } list_t;
 
+
+extern int list_member(const link_t *, const list_t *);
+extern void list_splice(list_t *, link_t *);
+extern unsigned int list_count(const list_t *);
+
+
 /** Declare and initialize statically allocated list.
  *
@@ -301,53 +307,17 @@
 }
 
-/** Moves items of one list into another after the specified item.
- * 
- * Inserts all items of @a list after item at @a pos in another list. 
- * Both lists may be empty. 
- * 
- * @param list Source list to move after pos.
- * @param pos Source items will be placed after this item.
- */
-NO_TRACE static inline void list_splice(list_t *list, link_t *pos)
-{
-	link_t *pos_next = pos->next;
-	
-	if (!list_empty(list)) {
-		link_t *first = list->head.next;
-		link_t *last = list->head.prev;
-
-		pos->next = first;
-		first->prev = pos;
-
-		last->next = pos_next;
-		pos_next->prev = last;
-		
-		list_initialize(list);
-	}
-}
-
-/** Moves all items of list @a src to the end of list @a dest.
- * 
- * Both lists may be empty.
- * 
- * @param src Source list to move. Becomes empty.
- * @param dest Items of src will be inserted at the end of this list, ie
- *             after all items of src.
- */
-NO_TRACE static inline void list_append_list(list_t *src, list_t *dest)
-{
-	list_splice(src, dest->head.prev);
-}
-
-/** Moves all items of list @a src to the beginning of list @a dest.
- * 
- * Both lists may be empty.
- * 
- * @param src Source list to move. Becomes empty.
- * @param dest Items of src will be inserted at the beginning of this list.
- */
-NO_TRACE static inline void list_prepend_list(list_t *src, list_t *dest)
-{
-	list_splice(src, &dest->head);
+/** 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);
 }
 
@@ -375,8 +345,4 @@
 }
 
-extern int list_member(const link_t *, const list_t *);
-extern void list_concat(list_t *, list_t *);
-extern unsigned int list_count(const list_t *);
-
 #endif
 
Index: kernel/generic/src/adt/list.c
===================================================================
--- kernel/generic/src/adt/list.c	(revision 2e16033115d5c1a9a9095d87b471d2db4bf1dc88)
+++ kernel/generic/src/adt/list.c	(revision c14762e308251eb9ee22f1638076409ea9196fc9)
@@ -68,24 +68,26 @@
 }
 
-/** 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.
- *
+/** Moves items of one list into another after the specified item.
+ * 
+ * Inserts all items of @a list after item at @a pos in another list. 
+ * Both lists may be empty. 
+ * 
+ * @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: kernel/generic/src/smp/smp_call.c
===================================================================
--- kernel/generic/src/smp/smp_call.c	(revision 2e16033115d5c1a9a9095d87b471d2db4bf1dc88)
+++ kernel/generic/src/smp/smp_call.c	(revision c14762e308251eb9ee22f1638076409ea9196fc9)
@@ -191,5 +191,5 @@
 	
 	spinlock_lock(&CPU->smp_calls_lock);
-	list_splice(&CPU->smp_pending_calls, &calls_list.head);
+	list_concat(&calls_list, &CPU->smp_pending_calls);
 	spinlock_unlock(&CPU->smp_calls_lock);
 
Index: kernel/generic/src/synch/rcu.c
===================================================================
--- kernel/generic/src/synch/rcu.c	(revision 2e16033115d5c1a9a9095d87b471d2db4bf1dc88)
+++ kernel/generic/src/synch/rcu.c	(revision c14762e308251eb9ee22f1638076409ea9196fc9)
@@ -932,5 +932,5 @@
 	 * cur_preempted is empty, but see comment in record_qs(). 
 	 */
-	list_append_list(&rcu.next_preempted, &rcu.cur_preempted);
+	list_concat(&rcu.cur_preempted, &rcu.next_preempted);
 	
 	irq_spinlock_unlock(&rcu.preempt_lock, true);
