cleanup + javadoc
diff --git a/src/main/org/apache/ant/s3/CompareSelect.java b/src/main/org/apache/ant/s3/CompareSelect.java
index 4cb4fd4..d3521ea 100644
--- a/src/main/org/apache/ant/s3/CompareSelect.java
+++ b/src/main/org/apache/ant/s3/CompareSelect.java
@@ -102,6 +102,7 @@
          * Create a new {@link CompareSelect.ForStringAttribute}.
          *
          * @param project
+         *            Ant {@link Project}
          */
         protected ForStringAttribute(final Project project) {
             super(project);
@@ -112,6 +113,7 @@
          * Add nested text by which the value to compare is set.
          *
          * @param text
+         *            to add
          */
         public void addText(final String text) {
             Optional.ofNullable(StringUtils.trimToNull(text)).map(getProject()::replaceProperties).map(String::trim)
@@ -122,7 +124,7 @@
         }
 
         /**
-         * Get "match as" strategy (default {@link MatchAs#LITERAL}.
+         * Get "match as" strategy (default {@link MatchAs#literal}.
          *
          * @return {@link MatchAs}
          */
@@ -134,6 +136,7 @@
          * Set "match as" strategy.
          *
          * @param matchAs
+         *            strategy
          */
         public void setMatchAs(final MatchAs matchAs) {
             Exceptions.raiseIf(matchAs == null, buildException(), "@matchas may not be null");
@@ -158,6 +161,7 @@
          * Set whether matching should be performed in a case-sensitive manner.
          *
          * @param caseSensitive
+         *            flag
          */
         public void setCaseSensitive(final boolean caseSensitive) {
             if (caseSensitive != this.caseSensitive) {
@@ -179,6 +183,7 @@
          * {@link ObjectResource}.
          *
          * @param obj
+         *            owning value
          * @return {@link String}
          */
         protected abstract String extractValueFrom(ObjectResource obj);
@@ -217,6 +222,7 @@
          * Create a new {@link Bucket} selector.
          *
          * @param project
+         *            Ant {@link Project}
          */
         public Bucket(final Project project) {
             super(project);
@@ -240,6 +246,7 @@
          * Create a new {@link Key} selector.
          *
          * @param project
+         *            Ant {@link Project}
          */
         public Key(final Project project) {
             super(project);
@@ -263,6 +270,7 @@
          * Create a new {@link ContentType} selector.
          *
          * @param project
+         *            Ant {@link Project}
          */
         public ContentType(final Project project) {
             super(project);
@@ -287,6 +295,7 @@
          * Create a new {@link Meta} selector.
          *
          * @param project
+         *            Ant {@link Project}
          */
         public Meta(final Project project) {
             super(project);
@@ -305,6 +314,7 @@
          * Set the user metadata key to match on.
          *
          * @param key
+         *            to match
          */
         public void setKey(final String key) {
             this.key = key;
@@ -329,6 +339,7 @@
          * Create a new {@link Tag} selector.
          *
          * @param project
+         *            Ant {@link Project}
          */
         public Tag(final Project project) {
             super(project);
@@ -347,6 +358,7 @@
          * Set the tag key to match on.
          *
          * @param key
+         *            to match
          */
         public void setKey(final String key) {
             this.key = key;
@@ -370,11 +382,15 @@
          * Create a new {@link VersionId} selector.
          * 
          * @param project
+         *            Ant {@link Project}
          */
         public VersionId(Project project) {
             super(project);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         @Override
         protected String extractValueFrom(ObjectResource obj) {
             return obj.getVersionId();
@@ -392,6 +408,9 @@
          * Create a new {@link CompareSelect.ForBooleanAttribute}.
          * 
          * @param project
+         *            Ant {@link Project}
+         * @param test
+         *            to determine truth
          */
         protected ForBooleanAttribute(Project project, Predicate<ObjectResource> test) {
             super(project);
@@ -425,6 +444,7 @@
          * Create a new {@link DeleteMarker}.
          * 
          * @param project
+         *            Ant {@link Project}
          */
         public DeleteMarker(Project project) {
             super(project, ObjectResource::isDeleteMarker);
@@ -440,6 +460,7 @@
          * Create a new {@link Latest}.
          * 
          * @param project
+         *            Ant {@link Project}
          */
         public Latest(Project project) {
             super(project, ObjectResource::isLatest);
@@ -458,6 +479,7 @@
          * Create a new {@link ByPrecision}.
          * 
          * @param project
+         *            Ant {@link Project}
          */
         public ByPrecision(Project project) {
             super(project);
@@ -476,7 +498,7 @@
          * Set the precision.
          * 
          * @param precision
-         *            Precision
+         *            {@link Precision}
          */
         public void setPrecision(Precision precision) {
             this.precision = precision;
@@ -512,6 +534,7 @@
      * Create a {@link CompareSelect} instance.
      * 
      * @param project
+     *            Ant {@link Project}
      */
     protected CompareSelect(Project project) {
         setProject(project);
diff --git a/src/main/org/apache/ant/s3/CopyResources.java b/src/main/org/apache/ant/s3/CopyResources.java
index 43d9098..ea68c29 100644
--- a/src/main/org/apache/ant/s3/CopyResources.java
+++ b/src/main/org/apache/ant/s3/CopyResources.java
@@ -54,6 +54,16 @@
     private boolean preserveLastModified;
 
     /**
+     * Create a new {@link CopyResources} instance.
+     *
+     * @param project
+     *            Ant {@link Project}
+     */
+    protected CopyResources(Project project) {
+        super(project);
+    }
+
+    /**
      * {@inheritDoc}
      */
     @Override
@@ -105,8 +115,9 @@
      * Add a nested source {@link ResourceCollection}.
      *
      * @param sources
+     *            to add
      */
-    public void add(final ResourceCollection sources) {
+    public void add(ResourceCollection sources) {
         this.sources.add(sources);
     }
 
@@ -131,7 +142,7 @@
      * @param fileNameMapper
      *            the {@link FileNameMapper} to add
      */
-    public void add(final FileNameMapper fileNameMapper) {
+    public void add(FileNameMapper fileNameMapper) {
         createMapper().add(fileNameMapper);
     }
 
@@ -148,8 +159,9 @@
      * Set the input encoding.
      *
      * @param inputEncoding
+     *            to set
      */
-    public void setInputEncoding(final String inputEncoding) {
+    public void setInputEncoding(String inputEncoding) {
         this.inputEncoding = inputEncoding;
     }
 
@@ -166,8 +178,9 @@
      * Set the output encoding.
      *
      * @param outputEncoding
+     *            to set
      */
-    public void setOutputEncoding(final String outputEncoding) {
+    public void setOutputEncoding(String outputEncoding) {
         this.outputEncoding = outputEncoding;
     }
 
@@ -184,8 +197,9 @@
      * Set whether global Ant filters should be applied to copy operations.
      *
      * @param filtering
+     *            flag
      */
-    public void setFiltering(final boolean filtering) {
+    public void setFiltering(boolean filtering) {
         this.filtering = filtering;
     }
 
@@ -224,8 +238,9 @@
      * Set whether up-to-date target {@link Resource}s should be overwritten.
      *
      * @param overwrite
+     *            flag
      */
-    public void setOverwrite(final boolean overwrite) {
+    public void setOverwrite(boolean overwrite) {
         this.overwrite = overwrite;
     }
 
@@ -248,15 +263,16 @@
      * be copied to.
      *
      * @param enableMultipleMappings
+     *            flag
      */
-    public void setEnableMultipleMappings(final boolean enableMultipleMappings) {
+    public void setEnableMultipleMappings(boolean enableMultipleMappings) {
         this.enableMultipleMappings = enableMultipleMappings;
     }
 
     /**
      * Learn whether target {@link Resource} content should be appended.
      *
-     * @return
+     * @return {@code boolean}
      */
     public boolean isAppend() {
         return append;
@@ -266,8 +282,9 @@
      * Set whether target {@link Resource} content should be appended.
      *
      * @param append
+     *            flag
      */
-    public void setAppend(final boolean append) {
+    public void setAppend(boolean append) {
         this.append = append;
     }
 
@@ -285,8 +302,9 @@
      * Set whether to preserve last modified time on target {@link Resource}s.
      *
      * @param preserveLastModified
+     *            flag
      */
-    public void setPreserveLastModified(final boolean preserveLastModified) {
+    public void setPreserveLastModified(boolean preserveLastModified) {
         this.preserveLastModified = preserveLastModified;
     }
 
@@ -302,13 +320,17 @@
      * {@link FilterSetCollection} and {@code filterChains}.
      *
      * @param source
+     *            {@link Resource}
      * @param dest
+     *            {@link Resource}
      * @param filters
+     *            {@link FilterSetCollection}
      * @param filterChains
-     * @throws IOException
+     *            {@link Vector} of {@link FilterChain}
+     * @throws IOException on error
      */
-    protected void copyResource(final Resource source, final Resource dest, final FilterSetCollection filters,
-        final Vector<FilterChain> filterChains) throws IOException {
+    protected void copyResource(Resource source, Resource dest, FilterSetCollection filters,
+        Vector<FilterChain> filterChains) throws IOException {
         ResourceUtils.copyResource(source, dest, filters, filterChains, isOverwrite(), isPreserveLastModified(),
             isAppend(), getInputEncoding(), getOutputEncoding(), getProject());
     }
diff --git a/src/main/org/apache/ant/s3/Delete.java b/src/main/org/apache/ant/s3/Delete.java
index 0700d65..a71ec98 100644
--- a/src/main/org/apache/ant/s3/Delete.java
+++ b/src/main/org/apache/ant/s3/Delete.java
@@ -53,17 +53,11 @@
     private int blockSize = DEFAULT_BLOCK_SIZE;
 
     /**
-     * Create a new {@link Delete} task instance.
-     */
-    public Delete() {
-        super();
-    }
-
-    /**
      * Create a new {@link Delete} task instance bound to the specified
      * {@link Project}.
      * 
      * @param project
+     *            Ant {@link Project}
      */
     public Delete(Project project) {
         super(project);
@@ -98,6 +92,7 @@
      * Add a configured {@link Client}.
      *
      * @param s3
+     *            {@link Client}
      */
     public void addConfigured(final Client s3) {
         if (this.s3 != null) {
@@ -110,6 +105,7 @@
      * Set the {@link Client} by reference.
      *
      * @param refid
+     *            of {@link Client}
      */
     public void setClientRefid(final String refid) {
         Objects.requireNonNull(StringUtils.trimToNull(refid), "@clientrefid must not be null/empty/blank");
@@ -121,6 +117,7 @@
      * Add a nested {@link ResourceCollection}.
      * 
      * @param coll
+     *            {@link ResourceCollection}
      */
     public synchronized void addConfigured(ResourceCollection coll) {
         Exceptions.raiseIf(coll == null, IllegalArgumentException::new, "null %s",
@@ -140,6 +137,7 @@
      * Add by reference a {@link ResourceCollection} to delete.
      * 
      * @param refid
+     *            of {@link ResourceCollection}
      */
     public void setRefid(Reference refid) {
         addConfigured(refid.<ResourceCollection> getReferencedObject(getProject()));
diff --git a/src/main/org/apache/ant/s3/InlineProperties.java b/src/main/org/apache/ant/s3/InlineProperties.java
index 7aff31d..22f4f89 100644
--- a/src/main/org/apache/ant/s3/InlineProperties.java
+++ b/src/main/org/apache/ant/s3/InlineProperties.java
@@ -40,9 +40,9 @@
     /**
      * Create a new {@link InlineProperties} instance.
      * 
-     * @param project
+     * @param project Ant {@link Project}
      */
-    public InlineProperties(final Project project) {
+    public InlineProperties(Project project) {
         super(project);
     }
 
@@ -52,7 +52,7 @@
     public final class InlineProperty {
         private final String name;
 
-        private InlineProperty(final String name) {
+        private InlineProperty(String name) {
             this.name = name;
         }
 
@@ -62,7 +62,7 @@
          * @param text
          *            to add
          */
-        public void addText(final String text) {
+        public void addText(String text) {
             final String value;
             if (properties.containsKey(name)) {
                 value = Stream.of(properties.getProperty(name), text).filter(Objects::nonNull)
@@ -91,7 +91,7 @@
      * @return InlineProperty
      */
     @Override
-    public InlineProperty createDynamicElement(final String uri, final String localName, final String qName) {
+    public InlineProperty createDynamicElement(String uri, String localName, String qName) {
         return new InlineProperty(localName);
     }
 }
\ No newline at end of file
diff --git a/src/main/org/apache/ant/s3/LoggingTask.java b/src/main/org/apache/ant/s3/LoggingTask.java
index c69203a..2ea09d2 100644
--- a/src/main/org/apache/ant/s3/LoggingTask.java
+++ b/src/main/org/apache/ant/s3/LoggingTask.java
@@ -29,20 +29,13 @@
     private int verbosity = Project.MSG_VERBOSE;
 
     /**
-     * Create a new {@link LoggingTask} instance.
-     */
-    protected LoggingTask() {
-        super();
-    }
-
-    /**
      * Create a new {@link LoggingTask} instance bound to the specified
      * {@link Project}.
      * 
      * @param project
+     *            Ant {@link Project}
      */
     protected LoggingTask(Project project) {
-        this();
         setProject(project);
     }
 
@@ -59,8 +52,9 @@
      * Set whether this {@link Task} should operate with increased log output.
      *
      * @param verbose
+     *            flag
      */
-    public void setVerbose(final boolean verbose) {
+    public void setVerbose(boolean verbose) {
         verbosity = verbose ? Project.MSG_INFO : Project.MSG_VERBOSE;
     }
 
@@ -69,10 +63,12 @@
      * {@link #isVerbose()}.
      *
      * @param format
+     *            {@link String}
      * @param args
+     *            format args
      * @see Formatter
      */
-    protected void log(final String format, final Object... args) {
+    protected void log(String format, Object... args) {
         log(verbosity, format, args);
     }
 
@@ -80,23 +76,30 @@
      * Log a formatted message at the specified level.
      *
      * @param level
+     *            log level
      * @param format
+     *            {@link String}
      * @param args
+     *            format args
      * @see Formatter
      */
-    protected void log(final int level, final String format, final Object... args) {
+    protected void log(int level, String format, Object... args) {
         log(String.format(format, args), level);
     }
 
     /**
-     * Log a formatted message with accompanying/triggering {@link Throwable}.
+     * Log a formatted message at {@link Project#MSG_ERR} level with
+     * accompanying/triggering {@link Throwable}.
      *
      * @param t
+     *            {@link Throwable}
      * @param format
+     *            {@link String}
      * @param args
+     *            format args
      * @see Formatter
      */
-    protected void log(final Throwable t, final String format, final Object... args) {
+    protected void log(Throwable t, String format, Object... args) {
         log(Project.MSG_ERR, t, format, args);
     }
 
@@ -105,14 +108,16 @@
      * a specific level.
      *
      * @param level
+     *            log level
      * @param t
+     *            {@link Throwable}
      * @param format
+     *            {@link String}
      * @param args
+     *            format args
      * @see Formatter
      */
-    protected void log(final int level, final Throwable t, final String format,
-        final Object... args) {
+    protected void log(int level, Throwable t, String format, Object... args) {
         log(String.format(format, args), t, level);
     }
-
 }
\ No newline at end of file
diff --git a/src/main/org/apache/ant/s3/ObjectResource.java b/src/main/org/apache/ant/s3/ObjectResource.java
index f0653fc..585243b 100644
--- a/src/main/org/apache/ant/s3/ObjectResource.java
+++ b/src/main/org/apache/ant/s3/ObjectResource.java
@@ -74,8 +74,7 @@
 
     @FunctionalInterface
     private interface Finalizer {
-        static final Finalizer NOP = () -> {
-        };
+        static final Finalizer NOP = () -> {};
 
         void run() throws Exception;
 
@@ -115,58 +114,122 @@
      * Create a new {@link ObjectResource}.
      *
      * @param project
+     *            Ant {@link Project}
      */
     public ObjectResource(Project project) {
         setProject(project);
     }
 
     /**
-     * Create a new {@link ObjectResource} from a listing.
+     * Create an {@link ObjectResource} from a listing.
      *
      * @param project
+     *            Ant {@link Project}
      * @param s3
+     *            {@link S3Client}
      * @param bucket
+     *            of object
      * @param summary
-     * @param precision
+     *            object info
      */
     ObjectResource(Project project, S3Client s3, String bucket, S3Object summary) {
         this(project, s3, bucket, summary.key(), summary::size, summary::lastModified, null, Precision.object);
     }
 
+    /**
+     * Create an {@link ObjectResource} representing a delete marker.
+     * 
+     * @param project
+     *            Ant {@link Project}
+     * @param s3
+     *            {@link S3Client}
+     * @param bucket
+     *            of object
+     * @param deleteMarker
+     *            info
+     */
     ObjectResource(Project project, S3Client s3, String bucket, DeleteMarkerEntry deleteMarker) {
         this(project, s3, bucket, deleteMarker.key(), () -> UNKNOWN_SIZE, deleteMarker::lastModified,
             deleteMarker::versionId, Precision.version);
         versionInfo = Optional.ofNullable(new VersionInfo(true, deleteMarker.isLatest().booleanValue()));
     }
 
+    /**
+     * Create an {@link ObjectResource} representing an object version.
+     * 
+     * @param project
+     *            Ant {@link Project}
+     * @param s3
+     *            {@link S3Client}
+     * @param bucket
+     *            of object
+     * @param version
+     *            info
+     */
     ObjectResource(Project project, S3Client s3, String bucket, ObjectVersion version) {
         this(project, s3, bucket, version.key(), version::size, version::lastModified, version::versionId,
             Precision.version);
         versionInfo = Optional.of(new VersionInfo(false, version.isLatest().booleanValue()));
     }
 
+    /**
+     * Create an {@link ObjectResource}.
+     * 
+     * @param project
+     *            Ant {@link Project}
+     * @param s3
+     *            {@link S3Client}
+     * @param bucket
+     *            of object
+     * @param key
+     *            of object
+     * @param size
+     *            of object
+     * @param lastModified
+     *            of object
+     * @param versionId
+     *            of object
+     * @param precision
+     *            of object
+     */
     ObjectResource(Project project, S3Client s3, String bucket, String key, LongSupplier size,
         Supplier<Instant> lastModified, Supplier<String> versionId, Precision precision) {
-
         this(project, s3, bucket, key);
         this.size = size;
         this.lastModified = lastModified;
         this.versionId = versionId;
     }
 
+    /**
+     * Create an {@link ObjectResource} representing a prefix.
+     * 
+     * @param project
+     *            Ant {@link Project}
+     * @param s3
+     *            {@link S3Client}
+     * @param bucket
+     *            of prefix
+     * @param prefix
+     *            {@link String}
+     * @return {@link ObjectResource}
+     */
     static ObjectResource ofPrefix(Project project, S3Client s3, String bucket, String prefix) {
-        ObjectResource result = new ObjectResource(project,s3,bucket,prefix);
+        final ObjectResource result = new ObjectResource(project, s3, bucket, prefix);
         result._setDirectory(true);
         return result;
     }
 
     /**
-     * Create a new {@link ObjectResource} fully-formed.
+     * Create a new {@link ObjectResource} with complete identifying info.
      *
      * @param project
+     *            Ant {@link Project}
      * @param s3
+     *            {@link S3Client}
      * @param bucket
+     *            of object
      * @param key
+     *            of object
      */
     ObjectResource(Project project, S3Client s3, String bucket, String key) {
         setProject(project);
@@ -188,6 +251,7 @@
      * Set the bucket of the S3 object.
      *
      * @param bucket
+     *            of object
      */
     public void setBucket(String bucket) {
         checkAttributesAllowed();
@@ -210,6 +274,7 @@
      * Set the key of the S3 object within its bucket.
      *
      * @param key
+     *            of object
      */
     public void setKey(String key) {
         this.key = key;
@@ -218,6 +283,9 @@
     /**
      * Set the name of the S3 object, which for our purposes is equivalent to
      * calling {@link #setKey(String)}.
+     * 
+     * @param name
+     *            {@code key}
      */
     @Override
     public void setName(String name) {
@@ -228,6 +296,8 @@
      * Get the name of the S3 object, which may be suffixed with the object
      * version if {@link #getPrecision()} returns {@link Precision#version} and
      * this object exists.
+     * 
+     * @return {@link String}
      */
     @Override
     public String getName() {
@@ -244,7 +314,9 @@
 
     /**
      * {@inheritDoc}
+     * 
      * @throws UnsupportedOperationException
+     *             always
      */
     @Override
     public void setDirectory(boolean directory) {
@@ -295,6 +367,7 @@
      * Set the content type of the S3 object.
      *
      * @param contentType
+     *            of object
      */
     public void setContentType(String contentType) {
         this.contentType = contentType;
@@ -339,6 +412,7 @@
      * Set the metadata.
      *
      * @param metadata
+     *            of object
      */
     public void setMetadata(Map<String, String> metadata) {
         Exceptions.raiseIf(isReference(), UnsupportedOperationException::new, "setMetadata");
@@ -386,6 +460,7 @@
      * Set the tagging for the S3 object.
      *
      * @param tagging
+     *            of object
      */
     public void setTagging(Map<String, String> tagging) {
         if (isReference()) {
@@ -398,6 +473,7 @@
      * Add the configured {@link Client} element.
      *
      * @param s3
+     *            {@link Client}
      */
     public void addConfigured(Client s3) {
         checkChildrenAllowed();
@@ -412,11 +488,11 @@
      * Set the {@link Client} by reference.
      *
      * @param refid
+     *            of {@link Client}
      */
     public void setClientRefid(String refid) {
         checkAttributesAllowed();
-        Exceptions.raiseIf(StringUtils.isBlank(refid), buildException(),
-            "@clientrefid must not be null/empty/blank");
+        Exceptions.raiseIf(StringUtils.isBlank(refid), buildException(), "@clientrefid must not be null/empty/blank");
 
         addConfigured(getProject().<Client> getReference(refid));
     }
@@ -521,6 +597,7 @@
      * Put a {@link File} as the content of this S3 object.
      *
      * @param file
+     *            source
      */
     public void put(File file) {
         if (isReference()) {
@@ -535,7 +612,9 @@
      * {@link S3Client} client to use.
      *
      * @param s3
+     *            {@link S3Client} to use
      * @param file
+     *            source
      */
     public void put(S3Client s3, File file) {
         if (isReference()) {
@@ -558,6 +637,7 @@
      * Delete this object from its bucket using the specified {@link S3Client}.
      * 
      * @param s3
+     *            {@link S3Client} to use
      */
     public void delete(S3Client s3) {
         if (isReference()) {
@@ -597,6 +677,7 @@
      * data are equal, in addition to {@link Object#equals(Object)} equality.
      *
      * @param other
+     *            object to compare for equality
      * @return {@code boolean}
      */
     public boolean fullyEquals(Object other) {
@@ -709,4 +790,3 @@
         super.setDirectory(directory);
     }
 }
-
diff --git a/src/main/org/apache/ant/s3/ObjectResources.java b/src/main/org/apache/ant/s3/ObjectResources.java
index ca40fc2..a447952 100644
--- a/src/main/org/apache/ant/s3/ObjectResources.java
+++ b/src/main/org/apache/ant/s3/ObjectResources.java
@@ -73,6 +73,7 @@
      * Create a new {@link ObjectResources} instance.
      *
      * @param project
+     *            Ant {@link Project}
      */
     public ObjectResources(final Project project) {
         super(project);
@@ -84,6 +85,7 @@
      * Add the nested {@link Client}.
      *
      * @param s3
+     *            {@link Client}
      */
     public void addConfigured(final Client s3) {
         checkChildrenAllowed();
@@ -99,6 +101,7 @@
      * Set {@link Client} by reference.
      *
      * @param refid
+     *            of {@link Client}
      */
     public void setClientRefid(final String refid) {
         checkAttributesAllowed();
@@ -113,6 +116,7 @@
      * Add a configured {@link ResourceSelector}.
      *
      * @param selector
+     *            to add
      */
     public void addConfigured(ResourceSelector selector) {
         checkChildrenAllowed();
@@ -215,6 +219,7 @@
      * Set the bucket of this {@link ObjectResources}.
      *
      * @param bucket
+     *            where resources exist
      */
     public void setBucket(String bucket) {
         checkAttributesAllowed();
@@ -240,13 +245,13 @@
      * name property and {@link Object#toString()} value of generated
      * {@link ObjectResource}s.
      * 
-     * @param precision
+     * @param as
      *            {@link Precision}
      */
-    public void setAs(Precision precision) {
+    public void setAs(Precision as) {
         checkAttributesAllowed();
-        if (precision != this.as) {
-            this.as = Objects.requireNonNull(precision);
+        if (as != this.as) {
+            this.as = Objects.requireNonNull(as);
             resetResourceCache();
         }
     }
@@ -314,6 +319,7 @@
      * default {@code true}.
      *
      * @param cache
+     *            flag
      */
     public void setCache(boolean cache) {
         this.cache = cache;
@@ -335,7 +341,9 @@
     /**
      * Set whether to include S3 object prefixes as "directory" type
      * {@link Resource}s, default {@code false}.
-     * @param includePrefixes {@code boolean}
+     * 
+     * @param includePrefixes
+     *            {@code boolean}
      */
     public void setIncludePrefixes(boolean includePrefixes) {
         checkAttributesAllowed();
@@ -349,6 +357,7 @@
      * Add a nested {@link PatternSet}.
      *
      * @param patternSet
+     *            to add
      */
     public void addConfigured(PatternSet patternSet) {
         checkChildrenAllowed();
@@ -404,6 +413,7 @@
      * Set includes patterns via attribute.
      *
      * @param includes
+     *            patterns
      */
     public void setIncludes(String includes) {
         checkAttributesAllowed();
@@ -415,6 +425,7 @@
      * Set includes file via attribute.
      *
      * @param includesFile
+     *            {@link File}
      */
     public void setIncludesFile(File includesFile) {
         checkAttributesAllowed();
@@ -423,9 +434,10 @@
     }
 
     /**
-     * Set excludes pattersn via attribute.
+     * Set excludes patterns via attribute.
      *
      * @param excludes
+     *            patterns
      */
     public void setExcludes(String excludes) {
         checkAttributesAllowed();
@@ -437,6 +449,7 @@
      * Set excludes file via attribute.
      *
      * @param excludesFile
+     *            {@link File}
      */
     public void setExcludesFile(File excludesFile) {
         checkAttributesAllowed();
diff --git a/src/main/org/apache/ant/s3/ProjectUtils.java b/src/main/org/apache/ant/s3/ProjectUtils.java
index fa6cd4f..e4a739a 100644
--- a/src/main/org/apache/ant/s3/ProjectUtils.java
+++ b/src/main/org/apache/ant/s3/ProjectUtils.java
@@ -35,7 +35,7 @@
     /**
      * Attempt to determine a component name for the specified type.
      * 
-     * @param type
+     * @param type for which component name is desired
      *
      * @return {@link String}
      */
@@ -47,8 +47,8 @@
      * Attempt to determine a component name for the specified type relative to
      * the specified {@link Project}.
      *
-     * @param project
-     * @param type
+     * @param project Ant project
+     * @param type for which component name is desired
      * @return {@link String}
      */
     default String componentName(final Project project, final Class<?> type) {
@@ -68,9 +68,9 @@
     /**
      * Require the specified item.
      *
-     * @param <T>
-     * @param item
-     * @param description
+     * @param <T> type
+     * @param item required object
+     * @param description description in thrown {@link Exception} if absent
      * @return {@code item}
      * @throws IllegalStateException
      *             if {@code t == null}
@@ -83,10 +83,10 @@
     /**
      * Require the specified component.
      * 
-     * @param component
-     * @param type
+     * @param component required component
+     * @param type of component
      *
-     * @param <T>
+     * @param <T> type
      * @return {@code component}
      */
     default <T> T requireComponent(final T component, final Class<?> type) {
@@ -97,7 +97,6 @@
      * Create a {@link Function} that will create a {@link BuildException} at
      * the specified {@link Location}, given the {@link String} message.
      *
-     * @param location
      * @return {@link Function}
      */
     default Function<String, BuildException> buildException() {
@@ -109,7 +108,6 @@
      * the specified {@link Location}, given the {@link String} message and
      * {@link Throwable} cause.
      *
-     * @param location
      * @return {@link BiFunction}
      */
     default BiFunction<String, Throwable, BuildException> buildExceptionTriggered() {
diff --git a/src/main/org/apache/ant/s3/Put.java b/src/main/org/apache/ant/s3/Put.java
index 898e376..109e4c4 100644
--- a/src/main/org/apache/ant/s3/Put.java
+++ b/src/main/org/apache/ant/s3/Put.java
@@ -23,6 +23,7 @@
 import java.util.function.Supplier;
 
 import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.FilterChain;
 import org.apache.tools.ant.types.FilterSetCollection;
 import org.apache.tools.ant.types.Resource;
@@ -41,9 +42,20 @@
     private String bucket;
 
     /**
+     * Create a new {@link Put} instance.
+     * 
+     * @param project
+     *            Ant {@link Project}
+     */
+    public Put(Project project) {
+        super(project);
+    }
+
+    /**
      * Add a configured {@link Client}.
      *
      * @param s3
+     *            {@link Client}
      */
     public void addConfigured(Client s3) {
         if (this.s3 != null) {
@@ -56,6 +68,7 @@
      * Set the {@link Client} by reference.
      *
      * @param refid
+     *            of {@link Client}
      */
     public void setClientRefid(String refid) {
         Objects.requireNonNull(StringUtils.trimToNull(refid), "@clientrefid must not be null/empty/blank");
@@ -76,6 +89,7 @@
      * Set the bucket to which target objects should be written.
      *
      * @param bucket
+     *            target
      */
     public void setBucket(String bucket) {
         this.bucket = StringUtils.trimToNull(bucket);
@@ -85,6 +99,7 @@
      * Disable {@code append}.
      *
      * @param append
+     *            flag
      * @throws BuildException
      *             if {@code append == true}
      */
@@ -97,6 +112,7 @@
      * Disable {@code preserveLastModified}.
      *
      * @param preserveLastModified
+     *            flag
      * @throws BuildException
      *             if {@code preserveLastModified == true}
      */
@@ -117,9 +133,10 @@
     }
 
     /**
-     * Disable {@code overwrite}.
+     * Force {@code overwrite}.
      * 
      * @param overwrite
+     *            flag
      * @throws BuildException
      *             if {@code overwrite == false}
      */
diff --git a/src/main/org/apache/ant/s3/S3DataType.java b/src/main/org/apache/ant/s3/S3DataType.java
index f2c38f5..fe805e2 100644
--- a/src/main/org/apache/ant/s3/S3DataType.java
+++ b/src/main/org/apache/ant/s3/S3DataType.java
@@ -28,18 +28,17 @@
     /**
      * Create a new {@link S3DataType} instance.
      *
-     * @param project
+     * @param project Ant {@link Project}
      */
     protected S3DataType(final Project project) {
         setProject(project);
     }
 
     /**
-     * Log a formatted message at the default level dictated by
-     * {@link #isVerbose()}.
+     * Log a formatted message at {@link Project#MSG_INFO} level.
      *
-     * @param format
-     * @param args
+     * @param format {@link String}
+     * @param args to format
      * @see Formatter
      */
     protected void log(final String format, final Object... args) {
@@ -49,9 +48,9 @@
     /**
      * Log a formatted message at the specified level.
      *
-     * @param level
-     * @param format
-     * @param args
+     * @param level log level
+     * @param format {@link String}
+     * @param args to format
      * @see Formatter
      */
     protected void log(final int level, final String format, final Object... args) {