diff --git a/checkstyle-suppressions.xml b/checkstyle-suppressions.xml
index e62645c..2fc6328 100644
--- a/checkstyle-suppressions.xml
+++ b/checkstyle-suppressions.xml
@@ -24,4 +24,5 @@
     <suppress checks="RedundantModifier" files="ConstructorUtilsTest" lines="0-99999"/>
     <!-- Windows-only workaround -->
     <suppress checks="NewlineAtEndOfFile" files="target[/\\]maven-archiver[/\\]pom.properties"/>
+    <suppress checks="FinalParametersCheck" files=".*"/>
 </suppressions>
diff --git a/checkstyle.xml b/checkstyle.xml
index d3e35d0..864649b 100644
--- a/checkstyle.xml
+++ b/checkstyle.xml
@@ -24,23 +24,34 @@
 <module name="Checker">
   <property name="localeLanguage" value="en"/>
   <module name="JavadocPackage"/>
+
   <module name="LineLength">
+    <property name="fileExtensions" value="java"/>
     <property name="max" value="120"/>
   </module>
+
   <module name="NewlineAtEndOfFile">
     <property name="lineSeparator" value="lf" />
   </module>
+
   <module name="FileTabCharacter">
     <property name="fileExtensions" value="java,xml"/>
   </module>
+
   <module name="RegexpSingleline">
     <!-- \s matches whitespace character, $ matches end of line. -->
     <property name="format" value="\s+$"/>
     <property name="message" value="Line has trailing spaces."/>
   </module>
+
   <module name="SuppressionFilter">
     <property name="file" value="checkstyle-suppressions.xml"/>
   </module>
+
+  <module name="FinalParameters">
+    <property name="ignorePrimitiveTypes" value="true"/>
+  </module>
+  
   <module name="TreeWalker">
     <module name="AvoidStarImport"/>
     <module name="IllegalImport"/>
@@ -61,3 +72,4 @@
     <module name="NoWhitespaceBefore"/>
  </module>
 </module>
+
diff --git a/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java b/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java
index 6a1869c..3ad14c8 100644
--- a/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java
+++ b/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java
@@ -21,7 +21,7 @@
 
 /**
  * Interface for providing the configuration for the control socket connections.
- * 
+ *
  *
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  *
@@ -29,27 +29,27 @@
 public interface ConnectionConfig {
 
     /**
-     * The maximum number of time an user can fail to login before getting disconnected
+     * The maximum number of time an user can fail to login before getting disconnected.
      * @return The maximum number of failure login attempts
      */
     int getMaxLoginFailures();
 
     /**
-     * The delay in number of milliseconds between login failures. Important to 
+     * The delay in number of milliseconds between login failures. Important to
      * make brute force attacks harder.
-     * 
+     *
      * @return The delay time in milliseconds
      */
     int getLoginFailureDelay();
 
     /**
-     * The maximum number of time an anonymous user can fail to login before getting disconnected
+     * The maximum number of time an anonymous user can fail to login before getting disconnected.
      * @return The maximum number of failer login attempts
      */
     int getMaxAnonymousLogins();
 
     /**
-     * The maximum number of concurrently logged in users
+     * The maximum number of concurrently logged in users.
      * @return The maximum number of users
      */
     int getMaxLogins();
@@ -59,11 +59,11 @@
      * @return true if anonymous logins are enabled
      */
     boolean isAnonymousLoginEnabled();
-    
+
     /**
      * Returns the maximum number of threads the server is allowed to create for
      * processing client requests.
-     * 
+     *
      * @return the maximum number of threads the server is allowed to create for
      *         processing client requests.
      */
