diff --git a/Source/Element/Element.js b/Source/Element/Element.js
index 16b7bb374..f50b3e04e 100644
--- a/Source/Element/Element.js
+++ b/Source/Element/Element.js
@@ -818,7 +818,26 @@ Element.implement({
clone: function(contents, keepid){
contents = contents !== false;
- var clone = this.cloneNode(contents), ce = [clone], te = [this], i;
+ var cloneNode = function(){return false};
+ /**/
+ if (Browser.ie6 || Browser.ie7){
+ var self = this;
+ cloneNode = function(contents){
+ var oldID = '' + self.id;
+ self.removeAttribute('id');
+ var clonedHTML = self.outerHTML;
+ var cloned = document.createElement('div');
+ if(!keepid) clonedHTML = clonedHTML.replace(/id=[^\ \>]/gim,'');
+ cloned.innerHTML = clonedHTML;
+ self.id = oldID;
+ var clone = cloned.firstChild;
+ if (keepid) clone.id = oldID;
+ if (!contents & clone.tagName !== 'INPUT' ) clone.innerHTML = '';
+ return clone;
+ }
+ }
+ /**/
+ var clone = cloneNode(contents) || this.cloneNode(contents), ce = [clone], te = [this], i;
if (contents){
ce.append(Array.from(clone.getElementsByTagName('*')));
@@ -849,6 +868,8 @@ Element.implement({
for (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML;
}
/**/
+
+
return document.id(clone);
}
diff --git a/Specs/1.4client/Element/Element.js b/Specs/1.4client/Element/Element.js
index e89ea38df..c51a84c43 100644
--- a/Specs/1.4client/Element/Element.js
+++ b/Specs/1.4client/Element/Element.js
@@ -10,6 +10,34 @@ describe('Element', function(){
describe('Element.getProperty', function(){
+ it('should cloneNode properly on IE6/7', function(){
+
+ var div = new Element('div');
+ div.inject(document.documentElement);
+ div.innerHTML = "";
+
+ var q1 = document.id('Q1');
+ var clone = q1.clone();
+ clone.replaces(q1);
+
+ expect($$('input[id=Q1]').length).toEqual(0);
+ expect($$('input#Q1').length).toEqual(0);
+ expect($$('input[id=Q1]').length).toEqual(0); //<- element.erase will fail on this :(
+ clone.dispose();
+
+ var ul = new Element('ul',{id:'test'});
+ ul.set('html', '
');
+ ul.inject(document.documentElement);
+
+ var ulc = ul.clone();
+ ulc.replaces(ul);
+
+ expect($$('li#li1').length).toEqual(0);
+
+ ulc.destroy();
+
+ });
+
it('should get the attrubte of a form when the form has an input with as ID the attribute name', function(){
var div = new Element('div');
div.innerHTML = '';