diff --git a/indra/newview/llfloatermarketplacelistings.cpp b/indra/newview/llfloatermarketplacelistings.cpp
index 92ada398e0c7edda0b1d12b76360add8abc82383..bed4ea841cd097d496b4a9bd0aac27736d611362 100755
--- a/indra/newview/llfloatermarketplacelistings.cpp
+++ b/indra/newview/llfloatermarketplacelistings.cpp
@@ -357,7 +357,7 @@ BOOL LLFloaterMarketplaceListings::postBuild()
 	mCategoryAddedObserver = new LLMarketplaceListingsAddedObserver(this);
 	gInventory.addObserver(mCategoryAddedObserver);
 	
-    // Debug : fetch aggressively so we can create test data right onOpen()
+    // Fetch aggressively so we can interact with listings right onOpen()
 	fetchContents();
 
 	return TRUE;
@@ -389,10 +389,13 @@ void LLFloaterMarketplaceListings::onFocusReceived()
 
 void LLFloaterMarketplaceListings::fetchContents()
 {
-	if (mRootFolderId.notNull())
+	if (mRootFolderId.notNull() &&
+        (LLMarketplaceData::instance().getSLMDataFetched() != MarketplaceFetchCodes::MARKET_FETCH_LOADING) &&
+        (LLMarketplaceData::instance().getSLMDataFetched() != MarketplaceFetchCodes::MARKET_FETCH_DONE))
 	{
+        LLMarketplaceData::instance().setDataFetchedSignal(boost::bind(&LLFloaterMarketplaceListings::updateView, this));
+        LLMarketplaceData::instance().setSLMDataFetched(MarketplaceFetchCodes::MARKET_FETCH_LOADING);
 		LLInventoryModelBackgroundFetch::instance().start(mRootFolderId);
-        // Get all the SLM Listings
         LLMarketplaceData::instance().getSLMListings();
 	}
 }
@@ -492,6 +495,7 @@ void LLFloaterMarketplaceListings::setStatusString(const std::string& statusStri
 void LLFloaterMarketplaceListings::updateView()
 {
     U32 mkt_status = LLMarketplaceData::instance().getSLMStatus();
+    U32 data_fetched = LLMarketplaceData::instance().getSLMDataFetched();
     
     // Get or create the root folder if we are a merchant and it hasn't been done already
     if (mRootFolderId.isNull() && (mkt_status == MarketplaceStatusCodes::MARKET_PLACE_MERCHANT))
@@ -500,14 +504,18 @@ void LLFloaterMarketplaceListings::updateView()
     }
 
     // Update the bottom initializing status and progress dial
-    if (mkt_status == MarketplaceStatusCodes::MARKET_PLACE_INITIALIZING)
+    if ((mkt_status == MarketplaceStatusCodes::MARKET_PLACE_INITIALIZING) ||
+        (data_fetched == MarketplaceFetchCodes::MARKET_FETCH_NOT_DONE) ||
+        (data_fetched == MarketplaceFetchCodes::MARKET_FETCH_LOADING))
     {
-        setStatusString(getString("MarketplaceListingsInitializing"));
+        // Just show the loading indicator in that case and fetch the data (fetch will be skipped if it's already loading)
         mInventoryInitializationInProgress->setVisible(true);
+        mPanelListings->setVisible(FALSE);
+        fetchContents();
+        return;
     }
     else
     {
-        setStatusString("");
         mInventoryInitializationInProgress->setVisible(false);
     }
     
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
index c0823cf1de9096acecd87b70f75c15cc7df71178..ab3be79a2ec8ca815816526eebfcab4ac7f5ed33 100755
--- a/indra/newview/llmarketplacefunctions.cpp
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -154,10 +154,6 @@ void log_SLM_infos(const std::string& request, const std::string& url, const std
     }
 }
 
