diff --git a/changes.xml b/changes.xml
index cf5d20d..6455946 100644
--- a/changes.xml
+++ b/changes.xml
@@ -37,6 +37,17 @@
       <title>Apache Compress Ant Library</title>
     </properties>
 
+    <release version="1.2" date="unreleased">
+      <action type="update" breaks-bwc="true">
+        The Apache Compress Antlib now requires Apache Commons
+        Compress 1.4 and the public domain XZ for Java library if you
+        want to use the XZ format.
+      </action>
+      <action type="add">
+        Support for xz compression has been added.
+      </action>
+    </release>
+
     <release version="1.1" date="2011-11-05">
       <action type="update" breaks-bwc="true">
         The Apache Compress Antlib now requires Apache Commons
diff --git a/docs/compresource.html b/docs/compresource.html
index ddd3c0d..3ec3425 100644
--- a/docs/compresource.html
+++ b/docs/compresource.html
@@ -92,3 +92,23 @@
   JAR some-archive.pack where the <code>pack200resource</code>
   provides the decompression of the archive.</p>
 
+<h2><a name="xzresource">xzresource</a></h2>
+
+<p>This is a <a href="#compresource">compressed resource</a> using the
+  XZ compression.</p>
+
+<h4>Examples</h4>
+
+<pre>
+&lt;cmp:tarentry xmlns:cmp="antlib:org.apache.ant.compress"
+    name="some-file.txt"&gt;
+  &lt;cmp:xzresource&gt;
+    &lt;file file="some-archive.tar.xz"/&gt;
+  &lt;/cmp:xzresource&gt;
+&lt;/cmp:tarentry&gt;
+</pre>
+
+<p>Represents the entry named some-file.txt in archive
+  some-archive.tar.xz where the <code>xzresource</code> provides
+  the decompression of the archive.</p>
+
diff --git a/docs/index.html b/docs/index.html
index 18d6346..b299963 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -28,8 +28,8 @@
     <p>This Antlib contains tasks and resources that provide
       compression/uncompression and archival/unarchival capabilities
       based on <a href="http://commons.apache.org/compress/">Apache
-      Commons Compress</a>.  Using Apache Commons Compress 1.3 this
-      Antlib supports gzip, bzip2 and pack200 compression and ar, cpio, Unix
+      Commons Compress</a>.  Using Apache Commons Compress 1.4 this
+      Antlib supports gzip, bzip2, xz and pack200 compression and ar, cpio, Unix
       dump, tar and zip archives.  Support for dump is read-only.</p>
 
     <h3>Known Limitations</h3>
@@ -57,7 +57,9 @@
       <li><a href="expand.html#undump">undump</a></li>
       <li><a href="unpack.html#unpack200">unpack200</a></li>
       <li><a href="expand.html#untar">untar</a></li>
+      <li><a href="unpack.html#unxz">unxz</a></li>
       <li><a href="expand.html#unzip">unzip</a></li>
+      <li><a href="pack.html#xz">xz</a></li>
       <li><a href="archive.html#zip">zip</a></li>
     </ul>
 
@@ -76,6 +78,7 @@
       <li><a href="compresource.html#pack200resource">pack200resource</a></li>
       <li><a href="entry.html#tarentry">tarentry</a></li>
       <li><a href="fileset.html#tarfileset">tarfileset</a></li>
+      <li><a href="compresource.html#xzresource">xzresource</a></li>
       <li><a href="entry.html#zipentry">zipentry</a></li>
       <li><a href="fileset.html#zipfileset">zipfileset</a></li>
     </ul>
diff --git a/docs/pack.html b/docs/pack.html
index 6b33fb3..40ebb00 100644
--- a/docs/pack.html
+++ b/docs/pack.html
@@ -161,6 +161,11 @@
     </tr>
   </table>
 
+  <h3><a name="xz">XZ</a></h3>
+
+  <p>Is a <a href="#pack">compressing task</a> that uses the XZ
+    compression algorithm.</p>
+
   <h3>Examples</h3>
   <pre>
     &lt;cmp:gzip src=&quot;test.tar&quot; dest=&quot;test.tar.gz&quot;
diff --git a/docs/unpack.html b/docs/unpack.html
index 19da76d..c01153e 100644
--- a/docs/unpack.html
+++ b/docs/unpack.html
@@ -131,6 +131,11 @@
     </tr>
   </table>
 
+<h3><a name="unxz">UnXZ</a></h3>
+
+<p>Is an <a href="#unpack">uncompressing task</a> that uses the XZ
+  compression algorithm.</p>
+
 <h3>Examples</h3>
 <blockquote><pre>
 &lt;cmp:gunzip src=&quot;test.tar.gz&quot; xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