diff --git a/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java b/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java
index a1e3c0d..8f84eae 100644
--- a/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java
+++ b/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java
@@ -25,7 +25,7 @@
 
 /**
  * <strong>Internal class, do not use directly.</strong>
- * 
+ *
  * Data connection configuration.
  *
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
@@ -41,12 +41,12 @@
     private final String activeLocalAddress;
     private final int activeLocalPort;
     private final boolean activeIpCheck;
-    
+
     private final String passiveAddress;
     private final String passiveExternalAddress;
     private final PassivePorts passivePorts;
     private final boolean passiveIpCheck;
-    
+
     private final boolean implicitSsl;
 
     /**
@@ -119,11 +119,11 @@
     public String getPassiveExernalAddress()  {
         return passiveExternalAddress;
     }
-    
+
     public boolean isPassiveIpCheck() {
         return passiveIpCheck;
     }
-    
+
     /**
      * Get passive data port. Data port number zero (0) means that any available
      * port will be used.
@@ -134,7 +134,7 @@
 
     /**
      * Retrive the passive ports configured for this data connection
-     * 
+     *
      * @return The String of passive ports
      */
     public String getPassivePorts() {
diff --git a/core/src/main/java/org/apache/ftpserver/impl/ServerFtpStatistics.java b/core/src/main/java/org/apache/ftpserver/impl/ServerFtpStatistics.java
index a174ed0..cd654f3 100644
--- a/core/src/main/java/org/apache/ftpserver/impl/ServerFtpStatistics.java
+++ b/core/src/main/java/org/apache/ftpserver/impl/ServerFtpStatistics.java
@@ -24,7 +24,7 @@
 
 /**
  * <strong>Internal class, do not use directly.</strong>
- * 
+ *
  * This is same as <code>org.apache.ftpserver.ftplet.FtpStatistics</code> with
  * added observer and setting values functionalities.
  *
diff --git a/core/src/main/java/org/apache/ftpserver/util/StringUtils.java b/core/src/main/java/org/apache/ftpserver/util/StringUtils.java
index a863599..8642079 100644
--- a/core/src/main/java/org/apache/ftpserver/util/StringUtils.java
+++ b/core/src/main/java/org/apache/ftpserver/util/StringUtils.java
@@ -23,7 +23,7 @@
 
 /**
  * <strong>Internal class, do not use directly.</strong>
- * 
+ *
  * String utility methods.
  *
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
@@ -33,7 +33,7 @@
     /**
      * This is a string replacement method.
      */
-    public final static String replaceString(String source, String oldStr,
+    public static final String replaceString(String source, String oldStr,
             String newStr) {
         StringBuilder sb = new StringBuilder(source.length());
         int sind = 0;
@@ -48,9 +48,9 @@
     }
 
     /**
-     * Replace string
+     * Replace string.
      */
-    public final static String replaceString(String source, Object[] args) {
+    public static final String replaceString(String source, Object[] args) {
         int startIndex = 0;
         int openIndex = source.indexOf('{', startIndex);
         if (openIndex == -1) {
@@ -89,7 +89,7 @@
     /**
      * Replace string.
      */
-    public final static String replaceString(String source,
+    public static final String replaceString(String source,
             Map<String, Object> args) {
         int startIndex = 0;
         int openIndex = source.indexOf('{', startIndex);
@@ -129,15 +129,15 @@
     }
 
     /**
-         * This method is used to insert HTML block dynamically
+         * This method is used to insert HTML block dynamically.
          *
          * @param source the HTML code to be processes
          * @param bReplaceNl if true '\n' will be replaced by <br>
-         * @param bReplaceTag if true '<' will be replaced by &lt; and 
+         * @param bReplaceTag if true '<' will be replaced by &lt; and
          *                          '>' will be replaced by &gt;
-         * @param bReplaceQuote if true '\"' will be replaced by &quot; 
+         * @param bReplaceQuote if true '\"' will be replaced by &quot;
          */
-    public final static String formatHtml(String source, boolean bReplaceNl,
+    public static final String formatHtml(String source, boolean bReplaceNl,
             boolean bReplaceTag, boolean bReplaceQuote) {
 
         StringBuilder sb = new StringBuilder();
@@ -145,57 +145,65 @@
         for (int i = 0; i < len; i++) {
             char c = source.charAt(i);
             switch (c) {
-            case '\"':
-                if (bReplaceQuote)
-                    sb.append("&quot;");
-                else
+                case '\"':
+                    if (bReplaceQuote) {
+                        sb.append("&quot;");
+                    } else {
+                        sb.append(c);
+                    }
+
+                    break;
+
+                case '<':
+                    if (bReplaceTag) {
+                        sb.append("&lt;");
+                    } else {
+                        sb.append(c);
+                    }
+
+                    break;
+
+                case '>':
+                    if (bReplaceTag) {
+                        sb.append("&gt;");
+                    } else {
+                        sb.append(c);
+                    }
+                    
+                    break;
+
+                case '\n':
+                    if (bReplaceNl) {
+                        if (bReplaceTag) {
+                            sb.append("&lt;br&gt;");
+                        } else {
+                            sb.append("<br>");
+                        }
+                    } else {
+                        sb.append(c);
+                    }
+
+                    break;
+
+                case '\r':
+                    break;
+
+                case '&':
+                    sb.append("&amp;");
+                    break;
+
+                default:
                     sb.append(c);
-                break;
-
-            case '<':
-                if (bReplaceTag)
-                    sb.append("&lt;");
-                else
-                    sb.append(c);
-                break;
-
-            case '>':
-                if (bReplaceTag)
-                    sb.append("&gt;");
-                else
-                    sb.append(c);
-                break;
-
-            case '\n':
-                if (bReplaceNl) {
-                    if (bReplaceTag)
-                        sb.append("&lt;br&gt;");
-                    else
-                        sb.append("<br>");
-                } else {
-                    sb.append(c);
-                }
-                break;
-
-            case '\r':
-                break;
-
-            case '&':
-                sb.append("&amp;");
-                break;
-
-            default:
-                sb.append(c);
-                break;
+                    break;
             }
         }
         return sb.toString();
     }
 
     /**
-     * Pad string object
+     * Pad string object.
      */
-    public final static String pad(String src, char padChar, boolean rightPad,
+    public static final String pad(String src, char padChar, boolean rightPad,
             int totalLength) {
 
         int srcLength = src.length();
@@ -217,9 +225,9 @@
     }
 
     /**
-     * Get hex string from byte array
+     * Get hex string from byte array.
      */
-    public final static String toHexString(byte[] res) {
+    public static final String toHexString(byte[] res) {
         StringBuilder sb = new StringBuilder(res.length << 1);
         for (int i = 0; i < res.length; i++) {
             String digit = Integer.toHexString(0xFF & res[i]);
@@ -232,9 +240,9 @@
     }
 
     /**
-     * Get byte array from hex string
+     * Get byte array from hex string.
      */
-    public final static byte[] toByteArray(String hexString) {
+    public static final byte[] toByteArray(String hexString) {
         int arrLength = hexString.length() >> 1;
         byte buff[] = new byte[arrLength];
         for (int i = 0; i < arrLength; i++) {
diff --git a/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/FtpServerListener.java b/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/FtpServerListener.java
index 8277904..c42782e 100644
--- a/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/FtpServerListener.java
+++ b/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/FtpServerListener.java
@@ -30,35 +30,42 @@
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public class FtpServerListener implements ServletContextListener {
-
+    /** The context name. */
     public static final String FTPSERVER_CONTEXT_NAME = "org.apache.ftpserver";
-    
+
+    /**
+     * {@inheritDoc}
+     */
     public void contextDestroyed(ServletContextEvent sce) {
         System.out.println("Stopping FtpServer");
-        
-        FtpServer server = (FtpServer) sce.getServletContext().getAttribute(FTPSERVER_CONTEXT_NAME);
-        
-        if(server != null) {
+
+        FtpServer server = (FtpServer) sce.getServletContext().
+            getAttribute(FTPSERVER_CONTEXT_NAME);
+
+        if (server != null) {
             server.stop();
-            
+
             sce.getServletContext().removeAttribute(FTPSERVER_CONTEXT_NAME);
-            
+
             System.out.println("FtpServer stopped");
         } else {
             System.out.println("No running FtpServer found");
         }
-        
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void contextInitialized(ServletContextEvent sce) {
-        System.out.println("Starting FtpServer");   
+        System.out.println("Starting FtpServer");
 
-        WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
-        
+        WebApplicationContext ctx = WebApplicationContextUtils.
+            getWebApplicationContext(sce.getServletContext());
+
         FtpServer server = (FtpServer) ctx.getBean("myServer");
-        
+
         sce.getServletContext().setAttribute(FTPSERVER_CONTEXT_NAME, server);
-        
+
         try {
             server.start();
             System.out.println("FtpServer started");
@@ -66,5 +73,5 @@
             throw new RuntimeException("Failed to start FtpServer", e);
         }
     }
-
 }
+
diff --git a/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/FtpServerServlet.java b/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/FtpServerServlet.java
index 6c01ab4..15f9e93 100644
--- a/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/FtpServerServlet.java
+++ b/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/FtpServerServlet.java
@@ -36,14 +36,18 @@
 
     private static final long serialVersionUID = 5539642787624981705L;
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
             throws ServletException, IOException {
-        
-        FtpServer server = (FtpServer) getServletContext().getAttribute(FtpServerListener.FTPSERVER_CONTEXT_NAME);
-        
+
+        FtpServer server = (FtpServer) getServletContext().
+            getAttribute(FtpServerListener.FTPSERVER_CONTEXT_NAME);
+
         PrintWriter wr = resp.getWriter();
-        
+
         wr.print("<html>");
         wr.print("<head>");
         wr.print("<title>FtpServer status servlet</title>");
@@ -52,10 +56,10 @@
         wr.print("<form method='post'>");
 
 
-        if(server.isStopped()) {
+        if (server.isStopped()) {
             wr.print("<p>FtpServer is stopped.</p>");
         } else {
-            if(server.isSuspended()) {
+            if (server.isSuspended()) {
                 wr.print("<p>FtpServer is suspended.</p>");
                 wr.print("<p><input type='submit' name='resume' value='Resume'></p>");
                 wr.print("<p><input type='submit' name='stop' value='Stop'></p>");
@@ -65,27 +69,31 @@
                 wr.print("<p><input type='submit' name='stop' value='Stop'></p>");
             }
         }
-        
+
         wr.print("</form>");
         wr.print("</body>");
         wr.print("</html>");
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
             throws ServletException, IOException {
-        
-        FtpServer server = (FtpServer) getServletContext().getAttribute(FtpServerListener.FTPSERVER_CONTEXT_NAME);
-        
-        if(req.getParameter("stop") != null) {
+
+        FtpServer server = (FtpServer) getServletContext().
+            getAttribute(FtpServerListener.FTPSERVER_CONTEXT_NAME);
+
+        if (req.getParameter("stop") != null) {
             server.stop();
-        } else if(req.getParameter("resume") != null) {
+        } else if (req.getParameter("resume") != null) {
             server.resume();
-        } else if(req.getParameter("suspend") != null) {
+        } else if (req.getParameter("suspend") != null) {
             server.suspend();
         }
-        
+
         resp.sendRedirect("/");
     }
-
 }
+
diff --git a/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/package-info.java b/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/package-info.java
new file mode 100644
index 0000000..74090ed
--- /dev/null
+++ b/examples/ftpserver-example-spring-war/src/main/java/org/apache/ftpserver/example/springwar/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+package org.apache.ftpserver.example.springwar;
diff --git a/examples/ftpserver-example-spring-war/src/main/resources/log4j.properties b/examples/ftpserver-example-spring-war/src/main/resources/log4j.properties
index b6fb474..a78bf64 100644
--- a/examples/ftpserver-example-spring-war/src/main/resources/log4j.properties
+++ b/examples/ftpserver-example-spring-war/src/main/resources/log4j.properties
@@ -15,8 +15,8 @@
 # specific language governing permissions and limitations
 # under the License.
 
-log4j.rootLogger=DEBUG, C 
-log4j.appender.C=org.apache.log4j.ConsoleAppender 
-log4j.appender.C.layout=org.apache.log4j.PatternLayout 
+log4j.rootLogger=DEBUG, C
+log4j.appender.C=org.apache.log4j.ConsoleAppender
+log4j.appender.C.layout=org.apache.log4j.PatternLayout
 log4j.appender.C.layout.ConversionPattern=[%5p] %d [%X{userName}] [%X{remoteIp}] %m%n
 
diff --git a/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/MyFtplet.java b/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/MyFtplet.java
index d5b6322..a45363a 100644
--- a/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/MyFtplet.java
+++ b/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/MyFtplet.java
@@ -31,23 +31,25 @@
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public class MyFtplet extends DefaultFtplet {
-
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public FtpletResult onConnect(FtpSession session) throws FtpException,
             IOException {
         System.out.println("User connected to FtpServer");
-        
+
         return super.onConnect(session);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public FtpletResult onDisconnect(FtpSession session) throws FtpException,
             IOException {
         System.out.println("User connected to FtpServer");
-        
+
         return super.onDisconnect(session);
     }
-
-    
-    
 }
diff --git a/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/impl/Activator.java b/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/impl/Activator.java
index b0bceb6..2734939 100644
--- a/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/impl/Activator.java
+++ b/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/impl/Activator.java
@@ -31,16 +31,21 @@
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public class Activator implements BundleActivator {
-
+    /**
+     * {@inheritDoc}
+     */
     public void start(BundleContext context) throws Exception {
         Dictionary<String, String> properties = new Hashtable<String, String>();
         properties.put("name", "myftplet");
-        
-        context.registerService(Ftplet.class.getName(), new MyFtplet(), properties);
+
+        context.registerService(Ftplet.class.getName(),
+            new MyFtplet(), properties);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void stop(BundleContext context) throws Exception {
-        // do nothing              
+        // do nothing
     }
-
 }
diff --git a/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/impl/package-info.java b/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/impl/package-info.java
new file mode 100644
index 0000000..c1cdd99
--- /dev/null
+++ b/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/impl/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+package org.apache.ftpserver.example.ftpletservice.impl;
diff --git a/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/package-info.java b/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/package-info.java
new file mode 100644
index 0000000..f2bd051
--- /dev/null
+++ b/examples/ftpserver-osgi-ftplet-service/src/main/java/org/apache/ftpserver/example/ftpletservice/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+package org.apache.ftpserver.example.ftpletservice;
diff --git a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java
index 8e1d8e1..14a7954 100644
--- a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java
+++ b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java
@@ -338,4 +338,4 @@
             throws FtpException, IOException {
         return null;
     }
-}
\ No newline at end of file
+}
diff --git a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpFile.java b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpFile.java
index c96432b..5024ac2 100644
--- a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpFile.java
+++ b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpFile.java
@@ -19,7 +19,6 @@
 
 package org.apache.ftpserver.ftplet;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -40,7 +39,7 @@
     String getAbsolutePath();
 
     /**
-     * Get the file name of the file
+     * Get the file name of the file.
      * @return the last part of the file path (the part after the last '/').
      */
     String getName();
@@ -112,26 +111,27 @@
     long getLastModified();
 
     /**
-     * Set the last modified time stamp of a file
+     * Set the last modified time stamp of a file.
      * @param time The last modified time, in milliseconds since the epoch. See {@link File#setLastModified(long)}.
+     * @return <code>true</code> if and only if the operation succeeded; <code>false</code> otherwise
      */
     boolean setLastModified(long time);
-    
+
     /**
      * Get file size.
      * @return The size of the {@link FtpFile} in bytes
      */
     long getSize();
-    
+
     /**
-     * Returns the physical location or path of the file. It is completely up to 
-     * the implementation to return appropriate value based on the file system 
+     * Returns the physical location or path of the file. It is completely up to
+     * the implementation to return appropriate value based on the file system
      * implementation.
-     *  
-     * @return the physical location or path of the file. 
+     *
+     * @return the physical location or path of the file.
      */
     Object getPhysicalFile();
-    
+
     /**
      * Create directory.
      * @return true if the operation was successful
@@ -160,22 +160,22 @@
     List<? extends FtpFile> listFiles();
 
     /**
-     * Create output stream for writing. 
+     * Create output stream for writing.
      * @param offset The number of bytes at where to start writing.
      *      If the file is not random accessible,
      *      any offset other than zero will throw an exception.
      * @return An {@link OutputStream} used to write to the {@link FtpFile}
-     * @throws IOException 
+     * @throws IOException
      */
     OutputStream createOutputStream(long offset) throws IOException;
 
     /**
-     * Create input stream for reading. 
-     * @param offset The number of bytes of where to start reading. 
+     * Create input stream for reading.
+     * @param offset The number of bytes of where to start reading.
      *          If the file is not random accessible,
      *          any offset other than zero will throw an exception.
      * @return An {@link InputStream} used to read the {@link FtpFile}
-     * @throws IOException 
+     * @throws IOException
      */
     InputStream createInputStream(long offset) throws IOException;
 }
diff --git a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpReply.java b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpReply.java
index 721d138..921543d 100644
--- a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpReply.java
+++ b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpReply.java
@@ -32,240 +32,240 @@
      * is User-process data stream marker, and mmmm server's equivalent marker
      * (note the spaces between markers and "=").
      */
-    public static final int REPLY_110_RESTART_MARKER_REPLY = 110;
+    int REPLY_110_RESTART_MARKER_REPLY = 110;
 
     /**
      * 120 Service ready in nnn minutes.
      */
-    public static final int REPLY_120_SERVICE_READY_IN_NNN_MINUTES = 120;
+    int REPLY_120_SERVICE_READY_IN_NNN_MINUTES = 120;
 
     /**
      * 125 Data connection already open; transfer starting.
      */
-    public static final int REPLY_125_DATA_CONNECTION_ALREADY_OPEN = 125;
+    int REPLY_125_DATA_CONNECTION_ALREADY_OPEN = 125;
 
     /**
      * 150 File status okay; about to open data connection.
      */
-    public static final int REPLY_150_FILE_STATUS_OKAY = 150;
+    int REPLY_150_FILE_STATUS_OKAY = 150;
 
     /**
      * 200 Command okay.
      */
-    public static final int REPLY_200_COMMAND_OKAY = 200;
+    int REPLY_200_COMMAND_OKAY = 200;
 
     /**
      * 202 Command not implemented, superfluous at this site.
      */
-    public static final int REPLY_202_COMMAND_NOT_IMPLEMENTED = 202;
+    int REPLY_202_COMMAND_NOT_IMPLEMENTED = 202;
 
     /**
      * 211 System status, or system help reply.
      */
-    public static final int REPLY_211_SYSTEM_STATUS_REPLY = 211;
+    int REPLY_211_SYSTEM_STATUS_REPLY = 211;
 
     /**
      * 212 Directory status.
      */
-    public static final int REPLY_212_DIRECTORY_STATUS = 212;
+    int REPLY_212_DIRECTORY_STATUS = 212;
 
     /**
      * 213 File status.
      */
-    public static final int REPLY_213_FILE_STATUS = 213;
+    int REPLY_213_FILE_STATUS = 213;
 
     /**
      * 214 Help message. On how to use the server or the meaning of a particular
      * non-standard command. This reply is useful only to the human user.
      */
-    public static final int REPLY_214_HELP_MESSAGE = 214;
+    int REPLY_214_HELP_MESSAGE = 214;
 
     /**
      * 215 NAME system type. Where NAME is an official system name from the list
      * in the Assigned Numbers document.
      */
-    public static final int REPLY_215_NAME_SYSTEM_TYPE = 215;
+    int REPLY_215_NAME_SYSTEM_TYPE = 215;
 
     /**
      * 220 Service ready for new user.
      */
-    public static final int REPLY_220_SERVICE_READY = 220;
+    int REPLY_220_SERVICE_READY = 220;
 
     /**
      * Service closing control connection. Logged out if appropriate.
      */
-    public static final int REPLY_221_CLOSING_CONTROL_CONNECTION = 221;
+    int REPLY_221_CLOSING_CONTROL_CONNECTION = 221;
 
     /**
      * 225 Data connection open; no transfer in progress.
      */
-    public static final int REPLY_225_DATA_CONNECTION_OPEN_NO_TRANSFER_IN_PROGRESS = 225;
+    int REPLY_225_DATA_CONNECTION_OPEN_NO_TRANSFER_IN_PROGRESS = 225;
 
     /**
      * Closing data connection. Requested file action successful (for example,
      * file transfer or file abort).
      */
-    public static final int REPLY_226_CLOSING_DATA_CONNECTION = 226;
+    int REPLY_226_CLOSING_DATA_CONNECTION = 226;
 
     /**
      * 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
      */
-    public static final int REPLY_227_ENTERING_PASSIVE_MODE = 227;
+    int REPLY_227_ENTERING_PASSIVE_MODE = 227;
 
     /**
      * 230 User logged in, proceed.
      */
-    public static final int REPLY_230_USER_LOGGED_IN = 230;
+    int REPLY_230_USER_LOGGED_IN = 230;
 
     /**
      * 250 Requested file action okay, completed.
      */
-    public static final int REPLY_250_REQUESTED_FILE_ACTION_OKAY = 250;
+    int REPLY_250_REQUESTED_FILE_ACTION_OKAY = 250;
 
     /**
      * 257 "PATHNAME" created.
      */
-    public static final int REPLY_257_PATHNAME_CREATED = 257;
+    int REPLY_257_PATHNAME_CREATED = 257;
 
     /**
      * 331 User name okay, need password.
      */
-    public static final int REPLY_331_USER_NAME_OKAY_NEED_PASSWORD = 331;
+    int REPLY_331_USER_NAME_OKAY_NEED_PASSWORD = 331;
 
     /**
      * 332 Need account for login.
      */
-    public static final int REPLY_332_NEED_ACCOUNT_FOR_LOGIN = 332;
+    int REPLY_332_NEED_ACCOUNT_FOR_LOGIN = 332;
 
     /**
      * 350 Requested file action pending further information.
      */
-    public static final int REPLY_350_REQUESTED_FILE_ACTION_PENDING_FURTHER_INFORMATION = 350;
+     int REPLY_350_REQUESTED_FILE_ACTION_PENDING_FURTHER_INFORMATION = 350;
 
     /**
      * 421 Service not available, closing control connection. This may be a
      * reply to any command if the service knows it must shut down.
      */
-    public static final int REPLY_421_SERVICE_NOT_AVAILABLE_CLOSING_CONTROL_CONNECTION = 421;
+     int REPLY_421_SERVICE_NOT_AVAILABLE_CLOSING_CONTROL_CONNECTION = 421;
 
     /**
      * 425 Can't open data connection.
      */
-    public static final int REPLY_425_CANT_OPEN_DATA_CONNECTION = 425;
+     int REPLY_425_CANT_OPEN_DATA_CONNECTION = 425;
 
     /**
      * 426 Connection closed; transfer aborted.
      */
-    public static final int REPLY_426_CONNECTION_CLOSED_TRANSFER_ABORTED = 426;
+     int REPLY_426_CONNECTION_CLOSED_TRANSFER_ABORTED = 426;
 
     /**
      * 450 Requested file action not taken. File unavailable (e.g., file busy).
      */
-    public static final int REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN = 450;
+     int REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN = 450;
 
     /**
      * 451 Requested action aborted: local error in processing.
      */
-    public static final int REPLY_451_REQUESTED_ACTION_ABORTED = 451;
+     int REPLY_451_REQUESTED_ACTION_ABORTED = 451;
 
     /**
      * 452 Requested action not taken. Insufficient storage space in system.
      */
-    public static final int REPLY_452_REQUESTED_ACTION_NOT_TAKEN = 452;
+     int REPLY_452_REQUESTED_ACTION_NOT_TAKEN = 452;
 
     /**
      * 500 Syntax error, command unrecognized. This may include errors such as
      * command line too long.
      */
-    public static final int REPLY_500_SYNTAX_ERROR_COMMAND_UNRECOGNIZED = 500;
+     int REPLY_500_SYNTAX_ERROR_COMMAND_UNRECOGNIZED = 500;
 
     /**
      * 501 Syntax error in parameters or arguments.
      */
-    public static final int REPLY_501_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS = 501;
+     int REPLY_501_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS = 501;
 
     /**
      * 502 Command not implemented.
      */
-    public static final int REPLY_502_COMMAND_NOT_IMPLEMENTED = 502;
+     int REPLY_502_COMMAND_NOT_IMPLEMENTED = 502;
 
     /**
      * 503 Bad sequence of commands.
      */
-    public static final int REPLY_503_BAD_SEQUENCE_OF_COMMANDS = 503;
+     int REPLY_503_BAD_SEQUENCE_OF_COMMANDS = 503;
 
     /**
      * 504 Command not implemented for that parameter.
      */
-    public static final int REPLY_504_COMMAND_NOT_IMPLEMENTED_FOR_THAT_PARAMETER = 504;
+     int REPLY_504_COMMAND_NOT_IMPLEMENTED_FOR_THAT_PARAMETER = 504;
 
     /**
      * 530 Not logged in.
      */
-    public static final int REPLY_530_NOT_LOGGED_IN = 530;
+     int REPLY_530_NOT_LOGGED_IN = 530;
 
     /**
      * 532 Need account for storing files.
      */
-    public static final int REPLY_532_NEED_ACCOUNT_FOR_STORING_FILES = 532;
+     int REPLY_532_NEED_ACCOUNT_FOR_STORING_FILES = 532;
 
     /**
      * 550 Requested action not taken. File unavailable (e.g., file not found,
      * no access).
      */
-    public static final int REPLY_550_REQUESTED_ACTION_NOT_TAKEN = 550;
+     int REPLY_550_REQUESTED_ACTION_NOT_TAKEN = 550;
 
     /**
      * 551 Requested action aborted: page type unknown.
      */
-    public static final int REPLY_551_REQUESTED_ACTION_ABORTED_PAGE_TYPE_UNKNOWN = 551;
+     int REPLY_551_REQUESTED_ACTION_ABORTED_PAGE_TYPE_UNKNOWN = 551;
 
     /**
      * 552 Requested file action aborted. Exceeded storage allocation (for
      * current directory or dataset).
      */
-    public static final int REPLY_552_REQUESTED_FILE_ACTION_ABORTED_EXCEEDED_STORAGE = 552;
+     int REPLY_552_REQUESTED_FILE_ACTION_ABORTED_EXCEEDED_STORAGE = 552;
 
     /**
      * 553 Requested action not taken. File name not allowed.
      */
-    public static final int REPLY_553_REQUESTED_ACTION_NOT_TAKEN_FILE_NAME_NOT_ALLOWED = 553;
+    int REPLY_553_REQUESTED_ACTION_NOT_TAKEN_FILE_NAME_NOT_ALLOWED = 553;
 
     /**
-     * The reply code
-     * 
+     * The reply code.
+     *
      * @return The reply code
      */
     int getCode();
 
     /**
-     * The reply message, might be multiple lines
-     * 
+     * The reply message, might be multiple lines.
+     *
      * @return The reply message
      */
     String getMessage();
-    
+
     /**
-     * Returns the timestamp (in milliseconds since the epoch time) when this 
-     * reply was sent. 
-     * 
-     * @return the timestamp (in milliseconds since the epoch time) when this 
+     * Returns the timestamp (in milliseconds since the epoch time) when this
+     * reply was sent.
+     *
+     * @return the timestamp (in milliseconds since the epoch time) when this
      * reply was sent.
      */
     long getSentTime();
-    
+
     /**
      * Must implement toString to format the reply as described in the RFC. Most
      * important is the handling of multi-line replies.
-     * 
+     *
      * @return The formated reply
      */
     String toString();
-    
+
     /**
-     * Tells whether or not this reply indicates a positive completion. 
-     * @return <code>true</code>, if this reply is a positive completion or 
-     * positive intermediate reply; <code>false</code>, otherwise.  
+     * Tells whether or not this reply indicates a positive completion.
+     * @return <code>true</code>, if this reply is a positive completion or
+     * positive intermediate reply; <code>false</code>, otherwise.
      */
     boolean isPositive();
 }
diff --git a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java
index b503b97..37b73f9 100644
--- a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java
+++ b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java
@@ -143,4 +143,4 @@
      */
     FtpletResult onDisconnect(FtpSession session) throws FtpException,
             IOException;
-}
\ No newline at end of file
+}
