diff --git a/doc/contributions.txt b/doc/contributions.txt
index a3ca5d5f58e49ff485048e668b3f9cd1091f859e..3ba4ee897390c45101eebe8c672f118b1177fed1 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -321,6 +321,7 @@ Cinder Roxley
     STORM-1958
     STORM-1952
     STORM-1951
+    STORM-2036
 Clara Young
 Coaldust Numbers
     VWR-1095
diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp
index 9b8271016136db72370f85d1688c88f21645f34f..b1194dcd1ba282ebb483bdf56e925296863c1cde 100644
--- a/indra/newview/llsyntaxid.cpp
+++ b/indra/newview/llsyntaxid.cpp
@@ -128,7 +128,6 @@ void LLSyntaxIdLSL::buildFullFileSpec()
 //-----------------------------------------------------------------------------
 bool LLSyntaxIdLSL::syntaxIdChanged()
 {
-	bool version_changed = false;
 	LLViewerRegion* region = gAgent.getRegion();
 
 	if (region)
@@ -148,7 +147,7 @@ bool LLSyntaxIdLSL::syntaxIdChanged()
 				{
 					LL_DEBUGS("SyntaxLSL") << "New SyntaxID '" << new_syntax_id << "' found." << LL_ENDL;
 					mSyntaxId = new_syntax_id;
-					version_changed = true;
+					return true;
 				}
 				else
 					LL_DEBUGS("SyntaxLSL") << "SyntaxID matches what we have." << LL_ENDL;
@@ -156,10 +155,11 @@ bool LLSyntaxIdLSL::syntaxIdChanged()
 		}
 		else
 		{
-			LL_WARNS("SyntaxLSL") << "Region '" << region->getName() << "' has not received capabilities. Cannot process SyntaxId." << LL_ENDL;
+			region->setCapabilitiesReceivedCallback(boost::bind(&LLSyntaxIdLSL::handleCapsReceived, this, _1));
+			LL_DEBUGS("SyntaxLSL") << "Region has not received capabilities. Waiting for caps..." << LL_ENDL;
 		}
 	}
-	return version_changed;
+	return false;
 }
 
 //-----------------------------------------------------------------------------
@@ -307,6 +307,17 @@ void LLSyntaxIdLSL::handleRegionChanged()
 	}
 }
 
+void LLSyntaxIdLSL::handleCapsReceived(const LLUUID& region_uuid)
+{
+	LLViewerRegion* current_region = gAgent.getRegion();
+	
+	if (region_uuid.notNull()
+		&& current_region->getRegionID() == region_uuid)
+	{
+		syntaxIdChanged();
+	}
+}
+
 void LLSyntaxIdLSL::handleFileFetched(const std::string& filepath)
 {
 	mInflightFetches.remove(filepath);
diff --git a/indra/newview/llsyntaxid.h b/indra/newview/llsyntaxid.h
index 70f6b283378151e485f7755ac2baaa00587fa4f7..504fb0997e1dda391186864920c4693acb1c4000 100644
--- a/indra/newview/llsyntaxid.h
+++ b/indra/newview/llsyntaxid.h
@@ -48,6 +48,7 @@ class LLSyntaxIdLSL : public LLSingleton<LLSyntaxIdLSL>
 	bool	syntaxIdChanged();
 	bool	isSupportedVersion(const LLSD& content);
 	void	handleRegionChanged();
+	void	handleCapsReceived(const LLUUID& region_uuid);
 	void	handleFileFetched(const std::string& filepath);
 	void	setKeywordsXml(const LLSD& content) { mKeywordsXml = content; };
 	void	buildFullFileSpec();