diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp
index 1f58fb33a4d26b5481a496382fa399155d2020fa..0151276f9962e0b4cc5ed202ca8ac7a2fd255de8 100644
--- a/indra/newview/llpanelmarketplaceoutbox.cpp
+++ b/indra/newview/llpanelmarketplaceoutbox.cpp
@@ -24,15 +24,26 @@
  * $/LicenseInfo$
  */
 
-#include "llviewerprecompiledheaders.h"
+#include <boost/coroutine/coroutine.hpp>
+#include <boost/coroutine/future.hpp>
 
 #include "llpanelmarketplaceoutbox.h"
 
+#include "llbutton.h"
+#include "llcoros.h"
+#include "lleventcoro.h"
+#include "llloadingindicator.h"
+#include "lltimer.h"
+
+
 static LLRegisterPanelClassWrapper<LLPanelMarketplaceOutbox> t_panel_marketplace_outbox("panel_marketplace_outbox");
 
 // protected
 LLPanelMarketplaceOutbox::LLPanelMarketplaceOutbox()
-:	LLPanel()
+	: LLPanel()
+	, mSyncButton(NULL)
+	, mSyncIndicator(NULL)
+	, mSyncInProgress(false)
 {
 }
 
@@ -43,5 +54,83 @@ LLPanelMarketplaceOutbox::~LLPanelMarketplaceOutbox()
 // virtual
 BOOL LLPanelMarketplaceOutbox::postBuild()
 {
+	mSyncButton = getChild<LLButton>("outbox_sync_btn");
+	mSyncButton->setCommitCallback(boost::bind(&LLPanelMarketplaceOutbox::onSyncButtonClicked, this));
+
+	mSyncIndicator = getChild<LLLoadingIndicator>("outbox_sync_indicator");
+
+	mSyncButton->setEnabled(!isOutboxEmpty());
+
 	return TRUE;
 }
+
+bool LLPanelMarketplaceOutbox::isOutboxEmpty() const
+{
+	// TODO: Check for contents of outbox
+
+	return false;
+}
+
+bool LLPanelMarketplaceOutbox::isSyncInProgress() const
+{
+	return mSyncInProgress;
+}
+
+
+std::string gTimeDelayDebugFunc = "";
+
+void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel)
+{
+	waitForEventOn(self, "mainloop");
+
+	LLTimer delayTimer;
+	delayTimer.reset();
+	delayTimer.setTimerExpirySec(5.0f);
+
+	while (!delayTimer.hasExpired())
+	{
+		waitForEventOn(self, "mainloop");
+	}
+
+	outboxPanel->onSyncComplete();
+
+	gTimeDelayDebugFunc = "";
+}
+
+void LLPanelMarketplaceOutbox::onSyncButtonClicked()
+{
+	// TODO: Actually trigger sync to marketplace
+
+	mSyncInProgress = true;
+	updateSyncButtonStatus();
+
+	// Set a timer (for testing only)
+
+    gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this));
+}
+
+void LLPanelMarketplaceOutbox::onSyncComplete()
+{
+	mSyncInProgress = false;
+
+	updateSyncButtonStatus();
+}
+
+void LLPanelMarketplaceOutbox::updateSyncButtonStatus()
+{
+	if (isSyncInProgress())
+	{
+		mSyncButton->setVisible(false);
+
+		mSyncIndicator->setVisible(true);
+		mSyncIndicator->start();
+	}
+	else
+	{
+		mSyncIndicator->stop();
+		mSyncIndicator->setVisible(false);
+
+		mSyncButton->setVisible(true);
+		mSyncButton->setEnabled(!isOutboxEmpty());
+	}
+}
diff --git a/indra/newview/llpanelmarketplaceoutbox.h b/indra/newview/llpanelmarketplaceoutbox.h
index a6a28e0a837a8ee3885145925dca95d8442c6d81..2fbe8197627b1bf1094299211e5d5cc2f516ef5b 100644
--- a/indra/newview/llpanelmarketplaceoutbox.h
+++ b/indra/newview/llpanelmarketplaceoutbox.h
@@ -29,6 +29,11 @@
 
 #include "llpanel.h"
 
