diff --git a/indra/newview/llfloatermarketplacelistings.cpp b/indra/newview/llfloatermarketplacelistings.cpp
index 42e49f5d7dfede895ff976a250fb3fd12a8fe28a..10c6045f875ce835ec69420eac30a2b2e515f5c2 100755
--- a/indra/newview/llfloatermarketplacelistings.cpp
+++ b/indra/newview/llfloatermarketplacelistings.cpp
@@ -246,29 +246,6 @@ void LLFloaterMarketplaceListings::onOpen(const LLSD& key)
 		setup();
 	}
 	
-    // Merov : Debug : Create fake Marketplace data if none is present
-	if (LLMarketplaceData::instance().isEmpty() && (getFolderCount() > 0))
-	{
-        LLInventoryModel::cat_array_t* cats;
-        LLInventoryModel::item_array_t* items;
-        gInventory.getDirectDescendentsOf(mRootFolderId, cats, items);
-        
-        int index = 0;
-        for (LLInventoryModel::cat_array_t::iterator iter = cats->begin(); iter != cats->end(); iter++, index++)
-        {
-            LLViewerInventoryCategory* category = *iter;
-            if (index%3)
-            {
-                LLMarketplaceData::instance().addTestItem(category->getUUID());
-                if (index%3 == 1)
-                {
-                    LLMarketplaceData::instance().setListingID(category->getUUID(),"TestingID1234");
-                }
-                LLMarketplaceData::instance().setActivation(category->getUUID(),(index%2));
-            }
-        }
-    }
-
 	//
 	// Update the floater view
 	//
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index ceb54b3dcdd4eec6212cc7750a9f046c197123c9..cd3e51a0ea6e8135928390b0e3ac67ec9e19cfcf 100755
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -744,10 +744,6 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		addOutboxContextMenuOptions(flags, items, disabled_items);
 	}
-    else if (isMarketplaceListingsFolder())
-    {
-		addMarketplaceContextMenuOptions(flags, items, disabled_items);
-    }
 	else
 	{
 		items.push_back(std::string("Share"));
@@ -853,8 +849,49 @@ void LLInvFVBridge::addMarketplaceContextMenuOptions(U32 flags,
 												menuentry_vec_t &items,
 												menuentry_vec_t &disabled_items)
 {
-    items.push_back(std::string("Marketplace Separator"));
-	items.push_back(std::string("Marketplace Activate"));
+    S32 depth = depth_nesting_in_marketplace(mUUID);
+    llinfos << "Merov : adding marketplace menu at depth = " << depth << llendl;
+    if (depth <= 1)
+    {
+        // Options available at the Listing Folder level only
+        items.push_back(std::string("Marketplace Add Listing"));
+        items.push_back(std::string("Marketplace Attach Listing"));
+        if (LLMarketplaceData::instance().isListed(mUUID))
+        {
+			disabled_items.push_back(std::string("Marketplace Add Listing"));
+			disabled_items.push_back(std::string("Marketplace Attach Listing"));
+        }
+    }
+    if (depth <= 2)
+    {
+        // Options available at the Listing Folder and Version Folder levels
+        items.push_back(std::string("Marketplace Activate"));
+        items.push_back(std::string("Marketplace Deactivate"));
+        if (LLMarketplaceData::instance().isListed(mUUID))
+        {
+            if (LLMarketplaceData::instance().getActivationState(mUUID))
+            {
+                disabled_items.push_back(std::string("Marketplace Activate"));
+            }
+            else
+            {
+                disabled_items.push_back(std::string("Marketplace Deactivate"));
+            }
+        }
+        else
+        {
+			disabled_items.push_back(std::string("Marketplace Activate"));
+			disabled_items.push_back(std::string("Marketplace Deactivate"));
+        }
+    }
+    // Options available at all levels on all items
+    items.push_back(std::string("Marketplace Show Listing"));
+    if (!LLMarketplaceData::instance().isListed(mUUID))
+    {
+        disabled_items.push_back(std::string("Marketplace Show Listing"));
+    }
+    // Separator
+    items.push_back(std::string("Marketplace Listings Separator"));
 }
 
 
@@ -3084,13 +3121,33 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
 	}
 	else if ("marketplace_activate" == action)
 	{
-        if (!LLMarketplaceData::instance().isListed(mUUID))
-        {
-            LLMarketplaceData::instance().addTestItem(mUUID);
-        }
         LLMarketplaceData::instance().setActivation(mUUID,true);
 		return;
 	}
