Index: wp-includes/formatting.php
===================================================================
--- wp-includes/formatting.php	(revision 11082)
+++ wp-includes/formatting.php	(working copy)
@@ -28,13 +28,19 @@
  */
 function wptexturize($text) {
 	global $wp_cockneyreplace;
+	global $shortcode_tags;
+
 	$next = true;
 	$has_pre_parent = false;
 	$output = '';
 	$curl = '';
-	$textarr = preg_split('/(<.*>|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
-	$stop = count($textarr);
 
+	$tagnames = array_keys($shortcode_tags);
+	$tagregexp = join('|', array_map('preg_quote', $tagnames));
+	$regex = '/(<[^>]*>|(?<!\[)\[('.$tagregexp.')\b[^\/\]]*\/?\](?:.+?\[\/\2\])?)/s';
+	$textarr = preg_split($regex, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
+  $stop = count($textarr);
+
 	// if a plugin has provided an autocorrect array, use it
 	if ( isset($wp_cockneyreplace) ) {
 		$cockney = array_keys($wp_cockneyreplace);
@@ -50,10 +56,20 @@
 	$dynamic_characters = array('/\'(\d\d(?:&#8217;|\')?s)/', '/(\s|\A|")\'/', '/(\d+)"/', '/(\d+)\'/', '/(\S)\'([^\'\s])/', '/(\s|\A)"(?!\s)/', '/"(\s|\S|\Z)/', '/\'([\s.]|\Z)/', '/(\d+)x(\d+)/');
 	$dynamic_replacements = array('&#8217;$1','$1&#8216;', '$1&#8243;', '$1&#8242;', '$1&#8217;$2', '$1&#8220;$2', '&#8221;$1', '&#8217;$1', '$1&#215;$2');
 
+	$skip_count = 0;
+	$shortcode_start_regex = '/^\[(?:'.$tagregexp.')\b/';
 	for ( $i = 0; $i < $stop; $i++ ) {
 		$curl = $textarr[$i];
 
-		if ( !empty($curl) && '<' != $curl{0} && '[' != $curl{0} && $next && !$has_pre_parent) { // If it's not a tag
+		if ($skip_count > 0) {
+			$skip_count--;
+			continue;
+		} elseif (empty($curl)) {
+			$next = true;
+			continue;
+		}	elseif (preg_match($shortcode_start_regex, ltrim($curl))) { //shortcode
+			$skip_count = 1;
+		} elseif ('<' != $curl{0} && $next && !$has_pre_parent) { // If it's not a tag
 			// static strings
 			$curl = str_replace($static_characters, $static_replacements, $curl);
 			// regular expressions
