Index: /CKEditor/trunk/_source/core/dom/element.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/element.js	(revision 3437)
+++ /CKEditor/trunk/_source/core/dom/element.js	(revision 3438)
@@ -805,4 +805,16 @@
 
 		/**
+		 * Indicates whether a specified attribute is defined for this element.
+		 * @returns {Boolean} True if the specified attribute is defined.
+		 * @param (String) name The attribute name.
+		 * @example
+		 */
+		hasAttribute : function( name )
+		{
+			var $attr = this.$.attributes.getNamedItem( name );
+			return !!( $attr && $attr.specified );
+		},
+
+		/**
 		 * Hides this element (display:none).
 		 * @example
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/textarea.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/textarea.js	(revision 3437)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/textarea.js	(revision 3438)
@@ -71,7 +71,6 @@
 						setup : function( element )
 						{
-							var ieDefault = 20;
-							var value = element.getAttribute( 'cols' );
-							this.setValue( ( CKEDITOR.env.ie && ( value == ieDefault ) ? '' : value ) || '' );
+							var value = element.hasAttribute( 'cols' ) && element.getAttribute( 'cols' );
+							this.setValue( value || '' );
 						},
 						commit : function( element )
@@ -93,7 +92,6 @@
 						setup : function( element )
 						{
-							var ieDefault = 2;
-							var value = element.getAttribute( 'rows' );
-							this.setValue( ( CKEDITOR.env.ie && ( value == ieDefault ) ? '' : value ) || '' );
+							var value = element.hasAttribute( 'rows' ) && element.getAttribute( 'rows' );
+							this.setValue( value || '' );
 						},
 						commit : function( element )
Index: /CKEditor/trunk/_source/plugins/forms/dialogs/textfield.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/dialogs/textfield.js	(revision 3437)
+++ /CKEditor/trunk/_source/plugins/forms/dialogs/textfield.js	(revision 3438)
@@ -10,10 +10,4 @@
 		size : 1,
 		maxLength : 1
-	};
-
-	var ieDefaults =
-	{
-		size : 20,
-		maxLength : 0x7fffffff
 	};
 
@@ -59,9 +53,6 @@
 			var autoSetup = function( element )
 			{
-				var value = element.getAttribute( this.id );
-				if ( CKEDITOR.env.ie && ( this.id in ieDefaults ) && ieDefaults[ this.id ] == value )
-					this.setValue( '' );
-				else
-					this.setValue( element.getAttribute( this.id ) || '' );
+				var value = element.hasAttribute( this.id ) && element.getAttribute( this.id );
+				this.setValue( value || '' );
 			};
 
Index: /CKEditor/trunk/_source/plugins/forms/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/forms/plugin.js	(revision 3437)
+++ /CKEditor/trunk/_source/plugins/forms/plugin.js	(revision 3438)
@@ -165,2 +165,29 @@
 	requires : [ 'image' ]
 } );
+
+if ( CKEDITOR.env.ie )
+{
+	CKEDITOR.dom.element.prototype.hasAttribute = function( name )
+	{
+		var $attr = this.$.attributes.getNamedItem( name );
+
+		if ( this.getName() == 'input' )
+		{
+			switch ( name )
+			{
+				case 'class' :
+					return this.$.className.length > 0;
+				case 'checked' :
+					return !!this.$.checked;
+				case 'value' :
+					var type = this.getAttribute( 'type' );
+					if ( type == 'checkbox' || type == 'radio' )
+						return this.$.value != 'on';
+					break;
+				default:
+			}
+		}
+
+		return !!( $attr && $attr.specified );
+	};
+}