+	else if ("marketplace_deactivate" == action)
+	{
+        LLMarketplaceData::instance().setActivation(mUUID,false);
+		return;
+	}
+	else if ("marketplace_add_listing" == action)
+	{
+        // *TODO : Do something a bit smarter...
+        LLMarketplaceData::instance().addTestItem(mUUID);
+		return;
+	}
+	else if ("marketplace_attach_listing" == action)
+	{
+        // *TODO : Get a list of listing IDs and let the user choose one, delist the old one and relist the new one
+        LLMarketplaceData::instance().addTestItem(mUUID);
+		return;
+	}
+	else if ("marketplace_show_listing" == action)
+	{
+        // *TODO : Need to show a browser window with the info for the listing
+        // Get the listing id (i.e. go up the hierarchy to find the listing folder
+        // Show the listing folder in a browser window
+		return;
+	}
 #ifndef LL_RELEASE_FOR_DOWNLOAD
 	else if ("delete_system_folder" == action)
 	{
@@ -4644,6 +4701,10 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		addOutboxContextMenuOptions(flags, items, disabled_items);
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{
 		items.push_back(std::string("Share"));
@@ -4711,6 +4772,10 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		addOutboxContextMenuOptions(flags, items, disabled_items);
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{
 		if (isItemInTrash())
@@ -4769,6 +4834,10 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		addOutboxContextMenuOptions(flags, items, disabled_items);
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{
 		if(isItemInTrash())
@@ -5019,6 +5088,10 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		items.push_back(std::string("Delete"));
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{
 		items.push_back(std::string("Share"));
@@ -5286,6 +5359,10 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		items.push_back(std::string("Delete"));
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{
 		items.push_back(std::string("Share"));
@@ -5340,6 +5417,10 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		items.push_back(std::string("Delete"));
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{
 		if(isItemInTrash())
@@ -5619,6 +5700,10 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		items.push_back(std::string("Delete"));
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{
 		items.push_back(std::string("Share"));
@@ -5841,6 +5926,10 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		items.push_back(std::string("Delete"));
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{	// FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere
 		BOOL can_open = ((flags & SUPPRESS_OPEN_ITEM) != SUPPRESS_OPEN_ITEM);
@@ -6141,6 +6230,10 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	{
 		addOutboxContextMenuOptions(flags, items, disabled_items);
 	}
+    else if (isMarketplaceListingsFolder())
+    {
+		addMarketplaceContextMenuOptions(flags, items, disabled_items);
+    }
 	else
 	{
 		items.push_back(std::string("Properties"));
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index d99193067d602cd84c8d002d96a2fb7792aa6197..e57519d67a2bc41a528c80a5ae7f2d4c7968baa1 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -705,6 +705,33 @@ void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_fold
 // permission checking and listings validation.
 ///----------------------------------------------------------------------------
 
+S32 depth_nesting_in_marketplace(LLUUID cur_uuid)
+{
+    // Get the marketplace listings root, exit with -1 (i.e. not under the marketplace listings root) if none
+    const LLUUID marketplace_listings_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
+    if (marketplace_listings_uuid.isNull())
+    {
+        return -1;
+    }
+    // If not a descendent of the marketplace listings root, then the nesting depth is -1 by definition
+    if (!gInventory.isObjectDescendentOf(cur_uuid, marketplace_listings_uuid))
+    {
+        return -1;
+    }
+    
+    // Iterate through the parents till we hit the marketplace listings root
+    // Note that the marketplace listings root itself will return 0
+    S32 depth = 0;
+    LLInventoryObject* cur_object = gInventory.getObject(cur_uuid);
+    while (cur_uuid != marketplace_listings_uuid)
+    {
+        depth++;
+        cur_uuid = cur_object->getParentUUID();
+        cur_object = gInventory.getCategory(cur_uuid);
+    }
+    return depth;
+}
+
 void move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_folder, bool copy)
 {
     // Get the marketplace listings, exit with error if none
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index e6f9ef6d8918d16142df7ec5911110c12e5a7420..aab4db8adf381966712f9e6022ece5c058396b28 100755
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -76,6 +76,7 @@ void move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_fol
 void move_folder_to_marketplacelistings(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, bool copy = false);
 bool has_correct_permissions_for_sale(LLInventoryCategory* cat);
 void validate_marketplacelistings(LLInventoryCategory* inv_cat);
+S32  depth_nesting_in_marketplace(LLUUID cur_uuid);
 
 /**                    Miscellaneous global functions
  **                                                                            **
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index aa115c1ad143cedb32bdd74b39fcf57abcbf248f..cde14e72f0e56a091dac6437a58002c392ac2f1c 100755
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -4,6 +4,49 @@
  layout="topleft"
  name="Popup"
  visible="false">
+	<menu_item_call
+        label="Add Listing"
+        layout="topleft"
+        name="Marketplace Add Listing">
+		<menu_item_call.on_click
+        function="Inventory.DoToSelected"
+        parameter="marketplace_add_listing" />
+	</menu_item_call>
+	<menu_item_call
+        label="Attach Listing"
+        layout="topleft"
+        name="Marketplace Attach Listing">
+		<menu_item_call.on_click
+        function="Inventory.DoToSelected"
+        parameter="marketplace_attach_listing" />
+	</menu_item_call>
+	<menu_item_call
+        label="Show Listing"
+        layout="topleft"
+        name="Marketplace Show Listing">
+		<menu_item_call.on_click
+        function="Inventory.DoToSelected"
+        parameter="marketplace_show_listing" />
+	</menu_item_call>
+	<menu_item_call
+        label="Activate"
+        layout="topleft"
+        name="Marketplace Activate">
+		<menu_item_call.on_click
+        function="Inventory.DoToSelected"
+        parameter="marketplace_activate" />
+	</menu_item_call>
+	<menu_item_call
+        label="Deactivate"
+        layout="topleft"
+        name="Marketplace Deactivate">
+		<menu_item_call.on_click
+        function="Inventory.DoToSelected"
+        parameter="marketplace_deactivate" />
+	</menu_item_call>
+	<menu_item_separator
+    layout="topleft"
+    name="Marketplace Listings Separator" />
     <menu_item_call
      label="Share"
      layout="topleft"
@@ -726,14 +769,6 @@
 		 parameter="send_to_marketplace" />
 	</menu_item_call>
 	<menu_item_call
-        label="Activate"
-        layout="topleft"
-        name="Marketplace Activate">
-		<menu_item_call.on_click
-        function="Inventory.DoToSelected"
-        parameter="marketplace_activate" />
-	</menu_item_call>
-	<menu_item_call
      label="--no options--"
      layout="topleft"
      name="--no options--" />