diff --git a/doc/contributions.txt b/doc/contributions.txt
index f59539d94cccaa307ef88546981a91ed65d9d6e7..8faf18a598c21bb1cb2da0cb2b7d6793a00fa400 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -414,6 +414,7 @@ Jonathan Yap
 	STORM-1020
 	STORM-1064
 	STORM-1077
+	STORM-1128
 Kage Pixel
 	VWR-11
 Ken March
@@ -644,6 +645,7 @@ Robin Cornelius
 	STORM-422
 	STORM-960
 	STORM-1019
+	STORM-1128
 	VWR-2488
 	VWR-9557
 	VWR-10579
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 03cf0332a98aa6362aeed7e48a550eb1deee8b78..bf5f569e3697a9741824cb8a826257713f5710de 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -96,6 +96,14 @@ enum EPanDirection
 // Values in pixels per region
 static const F32 ZOOM_MAX = 128.f;
 
+struct SortRegionNames
+{
+	inline bool operator ()(std::pair <U64, LLSimInfo*>& _left, std::pair <U64, LLSimInfo*>& _right)
+	{
+		return(LLStringUtil::compareInsensitive(_left.second->getName(),_right.second->getName()) < 0);
+	}
+};
+
 //---------------------------------------------------------------------------
 // Globals
 //---------------------------------------------------------------------------
@@ -1483,10 +1491,14 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
 	S32 name_length = mCompletingRegionName.length();
 	
 	LLSD match;
-	
+
 	S32 num_results = 0;
-	std::map<U64, LLSimInfo*>::const_iterator it;
-	for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
+
+	std::vector<std::pair <U64, LLSimInfo*>> simInfoVec(LLWorldMap::getInstance()->getRegionMap().begin(), LLWorldMap::getInstance()->getRegionMap().end());
+	std::sort(simInfoVec.begin(), simInfoVec.end(), SortRegionNames());
+
+	std::vector<std::pair <U64, LLSimInfo*>>::const_iterator it;
+	for (it = simInfoVec.begin(); it != simInfoVec.end(); ++it)
 	{
 		LLSimInfo* info = it->second;
 		std::string sim_name_lower = info->getName();