diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index e4a3f8603b856f4f4ac8c3bbc8e04bcde02a45bc..beb31bc83342f9b6f62ea94d052cbf5560c0cba4 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -30,6 +30,9 @@
  * $/LicenseInfo$
  */
 
+// *NOTE: this module is a copy-paste of llui/llalertdialog.h
+// Can we re-implement this as a subclass of LLAlertDialog and
+// avoid all this code duplication? It already caused EXT-2232.
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
@@ -56,7 +59,7 @@ const F32 DEFAULT_BUTTON_DELAY = 0.5f;
 const S32 MSG_PAD = 8;
 
 /*static*/ LLControlGroup* LLToastAlertPanel::sSettings = NULL;
-/*static*/ LLToastAlertPanel::URLLoader* LLToastAlertPanel::sURLLoader;
+/*static*/ LLAlertURLLoader* LLToastAlertPanel::sURLLoader;
 
 //-----------------------------------------------------------------------------
 // Private methods
diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h
index af0c9a9ddd9525ce631848c999b5732bad3f787c..840143a2a933e388e3f92463adc151710fa434ce 100644
--- a/indra/newview/lltoastalertpanel.h
+++ b/indra/newview/lltoastalertpanel.h
@@ -30,6 +30,10 @@
  * $/LicenseInfo$
  */
 
+// *NOTE: this module is a copy-paste of llui/llalertdialog.h
+// Can we re-implement this as a subclass of LLAlertDialog and
+// avoid all this code duplication? It already caused EXT-2232.
+
 #ifndef LL_TOASTALERTPANEL_H
 #define LL_TOASTALERTPANEL_H
 
@@ -37,6 +41,7 @@
 #include "llfloater.h"
 #include "llui.h"
 #include "llnotifications.h"
+#include "llalertdialog.h"
 
 class LLButton;
 class LLCheckBoxCtrl;
@@ -57,14 +62,7 @@ class LLToastAlertPanel
 public:
 	typedef bool (*display_callback_t)(S32 modal);
 
-	class URLLoader
-	{
-	public:
-		virtual void load(const std::string& url,  bool force_open_externally = 0 ) = 0;
-		virtual ~URLLoader() {}
-	};
-	
-	static void setURLLoader(URLLoader* loader)
+	static void setURLLoader(LLAlertURLLoader* loader)
 	{
 		sURLLoader = loader;
 	}
@@ -97,7 +95,7 @@ class LLToastAlertPanel
 	BOOL hasTitleBar() const;
 
 private:
-	static URLLoader* sURLLoader;
+	static LLAlertURLLoader* sURLLoader;
 	static LLControlGroup* sSettings;
 
 	struct ButtonData
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 3204c2d264208624c1c6b8fb53fa28b3901e5ec0..72431bd22f2c7aa148e031cb0bcc617bf19c5f03 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -43,8 +43,9 @@
 #include "llfloatermediabrowser.h"
 #include "llfloaterreg.h"
 #include "llalertdialog.h"
+#include "lltoastalertpanel.h"
 
-class URLLoader : public LLAlertDialog::URLLoader
+class URLLoader : public LLAlertURLLoader
 {
 	virtual void load(const std::string& url , bool force_open_externally)
 	{
@@ -65,6 +66,7 @@ static URLLoader sAlertURLLoader;
 void LLWeb::initClass()
 {
 	LLAlertDialog::setURLLoader(&sAlertURLLoader);
+	LLToastAlertPanel::setURLLoader(&sAlertURLLoader);
 }