Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 4575)
+++ /CKEditor/trunk/CHANGES.html	(revision 4576)
@@ -40,5 +40,4 @@
 		New features:</p>
 	<ul>
-		<li><a href="http://dev.fckeditor.net/ticket/4341">#4341</a> : Added the 'showborder' plugin.</li>
 	</ul>
 	<p>
@@ -84,4 +83,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/4527">#4527</a> : Fixed checkbox generate invalid 'checked' attribute.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/1659">#1659</a> : Fixed unable to click below content to start editing in IE with 'config.docType' setting to standard compliant.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/3933">#3933</a> : Fixed extra &lt;br&gt; left at the end of document when the last element is a table.</li>
 	</ul>
 	<h3>
Index: Editor/trunk/_source/plugins/showborders/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/showborders/plugin.js	(revision 4575)
+++ 	(revision )
@@ -1,171 +1,0 @@
-/*
-Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-
-/**
- * @fileOverview The "show border" plugin. The command display visible outline
- * border line around all table elements if table doesn't have a none-zero 'border' attribute specified.
- */
-
-(function()
-{
-	var showBorderClassName = 'cke_show_border',
-		cssStyleText,
-		cssTemplate =
-		// TODO: For IE6, we don't have child selector support,
-		// where nested table cells could be incorrect.
-		( CKEDITOR.env.ie6Compat ?
-		  [
-			'.%1 table.%2,',
-			 '.%1 table.%2 td, .%1 table.%2 th',
-			 '{',
-				'border : #d3d3d3 1px dotted',
-			 '}'
-		  ] :
-		  [
-			 '.%1 table.%2,',
-			 '.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,',
-			 '.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,',
-			 '.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,',
-			 '.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th',
-			 '{',
-				'border : #d3d3d3 1px dotted',
-			 '}'
-		  ] ).join( '' );
-
-	cssStyleText = cssTemplate.replace( /%2/g, showBorderClassName ).replace( /%1/g, 'cke_show_borders ' );
-
-	var commandDefinition =
-	{
-		preserveState : true,
-		editorFocus : false,
-
-		exec : function ( editor )
-		{
-			this.toggleState();
-			this.refresh( editor );
-		},
-
-		refresh : function( editor )
-		{
-			var funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'addClass' : 'removeClass';
-			editor.document.getBody()[ funcName ]( 'cke_show_borders' );
-		}
-	};
-
-	CKEDITOR.plugins.add( 'showborders',
-	{
-		requires : [ 'wysiwygarea' ],
-		modes : { 'wysiwyg' : 1 },
-
-		init : function( editor )
-		{
-
-			var command = editor.addCommand( 'showborders', commandDefinition );
-			command.canUndo = false;
-
-			if ( editor.config.startupShowBorders != false )
-				command.setState( CKEDITOR.TRISTATE_ON );
-
-			editor.addCss( cssStyleText );
-			
-			// Refresh the command on setData.
-			editor.on( 'mode', function()
-				{
-					if ( command.state != CKEDITOR.TRISTATE_DISABLED )
-						command.refresh( editor );
-				}, null, null, 100 );
-
-			// Refresh the command on wysiwyg frame reloads.
-			editor.on( 'contentDom', function()
-				{
-					if ( command.state != CKEDITOR.TRISTATE_DISABLED )
-						command.refresh( editor );
-				});
-		},
-
-		afterInit : function( editor )
-		{
-			var dataProcessor = editor.dataProcessor,
-				dataFilter = dataProcessor && dataProcessor.dataFilter,
-				htmlFilter = dataProcessor && dataProcessor.htmlFilter;
-
-			if ( dataFilter )
-			{
-				dataFilter.addRules(
-					{
-						elements :
-						{
-							'table' : function( element )
-							{
-								var attributes = element.attributes,
-									cssClass = attributes[ 'class' ],
-									border = parseInt( attributes.border );
-
-								if ( !border || border <= 0 )
-									attributes[ 'class' ] = ( cssClass || '' ) + ' ' + showBorderClassName;
-							}
-						}
-					} );
-			}
-
-			if( htmlFilter )
-			{
-				htmlFilter.addRules(
-				{
-					elements :
-					{
-						'table' : function( table )
-						{
-							var attributes = table.attributes,
-								cssClass = attributes[ 'class' ];
-
-							cssClass && ( attributes[ 'class' ] =
-							              cssClass.replace( showBorderClassName, '' )
-									              .replace( /\s{2}/, ' ' )
-												  .replace( /^\s+|\s+$/, '' ) );
-						}
-					}
-				} );
-			}
-
-			// Table dialog must be aware of it.
-			CKEDITOR.on( 'dialogDefinition', function( ev )
-				{
-					if( ev.editor != editor )
-						return;
-
-					var dialogName = ev.data.name;
-
-					if ( dialogName == 'table' || dialogName == 'tableProperties' )
-					{
-						var dialogDefinition = ev.data.definition,
-							infoTab = dialogDefinition.getContents( 'info' ),
-							borderField = infoTab.get( 'txtBorder' ),
-							originalCommit = borderField.commit;
-
-						borderField.commit = CKEDITOR.tools.override( originalCommit, function( org )
-						{
-							return function( data, selectedTable )
-							{
-								org.apply( this, arguments );
-								var value = parseInt( this.getValue() );
-								selectedTable[ ( !value || value <= 0 ) ? 'addClass' : 'removeClass' ]( showBorderClassName );
-							}
-						} );
-					}
-				});
-		}
-
-	});
-} )();
-
-/**
- * Whether to automatically enable the "show borders" command when the editor loads.
- * @type Boolean
- * @default true
- * @example
- * config.startupShowBorders = false;
- */
-
