diff --git wp-admin/includes/ajax-actions.php wp-admin/includes/ajax-actions.php
index cd4ba08..60cf65e 100644
--- wp-admin/includes/ajax-actions.php
+++ wp-admin/includes/ajax-actions.php
@@ -2025,6 +2025,8 @@ function wp_ajax_send_attachment_to_editor() {
 		$caption = isset( $attachment['post_excerpt'] ) ? $attachment['post_excerpt'] : '';
 		$title = ''; // We no longer insert title tags into <img> tags, as they are redundant.
 		$html = get_image_send_to_editor( $id, $caption, $title, $align, $url, (bool) $rel, $size, $alt );
+	} elseif ( 'video' === substr( $post->post_mime_type, 0, 5 ) || 'audio' === substr( $post->post_mime_type, 0, 5 )  ) {
+		$html = stripslashes_deep( $_POST['html'] );
 	}
 
 	$html = apply_filters( 'media_send_to_editor', $html, $id, $attachment );
@@ -2081,7 +2083,7 @@ function wp_ajax_heartbeat() {
 		$screen_id = sanitize_key($_POST['screenid']);
 	else
 		$screen_id = 'site';
-	
+
 	if ( ! empty($_POST['data']) ) {
 		$data = (array) $_POST['data'];
 		// todo: how much to sanitize and preset and what to leave to be accessed from $data or $_POST..?
diff --git wp-includes/js/media-editor.js wp-includes/js/media-editor.js
index 15eff8d..456a968 100644
--- wp-includes/js/media-editor.js
+++ wp-includes/js/media-editor.js
@@ -66,7 +66,8 @@
 					src:       size.url,
 					captionId: 'attachment_' + attachment.id
 				});
-
+			} else if ( 'video' === attachment.type || 'audio' === attachment.type ) {
+				_.extend( props, _.pick( attachment, 'title', 'type', 'icon', 'mime' ) );
 			// Format properties for non-images.
 			} else {
 				props.title = props.title || attachment.filename;
@@ -95,6 +96,73 @@
 			return wp.html.string( options );
 		},
 
+		audio: function( props, attachment ) {
+			var shortcode, html;
+
+			props = wp.media.string.props( props, attachment );
+
+			shortcode = {};
+
+			if ( props.mime ) {
+				switch ( props.mime ) {
+				case 'audio/mpeg':
+					shortcode.src = props.linkUrl;
+					break;
+				case 'audio/ogg':
+					shortcode.ogg = props.linkUrl;
+					break;
+				case 'audio/wma':
+					shortcode.wma = props.linkUrl;
+					break;
+				}
+			}
+
+			html = wp.shortcode.string({
+				tag:     'audio',
+				attrs:   shortcode
+			});
+
+			return html;
+		},
+
+		video: function( props, attachment ) {
+			var shortcode, html;
+
+			props = wp.media.string.props( props, attachment );
+
+			shortcode = {};
+
+			if ( props.mime ) {
+				switch ( props.mime ) {
+				case 'video/mp4':
+					shortcode.src = props.linkUrl;
+					break;
+				case 'video/webm':
+					shortcode.webm = props.linkUrl;
+					break;
+				case 'video/ogg':
+					shortcode.ogv = props.linkUrl;
+					break;
+				case 'video/quicktime':
+					shortcode.mov = props.linkUrl;
+					break;
+				case 'video/asf':
+					shortcode.wmv = props.linkUrl;
+					break;
+				case 'video/x-flv':
+					shortcode.flv = props.linkUrl;
+					break;
+				}
+			}
+
+			html = wp.shortcode.string({
+				tag:     'video',
+				attrs:   shortcode
+			});
+
+			return html;
+		},
+
 		image: function( props, attachment ) {
 			var img = {},
 				options, classes, shortcode, html;
@@ -575,7 +643,10 @@
 						if ( props[ prop ] )
 							options[ option ] = props[ prop ];
 					});
