Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 5417)
+++ /CKEditor/trunk/CHANGES.html	(revision 5418)
@@ -165,4 +165,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/4797">#4797</a> : [Opera] Press enter key in dialog fields to close cause JavaScript error.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/5578">#5578</a> : Add flash fake element align property when switch mode (source to wysiwyg).</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5577">#5578</a> : Update delete column behavior when choose mutiple cells in the same column.</li>
 		<li>Updated the following language files:<ul>
 			<li><a href="http://dev.fckeditor.net/ticket/5326">#5326</a> : Catalan;</li>
Index: /CKEditor/trunk/_source/plugins/tabletools/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/tabletools/plugin.js	(revision 5417)
+++ /CKEditor/trunk/_source/plugins/tabletools/plugin.js	(revision 5418)
@@ -87,5 +87,5 @@
 	}
 
-	function getFocusedCell( cellsToDelete ) {
+	function getFocusElementAfterDelCells( cellsToDelete ) {
 		var i = 0,
 			last = cellsToDelete.length - 1,
@@ -248,4 +248,42 @@
 		}
 	}
+	
+	function getFocusElementAfterDelCols( cells ) 
+	{
+		var cellIndexList = [],
+			table = cells[ 0 ] && cells[ 0 ].getAscendant( 'table' ),
+			i, length,
+			targetIndex, targetCell;
+		
+		// get the cellIndex list of delete cells
+		for ( i = 0, length = cells.length; i < length; i++ )
+			cellIndexList.push( cells[i].$.cellIndex );
+
+		// get the focusable column index
+		cellIndexList.sort();
+		for ( i = 1, length = cellIndexList.length; i < length; i++ )
+		{
+			if ( cellIndexList[ i ] - cellIndexList[ i - 1 ] > 1 )
+			{
+				targetIndex = cellIndexList[ i - 1 ] + 1;
+				break;
+			}
+		}
+		
+		if ( !targetIndex )
+			targetIndex = cellIndexList[ 0 ] > 0 ? ( cellIndexList[ 0 ] - 1 ) 
+							: ( cellIndexList[ cellIndexList.length - 1 ] + 1 );
+
+		// scan row by row to get the target cell
+		var trs = table.$.getElementsByTagName( 'tr' );
+		for ( i = 0, length = trs.length; i < length ; i++ )
+		{
+			targetCell = trs[ i ].getElementsByTagName( 'td' )[ targetIndex ];
+			if ( targetCell )
+				break;
+		}
+
+		return targetCell ?  new CKEDITOR.dom.element( targetCell ) :  table.getPrevious();
+	}
 
 	function deleteColumns( selectionOrCell )
@@ -253,10 +291,14 @@
 		if ( selectionOrCell instanceof CKEDITOR.dom.selection )
 		{
-			var colsToDelete = getSelectedCells( selectionOrCell );
-			for ( var i = colsToDelete.length ; i >= 0 ; i-- )
+			var colsToDelete = getSelectedCells( selectionOrCell ),
+				elementToFocus = getFocusElementAfterDelCols( colsToDelete );
+
+			for ( var i = colsToDelete.length - 1 ; i >= 0 ; i-- )
 			{
 				if ( colsToDelete[ i ] )
 					deleteColumns( colsToDelete[ i ] );
 			}
+
+			return elementToFocus;
 		}
 		else if ( selectionOrCell instanceof CKEDITOR.dom.element )
@@ -264,4 +306,6 @@
 			// Get the cell's table.
 			var table = selectionOrCell.getAscendant( 'table' );
+			if ( !table )
+				return;
 
 			// Get the cell index.
@@ -316,5 +360,5 @@
 			var cellsToDelete = getSelectedCells( selectionOrCell );
 			var table = cellsToDelete[ 0 ] && cellsToDelete[ 0 ].getAscendant( 'table' );
-			var cellToFocus   = getFocusedCell( cellsToDelete );
+			var cellToFocus   = getFocusElementAfterDelCells( cellsToDelete );
 
 			for ( var i = cellsToDelete.length - 1 ; i >= 0 ; i-- )
@@ -768,5 +812,6 @@
 					{
 						var selection = editor.getSelection();
-						deleteColumns( selection );
+						var element = deleteColumns( selection );
+						element &&  placeCursorInCell( element, true );
 					}
 				} );
