diff --git a/docs/archive.html b/docs/archive.html
index ffcf32e..e4c5bab 100644
--- a/docs/archive.html
+++ b/docs/archive.html
@@ -297,6 +297,15 @@
         at all.</td>
       <td valign="top" align="center">No, default is LZMA2.</td>
     </tr>
+    <tr>
+      <td valign="top">keepcompression</td>
+      <td valign="top">For entries coming from existing archives (like
+        nested <em>sevenzfileset</em>s or while updating the archive), keep
+        the compression as it has been originally instead of using the
+        <em>contentCompression</em> attribute.  Defaults to false.
+        <em>since 1.5</em></td>
+      <td align="center" valign="top">No</td>
+    </tr>
   </table>
 
   <h3><a name="tar">Tar</a></h3>
@@ -516,7 +525,7 @@
       <td valign="top">For entries coming from existing archives (like
         nested <em>zipfileset</em>s or while updating the archive), keep
         the compression as it has been originally instead of using the
-        <em>level</em> attribute.  Defaults false.</td>
+        <em>level</em> attribute.  Defaults to false.</td>
       <td align="center" valign="top">No</td>
     </tr>
     <tr>
diff --git a/project-template.ivy.xml b/project-template.ivy.xml
index 1e61157..28a94fe 100644
--- a/project-template.ivy.xml
+++ b/project-template.ivy.xml
@@ -52,7 +52,7 @@
   </publications>
   <dependencies>
     <dependency org="org.apache.commons" name="commons-compress"
-                rev="1.7"/>
-    <dependency org="org.tukaani" name="xz" rev="1.4"/>
+                rev="1.8"/>
+    <dependency org="org.tukaani" name="xz" rev="1.5"/>
   </dependencies>
 </ivy-module>
diff --git a/project-template.pom b/project-template.pom
index 380ef78..89b0a73 100644
--- a/project-template.pom
+++ b/project-template.pom
@@ -50,12 +50,12 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-compress</artifactId>
-      <version>1.7</version>
+      <version>1.8</version>
     </dependency>
     <dependency>
       <groupId>org.tukaani</groupId>
       <artifactId>xz</artifactId>
-      <version>1.4</version>
+      <version>1.5</version>
     </dependency>
   </dependencies>
 </project>
diff --git a/src/main/org/apache/ant/compress/resources/SevenZResource.java b/src/main/org/apache/ant/compress/resources/SevenZResource.java
index 856a1ec..516d1aa 100644
--- a/src/main/org/apache/ant/compress/resources/SevenZResource.java
+++ b/src/main/org/apache/ant/compress/resources/SevenZResource.java
@@ -40,6 +40,8 @@
  */
 public final class SevenZResource extends CommonsCompressArchiveResource {
 
+    private Iterable/*<? extends SevenZMethodConfiguration>*/ contentMethods;
+
     /**
      * Default constructor.
      */
@@ -142,6 +144,15 @@
     }
 
     /**
+     * Gets the (compression) methods to used for entry's content.
+     *
+     * @since 1.5
+     */
+    public Iterable/*<? extends SevenZMethodConfiguration>*/ getContentMethods() {
+        return contentMethods;
+    }
+
+    /**
      * fetches information from the named entry inside the archive.
      */
     protected void fetchEntry() {
@@ -177,4 +188,12 @@
         }
     }
 
+    protected void setEntry(ArchiveEntry e) {
+        super.setEntry(e);
+        if (e != null) {
+            SevenZArchiveEntry ze = (SevenZArchiveEntry) e;
+            contentMethods = ze.getContentMethods();
+        }
+    }
+
 }
diff --git a/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java b/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
index f520295..afb8ea3 100644
--- a/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
+++ b/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
@@ -913,6 +913,8 @@
      * Various flags a (archive) resource may hold in addition to
      * being a plain resource.
      */
