return node;
 }
 
+list_node_t *list_insert_before(list_t *list, list_node_t *before, void *data) {
+       list_node_t *node;
+
+       node = list_alloc_node();
+
+       node->data = data;
+       node->next = before;
+       node->prev = before->prev;
+       before->prev = node;
+
+       if(node->prev)
+               node->prev->next = node;
+       else
+               list->head = node;
+
+       list->count++;
+
+       return node;
+}
+
 void list_unlink_node(list_t *list, list_node_t *node) {
        if(node->prev)
                node->prev->next = node->next;
 
 extern list_node_t *list_insert_head(list_t *, void *);
 extern list_node_t *list_insert_tail(list_t *, void *);
 extern list_node_t *list_insert_after(list_t *, list_node_t *, void *);
+extern list_node_t *list_insert_before(list_t *, list_node_t *, void *);
 
 extern void list_unlink_node(list_t *, list_node_t *);
 extern void list_delete_node(list_t *, list_node_t *);
 
                        } else {
                                found = xmalloc_and_zero(sizeof *found);
                                found->name = xstrdup(name);
-                               list_insert_after(&node_list, i, found);
+                               fprintf(stderr, "Inserting %s before %s\n", found->name, node->name);
+                               list_insert_before(&node_list, i, found);
+                               changed = true;
                                break;
                        }
                }
                        found = xmalloc_and_zero(sizeof *found);
                        found->name = xstrdup(name);
                        list_insert_tail(&node_list, found);
+                       changed = true;
                }
 
                found->known = true;