diff --git a/indra/newview/llappviewerlistener.cpp b/indra/newview/llappviewerlistener.cpp
index a8c98b17a7326b1a6bd84de5e84d926e696a5f75..befebae88ee9e813ba87f26b527e8cec6d08196a 100644
--- a/indra/newview/llappviewerlistener.cpp
+++ b/indra/newview/llappviewerlistener.cpp
@@ -18,6 +18,7 @@
 // external library headers
 // other Linden headers
 #include "llappviewer.h"
+#include "llviewercontrol.h"
 
 LLAppViewerListener::LLAppViewerListener(const std::string& pumpname, LLAppViewer* llappviewer):
     LLDispatchListener(pumpname, "op"),
@@ -25,9 +26,21 @@ LLAppViewerListener::LLAppViewerListener(const std::string& pumpname, LLAppViewe
 {
     // add() every method we want to be able to invoke via this event API.
     add("requestQuit", &LLAppViewerListener::requestQuit);
+    add("setSetting", &LLAppViewerListener::setSetting);
 }
 
 void LLAppViewerListener::requestQuit(const LLSD& event) const
 {
     mAppViewer->requestQuit();
 }
+
+void LLAppViewerListener::setSetting(const LLSD & event) const
+{
+	std::string control_name = event["name"].asString();
+	if (gSavedSettings.controlExists(control_name))
+	{
+		LLControlVariable* control = gSavedSettings.getControl(control_name);
+
+		control->set(event["value"]);
+	}
+}
diff --git a/indra/newview/llappviewerlistener.h b/indra/newview/llappviewerlistener.h
index ab17dd1d9042d0dc6a7b1847b5a5c60098080b0c..ff63b69c137ed9d7092030204bedb3015501494f 100644
--- a/indra/newview/llappviewerlistener.h
+++ b/indra/newview/llappviewerlistener.h
@@ -27,6 +27,7 @@ class LLAppViewerListener: public LLDispatchListener
 
 private:
     void requestQuit(const LLSD& event) const;
+    void setSetting(const LLSD & event) const;
 
     LLAppViewer* mAppViewer;
 };