Index: /CKEditor/branches/prototype/_source/core/dom/element.js
===================================================================
--- /CKEditor/branches/prototype/_source/core/dom/element.js	(revision 2614)
+++ /CKEditor/branches/prototype/_source/core/dom/element.js	(revision 2615)
@@ -761,5 +761,5 @@
 
 		/**
-		 * Makes the element unselectable.
+		 * Makes the element and its children unselectable.
 		 * @function
 		 * @example
Index: /CKEditor/branches/prototype/_source/core/editor.js
===================================================================
--- /CKEditor/branches/prototype/_source/core/editor.js	(revision 2614)
+++ /CKEditor/branches/prototype/_source/core/editor.js	(revision 2615)
@@ -51,4 +51,5 @@
 
 		var loadedConfig = loadConfigLoaded[ customConfig ] || ( loadConfigLoaded[ customConfig ] = {} );
+ 
 
 		// If the custom config has already been downloaded, reuse it.
@@ -402,4 +403,5 @@
 		/**
 		 * Sets the editor data. The data must be provided in raw format.
+		 * @param {String} data HTML code to replace the curent content in the editor.
 		 * @example
 		 * CKEDITOR.instances.editor1.<b>setData( '&lt;p&gt;This is the editor data.&lt;/p&gt;' )</b>;
@@ -413,5 +415,20 @@
 			this._.data = eventData.dataValue;
 
-			this.fire( 'afterSetData' );
+			this.fire( 'afterSetData', eventData );
+		},
+
+		/**
+		 * Inserts HTML into the currently selected position in the editor.
+		 * @param {String} data HTML code to be inserted into the editor.
+		 * @example
+		 * CKEDITOR.instances.editor1.<b>insertHtml( '&lt;p&gt;This is a new paragraph.&lt;/p&gt;' )</b>
+		 */
+		insertHtml : function( data )
+		{
+			var eventData = { insert : data };
+			this.fire( 'insertHtml', eventData );
+			this.fire( 'afterInsertHtml', eventData );
+			if ( eventData.html && eventData.html != this._.data )
+				this._.data = eventData.html;
 		},
 
Index: /CKEditor/branches/prototype/_source/plugins/editingblock/plugin.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/editingblock/plugin.js	(revision 2614)
+++ /CKEditor/branches/prototype/_source/plugins/editingblock/plugin.js	(revision 2615)
@@ -68,4 +68,18 @@
 						isHandlingData = true;
 						getMode( editor ).loadData( editor.getData() );
+						isHandlingData = false;
+					}
+				});
+
+			editor.on( 'afterInsertHtml', function( evt )
+				{
+					if ( !isHandlingData && editor.mode )
+					{
+						isHandlingData = true;
+						if ( CKEDITOR.env.ie )
+							editor.document.$.selection.createRange().pasteHtml( evt.data.insert );
+						else
+							editor.document.$.execCommand( 'inserthtml', false, evt.data.insert );
+						evt.data.html = editor.document.getBody().getHtml();
 						isHandlingData = false;
 					}
Index: /CKEditor/branches/prototype/_source/plugins/smiley/plugin.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/smiley/plugin.js	(revision 2614)
+++ /CKEditor/branches/prototype/_source/plugins/smiley/plugin.js	(revision 2615)
@@ -56,5 +56,19 @@
 		{
 			type : 'html',
-			onClick : function( evt ){},
+			onClick : function( evt )
+			{
+				var target = evt.data.getTarget(),
+					targetName = target.getName();
+				if ( targetName != 'td' && targetName != 'img' )
+					return;
+
+				if ( targetName == 'td' )
+					target = target.getChild(0).$;
+				else
+					target = target.$;
+
+				editor.insertHtml( '<img src="' + CKEDITOR.tools.htmlEncode( target.src ) + '" />' );
+				this.getDialog().hide();
+			},
 			style : 'width: 100%; height: 100%; border-collapse: separate;'
 		},
Index: /CKEditor/branches/prototype/_source/plugins/sourcearea/plugin.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/sourcearea/plugin.js	(revision 2614)
+++ /CKEditor/branches/prototype/_source/plugins/sourcearea/plugin.js	(revision 2615)
@@ -44,4 +44,13 @@
 							textarea = new CKEDITOR.dom.element( 'textarea' );
 							textarea.setAttribute( 'dir', 'ltr' );
+							if ( !CKEDITOR.env.ie )
+							{
+								textarea.on( 'mousedown', function( evt )
+									{
+										evt = evt.data.$;
+										if ( evt.stopPropagation )
+											evt.stopPropagation();
+									} );
+							}
 							textarea.addClass( 'cke_source' );
 							textarea.setStyles({
Index: /CKEditor/branches/prototype/_source/themes/default/theme.js
===================================================================
--- /CKEditor/branches/prototype/_source/themes/default/theme.js	(revision 2614)
+++ /CKEditor/branches/prototype/_source/themes/default/theme.js	(revision 2615)
@@ -70,5 +70,6 @@
 			'</span>' ].join('') );
 
-		container.unselectable();
+		container.getChild( [0, 0, 0] ).unselectable();
+		container.getChild( [0, 0, 2] ).unselectable();
 
 		if ( elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )
