diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c
index 454a2090f84a822043fcf6bcaabc27449fec763a..5bea0281abe6930a82c4c783c24f384c23c69ebf 100644
--- a/src/xpdev/str_list.c
+++ b/src/xpdev/str_list.c
@@ -85,17 +85,43 @@ static str_list_t str_list_insert(str_list_t* list, char* str, size_t index)
 	str_list_t lp;
 
 	count = strListCount(*list);
+	if(index > count)	/* invalid index, do nothing */
+		return(NULL);
+
+	count++;
 	if((lp=(str_list_t)realloc(*list,sizeof(char*)*(count+1)))==NULL)
 		return(NULL);
 
 	*list=lp;
-	for(i=index;i<=count;i++)
-		lp[i+1]=lp[i];
+	for(i=count; i>index; i--)
+		lp[i]=lp[i-1];
 	lp[index]=str;
 
 	return(lp);
 }
 
+str_list_t strListRemove(str_list_t* list, size_t index)
+{
+	size_t	i;
+	size_t	count;
+	str_list_t lp;
+
+	count = strListCount(*list);
+	if(index >= count)	/* invalid index, do nothing */
+		return(NULL);
+
+	count--;
+	if((lp=(str_list_t)realloc(*list,sizeof(char*)*(count+1)))==NULL)
+		return(NULL);
+
+	*list=lp;
+	for(i=index; i<count; i++)
+		lp[i]=lp[i+1];
+	lp[count]=NULL;
+
+	return(lp);
+}
+
 str_list_t strListAddAt(str_list_t* list, const char* str, size_t count)
 {
 	char* buf;
diff --git a/src/xpdev/str_list.h b/src/xpdev/str_list.h
index d1d1f208d49662b354b44207d89d9f8f08a29f58..795a7bded2ad23f8f766a5ec04592521a2628199 100644
--- a/src/xpdev/str_list.h
+++ b/src/xpdev/str_list.h
@@ -55,22 +55,25 @@ void		strListFree(str_list_t* list);
 /* Frees the strings in the list */
 void		strListFreeStrings(str_list_t list);
 
-/* Pass a pointer to a string list, the string to add */
+/* Pass a pointer to a string list, the string to add (append) */
 /* Returns the updated list or NULL on error */
 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, const char* str, size_t index);
 
-/* Append a string list onto an another string list */
+/* Append a string list onto another string list */
 str_list_t	strListAddList(str_list_t* list, const str_list_t append_list);
 
 /* Inserts a string into the list at a specific index */
 str_list_t	strListInsert(str_list_t* list, const char* str, size_t index);
 
-/* Insert a string list onto an another string list */
+/* Insert a string list into another string list */
 str_list_t	strListInsertList(str_list_t* list, const str_list_t append_list, size_t index);
 
+/* Remove a string at a specific index */
+str_list_t	strListRemove(str_list_t* list, 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);