diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 03180b6a9d5e07a99aac4fce62f08838ad6cc34e..66e9b377d948b61713ceebb64a0ecc8ab8f618df 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -35,6 +35,7 @@
 #include "llagent.h"
 #include "llagentwearables.h"
 #include "llappearancemgr.h"
+#include "llcommandhandler.h"
 #include "llfloatercustomize.h"
 #include "llgesturemgr.h"
 #include "llinventorybridge.h"
@@ -47,6 +48,23 @@
 #include "llviewerregion.h"
 #include "llwearablelist.h"
 
+// support for secondlife:///app/appearance SLapps
+class LLAppearanceHandler : public LLCommandHandler
+{
+public:
+	// requests will be throttled from a non-trusted browser
+	LLAppearanceHandler() : LLCommandHandler("appearance", UNTRUSTED_THROTTLE) {}
+
+	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+	{
+		// we currently don't support any commands after the "appearance"
+		// part of the SLapp - we just show the appearance side panel
+		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD());
+		return true;
+	}
+};
+LLAppearanceHandler gAppearanceHandler;
+
 class LLWearInventoryCategoryCallback : public LLInventoryCallback
 {
 public:
diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp
index 7c491ad1541351d07e41bf767e1eea862bc6dada..b82538dacba001639f06ae59b505be4c7f946474 100644
--- a/indra/newview/llviewerhelp.cpp
+++ b/indra/newview/llviewerhelp.cpp
@@ -33,6 +33,7 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llcommandhandler.h"
 #include "llfloaterhelpbrowser.h"
 #include "llfloaterreg.h"
 #include "llfocusmgr.h"
@@ -43,6 +44,33 @@
 #include "llviewerhelputil.h"
 #include "llviewerhelp.h"
 
+// support for secondlife:///app/help/{TOPIC} SLapps
+class LLHelpHandler : public LLCommandHandler
+{
+public:
+	// requests will be throttled from a non-trusted browser
+	LLHelpHandler() : LLCommandHandler("help", UNTRUSTED_THROTTLE) {}
+
+	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+	{
+		LLViewerHelp* vhelp = LLViewerHelp::getInstance();
+		if (! vhelp)
+		{
+			return false;
+		}
+
+		// get the requested help topic name, or use the fallback if none
+		std::string help_topic = vhelp->defaultTopic();
+		if (params.size() >= 1)
+		{
+			help_topic = params[0].asString();
+		}
+
+		vhelp->showTopic(help_topic);
+		return true;
+	}
+};
+LLHelpHandler gHelpHandler;
 
 //////////////////////////////
 // implement LLHelp interface