Index: CKEditor/branches/features/pasting/_source/core/dtd.js
===================================================================
--- CKEditor/branches/features/pasting/_source/core/dtd.js	(revision 4313)
+++ CKEditor/branches/features/pasting/_source/core/dtd.js	(revision 4321)
@@ -94,11 +94,4 @@
 
 	    /**
-	     * List of list root elements.
-	     * @type Object
-	     * @example
-	     */
-	    $list: { ul:1,ol:1,dl:1},
-
-		/**
 		 * Elements that accept text nodes, but are not possible to edit into
 		 * the browser.
Index: CKEditor/branches/features/pasting/_source/core/htmlparser/fragment.js
===================================================================
--- CKEditor/branches/features/pasting/_source/core/htmlparser/fragment.js	(revision 4313)
+++ CKEditor/branches/features/pasting/_source/core/htmlparser/fragment.js	(revision 4321)
@@ -47,12 +47,4 @@
 			{table:1,ul:1,ol:1,dl:1},
 			CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl );
-
-	// A looser type of dtd.
-	var dtd = CKEDITOR.tools.clone( CKEDITOR.dtd );
-	// 1. Allow nested list.
-	for( var i in dtd.$list )
-	{
-		dtd[ i ] = CKEDITOR.tools.extend( dtd[ i ], dtd.$list );
-	}
 
 	/**
@@ -85,8 +77,8 @@
 					var pendingElement = pendingInline[ i ],
 						pendingName = pendingElement.name,
-						pendingDtd = dtd[ pendingName ],
-						currentDtd = currentNode.name && dtd[ currentNode.name ];
-
-					if ( ( !currentDtd || currentDtd[ pendingName ] ) && ( !newTagName || !pendingDtd || pendingDtd[ newTagName ] || !dtd[ newTagName ] ) )
+						pendingDtd = CKEDITOR.dtd[ pendingName ],
+						currentDtd = currentNode.name && CKEDITOR.dtd[ currentNode.name ];
+
+					if ( ( !currentDtd || currentDtd[ pendingName ] ) && ( !newTagName || !pendingDtd || pendingDtd[ newTagName ] || !CKEDITOR.dtd[ newTagName ] ) )
 					{
 						// Get a clone for the pending element.
@@ -122,5 +114,5 @@
 				else
 					elementName =  element.name;
-				if ( !( elementName in dtd.$body ) )
+				if ( !( elementName in CKEDITOR.dtd.$body ) )
 				{
 					var savedCurrent = currentNode;
@@ -174,5 +166,5 @@
 
 			// This is a tag to be removed if empty, so do not add it immediately.
-			if ( dtd.$removeEmpty[ tagName ] )
+			if ( CKEDITOR.dtd.$removeEmpty[ tagName ] )
 			{
 				pendingInline.push( element );
@@ -188,5 +180,5 @@
 
 			var currentName = currentNode.name,
-				currentDtd = ( currentName && dtd[ currentName ] ) || ( currentNode._.isBlockLike ? dtd.div : dtd.span );
+				currentDtd = ( currentName && CKEDITOR.dtd[ currentName ] ) || ( currentNode._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span );
 
 			// If the element cannot be child of the current element.
@@ -368,5 +360,5 @@
 				node = currentNode;
 
-			if ( fixForBody && !parent.type && !dtd.$body[ node.name ] )
+			if ( fixForBody && !parent.type && !CKEDITOR.dtd.$body[ node.name ] )
 			{
 				currentNode = parent;
Index: CKEditor/branches/features/pasting/_source/plugins/htmldataprocessor/plugin.js
===================================================================
--- CKEditor/branches/features/pasting/_source/plugins/htmldataprocessor/plugin.js	(revision 4313)
+++ CKEditor/branches/features/pasting/_source/plugins/htmldataprocessor/plugin.js	(revision 4321)
@@ -60,24 +60,4 @@
 	}
 
-	// Join the nested lists with previous list item. 
-	function fixNestedList( listItem )
-	{
-		var next = listItem.next;
-		// Is next element nested list?
-		if( next && next.name in dtd.$list )
-		{
-			var children = listItem.parent.children;
-			// Move into current list item.
-			listItem.add( next );
-			children.splice( children.indexOf( next ), 1 );
-		}
-	}
-	// Glean orphan nested lists. 
-	function dropOrphanNestedList( list )
-	{
-		if( list.parent.name in dtd.$list )
-			delete list.name;
-	}
-	
 	var dtd = CKEDITOR.dtd;
 
@@ -132,10 +112,4 @@
 	for ( i in blockLikeTags )
 		defaultDataBlockFilterRules.elements[ i ] = extendBlockForDisplay;
-
-	// Fixing invalid form of nested list(#3828). 
-	for( var i in dtd.$listItem )
-		defaultDataFilterRules.elements[ i ] = fixNestedList;
-	for( var i in dtd.$list )
-		defaultDataFilterRules.elements[ i ] = dropOrphanNestedList;
 
 	var defaultHtmlFilterRules =
