diff --git a/indra/llui/llhelp.h b/indra/llui/llhelp.h
index c06d29a4bd497203df318238157ab8a2dacc62dd..82c3bc385f322434a033b356f1ea94fd8a0214cf 100644
--- a/indra/llui/llhelp.h
+++ b/indra/llui/llhelp.h
@@ -40,6 +40,8 @@ class LLHelp
 	virtual void showTopic(const std::string &topic) = 0;
 	// return default (fallback) topic name suitable for showTopic()
 	virtual std::string defaultTopic() = 0;
+	// return topic to use before the user logs in
+	virtual std::string preLoginTopic() = 0;
 };
 
 #endif // headerguard
diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp
index 0e0727e38250e3fd02b4408eb7f449f0860277f9..056260791c4e5460c24c77c84e3ec888b19dff7f 100644
--- a/indra/newview/llviewerhelp.cpp
+++ b/indra/newview/llviewerhelp.cpp
@@ -39,6 +39,7 @@
 #include "llviewercontrol.h"
 #include "llversionviewer.h"
 #include "llappviewer.h"
+#include "lllogininstance.h"
 
 #include "llviewerhelputil.h"
 #include "llviewerhelp.h"
@@ -51,17 +52,25 @@ void LLViewerHelp::showTopic(const std::string &topic)
 {
 	showHelp();
 	
+	// allow overriding the help server with a local help file
 	if( gSavedSettings.getBOOL("HelpUseLocal") )
 	{
 		LLFloaterHelpBrowser* helpbrowser = dynamic_cast<LLFloaterHelpBrowser*>(LLFloaterReg::getInstance("help_browser"));
 		helpbrowser->navigateToLocalPage( "help-offline" , "index.html" );
+		return;
 	}
-	else 
+
+	// use a special login topic before the user logs in
+	std::string help_topic = topic;
+	if (! LLLoginInstance::getInstance()->authSuccess())
 	{
-		const LLOSInfo& osinfo = LLAppViewer::instance()->getOSInfo();
-		std::string helpURL = LLViewerHelpUtil::buildHelpURL( topic, gSavedSettings, osinfo );
-		setRawURL( helpURL );
+		help_topic = preLoginTopic();
 	}
+
+	// work out the URL for this topic and display it 
+	const LLOSInfo& osinfo = LLAppViewer::instance()->getOSInfo();
+	std::string helpURL = LLViewerHelpUtil::buildHelpURL( help_topic, gSavedSettings, osinfo );
+	setRawURL( helpURL );
 }
 
 std::string LLViewerHelp::defaultTopic()
@@ -70,6 +79,12 @@ std::string LLViewerHelp::defaultTopic()
 	return "this_is_fallbacktopic";
 }
 
+std::string LLViewerHelp::preLoginTopic()
+{
+	// *hack: to be done properly
+	return "pre_login_help";
+}
+
 //////////////////////////////
 // our own interfaces
 
diff --git a/indra/newview/llviewerhelp.h b/indra/newview/llviewerhelp.h
index 17aab6f239738a75de2a2aa53bcd885cb1cf836b..dcb5ae32c98956b7349b37703e9adc723b2f9ffc 100644
--- a/indra/newview/llviewerhelp.h
+++ b/indra/newview/llviewerhelp.h
@@ -57,6 +57,9 @@ class LLViewerHelp : public LLHelp, public LLSingleton<LLViewerHelp>
 	// return topic derived from viewer UI focus, else default topic
 	std::string getTopicFromFocus();
 
+	// return topic to use before the user logs in
+	std::string preLoginTopic();
+
  private:
 	static void showHelp(); // make sure help UI is visible & raised
 	static void setRawURL(std::string url); // send URL to help UI