Index: wp-includes/js/jquery/jquery.touch-mouse.dev.js
===================================================================
--- wp-includes/js/jquery/jquery.touch-mouse.dev.js	(revision 0)
+++ wp-includes/js/jquery/jquery.touch-mouse.dev.js	(revision 0)
@@ -0,0 +1,100 @@
+// Excerpted from http://stackoverflow.com/questions/5796109/jquery-drag-and-drop-on-touch-devices-ipad-android
+(function ($) {
+    // Detect touch support
+    $.support.touch = 'ontouchend' in document;
+    // Ignore browsers without touch support
+    if (!$.support.touch) {
+    return;
+    }
+    var mouseProto = $.ui.mouse.prototype,
+        _mouseInit = mouseProto._mouseInit,
+        touchHandled;
+
+    function simulateMouseEvent (event, simulatedType) { //use this function to simulate mouse event
+    // Ignore multi-touch events
+        if (event.originalEvent.touches.length > 1) {
+        return;
+        }
+    event.preventDefault(); //use this to prevent scrolling during ui use
+
+    var touch = event.originalEvent.changedTouches[0],
+        simulatedEvent = document.createEvent('MouseEvents');
+    // Initialize the simulated mouse event using the touch event's coordinates
+    simulatedEvent.initMouseEvent(
+        simulatedType,    // type
+        true,             // bubbles                    
+        true,             // cancelable                 
+        window,           // view                       
+        1,                // detail                     
+        touch.screenX,    // screenX                    
+        touch.screenY,    // screenY                    
+        touch.clientX,    // clientX                    
+        touch.clientY,    // clientY                    
+        false,            // ctrlKey                    
+        false,            // altKey                     
+        false,            // shiftKey                   
+        false,            // metaKey                    
+        0,                // button                     
+        null              // relatedTarget              
+        );
+
+    // Dispatch the simulated event to the target element
+    event.target.dispatchEvent(simulatedEvent);
+    }
+    mouseProto._touchStart = function (event) {
+    var self = this;
+    // Ignore the event if another widget is already being handled
+    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
+        return;
+        }
+    // Set the flag to prevent other widgets from inheriting the touch event
+    touchHandled = true;
+    // Track movement to determine if interaction was a click
+    self._touchMoved = false;
+    // Simulate the mouseover event
+    simulateMouseEvent(event, 'mouseover');
+    // Simulate the mousemove event
+    simulateMouseEvent(event, 'mousemove');
+    // Simulate the mousedown event
+    simulateMouseEvent(event, 'mousedown');
+    };
+
+    mouseProto._touchMove = function (event) {
+    // Ignore event if not handled
+    if (!touchHandled) {
+        return;
+        }
+    // Interaction was not a click
+    this._touchMoved = true;
+    // Simulate the mousemove event
+    simulateMouseEvent(event, 'mousemove');
+    };
+    mouseProto._touchEnd = function (event) {
+    // Ignore event if not handled
+    if (!touchHandled) {
+        return;
+    }
+    // Simulate the mouseup event
+    simulateMouseEvent(event, 'mouseup');
+    // Simulate the mouseout event
+    simulateMouseEvent(event, 'mouseout');
+    // If the touch interaction did not move, it should trigger a click
+    if (!this._touchMoved) {
+      // Simulate the click event
+      simulateMouseEvent(event, 'click');
+    }
+    // Unset the flag to allow other widgets to inherit the touch event
+    touchHandled = false;
+    };
+    mouseProto._mouseInit = function () {
+    var self = this;
+    // Delegate the touch handlers to the widget's element
+    self.element
+        .on('touchstart', $.proxy(self, '_touchStart'))
+        .on('touchmove', $.proxy(self, '_touchMove'))
+        .on('touchend', $.proxy(self, '_touchEnd'));
+
+    // Call the original $.ui.mouse init method
+    _mouseInit.call(self);
+    };
+})(jQuery);
\ No newline at end of file
Index: wp-includes/script-loader.php
===================================================================
--- wp-includes/script-loader.php	(revision 20170)
+++ wp-includes/script-loader.php	(working copy)
@@ -158,6 +158,7 @@
 	$scripts->add( 'jquery-form', "/wp-includes/js/jquery/jquery.form$suffix.js", array('jquery'), '2.73', 1 );
 
 	$scripts->add( 'jquery-color', "/wp-includes/js/jquery/jquery.color$suffix.js", array('jquery'), '2.0-4561m', 1 );
+	$scripts->add( 'jquery-touch-mouse', "/wp-includes/js/jquery/jquery.touch-mouse$suffix.js", array('jquery'), '1', 1 );
 	$scripts->add( 'suggest', "/wp-includes/js/jquery/suggest$suffix.js", array('jquery'), '1.1-20110113', 1 );
 	$scripts->add( 'schedule', '/wp-includes/js/jquery/jquery.schedule.js', array('jquery'), '20m', 1 );
 	$scripts->add( 'jquery-query', "/wp-includes/js/jquery/jquery.query.js", array('jquery'), '2.1.7', 1 );
Index: wp-content/mu-plugins/new-stuff.php
===================================================================
--- wp-content/mu-plugins/new-stuff.php	(revision 0)
+++ wp-content/mu-plugins/new-stuff.php	(revision 0)
@@ -0,0 +1,39 @@
+<?php
+
+add_action( 'login_footer', 'wp_check_for_touch_ui' );
+add_action( 'admin_footer', 'wp_check_for_touch_ui' );
+function wp_check_for_touch_ui(){
+	if( isset( $_COOKIE['wp_ui_touch'] ) && ( 'true' == $_COOKIE['wp_ui_touch'] ) ) return;
+	?>
+	<script>
+		document.ontouchstart = function(){
+			var d = new Date();
+			d.setTime( d.getTime() + ( 60 * 60 * 24 * 7 * 2 * 1000 ) );
+			expires = d.toGMTString();
+			newCookie = "wp_ui_touch=true; expires=" + expires + "; path=<?php echo SITECOOKIEPATH; ?>"
+				<?php if( COOKIE_DOMAIN ) echo '+"; domain='.COOKIE_DOMAIN.';"'; ?>;
+			document.cookie = newCookie;
+		}
+	</script>
+	<?php
+}
+
+add_action( 'admin_enqueue_scripts', 'new_admin_enqueue_scripts_fn' );
+function new_admin_enqueue_scripts_fn(){
+	if( isset( $_COOKIE['wp_ui_touch'] ) && ( 'true' == $_COOKIE['wp_ui_touch'] ) )
+		wp_enqueue_script( 'jquery-touch-mouse' );
+}
+
+// This function simply displays a little reminder in admin bar that the TOUCH cookie is set.
+// Just for development, it's ignorable in  the actual patch.
+add_action( 'wp_before_admin_bar_render', 'is_touch_admin_bar_render' );
+function is_touch_admin_bar_render() {
+	if( isset( $_COOKIE['wp_ui_touch'] ) && ( 'true' == $_COOKIE['wp_ui_touch'] ) ){
+		global $wp_admin_bar;
+		$wp_admin_bar->add_menu( array(
+			'id' => 'is-touch-ui',
+			'title' => __('TOUCH'),
+			'href' => 'http://www.wordpress.org/'
+		) );
+	}
+}
