Index: _source/plugins/list/plugin.js
===================================================================
--- _source/plugins/list/plugin.js	(revision 3771)
+++ _source/plugins/list/plugin.js	Tue Jul 14 11:28:30 CEST 2009
@@ -418,32 +418,38 @@
 						processedFlag = false,
 						blockLimit = path.blockLimit;
 
+					if ( block.getName() != 'td' )
+					{
 					// First, try to group by a list ancestor.
-					for ( var i = 0 ; i < path.elements.length ; i++ )
-					{
-						var element = path.elements[i];
+						for ( var i = 0 ; i < path.elements.length ; i++ )
+						{
+							var element = path.elements[i];
+							if ( block.getName() == 'td' )
+								break;
+
-						if ( listNodeNames[ element.getName() ] )
-						{
-							// If we've encountered a list inside a block limit
-							// The last group object of the block limit element should
-							// no longer be valid. Since paragraphs after the list
-							// should belong to a different group of paragraphs before
-							// the list. (Bug #1309)
-							blockLimit.removeCustomData( 'list_group_object' );
+							if ( listNodeNames[ element.getName() ] )
+							{
+								// If we've encountered a list inside a block limit
+								// The last group object of the block limit element should
+								// no longer be valid. Since paragraphs after the list
+								// should belong to a different group of paragraphs before
+								// the list. (Bug #1309)
+								blockLimit.removeCustomData( 'list_group_object' );
 
-							var groupObj = element.getCustomData( 'list_group_object' );
-							if ( groupObj )
-								groupObj.contents.push( block );
-							else
-							{
-								groupObj = { root : element, contents : [ block ] };
-								listGroups.push( groupObj );
-								CKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj );
-							}
-							processedFlag = true;
-							break;
-						}
-					}
+								var groupObj = element.getCustomData( 'list_group_object' );
+								if ( groupObj )
+									groupObj.contents.push( block );
+								else
+								{
+									groupObj = { root : element, contents : [ block ] };
+									listGroups.push( groupObj );
+									CKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj );
+								}
+								processedFlag = true;
+								break;
+							}
+						}
+					}
 
 					if ( processedFlag )
 						continue;
Index: CHANGES.html
===================================================================
--- CHANGES.html	(revision 3889)
+++ CHANGES.html	Tue Jul 14 11:30:06 CEST 2009
@@ -128,6 +128,7 @@
 		<li><a href="http://dev.fckeditor.net/ticket/3839">#3839</a> : Update Scayt plugin to reflect the latest change from SpellChecker.net.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/3742">#3742</a> : Fixed wrong dialog layout for dialogs without tab bar in IE RTL mode .</li>
 		<li><a href="http://dev.fckeditor.net/ticket/3671">#3671</a> : Fixed body fixing should be applied to the real type under fake elements.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/3940">#3940</a> : Fixed list operation doesn't stop at table.</li>
 	</ul>
 	<h3>
 		CKEditor 3.0 RC</h3>
