diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 0bbdcfd6ffe8048afc77a55c2b6ad2d0442b442c..673494820f9a0ed5f8a639042deaf909535dda9f 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -29,6 +29,7 @@ set(llui_SOURCE_FILES
     llaccordionctrl.cpp
     llaccordionctrltab.cpp
     llbadge.cpp
+	llbadgeholder.cpp
     llbadgeowner.cpp
     llbutton.cpp
     llcheckboxctrl.cpp
@@ -123,6 +124,7 @@ set(llui_HEADER_FILES
     llaccordionctrl.h
     llaccordionctrltab.h
     llbadge.h
+	llbadgeholder.h
     llbadgeowner.h
     llbutton.h
     llcallbackmap.h
diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp
index c28a947a7fa1eb2e8fb2486d19b314a26739dd5d..fde3c53a6512ae79da093eea1bb2cef77822131a 100644
--- a/indra/llui/llbadge.cpp
+++ b/indra/llui/llbadge.cpp
@@ -43,6 +43,8 @@ LLBadge::Params::Params()
 	, image_color("image_color")
 	, label("label")
 	, label_color("label_color")
+	, label_offset_horiz("label_offset_horiz")
+	, label_offset_vert("label_offset_vert")
 	, location("location", LLRelPos::TOP_LEFT)
 	, location_percent_hcenter("location_percent_hcenter")
 	, location_percent_vcenter("location_percent_vcenter")
@@ -65,6 +67,8 @@ bool LLBadge::Params::equals(const Params& a) const
 	comp &= (image_color() == a.image_color());
 	comp &= (label() == a.label());
 	comp &= (label_color() == a.label_color());
+	comp &= (label_offset_horiz() == a.label_offset_horiz());
+	comp &= (label_offset_vert() == a.label_offset_vert());
 	comp &= (location() == a.location());
 	comp &= (location_percent_hcenter() == a.location_percent_hcenter());
 	comp &= (location_percent_vcenter() == a.location_percent_vcenter());
@@ -84,6 +88,8 @@ LLBadge::LLBadge(const LLBadge::Params& p)
 	, mImageColor(p.image_color)
 	, mLabel(p.label)
 	, mLabelColor(p.label_color)
+	, mLabelOffsetHoriz(p.label_offset_horiz)
+	, mLabelOffsetVert(p.label_offset_vert)
 	, mLocation(p.location)
 	, mLocationPercentHCenter(0.5f)
 	, mLocationPercentVCenter(0.5f)
@@ -131,6 +137,18 @@ LLBadge::~LLBadge()
 {
 }
 
+bool LLBadge::addToView(LLView * view)
+{
+	bool child_added = view->addChild(this);
+
+	if (child_added)
+	{
+		setShape(view->getLocalRect());
+	}
+
+	return child_added;
+}
+
 void LLBadge::setLabel(const LLStringExplicit& label)
 {
 	mLabel = label;
@@ -241,8 +259,10 @@ void LLBadge::draw()
 			// Draw the label
 			//
 
-			mGLFont->render(badge_label_wstring, badge_label_begin_offset,
-							badge_center_x, badge_center_y,
+			mGLFont->render(badge_label_wstring,
+							badge_label_begin_offset,
+							badge_center_x + mLabelOffsetHoriz,
+							badge_center_y + mLabelOffsetVert,
 							mLabelColor % alpha,
 							LLFontGL::HCENTER, LLFontGL::VCENTER, // centered around the position
 							LLFontGL::NORMAL, // normal text (not bold, italics, etc.)
diff --git a/indra/llui/llbadge.h b/indra/llui/llbadge.h
index 0f923ef01b78e856928049a08d2bf6c5bee7bdf4..f81ccdf0cd1640cacb592bcd5916e861074ff066 100644
--- a/indra/llui/llbadge.h
+++ b/indra/llui/llbadge.h
@@ -104,6 +104,9 @@ class LLBadge
 		Optional< std::string >			label;
 		Optional< LLUIColor >			label_color;
 
+		Optional< S32 >					label_offset_horiz;
+		Optional< S32 >					label_offset_vert;
+
 		Optional< LLRelPos::Location >	location;
 		Optional< U32 >					location_percent_hcenter;
 		Optional< U32 >					location_percent_vcenter;
@@ -123,7 +126,9 @@ class LLBadge
 public:
 
 	~LLBadge();
-	
+
+	bool				addToView(LLView * view);
+
 	virtual void		draw();
 
 	const std::string	getLabel() const { return wstring_to_utf8str(mLabel); }
@@ -141,6 +146,9 @@ class LLBadge
 	LLUIString				mLabel;
 	LLUIColor				mLabelColor;
 
+	S32						mLabelOffsetHoriz;
+	S32						mLabelOffsetVert;
+
 	LLRelPos::Location		mLocation;
 	F32						mLocationPercentHCenter;
 	F32						mLocationPercentVCenter;
diff --git a/indra/llui/llbadgeholder.cpp b/indra/llui/llbadgeholder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1f786f36ae4cb4fe043232f033d6a26a8bd0ec5a
--- /dev/null
+++ b/indra/llui/llbadgeholder.cpp
@@ -0,0 +1,45 @@
+/** 
+ * @file llbadgeholder.cpp
+ * @brief Source for badge holders
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llbadgeholder.h"
+
+#include "llbadge.h"
+#include "llview.h"
+
+
+bool LLBadgeHolder::addBadge(LLBadge * badge)
+{
+	bool badge_added = false;
+
+	LLView * this_view = dynamic_cast<LLView *>(this);
+
+	if (this_view && mAcceptsBadge)
+	{
+		badge_added = badge->addToView(this_view);
+	}
+
+	return badge_added;
+}
diff --git a/indra/llui/llbadgeholder.h b/indra/llui/llbadgeholder.h
new file mode 100644
index 0000000000000000000000000000000000000000..2538eaae91c17e854fa4834ad94b63a8a7a399b9
--- /dev/null
+++ b/indra/llui/llbadgeholder.h
@@ -0,0 +1,56 @@
+/** 
+ * @file llbadgeholder.h
+ * @brief Header for badge holders
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBADGEHOLDER_H
+#define LL_LLBADGEHOLDER_H
+
+//
+// Classes
+//
+
+class LLBadge;
+
+class LLBadgeHolder
+{
+public:
+
+	LLBadgeHolder(bool acceptsBadge)
+		: mAcceptsBadge(acceptsBadge)
+	{
+	}
+
+	void setAcceptsBadge(bool acceptsBadge) { mAcceptsBadge = acceptsBadge; }
+	bool acceptsBadge() const { return mAcceptsBadge; }
+
+	virtual bool addBadge(LLBadge * badge);
+
+private:
+
+	bool		mAcceptsBadge;
+
+};
+
+#endif  // LL_LLBADGEHOLDER_H
diff --git a/indra/llui/llbadgeowner.cpp b/indra/llui/llbadgeowner.cpp
index 77f15567bf655d5a155605c55d11a3f6336a1d9c..1860a05eddc2b7a6fadea30ce4fbf6c6ace14ef1 100644
--- a/indra/llui/llbadgeowner.cpp
+++ b/indra/llui/llbadgeowner.cpp
@@ -26,6 +26,7 @@
 
 #include "linden_common.h"
 
+#include "llbadgeholder.h"
 #include "llbadgeowner.h"
 #include "llpanel.h"
 
@@ -81,40 +82,44 @@ void LLBadgeOwner::setBadgeVisibility(bool visible)
 	}
 }
 
-void LLBadgeOwner::addBadgeToParentPanel()
+bool LLBadgeOwner::addBadgeToParentPanel()
 {
+	bool badge_added = false;
+
 	LLView * owner_view = mBadgeOwnerView.get();
 	
 	if (mBadge && owner_view)
 	{
-		// Badge parent is badge owner by default
-		LLView * badge_parent = owner_view;
+		LLBadgeHolder * badge_holder = NULL;
 
-		// Find the appropriate parent for the badge
+		// Find the appropriate holder for the badge
 		LLView * parent = owner_view->getParent();
 
 		while (parent)
 		{
-			LLPanel * parent_panel = dynamic_cast<LLPanel *>(parent);
+			LLBadgeHolder * badge_holder_panel = dynamic_cast<LLBadgeHolder *>(parent);
 
-			if (parent_panel && parent_panel->acceptsBadge())
+			if (badge_holder_panel && badge_holder_panel->acceptsBadge())
 			{
-				badge_parent = parent;
+				badge_holder = badge_holder_panel;
 				break;
 			}
 
 			parent = parent->getParent();
 		}
 
-		if (badge_parent)
+		if (badge_holder)
 		{
-			badge_parent->addChild(mBadge);
+			badge_added = badge_holder->addBadge(mBadge);
 		}
 		else
 		{
-			llwarns << "Unable to find parent panel for badge " << mBadge->getName() << " on " << owner_view->getName() << llendl;
+			// Badge parent is fallback badge owner if no valid holder exists in the hierarchy
+			badge_added = mBadge->addToView(owner_view);
 		}
 	}
+
+	return badge_added;
 }
 
 LLBadge* LLBadgeOwner::createBadge(const LLBadge::Params& p)
diff --git a/indra/llui/llbadgeowner.h b/indra/llui/llbadgeowner.h
index a2399189a5530b832b7fa828468005833569d1ea..8d03e30645089aa1bf373dba40021f0cc9cea016 100644
--- a/indra/llui/llbadgeowner.h
+++ b/indra/llui/llbadgeowner.h
@@ -41,7 +41,7 @@ class LLBadgeOwner
 	LLBadgeOwner(LLHandle< LLView > viewHandle);
 
 	void initBadgeParams(const LLBadge::Params& p);
-	void addBadgeToParentPanel();
+	bool addBadgeToParentPanel();
 	
 	bool badgeHasParent() const { return (mBadge && mBadge->getParent()); }
 
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 1dcdd79efae5cd37e7ae925ec8871e490e4f52d3..775db6bc9d08d962b9e991550cc2838c5676a79f 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -99,6 +99,7 @@ LLPanel::Params::Params()
 
 LLPanel::LLPanel(const LLPanel::Params& p)
 :	LLUICtrl(p),
+	LLBadgeHolder(p.accepts_badge),
 	mBgVisible(p.background_visible),
 	mBgOpaque(p.background_opaque),
 	mBgOpaqueColor(p.bg_opaque_color()),
@@ -114,8 +115,7 @@ LLPanel::LLPanel(const LLPanel::Params& p)
 	mCommitCallbackRegistrar(false),
 	mEnableCallbackRegistrar(false),
 	mXMLFilename(p.filename),
-	mVisibleSignal(NULL),
-	mAcceptsBadge(p.accepts_badge)
+	mVisibleSignal(NULL)
 	// *NOTE: Be sure to also change LLPanel::initFromParams().  We have too
 	// many classes derived from LLPanel to retrofit them all to pass in params.
 {
@@ -488,7 +488,7 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
 	mBgOpaqueImageOverlay = p.bg_opaque_image_overlay;
 	mBgAlphaImageOverlay = p.bg_alpha_image_overlay;
 
-	mAcceptsBadge = p.accepts_badge;
+	setAcceptsBadge(p.accepts_badge);
 }
 
 static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup");
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index 67674fab7e9ca9f56727787907585f1c7392d796..1b777ee1cb684181a0aaf2b7bf2789b4a6baea7f 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -35,6 +35,7 @@
 #include "lluiimage.h"
 #include "lluistring.h"
 #include "v4color.h"
+#include "llbadgeholder.h"
 #include <list>
 #include <queue>
 
@@ -51,7 +52,7 @@ class LLUIImage;
  * With or without border,
  * Can contain LLUICtrls.
  */
-class LLPanel : public LLUICtrl
+class LLPanel : public LLUICtrl, public LLBadgeHolder
 {
 public:
 	struct LocalizedString : public LLInitParam::Block<LocalizedString>
@@ -252,8 +253,6 @@ class LLPanel : public LLUICtrl
 	
 	boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb );
 
-	bool acceptsBadge() const { return mAcceptsBadge; }
-
 protected:
 	// Override to set not found list
 	LLButton*		getDefaultButton() { return mDefaultBtn; }
@@ -268,7 +267,6 @@ class LLPanel : public LLUICtrl
 	static factory_stack_t	sFactoryStack;
 	
 private:
-	bool			mAcceptsBadge;
 	BOOL			mBgVisible;				// any background at all?
 	BOOL			mBgOpaque;				// use opaque color or image
 	LLUIColor		mBgOpaqueColor;
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 702e8d5a1f1dbde5898663ea807dd148b2260d25..d5d40ca65d30e13fd33968a64ee75f14fcc087c4 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -902,6 +902,18 @@ void LLInventoryPanel::onFocusReceived()
 	LLPanel::onFocusReceived();
 }
 
+bool LLInventoryPanel::addBadge(LLBadge * badge)
+{
+	bool badge_added = false;
+
+	if (acceptsBadge())
+	{
+		badge_added = badge->addToView(mFolderRoot);
+	}
+
+	return badge_added;
+}
+
 void LLInventoryPanel::openAllFolders()
 {
 	mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index a4287a438e790965f45ab9c33555cad90e886c40..7676bbb6d7ed752a5b95b8de48975a559fad60f2 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -125,6 +125,9 @@ class LLInventoryPanel : public LLPanel
 	 /*virtual*/ void onFocusLost();
 	 /*virtual*/ void onFocusReceived();
 
+	// LLBadgeHolder methods
+	bool addBadge(LLBadge * badge);
+
 	// Call this method to set the selection.
 	void openAllFolders();
 	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
index 28025f58d43a193f82f7b4a2da0d25f135643e7d..3accc43ab67f846d0865dc2da59eb0a2764da778 100644
--- a/indra/newview/llpanelmarketplaceinbox.cpp
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -27,6 +27,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llpanelmarketplaceinbox.h"
+#include "llpanelmarketplaceinboxinventory.h"
 
 #include "llappviewer.h"
 #include "llbutton.h"
@@ -36,7 +37,7 @@
 #include "llviewercontrol.h"
 
 
-#define SUPPORTING_FRESH_ITEM_COUNT	0
+#define SUPPORTING_FRESH_ITEM_COUNT	1
 
 
 static LLRegisterPanelClassWrapper<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox");
@@ -159,10 +160,10 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const
 
 			for (; folders_it != folders_end; ++folders_it)
 			{
-				const LLFolderViewFolder * folder = *folders_it;
+				const LLFolderViewFolder * folder_view = *folders_it;
+				const LLInboxFolderViewFolder * inbox_folder_view = dynamic_cast<const LLInboxFolderViewFolder*>(folder_view);
 
-				// TODO: Replace this check with new "fresh" flag
-				if (folder->getCreationDate() > 1500)
+				if (inbox_folder_view && inbox_folder_view->isFresh())
 				{
 					fresh_item_count++;
 				}
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
index 5dff73ee6a7fbd73d2a2b92a301670a8198c94b6..8542ea2ae4fc1955691cc7881237f51eaffcdb4a 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -141,7 +141,7 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge
 LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p)
 	: LLFolderViewFolder(p)
 	, LLBadgeOwner(getHandle())
-	, mFresh(false)
+	, mFresh(true)
 {
 	initBadgeParams(p.new_badge());
 }
@@ -150,6 +150,19 @@ LLInboxFolderViewFolder::~LLInboxFolderViewFolder()
 {
 }
 
+// virtual
+time_t LLInboxFolderViewFolder::getCreationDate() const
+{
+	time_t ret_val = LLFolderViewFolder::getCreationDate();
+
+	if (!mCreationDate)
+	{
+		updateFlag();
+	}
+
+	return ret_val;
+}
+
 // virtual
 void LLInboxFolderViewFolder::draw()
 {
@@ -166,10 +179,7 @@ void LLInboxFolderViewFolder::draw()
 void LLInboxFolderViewFolder::updateFlag() const
 {
 	LLDate saved_freshness_date = LLDate(gSavedSettings.getString("InboxFreshnessDate"));
-	if (getCreationDate() > saved_freshness_date.secondsSinceEpoch())
-	{
-		mFresh = true;
-	}
+	mFresh = (mCreationDate > saved_freshness_date.secondsSinceEpoch());
 }
 
 void LLInboxFolderViewFolder::selectItem()
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h
index 7b124fdccc90eb5c00757ae96721640f7cdee68d..899e459896a1d513644b8032ec0ebd2b5aa300c7 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.h
+++ b/indra/newview/llpanelmarketplaceinboxinventory.h
@@ -66,12 +66,16 @@ class LLInboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner
 	
 	LLInboxFolderViewFolder(const Params& p);
 	~LLInboxFolderViewFolder();
+
+	time_t getCreationDate() const;
 	
 	void draw();
 	
 	void updateFlag() const;
 	void selectItem();
 	void toggleOpen();
+
+	bool isFresh() const { return mFresh; }
 	
 protected:
 	void setCreationDate(time_t creation_date_utc) const;
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 76965ad14ba2de0589e4c4edcbd381fa940a62f7..31b6fc77f58d55a9642f86efb186e9edaf96bf24 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -134,7 +134,7 @@
      reference="AvatarListItemIconOfflineColor" />
     <color
      name="BadgeImageColor"
-     value="0.44 0.69 0.56 1.0" />
+     value="1.0 0.40 0.0 1.0" />
     <color
      name="BadgeBorderColor"
      value="0.9 0.9 0.9 1.0" />
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background_New.png b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f114f2e4aa0d0529e67af3d779dd9748488e6dd
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png differ
diff --git a/indra/newview/skins/default/xui/en/widgets/badge.xml b/indra/newview/skins/default/xui/en/widgets/badge.xml
index f77c4b71787f75830591a37bc533086d1bc1b12b..2d4c02b092904cf34c6ddf30f32cc3a4059324b3 100644
--- a/indra/newview/skins/default/xui/en/widgets/badge.xml
+++ b/indra/newview/skins/default/xui/en/widgets/badge.xml
@@ -7,11 +7,14 @@
        image="Badge_Background"
        image_color="BadgeImageColor"
        label_color="BadgeLabelColor"
+       label_offset_horiz="0"
+       label_offset_vert="0"
        location="top_left"
        location_percent_hcenter="85"
        location_percent_vcenter="85"
        padding_horiz="7"
        padding_vert="4"
        requests_front="true"
+       mouse_opaque="false"
        >
 </badge>
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
index c34aec1bf0269b0f1436955b7c5861bc6e6fcae1..95f5cf2ecd03676a59f248f8c66384a4293e7f59 100644
--- a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
@@ -6,5 +6,14 @@
   item_top_pad="4"
   selection_image="Rounded_Square"
   >
-	<new_badge label="New" location="right" padding_horiz="4" padding_vert="2" location_percent_hcenter="70" />
+	<new_badge 
+        label="New" 
+        label_offset_horiz="-1"
+        location="right" 
+        padding_horiz="4" 
+        padding_vert="1" 
+        location_percent_hcenter="70"
+        border_image=""
+        image="Badge_Background_New"
+        />
 </inbox_folder_view_folder>