Index: wp-includes/media.php
===================================================================
--- wp-includes/media.php	(revision 19037)
+++ wp-includes/media.php	(working copy)
@@ -731,12 +731,43 @@
 		return $output;
 
 	extract(shortcode_atts(array(
-		'id'	=> '',
-		'align'	=> 'alignnone',
-		'width'	=> '',
-		'caption' => ''
+		'id'          => '',
+		'align'       => 'alignnone',
+		'width'       => '',
+		'caption'     => '',
+		'render_html' => 'false'
 	), $attr));
 
+	// Render html in the caption
+	if ( 'true' === $render_html ) {
+
+		// Restore the original HTML
+		$_caption = html_entity_decode($caption);
+
+		// Only allow a subset of tags
+		$allowed_tags = array('strong', 'em', 'a');
+
+		// Set those tags aside
+		if ( preg_match_all('/<\/?([a-zA-Z]+).*?>/S', $_caption, $matches) ) {
+			$i = 0;
+			$searches = array();
+			$replacements = array(); 
+			foreach ( $matches[0] as $k => $v ) {
+				if (in_array($matches[1][$k], $allowed_tags) ) {
+					$_caption = str_replace($v, 'tag-' . $i, $_caption);
+					$searches[] = 'tag-' . $i++;
+					$replacements[] = $v;
+				}
+			}
+
+			// Re-encode the caption
+			$_caption = htmlentities($_caption);
+
+			// Restore the allowed HTML
+			$caption = str_replace($searches, $replacements, $_caption);
+		}
+	}
+
 	if ( 1 > (int) $width || empty($caption) )
 		return $content;
 
