diff --git a/doc/contributions.txt b/doc/contributions.txt
index 1099f013c240f0f239f386afda813ff8244a4ee3..c1f207408336487879ceaa2396743b7ea046f05d 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -425,6 +425,7 @@ Jonathan Yap
 	STORM-1094
 	STORM-1077
 	STORM-953
+	STORM-1128
 	STORM-956
 	STORM-1095
 Kage Pixel
@@ -664,6 +665,7 @@ Robin Cornelius
 	STORM-960
 	STORM-1019
 	STORM-1095
+	STORM-1128
 	VWR-2488
 	VWR-9557
 	VWR-10579
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 03cf0332a98aa6362aeed7e48a550eb1deee8b78..f8a4ce7ad0fc8362fa220666026840dcf9394f19 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -73,6 +73,7 @@
 #include "llslider.h"
 #include "message.h"
 #include "llwindow.h"			// copyTextToClipboard()
+#include <algorithm>
 
 //---------------------------------------------------------------------------
 // Constants
@@ -85,6 +86,16 @@ static const F32 MAP_ZOOM_TIME = 0.2f;
 // Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window.
 static const S32 MAX_VISIBLE_REGIONS = 512;
 
+// It would be more logical to have this inside the method where it is used but to compile under gcc this
+// struct has to be here.
+struct SortRegionNames
+{
+	inline bool operator ()(std::pair <U64, LLSimInfo*> const& _left, std::pair <U64, LLSimInfo*> const& _right)
+	{
+		return(LLStringUtil::compareInsensitive(_left.second->getName(), _right.second->getName()) < 0);
+	}
+};
+
 enum EPanDirection
 {
 	PAN_UP,
@@ -1483,10 +1494,13 @@ 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*> > sim_info_vec(LLWorldMap::getInstance()->getRegionMap().begin(), LLWorldMap::getInstance()->getRegionMap().end());
+	std::sort(sim_info_vec.begin(), sim_info_vec.end(), SortRegionNames());
+
+	for (std::vector<std::pair <U64, LLSimInfo*> >::const_iterator it = sim_info_vec.begin(); it != sim_info_vec.end(); ++it)
 	{
 		LLSimInfo* info = it->second;
 		std::string sim_name_lower = info->getName();