-
+				} else if ( 'video' === attachment.type ) {
+					html = wp.media.string.video( props );
+				} else if ( 'audio' === attachment.type ) {
+					html = wp.media.string.audio( props );
 				} else {
 					html = wp.media.string.link( props );
 					options.post_title = props.title;
diff --git wp-includes/media.php wp-includes/media.php
index 682ffbb..371c9ca 100644
--- wp-includes/media.php
+++ wp-includes/media.php
@@ -803,6 +803,152 @@ function gallery_shortcode($attr) {
 }
 
 /**
+ * The Audio shortcode.
+ *
+ * This implements the functionality of the Audio Shortcode for displaying
+ * WordPress mp3s in a post.
+ *
+ * @since 3.6.0
+ *
+ * @param array $attr Attributes of the shortcode.
+ * @return string HTML content to display audio.
+ */
+function wp_audio_shortcode( $attr ) {
+	$post = get_post();
+
+	static $instances = 0;
+	$instances++;
+
+	$audio = null;
+
+	extract( shortcode_atts( array(
+		'src' => '',
+		'ogg' => '',
+		'wma' => ''
+	), $attr ) );
+
+	if ( empty( $src ) ) {
+		$children = get_children( array(
+			'post_parent' => $post->ID,
+			'post_type' => 'attachment',
+			'post_mime_type' => 'audio',
+			'posts_per_page' => 1
+		) );
+
+		if ( empty( $children ) )
+			return;
+
+		$audio = reset( $children );
+		$src = wp_get_attachment_url( $audio->ID );
+		if ( empty( $src ) )
+			return;
+	}
+
+	wp_enqueue_style( 'wp-mediaelement' );
+	wp_enqueue_script( 'wp-mediaelement' );
+
+	$atts = array(
+		sprintf( 'class="%s"', apply_filters( 'audio_shortcode_class', 'wp-audio-shortcode' ) ),
+		sprintf( 'id="audio-%d-%d"', $post->ID, $instances ),
+	);
+
+	$source = '<source type="%s" src="%s" />';
+
+	$html = sprintf( '<audio %s controls="controls" preload="none">', join( ' ', $atts ) );
+
+	foreach ( array( 'src', 'ogg', 'wma' ) as $fallback ) {
+		if ( ! empty( $$fallback ) ) {
+			$type = wp_check_filetype( $$fallback );
+			$html .= sprintf( $source, $type['type'], $$fallback );
+		}
+	}
+
+	$html .= '</audio>';
+
+	return apply_filters( 'audio_shortcode', $html, $src, $audio, $post );
+}
+add_shortcode( 'audio', 'wp_audio_shortcode' );
+
+/**
+ * The Video shortcode.
+ *
+ * This implements the functionality of the Video Shortcode for displaying
+ * WordPress mp4s in a post.
+ *
+ * @since 3.6.0
+ *
+ * @param array $attr Attributes of the shortcode.
+ * @return string HTML content to display video.
+ */
+function wp_video_shortcode( $attr ) {
+	global $content_width;
+	$post = get_post();
+
+	static $instances = 0;
+	$instances++;
+
+	$video = null;
+
+	extract( shortcode_atts( array(
+		'src' => '',
+		'width' => empty( $content_width ) ? 640 : $content_width,
+		'height' => 360,
+		'poster' => '',
+		'webm' => '',
+		'ogv' => '',
+		'mov' => '',
+		'wmv' => '',
+		'flv' => '',
+	), $attr ) );
+
+	if ( empty( $src ) ) {
+		$children = get_children( array(
+			'post_parent' => $post->ID,
+			'post_type' => 'attachment',
+			'post_mime_type' => 'video',
+			'posts_per_page' => 1
+		) );
+
+		if ( empty( $children ) )
+			return;
+
+		$video = reset( $children );
+		$src = wp_get_attachment_url( $video->ID );
+		if ( empty( $src ) )
+			return;
+	}
+
+	wp_enqueue_style( 'wp-mediaelement' );
+	wp_enqueue_script( 'wp-mediaelement' );
+
+	$atts = array(
+		sprintf( 'class="%s"', apply_filters( 'video_shortcode_class', 'wp-video-shortcode' ) ),
+		sprintf( 'id="video-%d-%d"', $post->ID, $instances ),
+		sprintf( 'width="%d"', $width ),
+		sprintf( 'height="%d"', $height ),
+	);
+
+	if ( ! empty( $poster ) )
+		$atts[] = sprintf( 'poster="%s"', esc_url( $poster ) );
+
+	$source = '<source type="%s" src="%s" />';
+
+	$html = sprintf( '<video %s controls="controls" preload="none">', join( ' ', $atts ) );
+
+	foreach ( array( 'src', 'webm', 'ogv', 'mov', 'wmv', 'flv' ) as $fallback ) {
+		if ( ! empty( $$fallback ) ) {
+			$type = wp_check_filetype( $$fallback );
+			$html .= sprintf( $source, $type['type'], $$fallback );
+		}
+	}
+
+	$html .= '</video>';
+
+	return apply_filters( 'video_shortcode', $html, $src, $video, $post );
+}
+add_shortcode( 'video', 'wp_video_shortcode' );
+
+/**
  * Display previous image link that has the same post parent.
  *
  * @since 2.5.0
diff --git wp-includes/script-loader.php wp-includes/script-loader.php
index d5bc4db..db67152 100644
--- wp-includes/script-loader.php
+++ wp-includes/script-loader.php
@@ -274,6 +274,9 @@ function wp_default_scripts( &$scripts ) {
 
 	$scripts->add( 'imgareaselect', "/wp-includes/js/imgareaselect/jquery.imgareaselect$suffix.js", array('jquery'), '0.9.8', 1 );
 
+	$scripts->add( 'mediaelement', "/wp-includes/js/mediaelement/mediaelement-and-player$suffix.js", array('jquery'), '2.10.1', 1 );
+	$scripts->add( 'wp-mediaelement', "/wp-includes/js/mediaelement/wp-mediaelement.js", array('mediaelement'), false, 1 );
+
 	$scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array('jquery'), false, 1 );
 	did_action( 'init' ) && $scripts->localize( 'password-strength-meter', 'pwsL10n', array(
 		'empty' => __('Strength indicator'),
@@ -538,6 +541,9 @@ function wp_default_styles( &$styles ) {
 	$styles->add( 'media-views', "/wp-includes/css/media-views$suffix.css", array( 'buttons' ) );
 	$styles->add( 'buttons', "/wp-includes/css/buttons$suffix.css" );
 
+	$styles->add( 'mediaelement', "/wp-includes/js/mediaelement/mediaelementplayer$suffix.css" );
+	$styles->add( 'wp-mediaelement', "/wp-includes/js/mediaelement/wp-mediaelement.css", array( 'mediaelement' ) );
+
 	foreach ( $rtl_styles as $rtl_style ) {
 		$styles->add_data( $rtl_style, 'rtl', true );
 		if ( $suffix && ! in_array( $rtl_style, $no_suffix ) )
