diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 498782fb448ace0128b6f60a741e7157c4d30ab5..0a13180c7373be3fe061dbf699cf4946f29fad7c 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -57,7 +57,6 @@
 #include "llpanelprofile.h"
 #include "llpanelpick.h"
 #include "llpanelclassified.h"
-#include "llpanelprofileview.h"
 #include "llsidetray.h"
 
 static const std::string XML_BTN_NEW = "new_btn";
@@ -88,6 +87,14 @@ class LLClassifiedHandler :
 
 	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
 	{
+		// handle app/classified/create urls first
+		if (params.size() == 1 && params[0].asString() == "create")
+		{
+			createClassified();
+			return true;
+		}
+
+		// then handle the general app/classified/{UUID}/{CMD} urls
 		if (params.size() < 2)
 		{
 			return false;
@@ -114,6 +121,31 @@ class LLClassifiedHandler :
 		return false;
 	}
 
+	void createClassified()
+	{
+		// open the new classified panel on the Me > Picks sidetray
+		LLSD params;
+		params["id"] = gAgent.getID();
+		params["open_tab_name"] = "panel_picks";
+		params["show_tab_panel"] = "create_classified";
+		LLSideTray::getInstance()->showPanel("panel_me", params);
+	}
+
+	void openClassified(LLAvatarClassifiedInfo* c_info)
+	{
+		// open the classified info panel on the Me > Picks sidetray
+		LLSD params;
+		params["id"] = c_info->creator_id;
+		params["open_tab_name"] = "panel_picks";
+		params["show_tab_panel"] = "classified_details";
+		params["classified_id"] = c_info->classified_id;
+		params["classified_avatar_id"] = c_info->creator_id;
+		params["classified_snapshot_id"] = c_info->snapshot_id;
+		params["classified_name"] = c_info->name;
+		params["classified_desc"] = c_info->description;
+		LLSideTray::getInstance()->showPanel("panel_profile_view", params);
+	}
+
 	/*virtual*/ void processProperties(void* data, EAvatarProcessorType type)
 	{
 		if (APT_CLASSIFIED_INFO != type)
@@ -128,22 +160,8 @@ class LLClassifiedHandler :
 			return;
 		}
 
-		// open the people profile page for the classified's owner
-		LLSD params;
-		params["id"] = c_info->creator_id;
-		params["classified"] = c_info->classified_id;
-		params["open_tab_name"] = "panel_profile";
-		LLPanelProfileView *profile = dynamic_cast<LLPanelProfileView*>(LLSideTray::getInstance()->showPanel("panel_profile_view", params));
-
-		// then open the classified panel on this user's profile panel
-		if (profile)
-		{
-			LLPanelPicks* panel_picks = profile->getChild<LLPanelPicks>("panel_picks");
-			if (panel_picks)
-			{
-				panel_picks->openClassifiedInfo(c_info);
-			}
-		}
+		// open the detail side tray for this classified
+		openClassified(c_info);
 
 		// remove our observer now that we're done
 		mClassifiedIds.erase(c_info->classified_id);
@@ -693,33 +711,24 @@ void LLPanelPicks::openClassifiedInfo()
 
 	LLClassifiedItem* c_item = getSelectedClassifiedItem();
 
-	createClassifiedInfoPanel();
-
-	LLSD params;
- 	params["classified_id"] = c_item->getClassifiedId();
- 	params["avatar_id"] = c_item->getAvatarId();
- 	params["snapshot_id"] = c_item->getSnapshotId();
- 	params["name"] = c_item->getClassifiedName();
- 	params["desc"] = c_item->getDescription();
-
-	getProfilePanel()->openPanel(mPanelClassifiedInfo, params);
+	openClassifiedInfo(c_item->getClassifiedId(), c_item->getAvatarId(),
+					   c_item->getSnapshotId(), c_item->getClassifiedName(),
+					   c_item->getDescription());
 }
 
-void LLPanelPicks::openClassifiedInfo(LLAvatarClassifiedInfo *c_info)
+void LLPanelPicks::openClassifiedInfo(const LLUUID &classified_id, 
+									  const LLUUID &avatar_id,
+									  const LLUUID &snapshot_id,
+									  const std::string &name, const std::string &desc)
 {
-	if (! c_info)
-	{
-		return;
-	}
-
 	createClassifiedInfoPanel();
 
 	LLSD params;
-	params["classified_id"] = c_info->classified_id;
-	params["avatar_id"] = c_info->creator_id;
-	params["snapshot_id"] = c_info->snapshot_id;
-	params["name"] = c_info->name;
-	params["desc"] = c_info->description;
+	params["classified_id"] = classified_id;
+	params["avatar_id"] = avatar_id;
+	params["snapshot_id"] = snapshot_id;
+	params["name"] = name;
+	params["desc"] = desc;
 
 	getProfilePanel()->openPanel(mPanelClassifiedInfo, params);
 }
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index 893a0c53a3b1bcf0fc9ceb4a034a229089e8075f..0ebf9e26dd7d494121468e30567d7f151b6c1183 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -86,9 +86,6 @@ class LLPanelPicks
 	// parent panels failed to work (picks related code was in my profile panel)
 	void setProfilePanel(LLPanelProfile* profile_panel);
 
-	// display the info panel for the given classified
-	void openClassifiedInfo(LLAvatarClassifiedInfo *c_info);
-
 protected:
 	/*virtual*/void updateButtons();
 
@@ -120,6 +117,10 @@ class LLPanelPicks
 
 	void openPickInfo();
 	void openClassifiedInfo();
+	void openClassifiedInfo(const LLUUID &classified_id, const LLUUID &avatar_id,
+							const LLUUID &snapshot_id, const std::string &name,
+							const std::string &desc);
+	friend class LLPanelProfile;
 
 	void showAccordion(const std::string& name, bool show);
 
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 327482017465e21fe932a1e3f90a5793e0233786..c73ade53c8fc3d58fab1d63560316984456743e4 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -144,6 +144,7 @@ BOOL LLPanelProfile::postBuild()
 
 void LLPanelProfile::onOpen(const LLSD& key)
 {
+	// open the desired panel
 	if (key.has("open_tab_name"))
 	{
 		getTabContainer()[PANEL_PICKS]->onClosePanel();
@@ -155,6 +156,33 @@ void LLPanelProfile::onOpen(const LLSD& key)
 	{
 		getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId());
 	}
+
+	// support commands to open further pieces of UI
+	if (key.has("show_tab_panel"))
+	{
+		std::string panel = key["show_tab_panel"].asString();
+		if (panel == "create_classified")
+		{
+			LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
+			if (picks)
+			{
+				picks->createNewClassified();
+			}
+		}
+		else if (panel == "classified_details")
+		{
+			LLUUID classified_id = key["classified_id"].asUUID();
+			LLUUID avatar_id     = key["classified_avatar_id"].asUUID();
+			LLUUID snapshot_id   = key["classified_snapshot_id"].asUUID();
+			std::string name     = key["classified_name"].asString();
+			std::string desc     = key["classified_desc"].asString();
+			LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
+			if (picks)
+			{
+				picks->openClassifiedInfo(classified_id, avatar_id, snapshot_id, name, desc);
+			}
+		}
+	}
 }
 
 //*TODO redo panel toggling