+
+class LLButton;
+class LLLoadingIndicator;
+
+
 class LLPanelMarketplaceOutbox : public LLPanel
 {
 public:
@@ -39,6 +44,20 @@ class LLPanelMarketplaceOutbox : public LLPanel
 	~LLPanelMarketplaceOutbox();
 
 	/*virtual*/ BOOL postBuild();
+
+	bool isOutboxEmpty() const;
+	bool isSyncInProgress() const;
+
+	void onSyncComplete();
+
+protected:
+	void onSyncButtonClicked();
+	void updateSyncButtonStatus();
+
+private:
+	LLButton *				mSyncButton;
+	LLLoadingIndicator *	mSyncIndicator;
+	bool					mSyncInProgress;
 };
 
 
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 0795e38366a5507611898fb4ceb5cfc926a9878d..a548849d60f8b1489baf94fa0c97311d150898f6 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -134,7 +134,10 @@
      reference="AvatarListItemIconOfflineColor" />
     <color
      name="BadgeImageColor"
-     value="0.25 0.85 0.25 1.0" />
+     value="0.44 0.69 0.56 1.0" />
+    <color
+     name="BadgeImageBorderColor"
+     value="0.9 0.9 0.9 1.0" />
     <color
      name="BadgeLabelColor"
      reference="White" />
diff --git a/indra/newview/skins/default/textures/icons/Inv_Gift.png b/indra/newview/skins/default/textures/icons/Inv_Gift.png
new file mode 100644
index 0000000000000000000000000000000000000000..5afe85d72d546f665d9b9611c74dbde83cf67d68
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Inv_Gift.png differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Disabled.png b/indra/newview/skins/default/textures/icons/Sync_Disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca2e8def971821a0c94c9c1cf52dc42825f69d3e
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Sync_Disabled.png differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Enabled.png b/indra/newview/skins/default/textures/icons/Sync_Enabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc236c8b98747d5311cfbb8c636113f7128bc0b5
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Sync_Enabled.png differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_1.png b/indra/newview/skins/default/textures/icons/Sync_Progress_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..624e5563765727879897d212f62655d7c6cc6336
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Sync_Progress_1.png differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_2.png b/indra/newview/skins/default/textures/icons/Sync_Progress_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..5769803b3f60e68929467bbfb1d3f0da6f9228e3
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Sync_Progress_2.png differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_3.png b/indra/newview/skins/default/textures/icons/Sync_Progress_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..92d4bfb020cecb80256f3ef98fd591d4ff6e1138
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Sync_Progress_3.png differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_4.png b/indra/newview/skins/default/textures/icons/Sync_Progress_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d43eb3a9fb881566ad14ca1b8d15adb6f660afe
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Sync_Progress_4.png differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_5.png b/indra/newview/skins/default/textures/icons/Sync_Progress_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..766d063c9918649f4a9e237c79a2720d331c6ec8
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Sync_Progress_5.png differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_6.png b/indra/newview/skins/default/textures/icons/Sync_Progress_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfe7f68b723f10095bfab0ee71050ebb52e218ca
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Sync_Progress_6.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index f0a18935025c04b61b355f327ff11b1bcc008cdd..a6e71cc38e4eed11244bc8e979cd0a210294d907 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -72,11 +72,11 @@ with the same filename but different name
   <texture name="BackButton_Over" file_name="icons/back_arrow_over.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />
   <texture name="BackButton_Press" file_name="icons/back_arrow_press.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />
 
-  <texture name="Badge" file_name="widgets/Badge.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
+  <texture name="Badge_Background" file_name="widgets/Badge_Background.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
+  <texture name="Badge_Border" file_name="widgets/Badge_Border.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
 
   <texture name="Blank" file_name="Blank.png" preload="false" />
 
-
   <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0"  />
   <texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0"  />
 
@@ -479,7 +479,16 @@ with the same filename but different name
   <texture name="StopReload_Off" file_name="icons/StopReload_Off.png" preload="false" />
   <texture name="StopReload_Over" file_name="icons/StopReload_Over.png" preload="false" />
 
-  <texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" />
+  <texture name="Sync_Disabled" file_name="icons/Sync_Disabled.png" preload="true" />
+  <texture name="Sync_Enabled" file_name="icons/Sync_Enabled.png" preload="true" />
+  <texture name="Sync_Progress_1" file_name="icons/Sync_Progress_1.png" preload="true" />
+  <texture name="Sync_Progress_2" file_name="icons/Sync_Progress_2.png" preload="true" />
+  <texture name="Sync_Progress_3" file_name="icons/Sync_Progress_3.png" preload="true" />
+  <texture name="Sync_Progress_4" file_name="icons/Sync_Progress_4.png" preload="true" />
+  <texture name="Sync_Progress_5" file_name="icons/Sync_Progress_5.png" preload="true" />
+  <texture name="Sync_Progress_6" file_name="icons/Sync_Progress_6.png" preload="true" />
+
+    <texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" />
   <texture name="TabIcon_Appearance_Selected" file_name="taskpanel/TabIcon_Appearance_Selected.png" preload="false" />
   <texture name="TabIcon_Close_Off" file_name="taskpanel/TabIcon_Close_Off.png" preload="false" />
   <texture name="TabIcon_Home_Off" file_name="taskpanel/TabIcon_Home_Off.png" preload="false" />
