diff -Nur mc-4.6.2-pre1-old/edit/edit.c mc-4.6.2-pre1/edit/edit.c
--- mc-4.6.2-pre1-old/edit/edit.c	2008-01-26 23:25:15.083107308 +0200
+++ mc-4.6.2-pre1/edit/edit.c	2008-01-26 23:25:23.067893437 +0200
@@ -187,6 +187,7 @@
 } all_filters[] = {
     { "bzip2 -cd %s 2>&1",  "bzip2 > %s",  ".bz2" },
     { "gzip -cd %s 2>&1",   "gzip > %s",   ".gz"  },
+    { "lzma -cd %s 2>&1", "lzma > %s",   ".lzma"},
     { "gzip -cd %s 2>&1",   "gzip > %s",   ".Z"   }
 };
 
diff -Nur mc-4.6.2-pre1-old/lib/mc.ext.in mc-4.6.2-pre1/lib/mc.ext.in
--- mc-4.6.2-pre1-old/lib/mc.ext.in	2008-01-26 23:25:15.094105636 +0200
+++ mc-4.6.2-pre1/lib/mc.ext.in	2008-01-26 23:25:23.069893132 +0200
@@ -106,7 +106,7 @@
 
 ### Archives ###
 
-# .tgz, .tpz, .tar.gz, .tar.z, .tar.Z, .ipk
+# .tgz, .tpz, .tar.gz, .tar.z, .tar.Z, .tar.lzma, .ipk
 regex/\.t([gp]?z|ar\.g?[zZ])$|\.ipk$
 	Open=%cd %p#utar
 	View=%view{ascii} gzip -dc %f 2>/dev/null | tar tvvf -
@@ -119,6 +119,10 @@
 	Open=%cd %p#utar
 	View=%view{ascii} bzip2 -dc %f 2>/dev/null | tar tvvf -
 
+regex/\.tar\.lzma$
+	Open=%cd %p#utar
+	View=%view{ascii} lzma -dc %f 2>/dev/null | tar tvvf -
+
 # .tar.F - used in QNX
 regex/\.tar\.F$
 	# Open=%cd %p#utar
@@ -589,6 +593,11 @@
 	Open=bzip -dc %f | %var{PAGER:more}
 	View=%view{ascii} bzip -dc %f 2>/dev/null
 
+# lzma
+regex/\.([Ll][Zz][Mm][Aa])$
+	Open=lzma -dc %f | %var{PAGER:more}
+	View=%view{ascii} lzma -dc %f 2>/dev/null
+
 # compress
 type/^compress
 	Open=gzip -dc %f | %var{PAGER:more}
diff -Nur mc-4.6.2-pre1-old/src/util.c mc-4.6.2-pre1/src/util.c
--- mc-4.6.2-pre1-old/src/util.c	2008-01-26 23:25:15.063110348 +0200
+++ mc-4.6.2-pre1/src/util.c	2008-01-26 23:25:55.623944164 +0200
@@ -1258,7 +1258,7 @@
 enum compression_type
 get_compression_type (int fd)
 {
-    unsigned char magic[4];
+    unsigned char magic[16];
 
     /* Read the magic signature */
     if (mc_read (fd, (char *) magic, 4) != 4)
@@ -1302,6 +1302,29 @@
 	    return COMPRESSION_BZIP2;
 	}
     }
+
+    /* LZMA files; both LZMA_Alone and LZMA utils formats. The LZMA_Alone
+     * format is used by the LZMA_Alone tool from LZMA SDK. The LZMA utils
+     * format is the default format of LZMA utils 4.32.1 and later. */
+    if (magic[0] < 0xE1 || (magic[0] == 0xFF && magic[1] == 'L' &&
+        magic[2] == 'Z' && magic[3] == 'M')) {
+        if (mc_read (fd, (char *) magic + 4, 9) == 9) {
+            /* LZMA utils format */
+            if (magic[0] == 0xFF && magic[4] == 'A' && magic[5] == 0x00)
+                return COMPRESSION_LZMA;
+            /* The LZMA_Alone format has no magic bytes, thus we
+             * need to play a wizard. This can give false positives,
+             * thus the detection below should be removed when
+             * the newer LZMA utils format has got popular. */
+            if (magic[0] < 0xE1 && magic[4] < 0x20 &&
+                ((magic[10] == 0x00 && magic[11] == 0x00 && magic[12] == 0x00) ||
+                 (magic[5] == 0xFF && magic[6] == 0xFF && magic[7] == 0xFF &&
+                  magic[8] == 0xFF && magic[9] == 0xFF && magic[10] == 0xFF &&
+                  magic[11] == 0xFF && magic[12] == 0xFF)))
+                return COMPRESSION_LZMA;
+        }
+    }
+
     return 0;
 }
 
@@ -1312,6 +1335,7 @@
 	case COMPRESSION_GZIP: return "#ugz";
 	case COMPRESSION_BZIP:   return "#ubz";
 	case COMPRESSION_BZIP2:  return "#ubz2";
+	case COMPRESSION_LZMA:  return "#ulzma";
 	}
 	/* Should never reach this place */
 	fprintf (stderr, "Fatal: decompress_extension called with an unknown argument\n");
