Index: /CKEditor/branches/features/contenteditable/_source/core/dom/rangelist.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/core/dom/rangelist.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/core/dom/rangelist.js	(revision 5590)
@@ -23,54 +23,15 @@
 			ranges = [ ranges ];
 
-		return CKEDITOR.tools.extend( ranges, methods );
+		return CKEDITOR.tools.extend( ranges, mixins );
 	};
 
-	var methods =
+	var mixins =
 	/** @lends CKEDITOR.dom.rangeList.prototype */
 	{
-			/**
-			 * Inserting the specified range object at the end/specified position.
-			 * @param {CKEDITOR.dom.range} range
-			 * @example
-			 * var rangeList = new CKEDITOR.dom.rangeList();
-			 * var range = new CKEDITOR.dom.range();
-			 * ...
-			 * rangeList.add( range );
-			 * alert( rangeList.getItem( 0 ) );
-			 */
-			add : function( range, index )
-			{
-				this.splice( index || 0, 0, range );
-			},
-
-			remove : function( index )
-			{
-				this.splice( index, 1 );
-			},
-
-			replace : function( index, newRange )
-			{
-				this.splice( index, 1, newRange );
-			},
-
-			/**
-			 * Retrieve range at the specified position.
-			 * @param index
-			 */
-			getItem : function( index )
-			{
-				return this[ index ] || null;
-			},
-
-			count : function()
-			{
-				return this.length;
-			},
-
 			/**
 			 * Create an instance of rangeList iterator, it should be only used when
 			 * the processing of range is DOM destructive, which means it will possibly
 			 * pollute other ranges in this list.
-			 * Otherwise, it's enough to iterate with {@link #getItem}
+			 * Otherwise, it's enough to just iterate over this array.
 			 * in a for loop.
 			 * @returns {CKEDITOR.dom.rangeListIterator}
Index: /CKEditor/branches/features/contenteditable/_source/plugins/blockquote/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/blockquote/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/blockquote/plugin.js	(revision 5590)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -48,6 +48,5 @@
 			var state = editor.getCommand( 'blockquote' ).state,
 				selection = editor.getSelection(),
-				ranges = selection && selection.getRanges( true ),
-				range = ranges.count() && ranges.getItem( 0 );
+				range = selection && selection.getRanges( true )[0];
 
 			if ( !range )
Index: /CKEditor/branches/features/contenteditable/_source/plugins/enterkey/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/enterkey/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/enterkey/plugin.js	(revision 5590)
@@ -1,3 +1,3 @@
-/*
+﻿/*
 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
@@ -347,11 +347,11 @@
 
 		// Delete the contents of all ranges except the first one.
-		for ( var i = ranges.count() - 1 ; i > 0 ; i-- )
-		{
-			ranges.getItem( i ).deleteContents();
+		for ( var i = ranges.length - 1 ; i > 0 ; i-- )
+		{
+			ranges[ i ].deleteContents();
 		}
 
 		// Return the first range.
-		return ranges.getItem( 0 );
+		return ranges[ 0 ];
 	}
 })();
Index: /CKEditor/branches/features/contenteditable/_source/plugins/find/dialogs/find.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/find/dialogs/find.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/find/dialogs/find.js	(revision 5590)
@@ -567,11 +567,8 @@
 			var searchRange,
 				sel = editor.getSelection(),
-				ranges,
 				body = editor.document.getBody();
-
-			if ( !isDefault && sel
-				 && ( ranges = sel.getRanges() ) && ranges.count() )
-			{
-				searchRange = ranges.getItem( 0 ).clone();
+			if ( sel && !isDefault )
+			{
+				searchRange = sel.getRanges()[ 0 ].clone();
 				searchRange.collapse( true );
 			}
Index: /CKEditor/branches/features/contenteditable/_source/plugins/indent/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/indent/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/indent/plugin.js	(revision 5590)
@@ -269,5 +269,5 @@
 		{
 			var selection = editor.getSelection(),
-				range = selection && selection.getRanges( true ).getItem( 0 );
+				range = selection && selection.getRanges( true )[0];
 
 			if ( !range )
Index: /CKEditor/branches/features/contenteditable/_source/plugins/justify/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/justify/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/justify/plugin.js	(revision 5590)
@@ -80,7 +80,7 @@
 				iterator,
 				block;
-			for ( var i = ranges.count() - 1 ; i >= 0 ; i-- )
+			for ( var i = ranges.length - 1 ; i >= 0 ; i-- )
 			{
-				iterator = ranges.getItem( i ).createIterator();
+				iterator = ranges[ i ].createIterator();
 				iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;
 
Index: /CKEditor/branches/features/contenteditable/_source/plugins/link/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/link/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/link/plugin.js	(revision 5590)
@@ -178,5 +178,5 @@
 	{
 		var range;
-		try { range  = editor.getSelection().getRanges().getItem( 0 ); }
+		try { range  = editor.getSelection().getRanges()[ 0 ]; }
 		catch( e ) { return null; }
 
@@ -206,12 +206,11 @@
 			element;
 
-		for ( var range, i = 0 ; i < ranges.count() ; i++ )
-		{
-			range = ranges.getItem( i );
-			rangeRoot = range.getCommonAncestor( true );
+		for ( var i = 0 ; i < ranges.length ; i++ )
+		{
+			rangeRoot = ranges[i].getCommonAncestor( true );
 			element = rangeRoot.getAscendant( 'a', true );
 			if ( !element )
 				continue;
-			range.selectNodeContents( element );
+			ranges[i].selectNodeContents( element );
 		}
 
Index: /CKEditor/branches/features/contenteditable/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/list/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/list/plugin.js	(revision 5590)
@@ -386,9 +386,8 @@
 			var doc = editor.document,
 				selection = editor.getSelection(),
-				ranges = selection && selection.getRanges( true ),
-				range;
+				ranges = selection && selection.getRanges( true );
 
 			// There should be at least one selected range.
-			if ( !ranges.count() )
+			if ( !ranges || ranges.length < 1 )
 				return;
 
@@ -405,14 +404,13 @@
 							( editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'br' ) );
 					paragraph.appendTo( body );
-					ranges = new CKEDITOR.dom.rangeList( new CKEDITOR.dom.range( doc ) );
+					ranges = [ new CKEDITOR.dom.range( doc ) ];
 					// IE exception on inserting anything when anchor inside <br>.
 					if ( paragraph.is( 'br' ) )
 					{
-						ranges.getItem( 0 ).setStartBefore( paragraph );
-						ranges.getItem( 0 ).setEndAfter( paragraph );
+						ranges[ 0 ].setStartBefore( paragraph );
+						ranges[ 0 ].setEndAfter( paragraph );
 					}
 					else
-						ranges.getItem( 0 ).selectNodeContents( paragraph );
-
+						ranges[ 0 ].selectNodeContents( paragraph );
 					selection.selectRanges( ranges );
 				}
@@ -421,6 +419,6 @@
 				else
 				{
-					range = ranges.count() == 1 && ranges.getItem( 0 );
-					var enclosedNode = range && range.getEnclosedNode();
+					var range = ranges.length == 1 && ranges[ 0 ],
+						enclosedNode = range && range.getEnclosedNode();
 					if ( enclosedNode && enclosedNode.is
 						&& this.type == enclosedNode.getName() )
@@ -438,7 +436,7 @@
 				database = {};
 
-			for ( range, i = 0 ; i < ranges.count() ; i++ )
-			{
-				range = ranges.getItem( i );
+			while ( ranges.length > 0 )
+			{
+				range = ranges.pop();
 
 				var boundaryNodes = range.getBoundaryNodes(),
@@ -468,5 +466,5 @@
 
 					// First, try to group by a list ancestor.
-					for ( var j = pathElementsCount - 1; j >= 0 && ( element = pathElements[ j ] ); j-- )
+					for ( var i = pathElementsCount - 1; i >= 0 && ( element = pathElements[ i ] ); i-- )
 					{
 						if ( listNodeNames[ element.getName() ]
Index: /CKEditor/branches/features/contenteditable/_source/plugins/removeformat/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/removeformat/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/removeformat/plugin.js	(revision 5590)
@@ -38,5 +38,5 @@
 				var ranges = editor.getSelection().getRanges( true );
 
-				for ( var range, i = 0 ; i < ranges.count() ; i++ )
+				for ( var i = ranges.length - 1, range ; range = ranges[ i ] ; i-- )
 				{
 					if ( range.collapsed )
Index: /CKEditor/branches/features/contenteditable/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/selection/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/selection/plugin.js	(revision 5590)
@@ -243,5 +243,5 @@
 								}
 
-								savedRange = nativeSel && sel.getRanges().getItem( 0 );
+								savedRange = nativeSel && sel.getRanges()[ 0 ];
 
 								checkSelectionChangeTimeout.call( editor );
@@ -654,12 +654,12 @@
 				{
 					var ranges = cache.ranges;
-					for ( var i = 0; i < ranges.count(); i++ )
-					{
-						var range = ranges.getItem( i );
+					for ( var i = 0; i < ranges.length; i++ )
+					{
+						var range = ranges[ i ];
 
 						// Drop range spans inside one ready-only node.
 						var parent = range.getCommonAncestor();
 						if ( parent.isReadOnly())
-							ranges.remove( i );
+							ranges.splice( i, 1 );
 
 						if ( range.collapsed )
@@ -687,5 +687,5 @@
 								range.setEndBefore( next );
 								newRange.setStartAfter( next );
-								ranges.add( newRange, i + 1 );
+								ranges.splice( i + 1, 0, newRange );
 								break;
 							}
@@ -724,5 +724,5 @@
 				case CKEDITOR.SELECTION_TEXT :
 
-					var range = this.getRanges().getItem( 0 );
+					var range = this.getRanges()[0];
 
 					if ( range )
@@ -944,11 +944,11 @@
 		},
 
-		selectRanges : function( rangeList )
+		selectRanges : function( ranges )
 		{
 			if ( this.isLocked )
 			{
 				this._.cache.selectedElement = null;
-				this._.cache.startElement = rangeList.getItem( 0 ).getTouchedStartNode();
-				this._.cache.ranges = rangeList;
+				this._.cache.startElement = ranges[ 0 ].getTouchedStartNode();
+				this._.cache.ranges = ranges;
 				this._.cache.type = CKEDITOR.SELECTION_TEXT;
 
@@ -958,13 +958,15 @@
 			if ( CKEDITOR.env.ie )
 			{
-				var first = rangeList.getItem( 0 );
-				if ( rangeList.count() > 1 )
+				if ( ranges.length > 1 )
 				{
 					// IE doesn't accept multiple ranges selection, so we join all into one.
-					var last = rangeList.getItem( rangeList.count() - 1 );
-					first.setEnd( last.endContainer, last.endOffset );
+					var last = ranges[ ranges.length -1 ] ;
+					ranges[ 0 ].setEnd( last.endContainer, last.endOffset );
+					ranges.length = 1;
 				}
 
-				first.select();
+				if ( ranges[ 0 ] )
+					ranges[ 0 ].select();
+
 				this.reset();
 			}
@@ -973,16 +975,15 @@
 				var sel = this.getNative();
 
-				if ( rangeList.count() )
+				if ( ranges.length )
 					sel.removeAllRanges();
 
-				for ( var i = 0 ; i < rangeList.count() ; i++ )
-				{
-					if ( i < rangeList.count() -1 )
-					{
-						var left = rangeList.getItem( i ), right = rangeList.getItem( i + 1 ),
-								between = left.clone();
-
+				for ( var i = 0 ; i < ranges.length ; i++ )
+				{
+					if ( i < ranges.length -1 )
+					{
+						var left = ranges[ i  ], right = ranges[ i +1 ];
+						var between = left.clone();
 						between.setStart( left.endContainer, left.endOffset );
-						between.setEnd( right.startContainer, right.startOffset );
+						between.setEnd( right.startContainer, left.startOffset );
 
 						if ( !between.collapsed )
@@ -993,12 +994,12 @@
 							{
 								left.setEnd( right.endContainer, right.endOffset );
-								rangeList.remove( i + 1 );
+								ranges.splice( i + 1, 1 );
 							}
 						}
 					}
 
-					var range = rangeList.getItem( i ),
-						nativeRange = this.document.$.createRange(),
-						startContainer = range.startContainer;
+					var range = ranges[ i ];
+					var nativeRange = this.document.$.createRange();
+					var startContainer = range.startContainer;
 
 					// In FF2, if we have a collapsed range, inside an empty
@@ -1036,10 +1037,10 @@
 		selectBookmarks : function( bookmarks )
 		{
-			var ranges = new CKEDITOR.dom.rangeList();
+			var ranges = [];
 			for ( var i = 0 ; i < bookmarks.length ; i++ )
 			{
 				var range = new CKEDITOR.dom.range( this.document );
-				range.moveToBookmark( bookmarks[ i ] );
-				ranges.add( range );
+				range.moveToBookmark( bookmarks[i] );
+				ranges.push( range );
 			}
 			this.selectRanges( ranges );
Index: /CKEditor/branches/features/contenteditable/_source/plugins/tabletools/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/tabletools/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/tabletools/plugin.js	(revision 5590)
@@ -42,7 +42,7 @@
 		}
 
-		for ( var i = 0 ; i < ranges.count() ; i++ )
-		{
-			var range = ranges.getItem( i );
+		for ( var i = 0 ; i < ranges.length ; i++ )
+		{
+			var range = ranges[ i ];
 
 			if ( range.collapsed )
@@ -769,7 +769,7 @@
 						// Maintain the selection point at where the table was deleted.
 						selection.selectElement( table );
-						var ranges = selection.getRanges();
-						ranges.getItem( 0 ).collapse();
-						selection.selectRanges( ranges );
+						var range = selection.getRanges()[0];
+						range.collapse();
+						selection.selectRanges( [ range ] );
 
 						// If the table's parent has only one child, remove it,except body,as well.( #5416 )
Index: /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js	(revision 5589)
+++ /CKEditor/branches/features/contenteditable/_source/plugins/wysiwygarea/plugin.js	(revision 5590)
@@ -69,5 +69,5 @@
 				ranges = selection.getRanges( true );
 
-			if ( !ranges.count() )
+			if ( !ranges.length )
 				return;
 
@@ -79,7 +79,8 @@
 			var range, clone, lastElement, bookmark;
 
-			for ( var i = ranges.count() - 1 ; i >= 0 ; i-- )
+			for ( var i = ranges.length - 1 ; i >= 0 ; i-- )
 			{
-				range = ranges.getItem( i );
+				range = ranges[ i ];
+
 				// Remove the original contents.
 				range.deleteContents();
@@ -128,5 +129,5 @@
 				range.moveToElementEditStart( next );
 
-			selection.selectRanges( new CKEDITOR.dom.rangeList( range ) );
+			selection.selectRanges( [ range ] );
 
 			if ( selIsLocked )
@@ -190,5 +191,5 @@
 			blockLimit = path.blockLimit,
 			selection = evt.data.selection,
-			range = selection.getRanges().getItem( 0 ),
+			range = selection.getRanges()[0],
 			body = editor.document.getBody(),
 			enterMode = editor.config.enterMode;
