diff --git a/plugin/maxmind/mmdb_out.go b/plugin/maxmind/mmdb_out.go
index 8bdaab20492..5b83846355b 100644
--- a/plugin/maxmind/mmdb_out.go
+++ b/plugin/maxmind/mmdb_out.go
@@ -7,6 +7,7 @@ import (
 	"net"
 	"os"
 	"path/filepath"
+	"slices"
 	"strings"
 
 	"github.com/Loyalsoldier/geoip/lib"
@@ -159,7 +160,7 @@ func (m *mmdbOut) getEntryNameListInOrder(container lib.Container) []string {
 		}
 	}
 
-	list := make([]string, 0, 200)
+	list := make([]string, 0, 300)
 	for entry := range container.Loop() {
 		name := entry.GetName()
 		_, found := overwriteMap[name]
@@ -169,6 +170,9 @@ func (m *mmdbOut) getEntryNameListInOrder(container lib.Container) []string {
 		list = append(list, name)
 	}
 
+	// Sort the lists
+	slices.Sort(list)
+
 	// Make sure the names in overwriteList are written at last
 	list = append(list, overwriteList...)
 
diff --git a/plugin/plaintext/text_out.go b/plugin/plaintext/text_out.go
index 10ad61431e4..bc8f904e7b1 100644
--- a/plugin/plaintext/text_out.go
+++ b/plugin/plaintext/text_out.go
@@ -3,6 +3,7 @@ package plaintext
 import (
 	"encoding/json"
 	"log"
+	"slices"
 	"strings"
 
 	"github.com/Loyalsoldier/geoip/lib"
@@ -36,16 +37,29 @@ func (t *textOut) GetDescription() string {
 
 func (t *textOut) Output(container lib.Container) error {
 	// Filter want list
-	wantList := make(map[string]bool)
+	wantList := make([]string, 0, 50)
 	for _, want := range t.Want {
 		if want = strings.ToUpper(strings.TrimSpace(want)); want != "" {
-			wantList[want] = true
+			wantList = append(wantList, want)
 		}
 	}
 
 	switch len(wantList) {
 	case 0:
+		list := make([]string, 0, 300)
 		for entry := range container.Loop() {
+			list = append(list, entry.GetName())
+		}
+
+		// Sort the list
+		slices.Sort(list)
+
+		for _, name := range list {
+			entry, found := container.GetEntry(name)
+			if !found {
+				log.Printf("❌ entry %s not found", name)
+				continue
+			}
 			data, err := t.marshalBytes(entry)
 			if err != nil {
 				return err
@@ -57,7 +71,10 @@ func (t *textOut) Output(container lib.Container) error {
 		}
 
 	default:
-		for name := range wantList {
+		// Sort the list
+		slices.Sort(wantList)
+
+		for _, name := range wantList {
 			entry, found := container.GetEntry(name)
 			if !found {
 				log.Printf("❌ entry %s not found", name)
diff --git a/plugin/singbox/srs_out.go b/plugin/singbox/srs_out.go
index 7adfa5792f9..7637d200090 100644
--- a/plugin/singbox/srs_out.go
+++ b/plugin/singbox/srs_out.go
@@ -6,6 +6,7 @@ import (
 	"log"
 	"os"
 	"path/filepath"
+	"slices"
 	"strings"
 
 	"github.com/Loyalsoldier/geoip/lib"
@@ -82,23 +83,39 @@ func (s *srsOut) GetDescription() string {
 
 func (s *srsOut) Output(container lib.Container) error {
 	// Filter want list
-	wantList := make(map[string]bool)
+	wantList := make([]string, 0, 50)
 	for _, want := range s.Want {
 		if want = strings.ToUpper(strings.TrimSpace(want)); want != "" {
-			wantList[want] = true
+			wantList = append(wantList, want)
 		}
 	}
 
 	switch len(wantList) {
 	case 0:
+		list := make([]string, 0, 300)
 		for entry := range container.Loop() {
+			list = append(list, entry.GetName())
+		}
+
+		// Sort the list
+		slices.Sort(list)
+
+		for _, name := range list {
+			entry, found := container.GetEntry(name)
+			if !found {
+				log.Printf("❌ entry %s not found", name)
+				continue
+			}
 			if err := s.run(entry); err != nil {
 				return err
 			}
 		}
 
 	default:
-		for name := range wantList {
+		// Sort the list
+		slices.Sort(wantList)
+
+		for _, name := range wantList {
 			entry, found := container.GetEntry(name)
 			if !found {
 				log.Printf("❌ entry %s not found", name)
diff --git a/plugin/v2ray/dat_out.go b/plugin/v2ray/dat_out.go
index 46e3baa2f0b..0dd9e23bd32 100644
--- a/plugin/v2ray/dat_out.go
+++ b/plugin/v2ray/dat_out.go
@@ -94,19 +94,33 @@ func (g *geoIPDatOut) GetDescription() string {
 
 func (g *geoIPDatOut) Output(container lib.Container) error {
 	// Filter want list
-	wantList := make(map[string]bool)
+	wantList := make([]string, 0, 50)
 	for _, want := range g.Want {
 		if want = strings.ToUpper(strings.TrimSpace(want)); want != "" {
-			wantList[want] = true
+			wantList = append(wantList, want)
 		}
 	}
 
 	geoIPList := new(router.GeoIPList)
 	geoIPList.Entry = make([]*router.GeoIP, 0, 300)
 	updated := false
+
 	switch len(wantList) {
 	case 0:
+		list := make([]string, 0, 300)
 		for entry := range container.Loop() {
+			list = append(list, entry.GetName())
+		}
+
+		// Sort the list
+		sort.Strings(list)
+
+		for _, name := range list {
+			entry, found := container.GetEntry(name)
+			if !found {
+				log.Printf("❌ entry %s not found", name)
+				continue
+			}
 			geoIP, err := g.generateGeoIP(entry)
 			if err != nil {
 				return err
@@ -128,7 +142,10 @@ func (g *geoIPDatOut) Output(container lib.Container) error {
 		}
 
 	default:
-		for name := range wantList {
+		// Sort the list
+		sort.Strings(wantList)
+
+		for _, name := range wantList {
 			entry, found := container.GetEntry(name)
 			if !found {
 				log.Printf("❌ entry %s not found", name)