diff -Nur mc-4.6.2-pre1-old/src/util.h mc-4.6.2-pre1/src/util.h
--- mc-4.6.2-pre1-old/src/util.h	2008-01-26 23:25:15.063110348 +0200
+++ mc-4.6.2-pre1/src/util.h	2008-01-26 23:25:23.072892676 +0200
@@ -187,7 +187,8 @@
 	COMPRESSION_NONE,
 	COMPRESSION_GZIP,
 	COMPRESSION_BZIP,
-	COMPRESSION_BZIP2
+	COMPRESSION_BZIP2,
+	COMPRESSION_LZMA
 };
 
 /* Looks for ``magic'' bytes at the start of the VFS file to guess the
diff -Nur mc-4.6.2-pre1-old/vfs/extfs/iso9660.in mc-4.6.2-pre1/vfs/extfs/iso9660.in
--- mc-4.6.2-pre1-old/vfs/extfs/iso9660.in	2008-01-26 23:25:15.061110653 +0200
+++ mc-4.6.2-pre1/vfs/extfs/iso9660.in	2008-01-26 23:25:23.075892221 +0200
@@ -29,11 +29,12 @@
 mcisofs_list () {
 # left as a reminder to implement compressed image support =)
 case "$1" in
-  *.bz2) MYCAT="bzip2 -dc";;
-  *.gz)  MYCAT="gzip -dc";;
-  *.z)   MYCAT="gzip -dc";;
-  *.Z)   MYCAT="gzip -dc";;
-  *)     MYCAT="cat";;
+  *.bz2)  MYCAT="bzip2 -dc";;
+  *.gz)   MYCAT="gzip -dc";;
+  *.z)    MYCAT="gzip -dc";;
+  *.Z)    MYCAT="gzip -dc";;
+  *.lzma) MYCAT="lzma -dc";;
+  *)      MYCAT="cat";;
 esac
 
 $ISOINFO -l -i "$1" | @AWK@ '
diff -Nur mc-4.6.2-pre1-old/vfs/extfs/lslR.in mc-4.6.2-pre1/vfs/extfs/lslR.in
--- mc-4.6.2-pre1-old/vfs/extfs/lslR.in	2008-01-26 23:25:15.061110653 +0200
+++ mc-4.6.2-pre1/vfs/extfs/lslR.in	2008-01-26 23:25:23.080891460 +0200
@@ -12,11 +12,12 @@
 
 mclslRfs_list () {
 case "$1" in
-  *.bz2) MYCAT="bzip2 -dc";;
-  *.gz)  MYCAT="gzip -dc";;
-  *.z)   MYCAT="gzip -dc";;
-  *.Z)   MYCAT="gzip -dc";;
-  *)     MYCAT="cat";;
+  *.bz2)  MYCAT="bzip2 -dc";;
+  *.gz)   MYCAT="gzip -dc";;
+  *.z)    MYCAT="gzip -dc";;
+  *.Z)    MYCAT="gzip -dc";;
+  *.lzma) MYCAT="lzma -dc";;
+  *)      MYCAT="cat";;
 esac
 
 $MYCAT "$1" | $AWK '
diff -Nur mc-4.6.2-pre1-old/vfs/extfs/patchfs.in mc-4.6.2-pre1/vfs/extfs/patchfs.in
--- mc-4.6.2-pre1-old/vfs/extfs/patchfs.in	2008-01-26 23:25:15.061110653 +0200
+++ mc-4.6.2-pre1/vfs/extfs/patchfs.in	2008-01-26 23:25:23.081891308 +0200
@@ -13,6 +13,7 @@
 
 # standard binaries
 my $bzip = 'bzip2';
+my $lzma = 'lzma';
 my $gzip = 'gzip';
 my $fileutil = 'file';
 
@@ -72,6 +73,8 @@
     $_=`$fileutil $qfname`;
     if (/bzip/) {
 	return "$bzip -dc $qfname";
+    } elsif (/lzma/) {
+	return "$lzma -dc $qfname";
     } elsif (/gzip/) {
 	return "$gzip -dc $qfname";
     } else {
@@ -88,6 +91,8 @@
     $_=`$fileutil $qfname`;
     if (/bzip/) {
 	return "$bzip -c $sep $qfname";
+    } elsif (/lzma/) {
+	return "$lzma -c $sep $qfname";
     } elsif (/gzip/) {
 	return "$gzip -c $sep $qfname";
     } else {
diff -Nur mc-4.6.2-pre1-old/vfs/extfs/sfs.ini mc-4.6.2-pre1/vfs/extfs/sfs.ini
--- mc-4.6.2-pre1-old/vfs/extfs/sfs.ini	2008-01-26 23:25:15.062110500 +0200
+++ mc-4.6.2-pre1/vfs/extfs/sfs.ini	2008-01-26 23:25:23.084890853 +0200
@@ -10,6 +10,8 @@
 ubz/1	bzip -d < %1 > %3
 bz2/1	bzip2 < %1 > %3
 ubz2/1	bzip2 -d < %1 > %3
+lzma/1	lzma < %1 > %3
+ulzma/1 lzma -d < %1 > %3
 tar/1	tar cf %3 %1
 tgz/1	tar czf %3 %1
 uhtml/1	lynx -force_html -dump %1 > %3
