diff --git a/src/xpdev/ini_file.c b/src/xpdev/ini_file.c
index 9a029c5bab4fadaeae456a374a7367862ab1f894..a19c66a85edd2cb253849b61454a0b965f939d84 100644
--- a/src/xpdev/ini_file.c
+++ b/src/xpdev/ini_file.c
@@ -1005,12 +1005,16 @@ iniReadNamedStringList(FILE* fp, const char* section)
 	named_string_t** np;
 
 	if(fp==NULL)
-		return(lp);
+		return(NULL);
 
 	rewind(fp);
 
 	if(!seek_section(fp,section))
-		return(lp);
+		return(NULL);
+
+	/* New behavior, if section exists but is empty, return single element array (terminator only) */
+	if((lp=(named_string_t**)malloc(sizeof(named_string_t*)))==NULL)
+		return(NULL);
 
 	while(!feof(fp)) {
 		if(fgets(str,sizeof(str),fp)==NULL)
@@ -1033,8 +1037,7 @@ iniReadNamedStringList(FILE* fp, const char* section)
 		items++;
 	}
 
-	if(items)
-		lp[items]=NULL;	/* terminate list */
+	lp[items]=NULL;	/* terminate list */
 
 	return(lp);
 }
@@ -1050,9 +1053,17 @@ iniGetNamedStringList(str_list_t list, const char* section)
 	named_string_t** np;
 
 	if(list==NULL)
-		return(lp);
+		return(NULL);
 
-	for(i=find_section(list,section);list[i]!=NULL;i++) {
+	i=find_section(list,section);
+	if(list[i]==NULL)
+		return(NULL);
+
+	/* New behavior, if section exists but is empty, return single element array (terminator only) */
+	if((lp=(named_string_t**)malloc(sizeof(named_string_t*)))==NULL)
+		return(NULL);
+
+	for(;list[i]!=NULL;i++) {
 		SAFECOPY(str,list[i]);
 		if(is_eof(str))
 			break;
@@ -1072,8 +1083,7 @@ iniGetNamedStringList(str_list_t list, const char* section)
 		items++;
 	}
 
-	if(items)
-		lp[items]=NULL;	/* terminate list */
+	lp[items]=NULL;	/* terminate list */
 
 	return(lp);
 }