-// Merov: This is a temporary hack used by dev while secondlife-staging is down...
-// *TODO : Suppress that before shipping!
-static bool sBypassMerchant = false;
-
 class LLSLMGetMerchantResponder : public LLHTTPClient::Responder
 {
 	LOG_CLASS(LLSLMGetMerchantResponder);
@@ -168,13 +164,7 @@ class LLSLMGetMerchantResponder : public LLHTTPClient::Responder
 protected:
     virtual void httpFailure()
     {
-        if (sBypassMerchant)
-        {
-            // *TODO : Suppress that before shipping!
-            log_SLM_infos("Get /merchant", getStatus(), "SLM Connection error bypassed (debug only)");
-            LLMarketplaceData::instance().setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_MERCHANT);
-        }
-        else if (HTTP_NOT_FOUND == getStatus())
+        if (HTTP_NOT_FOUND == getStatus())
         {
             log_SLM_infos("Get /merchant", getStatus(), "User is not a merchant");
             LLMarketplaceData::instance().setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_NOT_MERCHANT);
@@ -222,6 +212,7 @@ class LLSLMGetListingsResponder : public LLHTTPClient::Responder
 		if (!isGoodStatus())
 		{
             log_SLM_warning("Get /listings", getStatus(), getReason(), "", body);
+            LLMarketplaceData::instance().setSLMDataFetched(MarketplaceFetchCodes::MARKET_FETCH_FAILED);
             update_marketplace_category(mExpectedFolderId, false);
             gInventory.notifyObservers();
             return;
@@ -232,6 +223,7 @@ class LLSLMGetListingsResponder : public LLHTTPClient::Responder
         if (!reader.parse(body,root))
         {
             log_SLM_warning("Get /listings", getStatus(), "Json parsing failed", reader.getFormatedErrorMessages(), body);
+            LLMarketplaceData::instance().setSLMDataFetched(MarketplaceFetchCodes::MARKET_FETCH_FAILED);
             update_marketplace_category(mExpectedFolderId, false);
             gInventory.notifyObservers();
             return;
@@ -263,6 +255,7 @@ class LLSLMGetListingsResponder : public LLHTTPClient::Responder
         }
         
         // Update all folders under the root
+        LLMarketplaceData::instance().setSLMDataFetched(MarketplaceFetchCodes::MARKET_FETCH_DONE);
         update_marketplace_category(mExpectedFolderId, false);
         gInventory.notifyObservers();        
     }
@@ -1194,7 +1187,9 @@ LLMarketplaceTuple::LLMarketplaceTuple(const LLUUID& folder_id, S32 listing_id,
 // Data map
 LLMarketplaceData::LLMarketplaceData() : 
  mMarketPlaceStatus(MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED),
+ mMarketPlaceDataFetched(MarketplaceFetchCodes::MARKET_FETCH_NOT_DONE),
  mStatusUpdatedSignal(NULL),
+ mDataFetchedSignal(NULL),
  mDirtyCount(false)
 {
     mInventoryObserver = new LLMarketplaceInventoryObserver;
@@ -1232,6 +1227,15 @@ void LLMarketplaceData::initializeSLM(const status_updated_signal_t::slot_type&
     }
 }
 
+void LLMarketplaceData::setDataFetchedSignal(const status_updated_signal_t::slot_type& cb)
+{
+	if (mDataFetchedSignal == NULL)
+	{
+		mDataFetchedSignal = new status_updated_signal_t();
+	}
+	mDataFetchedSignal->connect(cb);
+}
+
 // Get/Post/Put requests to the SLM Server using the SLM API
 void LLMarketplaceData::getSLMListings()
 {
@@ -1397,6 +1401,15 @@ void LLMarketplaceData::setSLMStatus(U32 status)
     }
 }
 
+void LLMarketplaceData::setSLMDataFetched(U32 status)
+{
+    mMarketPlaceDataFetched = status;
+    if (mDataFetchedSignal)
+    {
+        (*mDataFetchedSignal)();
+    }
+}
+
 // Creation / Deletion / Update
 // Methods publicly called
 bool LLMarketplaceData::createListing(const LLUUID& folder_id)
diff --git a/indra/newview/llmarketplacefunctions.h b/indra/newview/llmarketplacefunctions.h
index 755643ccd0c864a42f7a729d26680bb0ca318d96..34b650b0cec7e25b4e0e273120ce7d8f5040f6c1 100755
--- a/indra/newview/llmarketplacefunctions.h
+++ b/indra/newview/llmarketplacefunctions.h
@@ -73,6 +73,17 @@ namespace MarketplaceStatusCodes
 	};
 }
 
+namespace MarketplaceFetchCodes
+{
+	enum sCode
+	{
+		MARKET_FETCH_NOT_DONE = 0,
+		MARKET_FETCH_LOADING = 1,
+		MARKET_FETCH_FAILED = 2,
+		MARKET_FETCH_DONE = 3
+	};
+}
+
 
 class LLMarketplaceInventoryImporter
 	: public LLSingleton<LLMarketplaceInventoryImporter>
@@ -190,6 +201,9 @@ class LLMarketplaceData
 	void setSLMStatus(U32 status);
     void getSLMListings();
     bool isEmpty() { return (mMarketplaceItems.size() == 0); }
+    void setDataFetchedSignal(const status_updated_signal_t::slot_type& cb);
+    void setSLMDataFetched(U32 status);
+    U32 getSLMDataFetched() { return mMarketPlaceDataFetched; }
     
     // High level create/delete/set Marketplace data: each method returns true if the function succeeds, false if error
     bool createListing(const LLUUID& folder_id);
@@ -253,6 +267,8 @@ class LLMarketplaceData
     bool mDirtyCount;   // If true, stock count value need to be updated at the next check
     
     // Update data
+    U32 mMarketPlaceDataFetched;
+	status_updated_signal_t* mDataFetchedSignal;
     std::set<LLUUID> mPendingUpdateSet;
 
     // Listing folders waiting for validation
diff --git a/indra/newview/skins/default/xui/en/floater_marketplace_listings.xml b/indra/newview/skins/default/xui/en/floater_marketplace_listings.xml
index 8f58146a48a6fc9355b6ed8f5e3e9f9e8b13dde7..0806a872883d2e4c7a9afb54af485c2697874e17 100755
--- a/indra/newview/skins/default/xui/en/floater_marketplace_listings.xml
+++ b/indra/newview/skins/default/xui/en/floater_marketplace_listings.xml
@@ -13,7 +13,6 @@
   save_rect="true"
   save_visibility="false"
   reuse_instance="true">
-  <string name="MarketplaceListingsInitializing">Initializing...</string>
   <panel
     name="marketplace_listings_panel"
     follows="all"