diff --git a/project-template.ivy.xml b/project-template.ivy.xml
index 0619f2f..4ce4872 100644
--- a/project-template.ivy.xml
+++ b/project-template.ivy.xml
@@ -52,6 +52,7 @@
   </publications>
   <dependencies>
     <dependency org="org.apache.commons" name="commons-compress"
-                rev="1.3"/>
+                rev="1.4"/>
+    <dependency org="org.tukaani" name="xz" rev="1.0"/>
   </dependencies>
 </ivy-module>
diff --git a/project-template.pom b/project-template.pom
index 5e5ef93..4c489dc 100644
--- a/project-template.pom
+++ b/project-template.pom
@@ -50,7 +50,12 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-compress</artifactId>
-      <version>[1.3,)</version>
+      <version>1.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.tukaani</groupId>
+      <artifactId>xz</artifactId>
+      <version>1.0</version>
     </dependency>
   </dependencies>
 </project>
diff --git a/src/main/org/apache/ant/compress/antlib.xml b/src/main/org/apache/ant/compress/antlib.xml
index c69d58d..baf6e45 100644
--- a/src/main/org/apache/ant/compress/antlib.xml
+++ b/src/main/org/apache/ant/compress/antlib.xml
@@ -65,6 +65,10 @@
      classname="org.apache.ant.compress.taskdefs.UnPack200"
      />
   <taskdef
+     name="unxz"
+     classname="org.apache.ant.compress.taskdefs.UnXZ"
+     />
+  <taskdef
      name="bzip2"
      classname="org.apache.ant.compress.taskdefs.BZip2"
      />
@@ -80,6 +84,10 @@
      name="pack200normalize"
      classname="org.apache.ant.compress.taskdefs.Pack200Normalize"
      />
+  <taskdef
+     name="xz"
+     classname="org.apache.ant.compress.taskdefs.XZ"
+     />
 
   <typedef
      name="arentry"
@@ -138,6 +146,10 @@
      name="pack200resource"
      classname="org.apache.ant.compress.resources.Pack200Resource"
      />
+  <typedef
+     name="xzresource"
+     classname="org.apache.ant.compress.resources.XZResource"
+     />
 
   <componentdef
      name="hasusername"
