diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 91d5e046658e6a421fb0298938536159c6055368..9adf893e4b8a123fae5855f84945590dae366b92 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5305,6 +5305,17 @@
       <key>Value</key>
 	  <integer>13</integer>
     </map>
+	<key>PrimMediaDragNDrop</key>
+	<map>
+		<key>Comment</key>
+		<string>Enable drag and drop</string>
+		<key>Persist</key>
+		<integer>1</integer>
+		<key>Type</key>
+		<string>Boolean</string>
+		<key>Value</key>
+		<integer>1</integer>
+	</map>
     <key>PrimMediaMaxRetries</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 2bda6eddbcdb76802ae352f3e6c4ee099ba7030a..a0802430865018abab44f92c36fa0eb53fa5a917 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -79,6 +79,7 @@
 #include "timing.h"
 #include "llviewermenu.h"
 #include "lltooltip.h"
+#include "llmediaentry.h"
 
 // newview includes
 #include "llagent.h"
@@ -818,14 +819,27 @@ BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window,  LLCoordGL pos, MAS
 
 BOOL LLViewerWindow::handleDrop(LLWindow *window,  LLCoordGL pos, MASK mask, void* data)
 {
-	LLPickInfo pick_info = pickImmediate( pos.mX, pos.mY,  TRUE /*BOOL pick_transparent*/ );
+	if (gSavedSettings.getBOOL("PrimMediaDragNDrop"))
+	{
+		LLPickInfo pick_info = pickImmediate( pos.mX, pos.mY,  TRUE /*BOOL pick_transparent*/ );
 
-	LLUUID object_id = pick_info.getObjectID();
-	S32 object_face = pick_info.mObjectFace;
-	std::string url = std::string( (char*)data );
+		LLUUID object_id = pick_info.getObjectID();
+		S32 object_face = pick_info.mObjectFace;
+		std::string url = std::string( (char*)data );
 
-	llinfos << "### Object: picked at " << pos.mX << ", " << pos.mY << " - face = " << object_face << " - URL = " << url << llendl;
+		llinfos << "### Object: picked at " << pos.mX << ", " << pos.mY << " - face = " << object_face << " - URL = " << url << llendl;
 
+		LLVOVolume *obj = dynamic_cast<LLVOVolume*>(static_cast<LLViewerObject*>(pick_info.getObject()));
+		if (obj)
+		{
+			LLSD media_data;
+			/// XXX home URL too?
+			media_data[LLMediaEntry::CURRENT_URL_KEY] = url;
+			media_data[LLMediaEntry::AUTO_PLAY_KEY] = true;
+			obj->syncMediaData(object_face, media_data, true, true);
+			obj->sendMediaDataUpdate();
+		}
+	}
   	// Always handled as far as the OS is concerned.
 	return TRUE;
 }