diff --git a/src/xpdev/ini_file.c b/src/xpdev/ini_file.c
index 9bcf1a6f201058be4ccda19d1a507faa98e1361a..05d3e1829be6393b17d916e92ba4858959af589a 100644
--- a/src/xpdev/ini_file.c
+++ b/src/xpdev/ini_file.c
@@ -442,15 +442,16 @@ BOOL iniRemoveSections(str_list_t* list, const char* prefix)
 }
 
 // This sorts comments too, so should not be used on human created/edited files
-BOOL iniSortSections(str_list_t* list, BOOL sort_keys)
+BOOL iniSortSections(str_list_t* list, const char* prefix, BOOL sort_keys)
 {
 	size_t i;
-	str_list_t root_keys;
+	str_list_t root_keys = NULL;
 	str_list_t new_list;
 	str_list_t keys;
-	str_list_t section_list = iniGetSectionList(*list, /* prefix */NULL);
+	str_list_t section_list = iniGetSectionList(*list, prefix);
 
-	root_keys = iniGetSection(*list, ROOT_SECTION);
+	if(prefix == NULL)
+		root_keys = iniGetSection(*list, ROOT_SECTION);
 	if(section_list == NULL && root_keys == NULL)
 		return TRUE;
 
@@ -459,7 +460,12 @@ BOOL iniSortSections(str_list_t* list, BOOL sort_keys)
 
 	if(section_list != NULL)
 		strListSortAlphaCase(section_list);
-	new_list = strListInit();
+	if(prefix == NULL)
+		new_list = strListInit();
+	else {
+		new_list = strListDup(*list);
+		iniRemoveSections(&new_list, prefix);
+	}
 	if(new_list == NULL) {
 		strListFree(&section_list);
 		strListFree(&root_keys);
@@ -2465,7 +2471,7 @@ void main(int argc, char** argv)
 			continue;
 		}
 		if((list=iniReadFile(fp)) != NULL) {
-			iniSortSections(&list, TRUE);
+			iniSortSections(&list, NULL, TRUE);
 			for(size_t j = 0; list[j] != NULL; j++)
 				printf("%s\n", list[j]);
 			strListFree(&list);
diff --git a/src/xpdev/ini_file.h b/src/xpdev/ini_file.h
index 3d5a86fe16b4fb47ae4972ff02980e2df05b4e59..cdeb48447c109920b0f91022fb4c564b66030681 100644
--- a/src/xpdev/ini_file.h
+++ b/src/xpdev/ini_file.h
@@ -276,7 +276,7 @@ DLLEXPORT BOOL 			iniRemoveValue(str_list_t*, const char* section, const char* k
 DLLEXPORT BOOL 			iniRemoveSection(str_list_t*, const char* section);
 DLLEXPORT BOOL 			iniRemoveSections(str_list_t*, const char* prefix);
 DLLEXPORT BOOL 			iniRenameSection(str_list_t*, const char* section, const char* newname);
-DLLEXPORT BOOL 			iniSortSections(str_list_t*, BOOL sort_keys);
+DLLEXPORT BOOL 			iniSortSections(str_list_t*, const char* prefix, BOOL sort_keys);
 
 DLLEXPORT BOOL 			iniHasInclude(const str_list_t);