diff --git a/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java
index 0270b1f..4eb4b1a 100644
--- a/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java
@@ -115,12 +115,10 @@
              0, 0, DEFAULT_MODE, inputFile.lastModified() / 1000);
     }
 
-    /** {@inheritDoc} */
     public long getSize() {
         return this.getLength();
     }
 
-    /** {@inheritDoc} */
     public String getName() {
         return name;
     }
@@ -144,7 +142,6 @@
         return lastModified;
     }
 
-    /** {@inheritDoc} */
     public Date getLastModifiedDate() {
         return new Date(1000 * getLastModified());
     }
@@ -153,12 +150,10 @@
         return length;
     }
 
-    /** {@inheritDoc} */
     public boolean isDirectory() {
         return false;
     }
 
-    /** {@inheritDoc} */
     @Override
     public int hashCode() {
         final int prime = 31;
@@ -167,7 +162,6 @@
         return result;
     }
 
-    /** {@inheritDoc} */
     @Override
     public boolean equals(Object obj) {
         if (this == obj) {
diff --git a/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java b/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java
index e1908ce..e2fe3bb 100644
--- a/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.java
@@ -69,7 +69,6 @@
         return header.length;
     }
 
-    /** {@inheritDoc} */
     @Override
     public void closeArchiveEntry() throws IOException {
         if(finished) {
@@ -84,7 +83,6 @@
         haveUnclosedEntry = false;
     }
 
-    /** {@inheritDoc} */
     @Override
     public void putArchiveEntry( final ArchiveEntry pEntry ) throws IOException {
         if(finished) {
@@ -215,7 +213,6 @@
         prevEntry = null;
     }
 
-    /** {@inheritDoc} */
     @Override
     public ArchiveEntry createArchiveEntry(File inputFile, String entryName)
             throws IOException {
@@ -225,7 +222,6 @@
         return new ArArchiveEntry(inputFile, entryName);
     }
 
-    /** {@inheritDoc} */
     @Override
     public void finish() throws IOException {
         if(haveUnclosedEntry) {
diff --git a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
index 15047f5..cd10b78 100644
--- a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
@@ -577,7 +577,6 @@
         return this.mtime;
     }
 
-    /** {@inheritDoc} */
     public Date getLastModifiedDate() {
         return new Date(1000 * getTime());
     }
diff --git a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java
index 13fb24a..9cec12e 100644
--- a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java
@@ -445,7 +445,6 @@
         return total;
     }
 
-    /** {@inheritDoc} */
     @Override
     public ArchiveEntry getNextEntry() throws IOException {
         return getNextCPIOEntry();
diff --git a/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveEntry.java
index 31e19af..7129593 100644
--- a/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveEntry.java
@@ -586,7 +586,6 @@
         this.name = name;
     }
 
-    /** {@inheritDoc} */
     public Date getLastModifiedDate() {
         return new Date(mtime);
     }
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
index 14b94cc..8428275 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
@@ -541,7 +541,6 @@
         return new Date(modTime * MILLIS_PER_SECOND);
     }
 
-    /** {@inheritDoc} */
     public Date getLastModifiedDate() {
         return getModTime();
     }
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/AbstractUnicodeExtraField.java b/src/main/java/org/apache/commons/compress/archivers/zip/AbstractUnicodeExtraField.java
index 160f167..8593989 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/AbstractUnicodeExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/AbstractUnicodeExtraField.java
@@ -127,7 +127,6 @@
         data = null;
     }
 
-    /** {@inheritDoc} */
     public byte[] getCentralDirectoryData() {
         if (data == null) {
             this.assembleData();
@@ -140,7 +139,6 @@
         return b;
     }
 
-    /** {@inheritDoc} */
     public ZipShort getCentralDirectoryLength() {
         if (data == null) {
             assembleData();
@@ -148,17 +146,14 @@
         return new ZipShort(data.length);
     }
 
-    /** {@inheritDoc} */
     public byte[] getLocalFileDataData() {
         return getCentralDirectoryData();
     }
 
-    /** {@inheritDoc} */
     public ZipShort getLocalFileDataLength() {
         return getCentralDirectoryLength();
     }
 
-    /** {@inheritDoc} */
     public void parseFromLocalFileData(byte[] buffer, int offset, int length)
         throws ZipException {
 
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java b/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java
index d9cf699..55f2254 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java
@@ -63,7 +63,6 @@
         super(comment, bytes);
     }
 
-    /** {@inheritDoc} */
     public ZipShort getHeaderId() {
         return UCOM_ID;
     }
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java b/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java
index f476c57..2116f26 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java
@@ -61,7 +61,6 @@
         super(name, bytes);
     }
 
-    /** {@inheritDoc} */
     public ZipShort getHeaderId() {
         return UPATH_ID;
     }
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java b/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java
index bc8e587..33701c3 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java
@@ -101,17 +101,14 @@
         this.diskStart = diskStart;
     }
 
-    /** {@inheritDoc} */
     public ZipShort getHeaderId() {
         return HEADER_ID;
     }
 
-    /** {@inheritDoc} */
     public ZipShort getLocalFileDataLength() {
         return new ZipShort(size != null ? 2 * DWORD : 0);
     }
 
-    /** {@inheritDoc} */
     public ZipShort getCentralDirectoryLength() {
         return new ZipShort((size != null ? DWORD : 0)
                             + (compressedSize != null ? DWORD : 0)
@@ -119,7 +116,6 @@
                             + (diskStart != null ? WORD : 0));
     }
 
-    /** {@inheritDoc} */
     public byte[] getLocalFileDataData() {
         if (size != null || compressedSize != null) {
             if (size == null || compressedSize == null) {
@@ -132,7 +128,6 @@
         return EMPTY;
     }
 
-    /** {@inheritDoc} */
     public byte[] getCentralDirectoryData() {
         byte[] data = new byte[getCentralDirectoryLength().getValue()];
         int off = addSizes(data);
@@ -147,7 +142,6 @@
         return data;
     }
 
-    /** {@inheritDoc} */
     public void parseFromLocalFileData(byte[] buffer, int offset, int length)
         throws ZipException {
         if (length == 0) {
@@ -177,7 +171,6 @@
         }
     }
 
-    /** {@inheritDoc} */
     public void parseFromCentralDirectoryData(byte[] buffer, int offset,
                                               int length)
         throws ZipException {
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
index db99652..46bec89 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
@@ -651,7 +651,6 @@
         }
     }
 
-    /** {@inheritDoc} */
     public Date getLastModifiedDate() {
         return new Date(getTime());
     }
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
index e315838..dc6278b 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
@@ -348,7 +348,6 @@
         }
     }
 
