diff --git a/src/xpdev/gen_defs.h b/src/xpdev/gen_defs.h
index d9c3ba2715bdc19b57179c10f6ac917c24941170..a2a7e97b7af684ace68452823a17dd3f8fd0d0d3 100644
--- a/src/xpdev/gen_defs.h
+++ b/src/xpdev/gen_defs.h
@@ -249,5 +249,11 @@ typedef struct {
 	#define FREE free
 #endif
 
+/********************************/
+/* Handy Pointer-freeing Macros */
+/********************************/
+#define FREE_AND_NULL(x)		if(x!=NULL) { FREE(x); x=NULL; }
+#define FREE_LIST_ITEMS(list,i)	for(i=0;list && list[i];i++) { FREE_AND_NULL(list[i]); }
+#define FREE_LIST(list,i)		FREE_LIST_ITEMS(list,i) FREE_AND_NULL(list)
 
 #endif /* Don't add anything after this #endif statement */
diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c
index b616fa19260d70dd609c6fdef83fdbd881a1de6c..1edabb5241ad0439300a2443fc6c9fb1794413c2 100644
--- a/src/xpdev/str_list.c
+++ b/src/xpdev/str_list.c
@@ -344,11 +344,7 @@ void strListFreeStrings(str_list_t list)
 {
 	size_t i;
 
-	if(list!=NULL) {
-		for(i=0; list[i]!=NULL; i++)
-			free(list[i]);
-		list[0]=NULL;	/* terminate */
-	}
+	FREE_LIST_ITEMS(list,i);
 }
 
 void strListFree(str_list_t* list)