diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c
index ff7379acd9478fd1a9eb224a59ae944062163799..208ac9b25f64c8f9500abf57821ae22af6ad7f73 100644
--- a/src/xpdev/str_list.c
+++ b/src/xpdev/str_list.c
@@ -49,7 +49,7 @@ str_list_t strListAlloc()
 	return(list);
 }
 
-size_t strListCount(str_list_t list)
+size_t strListCount(const str_list_t list)
 {
 	size_t i;
 
@@ -62,7 +62,7 @@ size_t strListCount(str_list_t list)
 	return(i);
 }
 
-str_list_t strListAddAt(str_list_t* list, char* str, size_t count)
+str_list_t strListAddAt(str_list_t* list, const char* str, size_t count)
 {
 	str_list_t lp;
 
@@ -80,11 +80,42 @@ str_list_t strListAddAt(str_list_t* list, char* str, size_t count)
 }
 
 
-str_list_t strListAdd(str_list_t* list, char* str)
+str_list_t strListAdd(str_list_t* list, const char* str)
 {
 	return strListAddAt(list,str,strListCount(*list));
 }
 
+str_list_t strListSplit(str_list_t* list, char* str, const char* delimit)
+{
+	char*	token;
+
+	if(list==NULL) {
+		if((*list = strListAlloc())==NULL)
+			return(NULL);
+	}
+
+	for(token = strtok(str, delimit); token!=NULL; token=strtok(NULL, delimit))
+		strListAdd(list, token);
+
+	return(*list);
+}
+
+str_list_t strListSplitCopy(str_list_t* list, const char* str, const char* delimit)
+{
+	char*	buf;
+
+	if((buf=malloc(strlen(str)+1))==NULL)
+		return(NULL);
+
+	strcpy(buf,str);
+
+	*list = strListSplit(list,buf,delimit);
+
+	free(buf);
+
+	return(*list);
+}
+
 static int strListCompareAlpha(const void *arg1, const void *arg2)
 {
    return stricmp(*(char**)arg1, *(char**)arg2);
diff --git a/src/xpdev/str_list.h b/src/xpdev/str_list.h
index a538915826847efcb22f3a3643b33a3320ef14eb..bf657abf47dee8f20f3fb2cb37561c841a54fd69 100644
--- a/src/xpdev/str_list.h
+++ b/src/xpdev/str_list.h
@@ -54,13 +54,20 @@ void		strListFree(str_list_t* list);
 
 /* Pass a pointer to a string list, the string to add */
 /* Returns the updated list or NULL on error */
-str_list_t	strListAdd(str_list_t* list, char* str);
+str_list_t	strListAdd(str_list_t* list, const char* str);
 
 /* Adds a string into the list at a specific index */
-str_list_t	strListAddAt(str_list_t* list, char* str, size_t index);
+str_list_t	strListAddAt(str_list_t* list, const char* str, size_t index);
+
+/* Add to an exiting or new string list by splitting specified string (str) */
+/* into multiple strings, separated by one of the delimit characters */
+str_list_t	strListSplit(str_list_t* list, char* str, const char* delimit);
+
+/* Same as above, but copies str to temporary heap buffer first */
+str_list_t	strListSplitCopy(str_list_t* list, const char* str, const char* delimit);
 
 /* Count the number of strings in the list and returns the count */
-size_t		strListCount(str_list_t list);
+size_t		strListCount(const str_list_t list);
 
 void		strListSortAlpha(str_list_t list);
 void		strListSortAlphaReverse(str_list_t list);