Index: CKEditor.NET/trunk/CHANGES.html
===================================================================
--- CKEditor.NET/trunk/CHANGES.html	(revision 7591)
+++ CKEditor.NET/trunk/CHANGES.html	(revision 7592)
@@ -81,4 +81,6 @@
 	<ul>
 		<li><a href="http://dev.ckeditor.com/ticket/8608">#8608</a> : CKEditor configuration is not read by instances running in the update panel.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/8823">#8823</a> : CKEditor ASP.Net control does not handle <code>ReadOnly</code> attribute.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/8727">#8727</a> : Impossible to set focus in ASP.NET by calling <code>CKEditor.focus()</code>.</li>
 	</ul>
 	<h2>
Index: CKEditor.NET/trunk/CKEditor.NET/CKEditorConfig.cs
===================================================================
--- CKEditor.NET/trunk/CKEditor.NET/CKEditorConfig.cs	(revision 7591)
+++ CKEditor.NET/trunk/CKEditor.NET/CKEditorConfig.cs	(revision 7592)
@@ -200,9 +200,31 @@
 					oc.Append(", \"on\" : {").Append(((object[])objArray)[0]).Append(" : ").Append(((object[])objArray)[1]).Append(" } ");
 				}
+				else if (propertyInfo.Name == "stylesheetParser_skipSelectors" || propertyInfo.Name == "stylesheetParser_validSelectors")
+				{
+					string valueToJSON = (string)propertyInfo.GetValue(obj, new object[0]);
+					string staticValueToCompare = (string)staticPropertyInfoDictionary[propertyInfo.Name];
+					if (valueToJSON != staticValueToCompare)
+						oc.Append(", " + propertyInfo.Name + ": " + valueToJSON);
+				}
+				else if (propertyInfo.Name == "entities_processNumerical")
+				{
+					string valueToJSON = (string)propertyInfo.GetValue(obj, new object[0]);
+					string staticValueToCompare = (string)staticPropertyInfoDictionary[propertyInfo.Name];
+					if (valueToJSON != staticValueToCompare)
+					{
+						if (valueToJSON.ToLower() == false.ToString().ToLower() || valueToJSON.ToLower() == true.ToString().ToLower())
+							oc.Append(", " + propertyInfo.Name + ": " + bool.Parse(valueToJSON));
+						else
+							oc.Append(", " + propertyInfo.Name + ": " + valueToJSON);
+					}
+				}
 				else
 				{
 					object valueToJSON = propertyInfo.GetValue(obj, new object[0]);
 					object staticValueToCompare = staticPropertyInfoDictionary[propertyInfo.Name];
-					if (!forceAddToJSON && !valueToJSON.GetType().IsArray && !staticValueToCompare.GetType().IsArray && staticValueToCompare.ToString() == valueToJSON.ToString())
+					if (valueToJSON == null && staticValueToCompare == null)
+						continue;
+					else if (valueToJSON.GetType().IsArray && staticValueToCompare == null) { }
+					else if (!forceAddToJSON && !valueToJSON.GetType().IsArray && !staticValueToCompare.GetType().IsArray && staticValueToCompare.ToString() == valueToJSON.ToString())
 						continue;
 					else if (!forceAddToJSON && valueToJSON.GetType().IsArray && staticValueToCompare.GetType().IsArray)
@@ -364,4 +386,11 @@
 
 		/// <summary>
+		/// Extra height in pixel to leave between the bottom boundary of content with document size when auto resizing.
+		/// Default Value: 0
+		/// </summary>
+		[CKSerializable]
+		public int autoGrow_bottomSpace { get; set; }
+
+		/// <summary>
 		/// The maximum height to which the editor can reach using AutoGrow. Zero means unlimited.
 		/// Default Value: 0
@@ -378,4 +407,18 @@
 
 		/// <summary>
+		/// Whether to have the auto grow happen on editor creation.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool autoGrow_onStartup { get; set; }
+
+		/// <summary>
+		/// Whether automatically create wrapping blocks around inline contents inside document body, this helps to ensure the integrality of the block enter mode. Note: Changing the default value might introduce unpredictable usability issues.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool autoParagraph { get; set; }
+
+		/// <summary>
 		/// Whether the replaced element (usually a textarea) is to be updated automatically when posting the form containing the editor.
 		/// Default Value: true
@@ -397,4 +440,11 @@
 		[CKSerializable]
 		public string baseHref { get; set; }
+
+		/// <summary>
+		/// Whether to escape basic HTML entities in the document, including: nbsp, gt, lt, amp.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool basicEntities { get; set; }
 
 		/// <summary>
@@ -458,4 +508,11 @@
 		[CKSerializable]
 		public string colorButton_colors { get; set; }
+
+		/// <summary>
+		/// Whether to enable the More Colors button in the color selectors.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool colorButton_enableMore { get; set; }
 
 		/// <summary>
@@ -569,4 +626,11 @@
 
 		/// <summary>
+		/// A setting that stores CSS rules to be injected into the page with styles to be applied to the tooltip element.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string devtools_styles { get; set; }
+
+		/// <summary>
 		/// The color of the dialog background cover. It should be a valid CSS color string.
 		/// Default Value: "white"
@@ -723,4 +787,12 @@
 		[CKSerializable]
 		public bool entities_latin { get; set; }
+
+		/// <summary>
+		/// Whether to convert all remaining characters not included in the ASCII character table to their relative decimal numeric representation of HTML entity. 
+		/// When set to force, it will convert all entities into this format. For example the phrase "This is Chinese: 汉语." is output as "This is Chinese: &#27721;&#35821;."
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public string entities_processNumerical { get; set; }
 
 		/// <summary>
@@ -1045,4 +1117,20 @@
 		[CKSerializable]
 		public string indentUnit { get; set; }
+
+		/// <summary>
+		/// Allows CKEditor to override jQuery.fn.val(), making it possible to use the val() function on textareas, as usual, having it synchronized with CKEditor.
+		/// This configuration option is global and executed during the jQuery Adapter loading. It can't be customized across editor instances.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool jqueryOverrideVal { get; set; }
+
+		/// <summary>
+		/// A list associating keystrokes to editor commands. Each element in the list is an array where the first item is the keystroke,
+		/// and the second is the name of the command to be executed.
+		/// Default Value: null
+		/// </summary>
+		[CKSerializable]
+		public object[] justifyClasses { get; set; }
 
 		/// <summary>
@@ -1085,4 +1173,11 @@
 
 		/// <summary>
+		/// The HTML to load in the editor when the "new page" command is executed.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string newpage_html { get; set; }
+
+		/// <summary>
 		/// The file that provides the MS Word cleanup function for pasting operations.
 		/// Note: This is a global configuration shared by all editor instances present in the page.
@@ -1136,5 +1231,12 @@
 		/// </summary>
 		public string[] protectedSource { get; set; }
-		
+
+		/// <summary>
+		/// If true, makes the editor start in read-only state. Otherwise, it will check if the linked <textarea> element has the disabled attribute.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool readOnly { get; set; }
+
 		/// <summary>
 		/// The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. 
@@ -1452,4 +1554,11 @@
 
 		/// <summary>
+		/// Sets whether the editor should have the focus when the page loads.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool startupFocus { get; set; }
+
+		/// <summary>
 		/// The mode to load at the editor startup. It depends on the plugins loaded. By default, the "wysiwyg" and "source" modes are available.
 		/// public enum StartupMode
@@ -1477,4 +1586,18 @@
 		[CKSerializable]
 		public bool startupShowBorders { get; set; }
+
+		/// <summary>
+		/// A regular expression that defines whether a CSS rule will be skipped by the Stylesheet Parser plugin. A CSS rule matching the regular expression will be ignored and will not be available in the Styles drop-down list.
+		/// Default Value: /(^body\.|^\.)/i
+		/// </summary>
+		[CKSerializable]
+		public string stylesheetParser_skipSelectors { get; set; }
+
+		/// <summary>
+		/// A regular expression that defines which CSS rules will be used by the Stylesheet Parser plugin. A CSS rule matching the regular expression will be available in the Styles drop-down list.
+		/// Default Value: /\w+\.\w+/
+		/// </summary>
+		[CKSerializable]
+		public string stylesheetParser_validSelectors { get; set; }
 
 		/// <summary>
@@ -1516,4 +1639,11 @@
 		[CKSerializable]
 		public int tabSpaces { get; set; }
+
+		/// <summary>
+		/// The templates definition set to use. It accepts a list of names separated by comma. It must match definitions loaded with the templates_files setting.
+		/// Default Value: "default"
+		/// </summary>
+		[CKSerializable]
+		public string templates { get; set; }
 
 		/// <summary>
@@ -1601,4 +1731,11 @@
 
 		/// <summary>
+		/// When enabled, makes the arrow keys navigation cycle within the current toolbar group. Otherwise the arrows will move trought all items available in the toolbar. The TAB key will still be used to quickly jump among the toolbar groups.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool toolbarGroupCycling { get; set; }
+
+		/// <summary>
 		/// The "theme space" to which rendering the toolbar. For the default theme, the recommended options are{
 		/// public enum ToolbarLocation
@@ -1720,9 +1857,13 @@
 		{
 			CKEditorConfig GlobalConfigObj = new CKEditorConfig();
+			GlobalConfigObj.autoGrow_bottomSpace = 0;
 			GlobalConfigObj.autoGrow_maxHeight = 0;
 			GlobalConfigObj.autoGrow_minHeight = 200;
+			GlobalConfigObj.autoGrow_onStartup = false;
+			GlobalConfigObj.autoParagraph = true;
 			GlobalConfigObj.autoUpdateElement = true;
 			GlobalConfigObj.baseFloatZIndex = 10000;
 			GlobalConfigObj.baseHref = string.Empty;
+			GlobalConfigObj.basicEntities = true;
 			GlobalConfigObj.blockedKeystrokes = new int[] { CKEDITOR_CTRL + 66 /*B*/, CKEDITOR_CTRL + 73 /*I*/, CKEDITOR_CTRL + 85 /*U*/};
 			GlobalConfigObj.bodyClass = string.Empty;
@@ -1731,4 +1872,5 @@
 			GlobalConfigObj.colorButton_backStyle = @"{ element : 'span', styles : { 'background-color' : '#(color)' } }";
 			GlobalConfigObj.colorButton_colors = "000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF";
+			GlobalConfigObj.colorButton_enableMore = true;
 			GlobalConfigObj.colorButton_foreStyle = @"{ element : 'span',
 styles : { 'color' : '#(color)' },
@@ -1745,4 +1887,5 @@
 			GlobalConfigObj.customConfig = "config.js";
 			GlobalConfigObj.defaultLanguage = "en";
+			GlobalConfigObj.devtools_styles = "";
 			GlobalConfigObj.dialog_backgroundCoverColor = "white";
 			GlobalConfigObj.dialog_backgroundCoverOpacity = 0.5;
@@ -1763,4 +1906,5 @@
 			GlobalConfigObj.entities_greek = true;
 			GlobalConfigObj.entities_latin = true;
+			GlobalConfigObj.entities_processNumerical = false.ToString();
 			GlobalConfigObj.extraPlugins = string.Empty;
 			GlobalConfigObj.filebrowserBrowseUrl = string.Empty;
@@ -1815,4 +1959,6 @@
 			GlobalConfigObj.indentOffset = 40;
 			GlobalConfigObj.indentUnit = "px";
+			GlobalConfigObj.jqueryOverrideVal = true;
+			GlobalConfigObj.justifyClasses = null;
 			GlobalConfigObj.keystrokes = new object[] 
 			{ 
@@ -1831,4 +1977,5 @@
 			GlobalConfigObj.language = string.Empty;
 			GlobalConfigObj.menu_groups = "clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea";
+			GlobalConfigObj.newpage_html = string.Empty;
 			GlobalConfigObj.pasteFromWordCleanupFile = "default";
 			GlobalConfigObj.pasteFromWordNumberedHeadingToList = false;
@@ -1839,4 +1986,5 @@
 			//this.plugins = string.Empty;
 			GlobalConfigObj.protectedSource = new string[0];
+			GlobalConfigObj.readOnly = false;
 			GlobalConfigObj.removeDialogTabs = string.Empty;
 			GlobalConfigObj.removeFormatAttributes = "class,style,lang,width,height,align,hspace,valign";
@@ -1892,10 +2040,14 @@
 				"€", "‘", "’", "“", "”", "–", "—", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "®", "¯", "°", "&", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "&", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ü", "ý", "þ", "ÿ", "Œ", "œ", "Ŵ", "Ŷ", "ŵ", "ŷ", "‚", "‛", "„", "…", "™", "►", "•", "→", "⇒", "⇔", "♦", "≈"
 			};
+			GlobalConfigObj.startupFocus = false;
 			GlobalConfigObj.startupMode = StartupMode.Wysiwyg;
 			GlobalConfigObj.startupOutlineBlocks = false;
 			GlobalConfigObj.startupShowBorders = true;
+			GlobalConfigObj.stylesheetParser_skipSelectors = @"/(^body\.|^\.)/i";
+			GlobalConfigObj.stylesheetParser_validSelectors = @"/\w+\.\w+/";
 			GlobalConfigObj.stylesSet = new string[] { "default" };
 			GlobalConfigObj.tabIndex = 0;
 			GlobalConfigObj.tabSpaces = 0;
+			GlobalConfigObj.templates = "default";
 			GlobalConfigObj.templates_files = new string[] { "~/plugins/templates/templates/default.js" };
 			GlobalConfigObj.templates_replaceContent = true;
@@ -1925,4 +2077,5 @@
 			};
 			GlobalConfigObj.toolbarCanCollapse = true;
+			GlobalConfigObj.toolbarGroupCycling = true;
 			GlobalConfigObj.toolbarLocation = ToolbarLocation.Top;
 			GlobalConfigObj.toolbarStartupExpanded = true;
@@ -1938,9 +2091,13 @@
 		public CKEditorConfig(string editorPath)
 		{
+			this.autoGrow_bottomSpace = CKEditorConfig.GlobalConfig.autoGrow_bottomSpace;
 			this.autoGrow_maxHeight = CKEditorConfig.GlobalConfig.autoGrow_maxHeight;
 			this.autoGrow_minHeight = CKEditorConfig.GlobalConfig.autoGrow_minHeight;
+			this.autoGrow_onStartup = CKEditorConfig.GlobalConfig.autoGrow_onStartup;
+			this.autoParagraph = CKEditorConfig.GlobalConfig.autoParagraph;
 			this.autoUpdateElement = CKEditorConfig.GlobalConfig.autoUpdateElement;
 			this.baseFloatZIndex = CKEditorConfig.GlobalConfig.baseFloatZIndex;
 			this.baseHref = CKEditorConfig.GlobalConfig.baseHref;
+			this.basicEntities = CKEditorConfig.GlobalConfig.basicEntities;
 			this.blockedKeystrokes = CKEditorConfig.GlobalConfig.blockedKeystrokes;
 			this.bodyClass = CKEditorConfig.GlobalConfig.bodyClass;
@@ -1949,4 +2106,5 @@
 			this.colorButton_backStyle = CKEditorConfig.GlobalConfig.colorButton_backStyle;
 			this.colorButton_colors = CKEditorConfig.GlobalConfig.colorButton_colors;
+			this.colorButton_enableMore = CKEditorConfig.GlobalConfig.colorButton_enableMore;
 			this.colorButton_foreStyle = CKEditorConfig.GlobalConfig.colorButton_foreStyle;
 			this.contentsCss = ResolveUrl(CKEditorConfig.GlobalConfig.contentsCss, editorPath);
@@ -1961,4 +2119,5 @@
 			this.customConfig = CKEditorConfig.GlobalConfig.customConfig;
 			this.defaultLanguage = CKEditorConfig.GlobalConfig.defaultLanguage;
+			this.devtools_styles = CKEditorConfig.GlobalConfig.devtools_styles;
 			this.dialog_backgroundCoverColor = CKEditorConfig.GlobalConfig.dialog_backgroundCoverColor;
 			this.dialog_backgroundCoverOpacity = CKEditorConfig.GlobalConfig.dialog_backgroundCoverOpacity;
@@ -1979,4 +2138,5 @@
 			this.entities_greek = CKEditorConfig.GlobalConfig.entities_greek;
 			this.entities_latin = CKEditorConfig.GlobalConfig.entities_latin;
+			this.entities_processNumerical = CKEditorConfig.GlobalConfig.entities_processNumerical;
 			this.extraPlugins = CKEditorConfig.GlobalConfig.extraPlugins;
 			this.filebrowserBrowseUrl = CKEditorConfig.GlobalConfig.filebrowserBrowseUrl;
@@ -2018,8 +2178,11 @@
 			this.indentClasses = CKEditorConfig.GlobalConfig.indentClasses;
 			this.indentOffset = CKEditorConfig.GlobalConfig.indentOffset;
+			this.jqueryOverrideVal = CKEditorConfig.GlobalConfig.jqueryOverrideVal;
 			this.indentUnit = CKEditorConfig.GlobalConfig.indentUnit;
+			this.justifyClasses = CKEditorConfig.GlobalConfig.justifyClasses;
 			this.keystrokes = CKEditorConfig.GlobalConfig.keystrokes;
 			this.language = CKEditorConfig.GlobalConfig.language;
 			this.menu_groups = CKEditorConfig.GlobalConfig.menu_groups;
+			this.newpage_html = CKEditorConfig.GlobalConfig.newpage_html;
 			this.pasteFromWordCleanupFile = CKEditorConfig.GlobalConfig.pasteFromWordCleanupFile;
 			this.pasteFromWordNumberedHeadingToList = CKEditorConfig.GlobalConfig.pasteFromWordNumberedHeadingToList;
@@ -2028,4 +2191,5 @@
 			this.pasteFromWordRemoveStyles = CKEditorConfig.GlobalConfig.pasteFromWordRemoveStyles;
 			this.protectedSource = CKEditorConfig.GlobalConfig.protectedSource;
+			this.readOnly = CKEditorConfig.GlobalConfig.readOnly;
 			this.removeDialogTabs = CKEditorConfig.GlobalConfig.removeDialogTabs;
 			this.removeFormatAttributes = CKEditorConfig.GlobalConfig.removeFormatAttributes;
@@ -2058,10 +2222,14 @@
 			this.smiley_path = CKEditorConfig.GlobalConfig.smiley_path;
 			this.specialChars = CKEditorConfig.GlobalConfig.specialChars;
+			this.startupFocus = CKEditorConfig.GlobalConfig.startupFocus;
 			this.startupMode = CKEditorConfig.GlobalConfig.startupMode;
 			this.startupOutlineBlocks = CKEditorConfig.GlobalConfig.startupOutlineBlocks;
 			this.startupShowBorders = CKEditorConfig.GlobalConfig.startupShowBorders;
+			this.stylesheetParser_skipSelectors = CKEditorConfig.GlobalConfig.stylesheetParser_skipSelectors;
+			this.stylesheetParser_validSelectors = CKEditorConfig.GlobalConfig.stylesheetParser_validSelectors;
 			this.stylesSet = CKEditorConfig.GlobalConfig.stylesSet;
 			this.tabIndex = CKEditorConfig.GlobalConfig.tabIndex;
 			this.tabSpaces = CKEditorConfig.GlobalConfig.tabSpaces;
+			this.templates = CKEditorConfig.GlobalConfig.templates;
 			this.templates_files = ResolveUrl(CKEditorConfig.GlobalConfig.templates_files, editorPath);
 			this.templates_replaceContent = CKEditorConfig.GlobalConfig.templates_replaceContent;
@@ -2071,4 +2239,5 @@
 			this.toolbar_Full = CKEditorConfig.GlobalConfig.toolbar_Full;
 			this.toolbarCanCollapse = CKEditorConfig.GlobalConfig.toolbarCanCollapse;
+			this.toolbarGroupCycling = CKEditorConfig.GlobalConfig.toolbarGroupCycling;
 			this.toolbarLocation = CKEditorConfig.GlobalConfig.toolbarLocation;
 			this.uiColor = CKEditorConfig.GlobalConfig.uiColor;
Index: CKEditor.NET/trunk/CKEditor.NET/CKEditorControl.cs
===================================================================
--- CKEditor.NET/trunk/CKEditor.NET/CKEditorControl.cs	(revision 7591)
+++ CKEditor.NET/trunk/CKEditor.NET/CKEditorControl.cs	(revision 7592)
@@ -43,4 +43,18 @@
 		public override TextBoxMode TextMode { get { return base.TextMode; } }
 
+		[Description("If true, makes the editor start in read-only state. Otherwise, it will check if the linked <textarea> element has the disabled attribute.")]
+		[DefaultValue(false)]
+		public override bool ReadOnly
+		{
+			get
+			{
+				return config.readOnly;
+			}
+			set
+			{
+				config.readOnly = base.ReadOnly = value;
+			}
+		}
+
 		#endregion
 
@@ -163,4 +177,14 @@
 
 		[Category("CKEditor Other Settings")]
+		[Description("Extra height in pixel to leave between the bottom boundary of content with document size when auto resizing.")]
+		[DefaultValue(0)]
+		public int AutoGrowBottomSpace { get { return config.autoGrow_bottomSpace; } set { config.autoGrow_bottomSpace = value; } }
+
+		[Category( "CKEditor Other Settings" )]
+		[Description( "Whether to have the auto grow happen on editor creation." )]
+		[DefaultValue(false)]
+		public bool AutoGrowOnStartup { get { return config.autoGrow_onStartup; } set { config.autoGrow_onStartup = value; } }
+
+		[Category("CKEditor Other Settings")]
 		[Description("The maximum height to which the editor can reach using AutoGrow. Zero means unlimited.")]
 		[DefaultValue(0)]
@@ -173,7 +197,17 @@
 
 		[Category("CKEditor Other Settings")]
+		[Description( "Whether automatically create wrapping blocks around inline contents inside document body, this helps to ensure the integrality of the block enter mode. Note: Changing the default value might introduce unpredictable usability issues." )]
+		[DefaultValue(true)]
+		public bool AutoParagraph { get { return config.autoParagraph; } set { config.autoParagraph = value; } }
+
+		[Category("CKEditor Other Settings")]
 		[Description("Whether the replaced element (usually a textarea) is to be updated automatically when posting the form containing the editor.")]
 		[DefaultValue(true)]
 		public bool AutoUpdateElement { get { return config.autoUpdateElement; } set { config.autoUpdateElement = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether to escape basic HTML entities in the document, including: nbsp, gt, lt, amp.")]
+		[DefaultValue(true)]
+		public bool BasicEntities { get { return config.basicEntities; } set { config.basicEntities = value; } }
 
 		[Category("CKEditor Basic Settings")]
@@ -656,4 +690,9 @@
 		[DefaultValue(0)]
 		public int TabSpaces { get { return config.tabSpaces; } set { config.tabSpaces = value; } }
+
+		[Category( "CKEditor Other Settings" )]
+		[Description( "The templates definition set to use. It accepts a list of names separated by comma. It must match definitions loaded with the templates_files setting." )]
+		[DefaultValue( "default" )]
+		public string Templates { get { return config.templates; } set { config.templates = value; } }
 
 		[PersistenceMode(PersistenceMode.Attribute)]
@@ -1018,4 +1057,9 @@
 		}
 
+		public override void Focus()
+		{
+			base.Focus();
+			this.config.startupFocus = true;
+		}
 		#endregion
 
