diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index a631314d5bf92d83de4f5d88e46cedc9f032044e..80749295ffdbd38f1cdcb26f35c29a4850b8d524 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -204,7 +204,7 @@
 #pragma warning (disable:4702)
 #endif
 
-static LLAppViewerListener sAppViewerListener("LLAppViewer", NULL);
+static LLAppViewerListener sAppViewerListener("LLAppViewer", LLAppViewer::instance);
 
 ////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor
 //
diff --git a/indra/newview/llappviewerlistener.cpp b/indra/newview/llappviewerlistener.cpp
index a3af251a3c33256c5062cc229c50a2f0bda8837b..3259309eee76872a69e8aa2b8cd16563c77dd10a 100644
--- a/indra/newview/llappviewerlistener.cpp
+++ b/indra/newview/llappviewerlistener.cpp
@@ -19,19 +19,22 @@
 // other Linden headers
 #include "llappviewer.h"
 
-LLAppViewerListener::LLAppViewerListener(const std::string& pumpname, LLAppViewer* llappviewer):
+LLAppViewerListener::LLAppViewerListener(const std::string& pumpname,
+                                         const LLAppViewerGetter& getter):
     LLDispatchListener(pumpname, "op"),
-    mAppViewer(llappviewer)
+    mAppViewerGetter(getter)
 {
     // add() every method we want to be able to invoke via this event API.
     add("requestQuit", &LLAppViewerListener::requestQuit);
+    add("forceQuit", &LLAppViewerListener::forceQuit);
 }
 
 void LLAppViewerListener::requestQuit(const LLSD& event)
 {
-    if(mAppViewer == NULL)
-    {
-        mAppViewer = LLAppViewer::instance();
-    }
-    mAppViewer->requestQuit();
+    mAppViewerGetter()->requestQuit();
+}
+
+void LLAppViewerListener::forceQuit(const LLSD& event)
+{
+    mAppViewerGetter()->forceQuit();
 }
diff --git a/indra/newview/llappviewerlistener.h b/indra/newview/llappviewerlistener.h
index d702f605ef0e12d27fe8c9b7d6a4b981e6359075..73227cb95a771e2a74092f3cf74197ae230a2c52 100644
--- a/indra/newview/llappviewerlistener.h
+++ b/indra/newview/llappviewerlistener.h
@@ -13,6 +13,7 @@
 #define LL_LLAPPVIEWERLISTENER_H
 
 #include "lleventdispatcher.h"
+#include <boost/function.hpp>
 
 class LLAppViewer;
 class LLSD;
@@ -21,14 +22,16 @@ class LLSD;
 class LLAppViewerListener: public LLDispatchListener
 {
 public:
+    typedef boost::function<LLAppViewer*(void)> LLAppViewerGetter;
     /// Specify the pump name on which to listen, and bind the LLAppViewer
     /// instance to use (e.g. LLAppViewer::instance()).
-    LLAppViewerListener(const std::string& pumpname, LLAppViewer* llappviewer);
+    LLAppViewerListener(const std::string& pumpname, const LLAppViewerGetter& getter);
 
 private:
     void requestQuit(const LLSD& event);
+    void forceQuit(const LLSD& event);
 
-    LLAppViewer* mAppViewer;
+    LLAppViewerGetter mAppViewerGetter;
 };
 
 #endif /* ! defined(LL_LLAPPVIEWERLISTENER_H) */