Index: wp-includes/formatting.php
===================================================================
--- wp-includes/formatting.php	(revision 4283)
+++ wp-includes/formatting.php	(working copy)
@@ -609,14 +609,7 @@
 	if (get_option('use_smilies')) {
 		// HTML loop taken from texturize function, could possible be consolidated
 		$textarr = preg_split("/(<.*>)/U", $text, -1, PREG_SPLIT_DELIM_CAPTURE); // capture the tags as well as in between
-		$stop = count($textarr);// loop stuff
-		for ($i = 0; $i < $stop; $i++) {
-			$content = $textarr[$i];
-			if ((strlen($content) > 0) && ('<' != $content{0})) { // If it's not a tag
-				$content = preg_replace($wp_smiliessearch, $wp_smiliesreplace, $content);
-			}
-			$output .= $content;
-		}
+		$output = implode('', preg_replace($wp_smiliessearch, $wp_smiliesreplace, $textarr));
 	} else {
 		// return default text.
 		$output = $text;
Index: wp-includes/vars.php
===================================================================
--- wp-includes/vars.php	(revision 4283)
+++ wp-includes/vars.php	(working copy)
@@ -87,7 +87,7 @@
 
 // generates smilies' search & replace arrays
 foreach($wpsmiliestrans as $smiley => $img) {
-	$wp_smiliessearch[] = '/(\s|^)?'.preg_quote($smiley, '/').'(\b|\s)/';
+	$wp_smiliessearch[] = '/(\s|^|[^<])?'.preg_quote($smiley, '/').'(\b|\s|$)/';
 	$smiley_masked = htmlspecialchars( trim($smiley) , ENT_QUOTES);
 	$wp_smiliesreplace[] = " <img src='" . get_option('siteurl') . "/wp-includes/images/smilies/$img' alt='$smiley_masked' class='wp-smiley' /> ";
 }

