Index: _source/core/htmlparser/filter.js
===================================================================
--- _source/core/htmlparser/filter.js	(revision 5206)
+++ _source/core/htmlparser/filter.js	(revision )
@@ -227,27 +227,53 @@
 		}
 	}
 
+	// Invoke filters sequentially on the array, break the iteration
+	// when it doesn't make sense to continue anymore.
 	function callItems( currentEntry )
 	{
-		var isObject = ( typeof currentEntry == 'object' );
+		var isNode = currentEntry.type
+			|| currentEntry instanceof CKEDITOR.htmlParser.fragment;
 
 		for ( var i = 0 ; i < this.length ; i++ )
 		{
+			// Backup the node info before filtering.
+			if ( isNode )
+			{
+				var orgType = currentEntry.type,
+						orgName = currentEntry.name;
+			}
+
 			var item = this[ i ],
 				ret = item.apply( window, arguments );
 
-			if ( typeof ret != 'undefined' )
-			{
-				if ( ret === false )
+			if ( ret === false )
-					return false;
+				return ret;
 
-				if ( isObject && ret != currentEntry )
+			// We're filtering node (element/fragment).
+			if ( isNode )
+			{
+				// No further filtering if it's not anymore 
+				// fitable for the subsequent filters.
+				if ( !ret || currentEntry.name != orgName
+					|| currentEntry.type != orgType )
+				{
 					return ret;
-			}
-		}
+				}
+			}
+			// Filtering value (nodeName/textValue/attrValue).
+			else
+			{
+				// No further filtering if it's not
+				// any more values.
+				if ( typeof ret != 'string' )
+					return ret;
+			}
 
-		return null;
+			currentEntry = ret;
-	}
+		}
+
+		return currentEntry;
+	}
 })();
 
 // "entities" plugin