+    // FIXME this isn't really scaling if it wants to be a catch all
+    // for all relevant flags of all formats.
     public class ResourceFlags {
         private final int mode;
         private final boolean modeSet;
@@ -922,6 +924,7 @@
         private final String userName;
         private final String groupName;
         private final int compressionMethod;
+        private Iterable/*<? extends SevenZMethodConfiguration>*/ contentMethods;
 
         public ResourceFlags() {
             this(-1);
@@ -935,22 +938,28 @@
                              int compressionMethod) {
             this(mode, extraFields, EntryHelper.UNKNOWN_ID,
                  EntryHelper.UNKNOWN_ID, null, null,
-                 compressionMethod);
+                 compressionMethod, null);
         }
 
         public ResourceFlags(int mode, int uid, int gid) {
-            this(mode, new ZipExtraField[0], uid, gid, null, null, -1);
+            this(mode, new ZipExtraField[0], uid, gid, null, null, -1, null);
         }
 
         public ResourceFlags(int mode, int uid, int gid, String userName,
                              String groupName) {
-            this(mode, new ZipExtraField[0], uid, gid, userName, groupName, -1);
+            this(mode, new ZipExtraField[0], uid, gid, userName, groupName, -1, null);
+        }
+
+        public ResourceFlags(Iterable/*<? extends SevenZMethodConfiguration>*/ contentMethods) {
+            this(-1, new ZipExtraField[0], EntryHelper.UNKNOWN_ID,
+                 EntryHelper.UNKNOWN_ID, null, null, -1, contentMethods);
         }
 
         private ResourceFlags(int mode, ZipExtraField[] extraFields,
                               int uid, int gid,
                               String userName, String groupName,
-                              int compressionMethod) {
+                              int compressionMethod,
+                              Iterable/*<? extends SevenZMethodConfiguration>*/ contentMethods) {
             this.mode = mode;
             this.extraFields = extraFields;
             this.gid = gid;
@@ -960,6 +969,7 @@
             int m = mode & UnixStat.PERM_MASK;
             modeSet = mode >= 0 && (m > 0 || (m == 0 && preserve0permissions));
             this.compressionMethod = compressionMethod;
+            this.contentMethods = contentMethods;
         }
 
         public boolean hasModeBeenSet() { return modeSet; }
@@ -985,6 +995,11 @@
 
         public boolean hasCompressionMethod() { return compressionMethod >= 0; }
         public int getCompressionMethod() { return compressionMethod; }
+
+        public boolean hasContentMethods() { return contentMethods != null; }
+        public Iterable/*<? extends SevenZMethodConfiguration>*/ getContentMethods() {
+            return contentMethods;
+        }
     }
 
     /**
diff --git a/src/main/org/apache/ant/compress/taskdefs/SevenZ.java b/src/main/org/apache/ant/compress/taskdefs/SevenZ.java
index f0b9435..355e6ae 100644
--- a/src/main/org/apache/ant/compress/taskdefs/SevenZ.java
+++ b/src/main/org/apache/ant/compress/taskdefs/SevenZ.java
@@ -38,6 +38,7 @@
  */
 public class SevenZ extends ArchiveBase {
 
+    private boolean keepCompression = false;
     private String contentCompression;
 
     public SevenZ() {
@@ -66,6 +67,11 @@
                     entry.setLastModifiedDate(new Date(r.getResource()
                                                        .getLastModified()));
                     entry.setSize(r.getResource().getSize());
+                    if (keepCompression
+                        && r.getResourceFlags().hasContentMethods()) {
+                        entry.setContentMethods(r.getResourceFlags()
+                                                .getContentMethods());
+                    }
                     return entry;
                 }
             });
@@ -88,4 +94,15 @@
     public void setContentCompression(String method) {
         this.contentCompression = method;
     }
+
+    /**
+     * Whether the original compression of entries coming from a 7z
+     * archive should be kept (for example when updating an archive).
+     * Default is false.
+     * @param keep if true, keep the original compression
+     * @since 1.5
+     */
+    public void setKeepCompression(boolean keep) {
+        keepCompression = keep;
+    }
 }