diff --git a/src/main/org/apache/ant/compress/resources/XZResource.java b/src/main/org/apache/ant/compress/resources/XZResource.java
new file mode 100644
index 0000000..f9b9fcb
--- /dev/null
+++ b/src/main/org/apache/ant/compress/resources/XZResource.java
@@ -0,0 +1,37 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.ant.compress.resources;
+
+import org.apache.ant.compress.util.XZStreamFactory;
+import org.apache.tools.ant.types.ResourceCollection;
+
+/**
+ * An XZ compressed resource.
+ * @since Apache Compress Antlib 1.2
+ */
+public final class XZResource extends CommonsCompressCompressorResource {
+    private static final String NAME = "XZ";
+
+    public XZResource() {
+        super(NAME, new XZStreamFactory());
+    }
+
+    public XZResource(ResourceCollection other) {
+        super(NAME, new XZStreamFactory(), other);
+    }
+}
diff --git a/src/main/org/apache/ant/compress/taskdefs/UnXZ.java b/src/main/org/apache/ant/compress/taskdefs/UnXZ.java
new file mode 100644
index 0000000..3f533dd
--- /dev/null
+++ b/src/main/org/apache/ant/compress/taskdefs/UnXZ.java
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.ant.compress.taskdefs;
+
+import org.apache.ant.compress.util.XZStreamFactory;
+
+/**
+ * Expands an xz archive.
+ * @since Apache Compress Antlib 1.2
+ */
+public final class UnXZ extends UnpackBase {
+
+    public UnXZ() {
+        super(".xz", new XZStreamFactory());
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/org/apache/ant/compress/taskdefs/XZ.java b/src/main/org/apache/ant/compress/taskdefs/XZ.java
new file mode 100644
index 0000000..d9f50a8
--- /dev/null
+++ b/src/main/org/apache/ant/compress/taskdefs/XZ.java
@@ -0,0 +1,41 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.ant.compress.taskdefs;
+
+import org.apache.ant.compress.resources.CommonsCompressCompressorResource;
+import org.apache.ant.compress.resources.XZResource;
+import org.apache.ant.compress.util.XZStreamFactory;
+import org.apache.tools.ant.types.Resource;
+
+/**
+ * Compresses using XZ.
+ * @since Apache Compress Antlib 1.2
+ */
+public final class XZ extends PackBase {
+
+    public XZ() {
+        super(new XZStreamFactory(),
+              new PackBase.ResourceWrapper() {
+                public CommonsCompressCompressorResource wrap(Resource dest) {
+                    return new XZResource(dest);
+                }
+            });
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/org/apache/ant/compress/util/XZStreamFactory.java b/src/main/org/apache/ant/compress/util/XZStreamFactory.java
new file mode 100644
index 0000000..58d2930
--- /dev/null
+++ b/src/main/org/apache/ant/compress/util/XZStreamFactory.java
@@ -0,0 +1,52 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.ant.compress.util;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.apache.commons.compress.compressors.CompressorInputStream;
+import org.apache.commons.compress.compressors.CompressorOutputStream;
+import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
+import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream;
+
+/**
+ * Creates streams for the supported compression formats.
+ * @since Apache Compress Antlib 1.2
+ */
+public class XZStreamFactory implements CompressorStreamFactory {
+
+    /**
+     * @param stream the stream to read from, should be buffered
+     */
+    public CompressorInputStream getCompressorStream(InputStream stream)
+        throws IOException {
+        return new XZCompressorInputStream(stream);
+    }
+
+
+    /**
+     * @param stream the stream to write to, should be buffered
+     */
+    public CompressorOutputStream getCompressorStream(OutputStream stream)
+        throws IOException {
+        return new XZCompressorOutputStream(stream);
+    }
+}
\ No newline at end of file
diff --git a/src/tests/antunit/unxz-test.xml b/src/tests/antunit/unxz-test.xml
new file mode 100644
index 0000000..1ceec01
--- /dev/null
+++ b/src/tests/antunit/unxz-test.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<project default="antunit"
+         xmlns:au="antlib:org.apache.ant.antunit"
+         xmlns:cond="antlib:org.apache.tools.ant.types.conditions"
+         xmlns:cmp="antlib:org.apache.ant.compress">
+
+  <import file="antunit-base.xml" />
+
+  <target name="setUp">
+    <mkdir dir="${output}"/>
+  </target>    
+
+  <target name="test1">
+    <au:expectfailure>
+      <cmp:unxz/>
+    </au:expectfailure>
+  </target>
+
+  <target name="test2">
+    <au:expectfailure>
+      <cmp:unxz src=""/>
+    </au:expectfailure>
+  </target>
+
+  <target name="testXZTask" depends="setUp">
+    <cmp:xz src="../resources/asf-logo.gif"
+            destfile="${output}/asf-logo.gif.xz"/>
+    <cmp:unxz src="${output}/asf-logo.gif.xz" dest="${output}/asf-logo.gif" />
+    <au:assertFilesMatch expected="../resources/asf-logo.gif"
+                         actual="${output}/asf-logo.gif"/>
+  </target>
+
+  <target name="testNativeXZ" depends="setUp">
+    <cmp:unxz src="../resources/asf-logo.gif.xz"
+                dest="${output}/asf-logo.gif" />
+    <au:assertFilesMatch expected="../resources/asf-logo.gif"
+                         actual="${output}/asf-logo.gif"/>
+  </target>
+
+  <target name="testWithResource" depends="setUp">
+    <cmp:unxz dest="${output}/asf-logo.gif">
+      <file file="../resources/asf-logo.gif.xz"/>
+    </cmp:unxz>
+    <au:assertFilesMatch expected="../resources/asf-logo.gif"
+                         actual="${output}/asf-logo.gif"/>
+  </target>
+
+</project>
diff --git a/src/tests/antunit/xz-test.xml b/src/tests/antunit/xz-test.xml
new file mode 100644
index 0000000..fd44987
--- /dev/null
+++ b/src/tests/antunit/xz-test.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+  -->
+<project default="antunit"
+         xmlns:au="antlib:org.apache.ant.antunit"
+         xmlns:cond="antlib:org.apache.tools.ant.types.conditions"
+         xmlns:cmp="antlib:org.apache.ant.compress">
+
+  <import file="antunit-base.xml" />
+
+  <target name="setUp">
+    <mkdir dir="${output}" />
+    <mkdir dir="${output}/empty" />
+    <touch file="${output}/fileone" />
+    <touch file="${output}/filetwo" />
+  </target>
+
+  <target name="testFailNone" depends="setUp">
+    <au:expectfailure expectedmessage="source is required.">
+      <cmp:xz destfile="${output}/file.xz">
+        <fileset dir="${output}/empty" />
+      </cmp:xz>
+    </au:expectfailure>
+  </target>
+
+  <target name="testFailTwo" depends="setUp">
+    <au:expectfailure expectedmessage="Can only have one source.">
+      <cmp:xz destfile="${output}/file.xz">
+        <fileset dir="${output}" />
+      </cmp:xz>
+    </au:expectfailure>
+  </target>
+
+  <target name="testFailNoDest" depends="setUp">
+    <au:expectfailure expectedmessage="dest resource is required.">
+      <cmp:xz src="${output}/fileone">
+        <dest>
+          <fileset dir="${output}/empty" />
+        </dest>
+      </cmp:xz>
+    </au:expectfailure>
+  </target>
+
+  <target name="testFailTwoDests" depends="setUp">
+    <au:expectfailure expectedmessage="Can only have one destination resource.">
+      <cmp:xz src="${output}/fileone">
+        <dest>
+          <fileset dir="${output}" />
+        </dest>
+      </cmp:xz>
+    </au:expectfailure>
+  </target>
+
+  <target name="testRealTest" depends="setUp">
+    <cmp:xz src="../resources/asf-logo.gif"
+              destfile="${output}/asf-logo.gif.xz" />
+    <au:assertLogContains text="Building: asf-logo.gif.xz"/>
+    <au:assertFileExists file="${output}/asf-logo.gif.xz"/>
+  </target>
+
+  <target name="testRealTestWithResource" depends="setUp">
+    <cmp:xz destfile="${output}/asf-logo.gif.xz">
+      <file file="../resources/asf-logo.gif"/>
+    </cmp:xz>
+    <au:assertLogContains text="Building: asf-logo.gif.xz"/>
+    <au:assertFileExists file="${output}/asf-logo.gif.xz"/>
+  </target>
+
+  <target name="testDateCheck" depends="setUp">
+    <touch file="${output}/asf-logo.gif.xz"/>
+    <cmp:xz src="../resources/asf-logo.gif"
+              destfile="${output}/asf-logo.gif.xz" />
+    <au:assertLogContains text="Nothing to do: asf-logo.gif.xz is up to date."/>
+  </target>
+
+  <target name="testNestedTask" depends="setUp">
+    <cmp:xz destfile="${output}/asf-logo.tar.xz">
+      <cmp:tar>
+        <cmp:cpiofileset src="../resources/asf-logo.gif.bin.cpio"
+                         includes="asf-logo.gif"/>
+      </cmp:tar>
+    </cmp:xz>
+    <au:assertFileExists file="${output}/asf-logo.tar.xz"/>
+    <au:assertTrue>
+      <cond:islastmodified datetime="2009-07-31-20:11:13 +0200"
+                           pattern="yyyy-MM-dd-HH:mm:ss Z">
+        <cmp:tarentry name="asf-logo.gif">
+          <cmp:xzresource>
+            <file file="${output}/asf-logo.tar.xz"/>
+          </cmp:xzresource>
+        </cmp:tarentry>
+      </cond:islastmodified>
+    </au:assertTrue>
+  </target>
+</project>
diff --git a/src/tests/antunit/xzresource-test.xml b/src/tests/antunit/xzresource-test.xml
new file mode 100644
index 0000000..3390a98
--- /dev/null
+++ b/src/tests/antunit/xzresource-test.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<project default="antunit"
+         xmlns:au="antlib:org.apache.ant.antunit"
+         xmlns:cond="antlib:org.apache.tools.ant.types.conditions"
+         xmlns:cmp="antlib:org.apache.ant.compress">
+
+  <import file="antunit-base.xml" />
+
+  <target name="setUp">
+    <mkdir dir="${output}"/>
+  </target>    
+
+  <target name="testNativeXZ" depends="setUp">
+    <copy todir="${output}">
+      <cmp:xzresource>
+        <file file="../resources/asf-logo.gif.xz"/>
+      </cmp:xzresource>
+      <globmapper from="*.xz" to="*"/>
+    </copy>
+    <au:assertFilesMatch expected="../resources/asf-logo.gif"
+                         actual="${output}/asf-logo.gif"/>
+  </target>
+</project>
diff --git a/src/tests/resources/asf-logo.gif.xz b/src/tests/resources/asf-logo.gif.xz
new file mode 100644
index 0000000..139eea4
--- /dev/null
+++ b/src/tests/resources/asf-logo.gif.xz
Binary files differ
diff --git a/version.properties b/version.properties
index 9a5025c..cce379b 100644
--- a/version.properties
+++ b/version.properties
@@ -12,4 +12,4 @@
 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #  See the License for the specific language governing permissions and
 #  limitations under the License.
-artifact.version=1.1Alpha
+artifact.version=1.2Alpha
