diff --git a/src/xpdev/link_list.c b/src/xpdev/link_list.c
index ab4ecf0dd7d6b91c8f4d04aa616a9de727b114d0..9c449199325447e235f53f30dbebe75386a0adce 100644
--- a/src/xpdev/link_list.c
+++ b/src/xpdev/link_list.c
@@ -569,7 +569,7 @@ static list_node_t* list_add_node(link_list_t* list, list_node_t* node, list_nod
 	return node;
 }
 
-list_node_t* listAddNode(link_list_t* list, void* data, list_node_tag_t tag, list_node_t* after)
+list_node_t* listAddNodeWithFlags(link_list_t* list, void* data, list_node_tag_t tag, long flags, list_node_t* after)
 {
 	list_node_t* node;
 
@@ -582,10 +582,16 @@ list_node_t* listAddNode(link_list_t* list, void* data, list_node_tag_t tag, lis
 	memset(node, 0, sizeof(list_node_t));
 	node->data = data;
 	node->tag = tag;
+	node->flags = flags;
 
 	return list_add_node(list, node, after);
 }
 
+list_node_t* listAddNode(link_list_t* list, void* data, list_node_tag_t tag, list_node_t* after)
+{
+	return listAddNodeWithFlags(list, data, tag, 0, after);
+}
+
 long listAddNodes(link_list_t* list, void** data, list_node_tag_t* tag, list_node_t* after)
 {
 	long         i;
@@ -610,11 +616,10 @@ list_node_t* listAddNodeData(link_list_t* list, const void* data, size_t length,
 		return NULL;
 	memcpy(buf, data, length);
 
-	if ((node = listAddNode(list, buf, tag, after)) == NULL) {
+	if ((node = listAddNodeWithFlags(list, buf, tag, LINK_LIST_MALLOC, after)) == NULL) {
 		free(buf);
 		return NULL;
 	}
-	node->flags |= LINK_LIST_MALLOC;
 
 	return node;
 }
@@ -630,11 +635,10 @@ list_node_t* listAddNodeString(link_list_t* list, const char* str, list_node_tag
 	if ((buf = strdup(str)) == NULL)
 		return NULL;
 
-	if ((node = listAddNode(list, buf, tag, after)) == NULL) {
+	if ((node = listAddNodeWithFlags(list, buf, tag, LINK_LIST_MALLOC, after)) == NULL) {
 		free(buf);
 		return NULL;
 	}
-	node->flags |= LINK_LIST_MALLOC;
 
 	return node;
 }
@@ -668,9 +672,8 @@ long listAddNodeList(link_list_t* list, const link_list_t* src, list_node_t* aft
 		return -1;
 
 	for (src_node = src->first; src_node != NULL; src_node = src_node->next, count++) {
-		if ((node = listAddNode(list, src_node->data, src_node->tag, node == NULL ? after:node)) == NULL)
+		if ((node = listAddNodeWithFlags(list, src_node->data, src_node->tag, src_node->flags, node == NULL ? after:node)) == NULL)
 			return count;
-		node->flags = src_node->flags;
 	}
 
 	return count;
diff --git a/src/xpdev/link_list.h b/src/xpdev/link_list.h
index 61d2f3c304672ce7a53b8887948a9744d8de0a1a..3a12ffc0f5f7af34bcd0809e801195099b910a63 100644
--- a/src/xpdev/link_list.h
+++ b/src/xpdev/link_list.h
@@ -148,6 +148,9 @@ DLLEXPORT bool listNodeIsLocked(const list_node_t*);
 /* Add node to list, returns pointer to new node or NULL on error */
 DLLEXPORT list_node_t* listAddNode(link_list_t*, void* data, list_node_tag_t, list_node_t * after /* NULL=insert */);
 
+/* Add node to list with flags, returns pointer to new node or NULL on error */
+DLLEXPORT list_node_t* listAddNodeWithFlags(link_list_t*, void* data, list_node_tag_t, long flags, list_node_t * after /* NULL=insert */);
+
 /* Add array of node data to list, returns number of nodes added (or negative on error) */
 /* tag array may be NULL */
 DLLEXPORT long      listAddNodes(link_list_t*, void** data, list_node_tag_t*, list_node_t* after /* NULL=insert */);