diff --git a/indra/newview/skins/default/textures/widgets/Badge.png b/indra/newview/skins/default/textures/widgets/Badge.png
deleted file mode 100644
index 862b13d219ad0d6d23027ee4ed1c00069763d4df..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/widgets/Badge.png and /dev/null differ
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background.png b/indra/newview/skins/default/textures/widgets/Badge_Background.png
new file mode 100644
index 0000000000000000000000000000000000000000..5089c303129249824f4c05b828240f0dc90dbc06
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Badge_Background.png differ
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Border.png b/indra/newview/skins/default/textures/widgets/Badge_Border.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b086a63fb16efaab8fc2572cd4e46ddcecf7e15
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Badge_Border.png differ
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index fa7997566905a432ca552fa3a21ec3d763708c7d..ffc018b8567cdbed105b1d66fa8ec1691b7b4398 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -124,37 +124,60 @@
                       height="125"
                       width="310">
                      <button
-                         label="MARKETPLACE OUTBOX"
-                         is_toggle="true"
-                         name="outbox_btn"
-                      follows="top|left|right"
-                         image_unselected="MarketplaceBtn_Off"
-                            image_selected="MarketplaceBtn_Selected"
-                         height="35"
-                         tab_stop="false"
-                         width="308"
-                         halign="left"
-                         pad_left="35"
-                         top="0"
+                        label="MARKETPLACE OUTBOX"
+                        is_toggle="true"
+                        name="outbox_btn"
+                        follows="top|left|right"
+                        image_unselected="MarketplaceBtn_Off"
+                        image_selected="MarketplaceBtn_Selected"
+                        height="35"
+                        tab_stop="false"
+                        width="308"
+                        halign="left"
+                        pad_left="35"
+                        top="0"
                         left="0" />
-                    <button
-                        label="SYNC"
+                   <button
+                        image_disabled="Sync_Disabled"
+                        image_disabled_selected="Sync_Disabled"
+                        image_unselected="Sync_Enabled"
+                        image_selected="Sync_Enabled"
+                        label=""
                         is_toggle="false"
                         name="outbox_sync_btn"
                         follows="top|right"
-                        height="25"
+                        height="16"
                         tab_stop="false"
-                        width="45"
+                        width="16"
                         halign="center"
-                        top="5"
-                        left="-50"
+                        top="10"
+                        left="-40"
                         enabled="false" />
+                     <loading_indicator
+                        follows="top|right"
+                        name="outbox_sync_indicator"
+                        top="10"
+                        left="-40"
+                        height="16"
+                        width="16"
+                        images_per_sec="1.0"
+                        tab_stop="false"
+                        visible="false">
+                         <images>
+                             <image name="Sync_Progress_1"/>
+                             <image name="Sync_Progress_2"/>
+                             <image name="Sync_Progress_3"/>
+                             <image name="Sync_Progress_4"/>
+                             <image name="Sync_Progress_5"/>
+                             <image name="Sync_Progress_6"/>
+                         </images>
+                     </loading_indicator>
                      <panel
-                         follows="all"
-                         left="0"
-                         height="90"
-                         width="250"
-                         top="30"
+                        follows="all"
+                        left="0"
+                        height="90"
+                        width="250"
+                        top="30"
                            >
                          <text
                              left ="40"
diff --git a/indra/newview/skins/default/xui/en/widgets/badge.xml b/indra/newview/skins/default/xui/en/widgets/badge.xml
index 4eb633ac0cfac1f164993990079a054b3f5c5061..ceec09d1e40956497d8c11011082d1ec664f8b9e 100644
--- a/indra/newview/skins/default/xui/en/widgets/badge.xml
+++ b/indra/newview/skins/default/xui/en/widgets/badge.xml
@@ -2,7 +2,7 @@
 <!-- Additional attributes:
    -->
 <badge font="SansSerifSmall"
-       image="Badge"
+       image="Badge_Background"
        image_color="BadgeImageColor"
        label_color="BadgeLabelColor"
        location="top_left"