-    /** {@inheritDoc} */
     @Override
     public ArchiveEntry getNextEntry() throws IOException {
         return getNextZipEntry();
diff --git a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
index 90b78ff..ed4f206 100644
--- a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
@@ -140,7 +140,6 @@
         setupBlock();
     }
 
-    /** {@inheritDoc} */
     @Override
     public int read() throws IOException {
         if (this.in != null) {
diff --git a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
index 61966da..5e234f7 100644
--- a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
@@ -398,7 +398,6 @@
         init();
     }
 
-    /** {@inheritDoc} */
     @Override
     public void write(final int b) throws IOException {
         if (this.out != null) {
diff --git a/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java
index 7408b5b..7944d3a 100644
--- a/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java
@@ -213,7 +213,6 @@
         while (inData.readUnsignedByte() != 0x00) {}
     }
 
-    /** {@inheritDoc} */
     @Override
     public int read() throws IOException {
         return read(oneByte, 0, 1) == -1 ? -1 : (oneByte[0] & 0xFF);
diff --git a/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorOutputStream.java
index 5ca455f..1774283 100644
--- a/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorOutputStream.java
@@ -32,7 +32,6 @@
         out = new GZIPOutputStream(outputStream);
     }
 
-    /** {@inheritDoc} */
     @Override
     public void write(int b) throws IOException {
         out.write(b);
diff --git a/src/main/java/org/apache/commons/compress/compressors/pack200/InMemoryCachingStreamBridge.java b/src/main/java/org/apache/commons/compress/compressors/pack200/InMemoryCachingStreamBridge.java
index 79da73f..e1fdc2c 100644
--- a/src/main/java/org/apache/commons/compress/compressors/pack200/InMemoryCachingStreamBridge.java
+++ b/src/main/java/org/apache/commons/compress/compressors/pack200/InMemoryCachingStreamBridge.java
@@ -34,9 +34,6 @@
         super(new ByteArrayOutputStream());
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     InputStream getInputView() throws IOException {
         return new ByteArrayInputStream(((ByteArrayOutputStream) out)
diff --git a/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.java
index b4f58dd..fa04aef 100644
--- a/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.java
@@ -159,31 +159,26 @@
         jarOut.close();
     }
 
-    /** {@inheritDoc} */
     @Override
     public int read() throws IOException {
         return streamBridge.getInput().read();
     }
 
-    /** {@inheritDoc} */
     @Override
     public int read(byte[] b) throws IOException {
         return streamBridge.getInput().read(b);
     }
 
-    /** {@inheritDoc} */
     @Override
     public int read(byte[] b, int off, int count) throws IOException {
         return streamBridge.getInput().read(b, off, count);
     }
 
-    /** {@inheritDoc} */
     @Override
     public int available() throws IOException {
         return streamBridge.getInput().available();
     }
 
-    /** {@inheritDoc} */
     @Override
     public boolean markSupported() {
         try {
@@ -193,7 +188,6 @@
         }
     }
 
-    /** {@inheritDoc} */
     @Override
     public void mark(int limit) {
         try {
@@ -203,13 +197,11 @@
         }
     }
 
-    /** {@inheritDoc} */
     @Override
     public void reset() throws IOException {
         streamBridge.getInput().reset();
     }
 
-    /** {@inheritDoc} */
     @Override
     public long skip(long count) throws IOException {
         return streamBridge.getInput().skip(count);
diff --git a/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorOutputStream.java
index 0c936ac..2c1c73b 100644
--- a/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorOutputStream.java
@@ -81,23 +81,16 @@
         properties = props;
     }
 
-    /** {@inheritDoc} */
     @Override
     public void write(int b) throws IOException {
         streamBridge.write(b);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public void write(byte[] b) throws IOException {
         streamBridge.write(b);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public void write(byte[] b, int from, int length) throws IOException {
         streamBridge.write(b, from, length);
diff --git a/src/main/java/org/apache/commons/compress/compressors/pack200/TempFileCachingStreamBridge.java b/src/main/java/org/apache/commons/compress/compressors/pack200/TempFileCachingStreamBridge.java
index 78abadf..b609b50 100644
--- a/src/main/java/org/apache/commons/compress/compressors/pack200/TempFileCachingStreamBridge.java
+++ b/src/main/java/org/apache/commons/compress/compressors/pack200/TempFileCachingStreamBridge.java
@@ -39,9 +39,6 @@
         out = new FileOutputStream(f);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     InputStream getInputView() throws IOException {
         out.close();
diff --git a/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java
index 31953f8..c6e4e9e 100644
--- a/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java
@@ -99,7 +99,6 @@
         }
     }
 
-    /** {@inheritDoc} */
     @Override
     public int read() throws IOException {
         int ret = in.read();
@@ -107,7 +106,6 @@
         return ret;
     }
 
-    /** {@inheritDoc} */
     @Override
     public int read(byte[] buf, int off, int len) throws IOException {
         int ret = in.read(buf, off, len);
@@ -115,19 +113,16 @@
         return ret;
     }
 
-    /** {@inheritDoc} */
     @Override
     public long skip(long n) throws IOException {
         return in.skip(n);
     }
 
-    /** {@inheritDoc} */
     @Override
     public int available() throws IOException {
         return in.available();
     }
 
-    /** {@inheritDoc} */
     @Override
     public void close() throws IOException {
         in.close();
diff --git a/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorOutputStream.java
index 858220a..e512b66 100644
--- a/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorOutputStream.java
@@ -59,13 +59,11 @@
         out = new XZOutputStream(outputStream, new LZMA2Options(preset));
     }
 
-    /** {@inheritDoc} */
     @Override
     public void write(int b) throws IOException {
         out.write(b);
     }
 
-    /** {@inheritDoc} */
     @Override
     public void write(byte[] buf, int off, int len) throws IOException {
         out.write(buf, off, len);
@@ -90,7 +88,6 @@
         out.finish();
     }
 
-    /** {@inheritDoc} */
     @Override
     public void close() throws IOException {
         out.close();
diff --git a/src/test/java/org/apache/commons/compress/archivers/memory/MemoryArchiveEntry.java b/src/test/java/org/apache/commons/compress/archivers/memory/MemoryArchiveEntry.java
index f2314af..c8dd561 100644
--- a/src/test/java/org/apache/commons/compress/archivers/memory/MemoryArchiveEntry.java
+++ b/src/test/java/org/apache/commons/compress/archivers/memory/MemoryArchiveEntry.java
@@ -44,7 +44,6 @@
         return false;
     }
 
-    /** {@inheritDoc} */
     public Date getLastModifiedDate() {
         return new Date();
     }
