Index: /FCKeditor/trunk/_whatsnew.html
===================================================================
--- /FCKeditor/trunk/_whatsnew.html	(revision 810)
+++ /FCKeditor/trunk/_whatsnew.html	(revision 811)
@@ -215,4 +215,6 @@
 		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1160">#1160</a>] [<a target="_blank" href="http://dev.fckeditor.net/ticket/1184">#1184</a>] Home, End
 			and Tab keys are working properly for numeric fields in dialogs. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/68">#68</a>] The style
+			system now properly handles Format styles when EnterMode=br.</li>
 	</ul>
 	<h3>
Index: /FCKeditor/trunk/editor/_source/classes/fckstyle.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckstyle.js	(revision 810)
+++ /FCKeditor/trunk/editor/_source/classes/fckstyle.js	(revision 811)
@@ -605,100 +605,24 @@
 	{
 		// Bookmark the range so we can re-select it after processing.
-		var bookmark = range.CreateBookmark( true ) ;
-
-		var startNode	= range.StartNode ;
-		var endNode		= range.EndNode ;
-
-		if ( !range.CheckIsCollapsed() )
-		{
-			// Get the neighborhood nodes for the bookmark <span> tags.
-			startNode	= range.GetBookmarkNode( bookmark, true ).nextSibling ;
-			endNode		= range.GetBookmarkNode( bookmark, false ).previousSibling ;
-		}
-
-		var currentNodePath = new FCKElementPath( startNode ) ;
-
-		var currentNode = currentNodePath.Block || startNode ;
-		var isLast = false ;
-
-		while ( !isLast && currentNode )
-		{
-			// Check if this is the last node to be processed.
-			isLast = ( currentNode == endNode ) ;
-
-			switch ( currentNode.nodeType )
-			{
-				case 1 :	// Element Node
-
-					var elementName = currentNode.nodeName.toLowerCase() ;
-
-					// If the node is a block node, exchange it with the new block.
-					if ( FCKListsLib.StyleBlockElements[ elementName ] != null )
-					{
-						// Create the new node right before the current one.
-						var newNode = currentNode.parentNode.insertBefore( this.BuildElement( range.Window.document ), currentNode ) ;
-
-						// Move everything from the current node to the new one.
-						FCKDomTools.MoveChildren( currentNode, newNode ) ;
-
-						// Delete the current node.
-						FCKDomTools.RemoveNode( currentNode ) ;
-
-						currentNode = newNode ;
-
-						break ;
-					}
-
-					// If it is an inline element, fell in the Text Node case.
-					if ( FCKListsLib.InlineChildReqElements[ elementName ] == null )
-						break ;
-
-				case 3 :	// Text Node
-
-					// Ignore empty text nodes.
-					if ( currentNode.nodeType == 3 && ( !currentNode.nodeValue || currentNode.nodeValue.length == 0 ) )
-						break ;
-
-					currentNodePath = new FCKElementPath( currentNode ) ;
-
-					// If the node doesn't have a parent block element, fix it with the new block.
-					if ( !currentNodePath.Block )
-					{
-						// Create a range for the current node.
-						var fixRange = new FCKDomRange( range.Window ) ;
-						fixRange.MoveToNodeContents( currentNode ) ;
-
-						// Expands it to the block contents.
-						fixRange.Expand( 'block_contents' ) ;
-
-						// Ignore empty text blocks.
-						if ( fixRange.CheckIsEmpty() )
-							break ;
-
-						// Create the fixed block.
-						var fixBlock = this.BuildElement( range.Window.document ) ;
-
-						// Move the contents of the temporary range to the fixed block.
-						fixRange.ExtractContents().AppendTo( fixBlock ) ;
-
-						// Insert the fixed block into the DOM.
-						fixRange.InsertNode( fixBlock ) ;
-
-						currentNode = fixBlock.firstChild ;
-					}
-			}
-
-			if ( !isLast )
-				currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
-		}
-
-		// As the style system break text nodes constantly, let's normalize
-		// things for performance.
-		// With IE, some paragraphs get broken when calling normalize()
-		// repeatedly. Also, for IE, we must normalize body, not documentElement.
-		// IE is also known for having a "crash effect" with normalize().
-		// We should try to normalize with IE too in some way, somewhere.
-		if ( !FCKBrowserInfo.IsIE )
-			range.Window.document.body.normalize() ;
+		var bookmark 
+		
+		if ( selectIt )
+			bookmark = range.CreateBookmark( true ) ;
+
+		var interator = new FCKDomRangeInterator( range ) ;
+		interator.EnforceRealBlocks = true ;
+		
+		var block 
+		while( ( block = interator.GetNextParagraph() ) )		// Only one =
+		{
+			// Create the new node right before the current one.
+			var newBlock = block.parentNode.insertBefore( this.BuildElement( range.Window.document ), block ) ;
+
+			// Move everything from the current node to the new one.
+			FCKDomTools.MoveChildren( block, newBlock ) ;
+
+			// Delete the current node.
+			FCKDomTools.RemoveNode( block ) ;
+		}
 
 		// Re-select the original range.
Index: /FCKeditor/trunk/editor/_source/fckscriptloader.js
===================================================================
--- /FCKeditor/trunk/editor/_source/fckscriptloader.js	(revision 810)
+++ /FCKeditor/trunk/editor/_source/fckscriptloader.js	(revision 811)
@@ -104,5 +104,5 @@
 FCKScriptLoader.AddScript( 'FCKImagePreloader'	, 'classes/' ) ;
 FCKScriptLoader.AddScript( 'FCKKeystrokeHandler', 'classes/'	, ['FCKConstants','FCKBrowserInfo','FCKTools'], FCK_GENERIC ) ;
-FCKScriptLoader.AddScript( 'FCKStyle'			, 'classes/'	, ['FCKConstants','FCKDomRange','FCKDomTools','FCKListsLib','FCK_Xhtml10Transitional'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKStyle'			, 'classes/'	, ['FCKConstants','FCKDomRange','FCKDomRangeInterator','FCKDomTools','FCKListsLib','FCK_Xhtml10Transitional'], FCK_GENERIC ) ;
 FCKScriptLoader.AddScript( 'FCKW3CRange'		, 'classes/'	, ['FCKDomTools','FCKTools','FCKDocumentFragment'], FCK_GENERIC ) ;
 
