diff -Nur xarchiver-0.5.2-basic-xz/src/tar.c xarchiver-0.5.2/src/tar.c
--- xarchiver-0.5.2-basic-xz/src/tar.c	2011-06-08 14:29:27.916496785 +0300
+++ xarchiver-0.5.2/src/tar.c	2011-06-08 14:31:09.904916851 +0300
@@ -389,6 +389,25 @@
 		}
 		break;
 
+		case XARCHIVETYPE_TAR_XZ:
+		if (archive->full_path == 1)
+		{
+			command = g_strconcat (tar, " --use-compress-program=xz -xvf " , archive->escaped_path,
+						#ifdef __FreeBSD__
+								archive->overwrite ? " " : " -k",
+						#else
+								archive->overwrite ? " --overwrite" : " --keep-old-files",
+						#endif
+								archive->tar_touch ? " --touch" : "",
+								" -C ",archive->extraction_path," ",names->str,NULL);
+		}
+		else
+		{
+			result = xa_extract_tar_without_directories ( "tar --use-compress-program=xz -xvf ",archive,names->str);
+			command = NULL;
+		}
+		break;
+
 		case XARCHIVETYPE_TAR_LZOP:
 		if (archive->full_path == 1)
 		{
@@ -412,6 +431,11 @@
 		result = lzma_bzip2_extract(archive,NULL);
 		command = NULL;
 		break;
+
+		case XARCHIVETYPE_XZ:
+		result = lzma_bzip2_extract(archive,NULL);
+		command = NULL;
+		break;
 
 		case XARCHIVETYPE_LZOP:
 		result = lzma_bzip2_extract(archive,NULL);
