diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 11c1fcb1ea55742965dae290461b6e64a402f7c3..69650425cb437228f7dab228986e2114a56cf36a 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -459,12 +459,12 @@ LLViewerMedia::impl_list &LLViewerMedia::getPriorityList()
 // This is the predicate function used to sort sViewerMediaImplList by priority.
 bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)
 {
-	if(i1->isForcedUnloaded())
+	if(i1->isForcedUnloaded() && !i2->isForcedUnloaded())
 	{
 		// Muted or failed items always go to the end of the list, period.
 		return false;
 	}
-	else if(i2->isForcedUnloaded())
+	else if(i2->isForcedUnloaded() && !i1->isForcedUnloaded())
 	{
 		// Muted or failed items always go to the end of the list, period.
 		return true;
@@ -489,6 +489,16 @@ bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLView
 		// i2 is a UI element, i1 is not.  This makes i2 "less than" i1, so it sorts earlier in our list.
 		return false;
 	}
+	else if(i1->isParcelMedia())
+	{
+		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		return true;
+	}
+	else if(i2->isParcelMedia())
+	{
+		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		return false;
+	}
 	else
 	{
 		// The object with the larger interest value should be earlier in the list, so we reverse the sense of the comparison here.
@@ -686,6 +696,7 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,
 	mPreviousMediaState(MEDIA_NONE),
 	mPreviousMediaTime(0.0f),
 	mIsDisabled(false),
+	mIsParcelMedia(false),
 	mProximity(-1),
 	mIsUpdated(false)
 { 
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 7cbfb56ffcc4d21792572939c38f5f2bc10bce43..3f5f3ca746c1a0979f2a961f66c775237505ab97 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -191,14 +191,17 @@ class LLViewerMediaImpl
 	bool isMediaPlaying();
 	bool isMediaPaused();
 	bool hasMedia();
-	bool isMediaFailed() { return mMediaSourceFailed; };
+	bool isMediaFailed() const { return mMediaSourceFailed; };
 	void resetPreviousMediaState();
 	
 	void setDisabled(bool disabled) { mIsDisabled = disabled; };
-	bool isMediaDisabled() { return mIsDisabled; };
+	bool isMediaDisabled() const { return mIsDisabled; };
 
 	// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.)
 	bool isForcedUnloaded() const;
+	
+	void setIsParcelMedia(bool is_parcel_media) { mIsParcelMedia = is_parcel_media; };
+	bool isParcelMedia() const { return mIsParcelMedia; };
 
 	ECursorType getLastSetCursor() { return mLastSetCursor; };
 	
@@ -326,6 +329,7 @@ class LLViewerMediaImpl
 	int mPreviousMediaState;
 	F64 mPreviousMediaTime;
 	bool mIsDisabled;
+	bool mIsParcelMedia;
 	S32 mProximity;
 
 private:
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 6233a337a663ff8b2b7971fce0705e3379e01af4..336d7f684e6f9731a7bf2ad06b7cfbb7738ad24f 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -226,6 +226,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
 				media_height, 
 				media_auto_scale,
 				media_loop);
+			sMediaImpl->setIsParcelMedia(true);
 			sMediaImpl->navigateTo(media_url, mime_type, true);
 		}
 	}
@@ -240,6 +241,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
 			media_height, 
 			media_auto_scale,
 			media_loop);
+		sMediaImpl->setIsParcelMedia(true);
 		sMediaImpl->navigateTo(media_url, mime_type, true);
 	}