Index: test/unit/manipulation.js
===================================================================
--- test/unit/manipulation.js	(revision 6543)
+++ test/unit/manipulation.js	(working copy)
@@ -116,6 +116,35 @@
 // 	testWrapInner(functionReturningObj)
 // })
 
+var testUnwrap = function() {
+	expect(9);
+
+	var abcd = jQuery('#unwrap1 > span, #unwrap2 > span').get(),
+		abcdef = jQuery('#unwrap span').get();
+
+	equals( jQuery('#unwrap1 span, #unwrap2 span:first').unwrap().length, 3, 'make #unwrap1 and #unwrap2 go away' );
+	same( jQuery('#unwrap > span').get(), abcd, 'all four spans should still exist' );
+
+	same( jQuery('#unwrap3 span').unwrap().get(), jQuery('#unwrap3 > span').get(), 'make all b in #unwrap3 go away' );
+
+	same( jQuery('#unwrap3 span').unwrap().get(), jQuery('#unwrap > span.unwrap3').get(), 'make #unwrap3 go away' );
+
+	same( jQuery('#unwrap').children().get(), abcdef, '#unwrap only contains 6 child spans' );
+
+	same( jQuery('#unwrap > span').unwrap().get(), jQuery('body > span.unwrap').get(), 'make the 6 spans become children of body' );
+
+	same( jQuery('body > span.unwrap').unwrap().get(), jQuery('body > span.unwrap').get(), 'can\'t unwrap children of body' );
+	same( jQuery('body > span.unwrap').unwrap().get(), abcdef, 'can\'t unwrap children of body' );
+
+	same( jQuery('body > span.unwrap').get(), abcdef, 'body contains 6 .unwrap child spans' );
+
+	jQuery('body > span.unwrap').remove();
+}
+
+test("unwrap()", function() {
+	testUnwrap();
+});
+
 var testAppend = function(valueObj) {
 	expect(21);
 	var defaultText = 'Try them out:'
Index: test/index.html
===================================================================
--- test/index.html	(revision 6543)
+++ test/index.html	(working copy)
@@ -42,6 +42,20 @@
 	</div>
 	<!-- this iframe is outside the #main so it won't reload constantly wasting time, but it means the tests must be "safe" and clean up after themselves -->
 	<iframe id="loadediframe" name="loadediframe" style="display:none;" src="data/iframe.html"></iframe>
+	<div id="unwrap" style="display: none;">
+		<div id="unwrap1">
+			<span class="unwrap">a</span>
+			<span class="unwrap">b</span>
+		</div>
+		<div id="unwrap2">
+			<span class="unwrap">c</span>
+			<span class="unwrap">d</span>
+		</div>
+		<div id="unwrap3">
+			<b><span class="unwrap unwrap3">e</span></b>
+			<b><span class="unwrap unwrap3">f</span></b>
+		</div>
+	</div>
 	<dl id="dl" style="display:none;">
 	<div id="main" style="display: none;">
 		<p id="firstp">See <a id="simon1" href="http://simon.incutio.com/archive/2003/03/25/#getElementsBySelector" rel="bookmark">this blog entry</a> for more information.</p>
Index: src/manipulation.js
===================================================================
--- src/manipulation.js	(revision 6543)
+++ src/manipulation.js	(working copy)
@@ -89,6 +89,15 @@
 		});
 	},
 
+	unwrap: function() {
+		this.parent( ':not(body)' )
+			.each(function(){
+				jQuery( this ).replaceWith( this.childNodes );
+			});
+		
+		return this;
+	},
+	
 	append: function() {
 		return this.domManip(arguments, true, function(elem){
 			if ( this.nodeType === 1 ) {
