diff --git a/Dockerfile b/Dockerfile
index 28570de..29410a2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -31,7 +31,7 @@
 RUN apt-get update && apt-get install -y git
 RUN git clone https://github.com/apache/roller.git
 WORKDIR /tmp/roller
-RUN git checkout master; \
+RUN git checkout roller-6.0.x; \
 mvn -Duser.home=/builder/home -DskipTests=true -B clean install
 
 
diff --git a/LICENSE.txt b/LICENSE.txt
index f7d3e4d..83b89fc 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -339,6 +339,7 @@
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
+
 -------------------------------------------------------------------------------
 This product bundles Summernote WYSIWYG editor, which is available under a
 "MIT" license. For details, see
@@ -366,4 +367,4 @@
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
--------------------------------------------------------------------------------
+-------------------------------------------------------------------------------
\ No newline at end of file
diff --git a/NOTICE.txt b/NOTICE.txt
index 0dd038d..203644e 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -24,4 +24,4 @@
 The product includes snippets of code from the JavaMail
 COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1
 Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
-https://glassfish.java.net/public/CDDL+GPL_1_1.html
+https://glassfish.java.net/public/CDDL+GPL_1_1.html
\ No newline at end of file
diff --git a/app/pom.xml b/app/pom.xml
index 94bf7ae..d654e01 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>6.0.0-SNAPSHOT</version>
+        <version>6.0.1-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -38,33 +38,32 @@
         <java-activation.version>1.2.0</java-activation.version>
         <java-mail.version>1.4.7</java-mail.version>
         <jstl.version>1.2</jstl.version>
-
         <angular.version>1.7.8</angular.version>
-        <ant.version>1.10.5</ant.version>
+        <ant.version>1.10.7</ant.version>
+        <asm.version>7.2</asm.version>
         <commons-validator.version>1.6</commons-validator.version>
-        <commons-beanutils.version>1.9.3</commons-beanutils.version>
+        <commons-beanutils.version>1.9.4</commons-beanutils.version>
         <commons-httpclient.version>3.1</commons-httpclient.version>
-        <commons-codec.version>1.12</commons-codec.version>
-        <eclipse-link.version>2.7.4</eclipse-link.version>
+        <commons-codec.version>1.13</commons-codec.version>
+        <eclipse-link.version>2.7.5</eclipse-link.version>
         <guice.version>4.2.2</guice.version>
         <log4j.version>1.2.17</log4j.version>
         <log4j2.version>2.10.0</log4j2.version>
-        <lucene.version>8.1.1</lucene.version>
+        <lucene.version>8.3.0</lucene.version>
         <oauth-core.version>20100527</oauth-core.version>
-        <maven-war.version>3.1.0</maven-war.version>
+        <maven-war.version>3.2.3</maven-war.version>
         <maven-surefire.version>2.17</maven-surefire.version>
         <maven-antrun.version>1.0b3</maven-antrun.version>
-        <rome.version>1.12.0</rome.version>
+        <rome.version>1.12.2</rome.version>
         <slf4j.version>1.7.26</slf4j.version>
         <spring.version>4.1.4.RELEASE</spring.version>
         <spring.security.version>3.2.5.RELEASE</spring.security.version>
-        <struts.version>2.5.20</struts.version>
+        <struts.version>2.5.22</struts.version>
         <velocity.version>1.7</velocity.version>
         <webjars.version>1.5</webjars.version>
         <ws-commons-util.version>1.0.2</ws-commons-util.version>
         <xml-security.version>1.3.0</xml-security.version>
         <xmlrpc-version>3.1.3</xmlrpc-version>
-
     </properties>
 
     <dependencies>
@@ -108,6 +107,13 @@
             <groupId>javax.xml.bind</groupId>
             <artifactId>jaxb-api</artifactId>
             <version>2.3.1</version>
+            <exclusions>
+                <exclusion>
+                    <!--api is already in the javax.activation artifact-->
+                    <groupId>javax.activation</groupId>
+                    <artifactId>javax.activation-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <!-- Eclipselink JPA is the default JPA implementation used by
@@ -184,19 +190,19 @@
         <dependency>
             <groupId>org.ow2.asm</groupId>
             <artifactId>asm</artifactId>
-            <version>7.0</version>
+            <version>${asm.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.ow2.asm</groupId>
             <artifactId>asm-commons</artifactId>
-            <version>7.0</version>
+            <version>${asm.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.ow2.asm</groupId>
             <artifactId>asm-tree</artifactId>
-            <version>7.0</version>
+            <version>${asm.version}</version>
         </dependency>
         
         <dependency>
@@ -383,6 +389,12 @@
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-openid</artifactId>
             <version>${spring.security.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.google.inject</groupId>
+                    <artifactId>guice</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
@@ -416,6 +428,7 @@
             <groupId>com.google.inject</groupId>
             <artifactId>guice</artifactId>
             <version>${guice.version}</version>
+            <classifier>no_aop</classifier>
         </dependency>
 
         <dependency>
@@ -575,7 +588,7 @@
                             <port>4224</port>
                             <sources>
                                 <script>
-                                    <sourceFile>${pom.basedir}/target/dbscripts/derby/createdb.sql</sourceFile>
+                                    <sourceFile>${project.basedir}/target/dbscripts/derby/createdb.sql</sourceFile>
                                 </script>
                             </sources>
                         </configuration>
diff --git a/app/src/main/java/org/apache/roller/RollerException.java b/app/src/main/java/org/apache/roller/RollerException.java
index f6bbd1e..6ff0f33 100644
--- a/app/src/main/java/org/apache/roller/RollerException.java
+++ b/app/src/main/java/org/apache/roller/RollerException.java
@@ -100,6 +100,7 @@
      * Print stack trace for exception and for root cause exception if there is one.
      * @see java.lang.Throwable#printStackTrace()
      */
+    @Override
     public void printStackTrace() {
         super.printStackTrace();
         if (mRootCause != null) {
@@ -113,6 +114,7 @@
      * Print stack trace for exception and for root cause exception if there is one.
      * @param s Stream to print to.
      */
+    @Override
     public void printStackTrace(PrintStream s) {
         super.printStackTrace(s);
         if (mRootCause != null) {
@@ -126,6 +128,7 @@
      * Print stack trace for exception and for root cause exception if there is one.
      * @param s Writer to write to.
      */
+    @Override
     public void printStackTrace(PrintWriter s) {
         super.printStackTrace(s);
         if (null != mRootCause) {
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/PreviewURLStrategy.java b/app/src/main/java/org/apache/roller/weblogger/business/PreviewURLStrategy.java
index d0b85d9..91768a9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/PreviewURLStrategy.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/PreviewURLStrategy.java
@@ -117,6 +117,7 @@
     /**
      * Get url for a collection of entries on a given weblog.
      */
+    @Override
     public String getWeblogCollectionURL(Weblog weblog,
                                                       String locale,
                                                       String category,
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java
index 0cc005d..b76ec5b 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java
@@ -97,13 +97,15 @@
     }
 
     
+    @Override
     public void release() {
         super.release();
         // tell JPA to close down
         this.strategy.release();
     }
 
-    
+
+    @Override
     public void shutdown() {
         // do our own shutdown first
         this.release();
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/pings/PingQueueTask.java b/app/src/main/java/org/apache/roller/weblogger/business/pings/PingQueueTask.java
index 7659ff5..ad7b13c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/pings/PingQueueTask.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/pings/PingQueueTask.java
@@ -78,6 +78,7 @@
         this.init(PingQueueTask.NAME);
     }
 
+    @Override
     public void init(String name) throws WebloggerException {
         super.init(name);
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/runnable/ContinuousWorkerThread.java b/app/src/main/java/org/apache/roller/weblogger/business/runnable/ContinuousWorkerThread.java
index 098d9f9..b99683f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/runnable/ContinuousWorkerThread.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/runnable/ContinuousWorkerThread.java
@@ -56,6 +56,7 @@
      *
      * If we ever get interrupted then we quit.
      */
+    @Override
     public void run() {
         
         mLogger.info(this.id+" Started.");
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/runnable/ResetHitCountsTask.java b/app/src/main/java/org/apache/roller/weblogger/business/runnable/ResetHitCountsTask.java
index 8ef02e4..e254abd 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/runnable/ResetHitCountsTask.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/runnable/ResetHitCountsTask.java
@@ -75,6 +75,7 @@
         this.init(ResetHitCountsTask.NAME);
     }
 
+    @Override
     public void init(String name) throws WebloggerException {
         super.init(name);
         
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/runnable/WorkerThread.java b/app/src/main/java/org/apache/roller/weblogger/business/runnable/WorkerThread.java
index 6675c0f..ae64d7a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/runnable/WorkerThread.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/runnable/WorkerThread.java
@@ -59,6 +59,7 @@
      *
      * We just execute the job we were given if it's non-null.
      */
+    @Override
     public void run() {
         
         // we only run once
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation.java b/app/src/main/java/org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation.java
index e1dce1c..b6cef10 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation.java
@@ -35,6 +35,7 @@
     private static Log mLogger =
             LogFactory.getFactory().getInstance(WriteToIndexOperation.class);
     
+    @Override
     public void run() {
         try {
             manager.getReadWriteLock().writeLock().lock();
diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/business/PlanetURLStrategy.java b/app/src/main/java/org/apache/roller/weblogger/planet/business/PlanetURLStrategy.java
index 367516b..2645bad 100644
--- a/app/src/main/java/org/apache/roller/weblogger/planet/business/PlanetURLStrategy.java
+++ b/app/src/main/java/org/apache/roller/weblogger/planet/business/PlanetURLStrategy.java
@@ -32,6 +32,7 @@
      * Get URL configured for Planet.
      * @param planet There's only one planet in Roller, so this is ignored.
      */
+    @Override
     public String getPlanetURL(String planet) {
         StringBuilder url = new StringBuilder();
         url.append(WebloggerRuntimeConfig.getProperty("site.absoluteurl"));
@@ -45,6 +46,7 @@
      * @param group   Handle of planet group (or null for default group).
      * @param pageNum Page number of results to return.
      */
+    @Override
     public String getPlanetGroupURL(String planet, String group, int pageNum) {
 
         StringBuilder url = new StringBuilder();
@@ -73,6 +75,7 @@
      * @param group Handle of planet group (or null for default group).
      * @param format  Feed format to be returned (ignored, currently only RSS is supported).
      */
+    @Override
     public String getPlanetGroupFeedURL(String planet, String group, String format) {
         
         StringBuilder url = new StringBuilder();
@@ -95,6 +98,7 @@
      * @param planet There's only one planet in Roller, so this is ignored.
      * @param group Handle of planet group.
      */
+    @Override
     public String getPlanetGroupOpmlURL(String planet, String group) {
         return null;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/tasks/SyncWebsitesTask.java b/app/src/main/java/org/apache/roller/weblogger/planet/tasks/SyncWebsitesTask.java
index 358e492..85f1985 100644
--- a/app/src/main/java/org/apache/roller/weblogger/planet/tasks/SyncWebsitesTask.java
+++ b/app/src/main/java/org/apache/roller/weblogger/planet/tasks/SyncWebsitesTask.java
@@ -90,6 +90,7 @@
         this.init(RefreshRollerPlanetTask.NAME);
     }
 
+    @Override
     public void init(String name) throws WebloggerException {
         super.init(name);
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java
index d110e69..d3f8ede 100644
--- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java
+++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java
@@ -64,6 +64,7 @@
     }
     
     
+    @Override
     public List<String> requiredGlobalPermissionActions() {
         return Collections.singletonList(GlobalPermission.ADMIN);
     }
@@ -97,7 +98,8 @@
         }
     }
 
-    
+
+    @Override
     public String execute() {
         return INPUT;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroupSubs.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroupSubs.java
index 26586d0..7d6ed54 100644
--- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroupSubs.java
+++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroupSubs.java
@@ -105,6 +105,7 @@
     /**
      * Populate page model and forward to subscription page
      */
+    @Override
     public String execute() {
         return LIST;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java
index ee3dff9..3140b97 100644
--- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java
+++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java
@@ -58,6 +58,7 @@
     /**
      * Show planet groups page.
      */
+    @Override
     public String execute() {
         return LIST;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java b/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java
index ed909a8..2c9ed1c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java
+++ b/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java
@@ -136,6 +136,7 @@
         return action1.equals(ADMIN) || (action1.equals(WEBLOG) && action2.equals(LOGIN));
     }
     
+    @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
         sb.append("GlobalPermission: ");
diff --git a/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogPermission.java b/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogPermission.java
index fa643d3..6126b54 100644
--- a/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogPermission.java
+++ b/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogPermission.java
@@ -115,6 +115,7 @@
         return false;
     }
     
+    @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
         sb.append("GlobalPermission: ");
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java
index 7d9f85f..3e2d544 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java
@@ -36,6 +36,7 @@
     /**
      * Setup Spring Security features.
      */
+    @Override
     protected void initializeSecurityFeatures(ServletContext context) { 
         // no need to setup Spring Security
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerContext.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerContext.java
index b4862dd..3946e75 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerContext.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerContext.java
@@ -93,6 +93,7 @@
     /**
      * Responds to app-init event and triggers startup procedures.
      */
+    @Override
     public void contextInitialized(ServletContextEvent sce) {
 
         // First, initialize everything that requires no database
@@ -194,6 +195,7 @@
     /**
      * Responds to app-destroy event and triggers shutdown sequence.
      */
+    @Override
     public void contextDestroyed(ServletContextEvent sce) {
         WebloggerFactory.getWeblogger().shutdown();
         // do we need a more generic mechanism for presentation layer shutdown?
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java
index 968845c..79e4c5e 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java
@@ -122,12 +122,14 @@
     
     
     /** Create session's Roller instance */
+    @Override
     public void sessionCreated(HttpSessionEvent se) {
         RollerSession rollerSession = new RollerSession();
         se.getSession().setAttribute(ROLLER_SESSION, rollerSession);
     }
-    
-    
+
+
+    @Override
     public void sessionDestroyed(HttpSessionEvent se) {
         clearSession(se);
     }
@@ -144,6 +146,7 @@
      * to call it when sessions are saved and then restored at some later
      * point in time.
      */
+    @Override
     public void sessionWillPassivate(HttpSessionEvent se) {
         clearSession(se);
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java
index 979b118..790e4b9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java
@@ -81,9 +81,11 @@
     }
     
     
+    @Override
     public void init(FilterConfig filterConfig) throws ServletException {
         context = filterConfig.getServletContext();
     }
-    
+
+    @Override
     public void destroy() {}    
 }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CharEncodingFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CharEncodingFilter.java
index ea01e3f..eae80f8 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CharEncodingFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/CharEncodingFilter.java
@@ -46,12 +46,14 @@
     /**
      * init
      */
+    @Override
     public void init(FilterConfig filterConfig) throws ServletException {
     }
     
     /**
      * destroy
      */
+    @Override
     public void destroy() {
     }
     
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/DebugFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/DebugFilter.java
index c2834be..263cd53 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/DebugFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/DebugFilter.java
@@ -69,10 +69,10 @@
         log.info("");
     }
     
-    
+    @Override
     public void destroy() {}
     
-    
+    @Override
     public void init(FilterConfig filterConfig) {}
     
 }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/IPBanFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/IPBanFilter.java
index 6caa1a6..2ceda14 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/IPBanFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/IPBanFilter.java
@@ -42,6 +42,7 @@
     private static Log log = LogFactory.getLog(IPBanFilter.class);
     
     
+    @Override
     public void init(FilterConfig filterConfig) throws ServletException {
         
         log.info("INIT IPBanFilter");
@@ -64,7 +65,7 @@
         }
     }
     
-    
+    @Override
     public void destroy() {}
     
 }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/InitFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/InitFilter.java
index 2ae29e7..294b151 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/InitFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/InitFilter.java
@@ -79,9 +79,11 @@
                 request.getRequestURI(), request.getRequestURL().toString());
     }
 
+    @Override
     public void init(FilterConfig filterConfig) throws ServletException {
     }
 
+    @Override
     public void destroy() {
     }
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilter.java
index 543c8ed..d96ad69 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/LoadSaltFilter.java
@@ -44,11 +44,11 @@
         chain.doFilter(request, response);
     }
  
-    //@Override
+    @Override
     public void init(FilterConfig filterConfig) throws ServletException {
     }
  
-    //@Override
+    @Override
     public void destroy() {
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java
index ab24515..354424c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java
@@ -68,8 +68,10 @@
     }
     
     
+    @Override
     public void init(FilterConfig filterConfig) throws ServletException {}
     
+    @Override
     public void destroy() {}
     
 }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/RoleAssignmentFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/RoleAssignmentFilter.java
index 410033e..d663b97 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/RoleAssignmentFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/RoleAssignmentFilter.java
@@ -56,9 +56,11 @@
     }
     
     
+    @Override
     public void init(FilterConfig filterConfig) throws ServletException {}
     
-    public void destroy() {}    
+    @Override
+    public void destroy() {}
 }
 
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilter.java
index a6ac2de..502aea6 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/filters/ValidateSaltFilter.java
@@ -74,6 +74,7 @@
         chain.doFilter(request, response);
     }
 
+    @Override
     public void init(FilterConfig filterConfig) throws ServletException {
 
         // Construct our list of ignored urls
@@ -84,6 +85,7 @@
         }
     }
 
+    @Override
     public void destroy() {
     }
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/RollerRememberMeServices.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/RollerRememberMeServices.java
index ec70518..ca765af 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/security/RollerRememberMeServices.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/security/RollerRememberMeServices.java
@@ -54,6 +54,7 @@
      *
      * If LDAP is enabled then a configurable dummy password is used in the calculation.
      */
+    @Override
     protected String makeTokenSignature(long tokenExpiryTime, String username, String password) {
 
         boolean usingLDAP = WebloggerConfig.getAuthMethod() == AuthMethod.LDAP;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.java
index 18f876e..543a20f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.java
@@ -57,6 +57,7 @@
     }
     
     
+    @Override
     protected void loadWeblogEntries(Date startDate, Date endDate, String catName) {
         try {
             WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -75,6 +76,7 @@
     }
     
     
+    @Override
     public String getContent(Date day) {
         String content = null;
         try {
@@ -136,6 +138,7 @@
      * @param alwaysURL        Always return a URL, never return null
      * @return URL for day, or null if no weblog entry on that day
      */
+    @Override
     public String computeUrl(Date day, boolean nextPrevMonthURL, boolean alwaysURL) {
         String url = null;
         // get the 8 char YYYYMMDD datestring for day, returns null
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java b/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java
index 0a5cf4a..a9d6f64 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/core/tags/calendar/CalendarTag.java
@@ -356,11 +356,13 @@
         return toString();
     }
     
+    @Override
     public int doStartTag() throws JspException {
         return doStartTag( new PrintWriter( pageContext.getOut(), true) );
     }
     
-    
+
+    @Override
     public int doEndTag() throws JspException {
         return doEndTag( new PrintWriter( pageContext.getOut(), true) );
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/RequestMappingFilter.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/RequestMappingFilter.java
index 153586f..18fe7ea 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/RequestMappingFilter.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/filters/RequestMappingFilter.java
@@ -49,6 +49,7 @@
     // list of RequestMappers that want to inspect the request
     private final List<RequestMapper> requestMappers = new ArrayList<RequestMapper>();
     
+    @Override
     public void init(FilterConfig filterConfig) {
         
         // lookup set of request mappers we are going to use
@@ -134,7 +135,8 @@
         log.debug("exiting");
     }
     
-    
+
+    @Override
     public void destroy() {}
     
 }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/FeedModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/FeedModel.java
index ab0d253..bf4eaed 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/FeedModel.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/FeedModel.java
@@ -159,6 +159,7 @@
             this.feedRequest = feedRequest;
         }
         
+        @Override
         protected String createURL(String url, Map params) {
             List tags = feedRequest.getTags();
             if(tags != null && tags.size() > 0) {
@@ -174,6 +175,7 @@
             return super.createURL(url, params);
         }
         
+        @Override
         public String getUrl() {
             return createURL(super.getUrl(), new HashMap());
         }
@@ -191,6 +193,7 @@
             this.feedRequest = feedRequest;
         }
         
+        @Override
         protected String createURL(String url, Map params) {
             List tags = feedRequest.getTags();
             if(tags != null && tags.size() > 0) {
@@ -206,6 +209,7 @@
             return super.createURL(url, params);
         }
         
+        @Override
         public String getUrl() {
             return createURL(super.getUrl(), new HashMap());
         }
@@ -223,6 +227,7 @@
             this.feedRequest = feedRequest;
         }
         
+        @Override
         protected String createURL(String url, Map params) {
             List tags = feedRequest.getTags();
             if(tags != null && tags.size() > 0) {
@@ -238,6 +243,7 @@
             return super.createURL(url, params);
         }
         
+        @Override
         public String getUrl() {
             return createURL(super.getUrl(), new HashMap());
         }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PreviewPageModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PreviewPageModel.java
index f627c13..f9873db 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PreviewPageModel.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PreviewPageModel.java
@@ -42,6 +42,7 @@
     /** 
      * Init model.
      */
+    @Override
     public void init(Map initData) throws WebloggerException {
         
         // we expect the init data to contain a weblogRequest object
@@ -69,12 +70,14 @@
     }    
     
     
+    @Override
     public boolean isPermalink() {
         return (previewRequest.getPreviewEntry() != null ||
                 previewRequest.getWeblogAnchor() != null);
     }
     
     
+    @Override
     public WeblogEntryWrapper getWeblogEntry() {
         
         if(previewRequest.getPreviewEntry() != null ||
@@ -90,6 +93,7 @@
      * pager for preview pages which can display things that we don't want
      * available on the "live" weblog, like DRAFT entries.
      */
+    @Override
     public WeblogEntriesPager getWeblogEntriesPager(String catArgument) {
         
         String anchor = previewRequest.getPreviewEntry();
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PreviewURLModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PreviewURLModel.java
index 3039000..f2392b6 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PreviewURLModel.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/PreviewURLModel.java
@@ -37,6 +37,7 @@
     private URLStrategy urlStrategy = null;
     
     
+    @Override
     public void init(Map initData) throws WebloggerException {
         
         // need a weblog request so that we can know the weblog and locale
@@ -71,6 +72,7 @@
      * knowing what theme you are previewing and thus couldn't find the
      * resources for that theme.
      */
+    @Override
     public String resource(String filePath) {
         return urlStrategy.getWeblogResourceURL(weblog, filePath, true);
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java
index a4c9470..1796b3c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java
@@ -78,6 +78,7 @@
 	private boolean websiteSpecificSearch = true;
 	private String errorMessage = null;
 
+	@Override
 	public void init(Map initData) throws WebloggerException {
 
 		// we expect the init data to contain a searchRequest object
@@ -152,16 +153,19 @@
 	/**
 	 * Is this page showing search results?
 	 */
+	@Override
 	public boolean isSearchResults() {
 		return true;
 	}
 
 	// override page model and return search results pager
+	@Override
 	public WeblogEntriesPager getWeblogEntriesPager() {
 		return pager;
 	}
 
 	// override page model and return search results pager
+	@Override
 	public WeblogEntriesPager getWeblogEntriesPager(String category) {
 		return pager;
 	}
@@ -285,6 +289,7 @@
 		return searchRequest.getWeblogCategoryName();
 	}
 
+	@Override
 	public WeblogCategoryWrapper getWeblogCategory() {
 		if (searchRequest.getWeblogCategory() != null) {
 			return WeblogCategoryWrapper.wrap(
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/CommentsPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/CommentsPager.java
index b706154..1ab1402 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/CommentsPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/CommentsPager.java
@@ -126,6 +126,7 @@
     }
     
     
+    @Override
     public boolean hasMoreItems() {
         return more;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/MediaFilesPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/MediaFilesPager.java
index 151f0c3..2fc48cf 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/MediaFilesPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/MediaFilesPager.java
@@ -80,6 +80,7 @@
     }
     
     
+    @Override
     public boolean hasMoreItems() {
         return false;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/PlanetEntriesPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/PlanetEntriesPager.java
index fdaaf72..b8d91bc 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/PlanetEntriesPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/PlanetEntriesPager.java
@@ -125,7 +125,8 @@
         return entries;
     }
     
-    
+
+    @Override
     public boolean hasMoreItems() {
         return more;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/SearchResultsFeedPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/SearchResultsFeedPager.java
index 5599d40..4b97e94 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/SearchResultsFeedPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/SearchResultsFeedPager.java
@@ -84,18 +84,22 @@
         return this.entries;
     }
     
+    @Override
     public boolean hasMoreItems() {
         return this.moreResults;
     }
     
+    @Override
     public String getHomeLink() {
         return urlStrategy.getWeblogURL(weblog, weblog.getLocale(), false);
     }
 
+    @Override
     public String getHomeName() {
         return messageUtils.getString("searchPager.home");
     }  
     
+    @Override
     protected String createURL(String url, Map params) {
         String category = feedRequest.getWeblogCategoryName();
         if(category != null && category.trim().length() > 0) {
@@ -115,6 +119,7 @@
         return super.createURL(url, params);
     }
     
+    @Override
     public String getUrl() {
         return createURL(url, new HashMap());
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/UsersPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/UsersPager.java
index 424a51f..6d578ab 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/UsersPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/UsersPager.java
@@ -85,6 +85,7 @@
     }
     
     
+    @Override
     public String getNextLink() {
         // need to add letter param if it exists
         if(letter != null) {
@@ -102,6 +103,7 @@
     }
     
     
+    @Override
     public String getPrevLink() {
         // need to add letter param if it exists
         if(letter != null) {
@@ -157,6 +159,7 @@
     }
     
     
+    @Override
     public boolean hasMoreItems() {
         return more;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesDayPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesDayPager.java
index 13fbe94..5f57972 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesDayPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesDayPager.java
@@ -159,16 +159,19 @@
     }
     
     
+    @Override
     public String getHomeLink() {
         return createURL(0, 0, weblog, locale, pageLink, null, null, catName, tags);
     }
     
     
+    @Override
     public String getHomeName() {
         return messageUtils.getString("weblogEntriesPager.day.home");
     }
     
     
+    @Override
     public String getNextLink() {
         if (more) {
             return createURL(page, 1, weblog, locale, pageLink, null, dateString, catName, tags);
@@ -177,6 +180,7 @@
     }
     
     
+    @Override
     public String getNextName() {
         if (getNextLink() != null) {
             return messageUtils.getString("weblogEntriesPager.day.next", new Object[] {dayFormat.format(day)});
@@ -185,6 +189,7 @@
     }
     
     
+    @Override
     public String getPrevLink() {
         if (page > 0) {
             return createURL(page, -1, weblog, locale, pageLink, null, dateString, catName, tags);
@@ -193,6 +198,7 @@
     }
     
     
+    @Override
     public String getPrevName() {
         if (getPrevLink() != null) {
             return messageUtils.getString("weblogEntriesPager.day.prev", new Object[] {dayFormat.format(day)});
@@ -200,7 +206,8 @@
         return null;
     }
     
-    
+
+    @Override
     public String getNextCollectionLink() {
         if (nextDay != null) {
             String next = DateUtil.format8chars(nextDay, weblog.getTimeZoneInstance());
@@ -210,6 +217,7 @@
     }
     
     
+    @Override
     public String getNextCollectionName() {
         if (nextDay != null) {
             return messageUtils.getString("weblogEntriesPager.day.nextCollection", new Object[] {dayFormat.format(nextDay)});
@@ -218,6 +226,7 @@
     }
     
     
+    @Override
     public String getPrevCollectionLink() {
         if (prevDay != null) {
             String prev = DateUtil.format8chars(prevDay, weblog.getTimeZoneInstance());
@@ -227,6 +236,7 @@
     }
     
     
+    @Override
     public String getPrevCollectionName() {
         if (prevDay != null) {
             return messageUtils.getString("weblogEntriesPager.day.prevCollection", new Object[] {dayFormat.format(prevDay)});
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesLatestPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesLatestPager.java
index 82d8b7e..2e7a257 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesLatestPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesLatestPager.java
@@ -110,6 +110,7 @@
     }
     
     
+    @Override
     public boolean hasMoreEntries() {
         return more;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesListPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesListPager.java
index d9b5798..1fe3183 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesListPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesListPager.java
@@ -140,6 +140,7 @@
     }
     
     
+    @Override
     public boolean hasMoreItems() {
         return more;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesMonthPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesMonthPager.java
index f0cf037..3979761 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesMonthPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesMonthPager.java
@@ -147,16 +147,19 @@
     }
     
     
+    @Override
     public String getHomeLink() {
         return createURL(0, 0, weblog, locale, pageLink, null, null, catName, tags);
     }
     
     
+    @Override
     public String getHomeName() {
         return messageUtils.getString("weblogEntriesPager.month.home");
     }
     
     
+    @Override
     public String getNextLink() {
         if (more) {
             return createURL(page, 1, weblog, locale, pageLink, null, dateString, catName, tags);
@@ -165,6 +168,7 @@
     }
     
     
+    @Override
     public String getNextName() {
         if (getNextLink() != null) {
             return messageUtils.getString("weblogEntriesPager.month.next", new Object[] {monthFormat.format(month)});
@@ -173,6 +177,7 @@
     }
     
     
+    @Override
     public String getPrevLink() {
         if (offset > 0) {
             return createURL(page, -1, weblog, locale, pageLink, null, dateString, catName, tags);
@@ -181,6 +186,7 @@
     }
     
     
+    @Override
     public String getPrevName() {
         if (getPrevLink() != null) {
             return messageUtils.getString("weblogEntriesPager.month.prev", new Object[] {monthFormat.format(month)});
@@ -189,6 +195,7 @@
     }
     
     
+    @Override
     public String getNextCollectionLink() {
         if (nextMonth != null) {
             String next = DateUtil.format6chars(nextMonth, weblog.getTimeZoneInstance());
@@ -198,6 +205,7 @@
     }
     
     
+    @Override
     public String getNextCollectionName() {
         if (nextMonth != null) {
             return messageUtils.getString("weblogEntriesPager.month.nextCollection", new Object[] {monthFormat.format(nextMonth)});
@@ -205,7 +213,8 @@
         return null;
     }
     
-    
+
+    @Override
     public String getPrevCollectionLink() {
         if (prevMonth != null) {
             String prev = DateUtil.format6chars(prevMonth, weblog.getTimeZoneInstance());
@@ -215,6 +224,7 @@
     }
     
     
+    @Override
     public String getPrevCollectionName() {
         if (prevMonth != null) {
             return messageUtils.getString("weblogEntriesPager.month.prevCollection", new Object[] {monthFormat.format(prevMonth)});
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesPermalinkPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesPermalinkPager.java
index d7bfa3d..79f1613 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesPermalinkPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesPermalinkPager.java
@@ -90,16 +90,19 @@
     }
     
     
+    @Override
     public String getHomeLink() {
         return createURL(0, 0, weblog, locale, pageLink, null, dateString, catName, tags);
     }
     
     
+    @Override
     public String getHomeName() {
         return messageUtils.getString("weblogEntriesPager.single.home");
     }
     
     
+    @Override
     public String getNextLink() {
         if (getNextEntry() != null) {
             return createURL(0, 0, weblog, locale, pageLink, nextEntry.getAnchor(), dateString, catName, tags);
@@ -108,6 +111,7 @@
     }
     
     
+    @Override
     public String getNextName() {
         if (getNextEntry() != null) {
             String title = Utilities.truncateNicely(getNextEntry().getTitle(), 15, 20, "...");
@@ -117,6 +121,7 @@
     }
     
     
+    @Override
     public String getPrevLink() {
         if (getPrevEntry() != null) {
             return createURL(0, 0, weblog, locale, pageLink, prevEntry.getAnchor(), dateString, catName, tags);
@@ -125,6 +130,7 @@
     }
     
     
+    @Override
     public String getPrevName() {
         if (getPrevEntry() != null) {
             String title = Utilities.truncateNicely(getPrevEntry().getTitle(), 15, 20, "...");
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesPreviewPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesPreviewPager.java
index 17897b4..118430d 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesPreviewPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesPreviewPager.java
@@ -61,6 +61,7 @@
     }
     
     
+    @Override
     public Map getEntries() {
         if (entries == null) {
             try {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogsPager.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogsPager.java
index a3339ae..82d2ede 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogsPager.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/pagers/WeblogsPager.java
@@ -90,6 +90,7 @@
     }
     
     
+    @Override
     public String getNextLink() {
         // need to add letter param if it exists
         if(letter != null) {
@@ -107,6 +108,7 @@
     }
     
     
+    @Override
     public String getPrevLink() {
         // need to add letter param if it exists
         if(letter != null) {
@@ -169,6 +171,7 @@
     }
     
     
+    @Override
     public boolean hasMoreItems() {
         return more;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentAuthenticatorServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentAuthenticatorServlet.java
index 09672b8..b54836a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentAuthenticatorServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/CommentAuthenticatorServlet.java
@@ -51,6 +51,7 @@
      *
      * We only handle get requests.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
 
@@ -69,6 +70,7 @@
     /** 
      * Initialization.
      */
+    @Override
     public void init(ServletConfig config) throws ServletException {
         
         super.init(config);
@@ -90,6 +92,7 @@
     /** 
      * Destruction.
      */
+    @Override
     public void destroy() {}
     
 }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java
index a701810..5516399 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java
@@ -64,6 +64,7 @@
     /**
      * Init method for this servlet
      */
+    @Override
     public void init(ServletConfig servletConfig) throws ServletException {
 
         super.init(servletConfig);
@@ -81,6 +82,7 @@
     /**
      * Handle GET requests for weblog feeds.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java
index eb3356d..713e4c2 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java
@@ -50,6 +50,7 @@
 
     private static Log log = LogFactory.getLog(MediaResourceServlet.class);
 
+    @Override
     public void init(ServletConfig config) throws ServletException {
 
         super.init(config);
@@ -60,6 +61,7 @@
     /**
      * Handles requests for user uploaded media file resources.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java
index 7be6b92..bffffb9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PageServlet.java
@@ -83,6 +83,7 @@
     /**
      * Init method for this servlet
      */
+    @Override
     public void init(ServletConfig servletConfig) throws ServletException {
 
         super.init(servletConfig);
@@ -128,6 +129,7 @@
     /**
      * Handle GET requests for weblog pages.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
@@ -553,6 +555,7 @@
      * want to revisit this approach in the future and see if we can do this in
      * a different way, but for now this is the easy way.
      */
+    @Override
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PlanetFeedServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PlanetFeedServlet.java
index 45f0668..6494e24 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PlanetFeedServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PlanetFeedServlet.java
@@ -60,6 +60,7 @@
     /**
      * Init method for this servlet
      */
+    @Override
     public void init(ServletConfig servletConfig) throws ServletException {
 
         super.init(servletConfig);
@@ -72,6 +73,7 @@
     /**
      * Handle GET requests for weblog pages.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewResourceServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewResourceServlet.java
index eb85f0e..d0f6a8f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewResourceServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewResourceServlet.java
@@ -54,6 +54,7 @@
 
     private ServletContext context = null;
 
+    @Override
     public void init(ServletConfig config) throws ServletException {
 
         super.init(config);
@@ -66,6 +67,7 @@
     /**
      * Handles requests for user uploaded resources.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewServlet.java
index 0405c63..54dca83 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/PreviewServlet.java
@@ -65,6 +65,7 @@
     /**
      * Init method for this servlet
      */
+    @Override
     public void init(ServletConfig servletConfig) throws ServletException {
         
         super.init(servletConfig);
@@ -76,6 +77,7 @@
     /**
      * Handle GET requests for weblog pages.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/RSDServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/RSDServlet.java
index ce7f5e4..5c154ee 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/RSDServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/RSDServlet.java
@@ -58,6 +58,7 @@
     /**
      * Init method for this servlet
      */
+    @Override
     public void init(ServletConfig servletConfig) throws ServletException {
 
         super.init(servletConfig);
@@ -68,6 +69,7 @@
     /**
      * Handle GET requests for weblog pages.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/ResourceServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/ResourceServlet.java
index ebf918d..e4f1f38 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/ResourceServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/ResourceServlet.java
@@ -54,6 +54,7 @@
 
     private ServletContext context = null;
 
+    @Override
     public void init(ServletConfig config) throws ServletException {
 
         super.init(config);
@@ -66,6 +67,7 @@
     /**
      * Handles requests for user uploaded resources.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java
index c1b3289..79c441f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java
@@ -67,6 +67,7 @@
     /**
      * Init method for this servlet
      */
+    @Override
     public void init(ServletConfig servletConfig) throws ServletException {
 
         super.init(servletConfig);
@@ -80,6 +81,7 @@
     /**
      * Handle GET requests for weblog pages.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java
index dcd0303..2b43a4e 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/servlets/TrackbackServlet.java
@@ -59,6 +59,7 @@
     private CommentValidationManager commentValidationManager = null;
     
 
+    @Override
     public void init(ServletConfig config) throws ServletException {
         commentValidationManager = new CommentValidationManager();
         
@@ -72,6 +73,7 @@
      *
      * The TrackbackServlet does not support GET requests, it's a 404.
      */
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws IOException, ServletException {
         
@@ -84,6 +86,7 @@
      *
      * Here we handle incoming trackback posts.
      */
+    @Override
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java
index facdd08..ee94984 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java
@@ -90,6 +90,7 @@
         this.resourceId = resourceId;
     }
             
+    @Override
     protected boolean isLocale(String potentialLocale) {
         // We don't support locales in the resource Servlet so we've got to 
         // keep parent from treating upload sub-directory name as a locale.
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewRequest.java
index 3fb2280..5df599d 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewRequest.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewRequest.java
@@ -76,6 +76,7 @@
     }
     
     
+    @Override
     boolean isValidDestination(String servlet) {
         return (servlet != null && PREVIEW_SERVLET.equals(servlet));
     }
@@ -90,11 +91,13 @@
     }
     
     // override so that previews never show login status
+    @Override
     public String getAuthenticUser() {
         return null;
     }
     
     // override so that previews never show login status
+    @Override
     public boolean isLoggedIn() {
         return false;
     }
@@ -128,6 +131,7 @@
     }
     
     // if we have a preview entry we would prefer to return that
+    @Override
     public WeblogEntry getWeblogEntry() {
         
         if(weblogEntry == null && 
@@ -149,6 +153,7 @@
         return weblogEntry;
     }
     
+    @Override
     public void setWeblogEntry(WeblogEntry weblogEntry) {
         this.weblogEntry = weblogEntry;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewResourceRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewResourceRequest.java
index 1d4c40e..d689d2c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewResourceRequest.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogPreviewResourceRequest.java
@@ -71,11 +71,13 @@
     }
     
     // override so that previews never show login status
+    @Override
     public String getAuthenticUser() {
         return null;
     }
     
     // override so that previews never show login status
+    @Override
     public boolean isLoggedIn() {
         return false;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogResourceRequest.java b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogResourceRequest.java
index 0cc52f4..c91c264 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogResourceRequest.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/rendering/util/WeblogResourceRequest.java
@@ -96,6 +96,7 @@
         this.resourcePath = resourcePath;
     }
             
+    @Override
     protected boolean isLocale(String potentialLocale) {
         // We don't support locales in the resource Servlet so we've got to 
         // keep parent from treating upload sub-directory name as a locale.
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CacheInfo.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CacheInfo.java
index e75f266..920ab6c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CacheInfo.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CacheInfo.java
@@ -47,21 +47,25 @@
     }
     
     
+    @Override
     public List<String> requiredGlobalPermissionActions() {
         return Collections.singletonList(GlobalPermission.ADMIN);
     }
     
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
     
     
+    @Override
     public void myPrepare() {
         Map cacheStats = CacheManager.getStats();
         setStats(cacheStats);
     }
     
     
+    @Override
     public String execute() {
         return SUCCESS;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java
index 750a8f1..5beb89a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java
@@ -85,11 +85,13 @@
     
     
     // admin role required
+    @Override
     public List<String> requiredGlobalPermissionActions() {
         return Collections.singletonList(GlobalPermission.ADMIN);
     }
     
     // no weblog required
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
@@ -159,6 +161,7 @@
     
     
     // show comment management page
+    @Override
     public String execute() {
         
         // load list of comments from query
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
index fb7dd4b..148dbc9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
@@ -52,10 +52,12 @@
     }
 
     // no weblog required
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
 
+    @Override
     public void myPrepare() {
         PingTargetManager pingTargetMgr = WebloggerFactory.getWeblogger().getPingTargetManager();
 
@@ -80,6 +82,7 @@
     /**
      * Save ping target.
      */
+    @Override
     public String execute() {
         myValidate();
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargets.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargets.java
index fa7529a..c34fbc1 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargets.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargets.java
@@ -55,6 +55,7 @@
     private String pingTargetId = null;
 
     // no weblog required
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
@@ -70,6 +71,7 @@
     }
 
     // prepare method needs to set ping targets list
+    @Override
     public void myPrepare() {
 
         // load list of ping targets
@@ -89,6 +91,7 @@
     /**
      * Display the ping targets.
      */
+    @Override
     public String execute() {
         return LIST;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserAdmin.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserAdmin.java
index 29b0e24..53c0daa 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserAdmin.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserAdmin.java
@@ -44,17 +44,20 @@
 
     private AuthMethod authMethod = WebloggerConfig.getAuthMethod();
 
-    // admin role required    
+    // admin role required
+    @Override
     public List<String> requiredGlobalPermissionActions() {
         return Collections.singletonList(GlobalPermission.ADMIN);
     }
     
     // no weblog required
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
 
     // show user admin search page
+    @Override
     public String execute() {
         return SUCCESS;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
index 2cb4399..73107b9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
@@ -69,16 +69,19 @@
     }
 
     // admin role required
+    @Override
     public List<String> requiredGlobalPermissionActions() {
         return Collections.singletonList(GlobalPermission.ADMIN);
     }
     
     // no weblog required
+    @Override
     public boolean isWeblogRequired() { 
         return false;
     }
 
     // prepare for action by loading user object we are modifying
+    @Override
     public void myPrepare() {
 
         if (isAdd()) {
@@ -109,6 +112,7 @@
      * Show admin user edit page.
      */
     @SkipValidation
+    @Override
     public String execute() {
         if (isAdd()) {
             // initial user create
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/CommentDataServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/CommentDataServlet.java
index 75cb170..54f619a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/CommentDataServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/CommentDataServlet.java
@@ -49,7 +49,8 @@
      * content "hi there" will be represented as:
      *    {id : "3454545346", content : "hi there"}
      */
-    public void doGet(HttpServletRequest request, 
+    @Override
+    public void doGet(HttpServletRequest request,
                       HttpServletResponse response)
             throws ServletException, IOException {
         
@@ -88,6 +89,7 @@
      * Accepts request with comment 'id' parameter and replaces specified
      * comment's content with the content in the request.
      */
+    @Override
     public void doPut(HttpServletRequest request,
                       HttpServletResponse response)
             throws ServletException, IOException {
@@ -132,6 +134,7 @@
         }
     }
 
+    @Override
     public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
             throws ServletException, IOException {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/ThemeDataServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/ThemeDataServlet.java
index 97bff15..2f4b87c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/ThemeDataServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/ThemeDataServlet.java
@@ -42,12 +42,14 @@
  */
 public class ThemeDataServlet extends HttpServlet {
 
+    @Override
     protected void doPost(
             HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         doGet(request, response);
     }
 
+    @Override
     public void doGet(
             HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/UserDataServlet.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/UserDataServlet.java
index c9d7056..b3739ce 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/UserDataServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/ajax/UserDataServlet.java
@@ -56,6 +56,7 @@
     private static final long serialVersionUID = -7596671919118637768L;
     private static final int MAX_LENGTH = 50;
 
+    @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java
index 8795442..e810195 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java
@@ -57,12 +57,14 @@
     
     
     // override default security, we do not require an action weblog
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
     
     
     @SkipValidation
+    @Override
     public String execute() {
 
         // check if blog administrator has enabled creation of new blogs
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
index 12de267..7ad0522 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
@@ -55,15 +55,18 @@
     private String databaseName = "Unknown";
 
 
+    @Override
     public boolean isUserRequired() {
         return false;
     }
 
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
 
 
+    @Override
     public String execute() {
 
         if (WebloggerFactory.isBootstrapped()) {
@@ -208,6 +211,7 @@
         return name;
     }
 
+    @Override
     public String getProp(String key) {
         // Static config only, we don't have database yet
         String value = WebloggerConfig.getProperty(key);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Login.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Login.java
index f0fbe76..0cd3a83 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Login.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Login.java
@@ -46,11 +46,13 @@
     }
 
     // override default security, we do not require an authenticated user
+    @Override
     public boolean isUserRequired() {
         return false;
     }
     
     // override default security, we do not require an action weblog
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
@@ -59,6 +61,7 @@
         return authMethod.name();
     }
 
+    @Override
     public String execute() {
         
         // set action error message if there was login error
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/MainMenu.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/MainMenu.java
index 9378018..566db7f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/MainMenu.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/MainMenu.java
@@ -50,11 +50,13 @@
     
     
     // override default security, we do not require an action weblog
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
     
     
+    @Override
     public String execute() {
         
         return SUCCESS;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java
index 6b6fa51..52546b6 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java
@@ -45,12 +45,14 @@
     
     
     // override default security, we do not require an action weblog
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
 
 
     @SkipValidation
+    @Override
     public String execute() {
         boolean flush = false;
         
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Profile.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Profile.java
index 37e01d5..8f6e60f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Profile.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Profile.java
@@ -48,12 +48,14 @@
     
     
     // override default security, we do not require an action weblog
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
 
 
     @SkipValidation
+    @Override
     public String execute() {
         User ud = getAuthenticatedUser();
         // load up the form from the users existing profile data
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
index baadc5e..7561ce9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
@@ -72,11 +72,13 @@
     }
     
     // override default security, we do not require an authenticated user
+    @Override
     public boolean isUserRequired() {
         return false;
     }
     
     // override default security, we do not require an action weblog
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
@@ -86,6 +88,7 @@
     }
 
     @SkipValidation
+    @Override
     public String execute() {
         
         // if registration is disabled, then don't allow registration
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Setup.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Setup.java
index 0cd64fb..00ab7e1 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Setup.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Setup.java
@@ -62,6 +62,7 @@
         return false;
     }
 
+    @Override
     public String execute() {
         
         try {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
index c3e5642..9e55650 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
@@ -58,6 +58,7 @@
         this.pageTitle = pageTitle;
     }
 
+    @Override
     public void myPrepare() {
         if (StringUtils.isEmpty(bean.getId())) {
             // Create and initialize new, not-yet-saved WeblogBookmark
@@ -85,6 +86,7 @@
     
     
     @SkipValidation
+    @Override
     public String execute() {
         if (!isAdd()) {
             // load bean with database values during initial load
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java
index cc86b44..457cefc 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java
@@ -67,6 +67,7 @@
         this.pageTitle = "bookmarksForm.rootTitle";
     }
 
+    @Override
     public void myPrepare() {
         try {
             BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
@@ -86,6 +87,7 @@
     /**
      * Present the bookmarks available in the folder specified by the request.
      */
+    @Override
     public String execute() {
 
         // build list of folders that the user can navigate to
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java
index b225cc2..e85a053 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java
@@ -65,6 +65,7 @@
     /**
      * Request to import bookmarks
      */
+    @Override
     public String execute() {
         return INPUT;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java
index dd9389f..1716d1a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java
@@ -52,6 +52,7 @@
 		return Collections.singletonList(WeblogPermission.POST);
 	}
 
+	@Override
 	public String execute() {
 		try {
             WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
index 17dc99a..aef58ec 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
@@ -62,6 +62,7 @@
     }
     
     
+    @Override
     public void myPrepare() {
 
         if ( isAdd() ) {
@@ -84,6 +85,7 @@
      * Show category form.
      */
     @SkipValidation
+    @Override
     public String execute() {
         if (!isAdd()) {
             // make sure bean is properly loaded from pojo data
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
index 206e89b..572e8f9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
@@ -68,6 +68,7 @@
     }
     
     
+    @Override
     public void myPrepare() {
         try {
             WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -83,6 +84,7 @@
     /**
      * Display the remove template confirmation.
      */
+    @Override
     public String execute() {
         try {
             // Build list of categories that the removed category's blog entries (if any) can be moved to
@@ -136,6 +138,7 @@
      * 
      * @return the string
      */
+    @Override
     public String cancel() {
         return CANCEL;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
index 3aee5df..331530f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
@@ -159,6 +159,7 @@
             .getActionURL("comments", "/roller-ui/authoring", getActionWeblog().getHandle(), params, false);
     }
 
+    @Override
     public String execute() {
 
         // load list of comments from query
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Entries.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Entries.java
index 9f15e2d..040c2a5 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Entries.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Entries.java
@@ -76,6 +76,7 @@
     }
     
     
+    @Override
     public String execute() {
         
         if (log.isDebugEnabled()) {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAddWithMediaFile.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAddWithMediaFile.java
index 02a3677..40c67e3 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAddWithMediaFile.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAddWithMediaFile.java
@@ -56,6 +56,7 @@
      * @return String The result of the action.
      */
     @SkipValidation
+    @Override
     public String execute() {
         MediaFileManager manager =
              WebloggerFactory.getWeblogger().getMediaFileManager();
@@ -134,6 +135,7 @@
     /**
      * @return the weblog
      */
+    @Override
     public String getWeblog() {
         return weblog;
     }
@@ -141,6 +143,7 @@
     /**
      * @param weblog the weblog to set
      */
+    @Override
     public void setWeblog(String weblog) {
         this.weblog = weblog;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
index 9ffcb2e..50bfb47 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
@@ -91,6 +91,7 @@
         return Collections.singletonList(WeblogPermission.EDIT_DRAFT);
     }
 
+    @Override
     public void myPrepare() {
         if (getBean().getId() == null) {
             // Create and initialize new, not-yet-saved Weblog Entry
@@ -118,6 +119,7 @@
      * @return String The result of the action.
      */
     @SkipValidation
+    @Override
     public String execute() {
         if (getActionName().equals("entryEdit")) {
             // load bean with pojo data
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java
index 64266ed..5555f70 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java
@@ -53,6 +53,7 @@
         this.pageTitle = "weblogEdit.deleteEntry";
     }
 
+    @Override
     public void myPrepare() {
         if (getRemoveId() != null) {
             try {
@@ -65,6 +66,7 @@
         }
     }
 
+    @Override
     public String execute() {
         return INPUT;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
index c3658c2..91dc0ae 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
@@ -64,6 +64,7 @@
     }
 
     // load folder to edit
+    @Override
     public void myPrepare() {
         if (StringUtils.isEmpty(bean.getId())) {
             // Create and initialize new folder but don't save yet
@@ -89,6 +90,7 @@
      * Show folder edit page.
      */
     @SkipValidation
+    @Override
     public String execute() {
         if (!isAdd()) {
             // load bean with database values during initial load
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Maintenance.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Maintenance.java
index 8b57dd9..63c9443 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Maintenance.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Maintenance.java
@@ -45,6 +45,7 @@
         this.pageTitle = "maintenance.title";
     }
 
+    @Override
     public String execute() {
         return SUCCESS;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java
index d13247d..2e18fff 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java
@@ -74,6 +74,7 @@
     /**
      * Prepares action class
      */
+    @Override
     public void myPrepare() {
         log.debug("Into myprepare");
         refreshAllDirectories();
@@ -116,6 +117,7 @@
      * @return String The result of the action.
      */
     @SkipValidation
+    @Override
     public String execute() {
         return INPUT;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
index 810648e..76ff2db 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
@@ -61,6 +61,7 @@
     /**
      * Prepares edit action.
      */
+    @Override
     public void myPrepare() {
         refreshAllDirectories();
         try {
@@ -90,6 +91,7 @@
      * @return String The result of the action.
      */
     @SkipValidation
+    @Override
     public String execute() {
         MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
         try {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageChooser.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageChooser.java
index 399d39d..f023021 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageChooser.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageChooser.java
@@ -59,6 +59,7 @@
     /**
      * Prepares view action
      */
+    @Override
     public void myPrepare() {
         refreshAllDirectories();
     }
@@ -75,6 +76,7 @@
      * @return String The result of the action.
      */
     @SkipValidation
+    @Override
     public String execute() {
         MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
         try {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageDim.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageDim.java
index df5d2e7..67b91e5 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageDim.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageDim.java
@@ -46,6 +46,7 @@
      * @return String The result of the action.
      */
     @SkipValidation
+    @Override
     public String execute() {
         try {
             MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
index f6801f1..c277a36 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
@@ -89,6 +89,7 @@
     /**
      * Prepares view action
      */
+    @Override
     public void myPrepare() {
 
         if (SIZE_FILTER_TYPES == null) {
@@ -193,6 +194,7 @@
      * @return String The result of the action.
      */
     @SkipValidation
+    @Override
     public String execute() {
         MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
         try {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MemberResign.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MemberResign.java
index 9f01f31..3d7c997 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MemberResign.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MemberResign.java
@@ -48,6 +48,7 @@
         return Collections.singletonList(WeblogPermission.EDIT_DRAFT);
     }
 
+    @Override
     public boolean isWeblogRequired() {
         return false;
     }
@@ -55,6 +56,7 @@
     /**
      * Show member resign confirmation
      */
+    @Override
     public String execute() {
         return INPUT;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java
index ee89d9a..f2f2b7f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java
@@ -58,6 +58,7 @@
         this.pageTitle = "memberPermissions.title";
     }
     
+    @Override
     public String execute() {
         log.debug("Showing weblog members page");
         return LIST;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MembersInvite.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MembersInvite.java
index 46104b8..6d589f9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MembersInvite.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MembersInvite.java
@@ -56,6 +56,7 @@
         this.pageTitle = "inviteMember.title";
     }
 
+    @Override
     public String execute() {
         
         // if group blogging is disabled then you can't change permissions
@@ -157,6 +158,7 @@
      * 
      * @return the string
      */
+    @Override
     public String cancel() {
         return CANCEL;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Pings.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Pings.java
index 737a649..7aadf7d 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Pings.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Pings.java
@@ -75,6 +75,7 @@
     }
     
     
+    @Override
     public void myPrepare() {
         
         PingTargetManager pingTargetMgr = WebloggerFactory.getWeblogger().getPingTargetManager();
@@ -101,6 +102,7 @@
     /*
      * Display the common ping targets with page
      */
+    @Override
     public String execute() {
         
         // load map of enabled auto pings
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/StylesheetEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/StylesheetEdit.java
index ce7956a..68da44e 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/StylesheetEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/StylesheetEdit.java
@@ -90,6 +90,7 @@
     /**
      * Show stylesheet edit page.
      */
+    @Override
     public String execute() {
 
         if (template != null) {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateEdit.java
index 4642808..83ad4fc 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateEdit.java
@@ -55,6 +55,7 @@
         this.pageTitle = "pagesForm.title";
     }
 
+    @Override
     public void myPrepare() {
         try {
             setTemplate(WebloggerFactory.getWeblogger().getWeblogManager().getTemplate(getBean().getId()));
@@ -68,6 +69,7 @@
      * Show template edit page.
      */
     @SkipValidation
+    @Override
     public String execute() {
         try {
             if (getTemplate() == null) {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateRemove.java
index 7446826..80ae5af 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateRemove.java
@@ -53,6 +53,7 @@
         this.pageTitle = "editPages.title.removeOK";
     }
 
+    @Override
     public void myPrepare() {
         if (StringUtils.isNotEmpty(getRemoveId())) {
             try {
@@ -68,6 +69,7 @@
     /**
      * Display the remove template confirmation.
      */
+    @Override
     public String execute() {
         return "confirm";
     }
@@ -127,6 +129,7 @@
     }
 
 
+    @Override
     public String cancel() {
         return CANCEL;
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Templates.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Templates.java
index 2621d2f..ff92a8a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Templates.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Templates.java
@@ -64,6 +64,7 @@
         this.pageTitle = "pagesForm.title";
     }
 
+    @Override
     public String execute() {
 
         // query for templates list
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
index c603fdb..bf5a527 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
@@ -73,6 +73,7 @@
         this.pageTitle = "themeEditor.title";
     }
 
+    @Override
     public void myPrepare() {
         ThemeManager themeMgr = WebloggerFactory.getWeblogger()
                 .getThemeManager();
@@ -100,6 +101,7 @@
         }
     }
 
+    @Override
     public String execute() {
 
         // set theme to current value
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogConfig.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogConfig.java
index 9a7fde6..77688f1 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogConfig.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogConfig.java
@@ -67,6 +67,7 @@
         this.pageTitle = "websiteSettings.title";
     }
 
+    @Override
     public void myPrepare() {
         
         try {
@@ -100,6 +101,7 @@
     
     
     @SkipValidation
+    @Override
     public String execute() {
         
         // load bean with data from weblog
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogRemove.java
index b41a9ca..e8d32f2 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogRemove.java
@@ -43,6 +43,7 @@
     /**
      * Show weblog remove confirmation.
      */
+    @Override
     public String execute() {
         return "confirm";
     }
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/tags/StringTagSupport.java b/app/src/main/java/org/apache/roller/weblogger/ui/tags/StringTagSupport.java
index 4924151..0286801 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/tags/StringTagSupport.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/tags/StringTagSupport.java
@@ -67,6 +67,7 @@
      * evaluating the body of the tag. The evaluation 
      * is delegated to the changeString(String) method 
      */
+    @Override
     public int doEndTag() throws JspException {
 
         String text = "";
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/tags/TruncateNicelyTag.java b/app/src/main/java/org/apache/roller/weblogger/ui/tags/TruncateNicelyTag.java
index eae505d..3e74cfd 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/tags/TruncateNicelyTag.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/tags/TruncateNicelyTag.java
@@ -105,6 +105,7 @@
         return truncateNicely(text, l, u, this.appendToEnd);
     }
 
+    @Override
     public void initAttributes() {
 
         this.lower = "10";
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/tags/WordWrapTag.java b/app/src/main/java/org/apache/roller/weblogger/ui/tags/WordWrapTag.java
index 71f3b51..030d78a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/tags/WordWrapTag.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/tags/WordWrapTag.java
@@ -138,6 +138,7 @@
         return wordWrap(text, NumberUtils.toInt(width), delimiter, split, delimiterInside);
     }
 
+    @Override
     public void initAttributes() {
         this.width = "80";
         this.delimiter = "\n";
diff --git a/app/src/main/java/org/apache/roller/weblogger/util/LRUCache2.java b/app/src/main/java/org/apache/roller/weblogger/util/LRUCache2.java
index 3832491..5ea22b1 100644
--- a/app/src/main/java/org/apache/roller/weblogger/util/LRUCache2.java
+++ b/app/src/main/java/org/apache/roller/weblogger/util/LRUCache2.java
@@ -160,6 +160,7 @@
             this.maxsize = maxsize;
         }
 
+        @Override
         protected boolean removeEldestEntry(Map.Entry eldest)
         {
             return this.size() > this.maxsize;
diff --git a/app/src/main/java/org/apache/roller/weblogger/util/LinkbackExtractor.java b/app/src/main/java/org/apache/roller/weblogger/util/LinkbackExtractor.java
index 1b4c16c..6f0b927 100644
--- a/app/src/main/java/org/apache/roller/weblogger/util/LinkbackExtractor.java
+++ b/app/src/main/java/org/apache/roller/weblogger/util/LinkbackExtractor.java
@@ -104,6 +104,7 @@
         // Ignore inaccurate Sonar complaint about useless overriding method:
         //    http://jira.codehaus.org/browse/SONARJAVA-287
         Parser parser = (new HTMLEditorKit() {
+            @Override
             public Parser getParser() {
                 return super.getParser();
             }
@@ -254,6 +255,7 @@
          * @param pos
          *            Tag's position in file
          */
+        @Override
         public void handleStartTag(Tag tag, MutableAttributeSet atts, int pos)
         {
             if (mList.contains(tag) && !mFound)
@@ -288,6 +290,7 @@
         /**
          * Needed to handle SPAN tag.
          */
+        @Override
         public void handleSimpleTag(Tag tag, MutableAttributeSet atts, int pos)
         {
             if (mList.contains(tag) && mFound && mEnd == 0)
@@ -353,6 +356,7 @@
          * @param pos
          *            Position in HTML file
          */
+        @Override
         public void handleEndTag(Tag tag, int pos)
         {
             if (mList.contains(tag) && mFound && mEnd == 0)
@@ -372,6 +376,7 @@
         /**
          * Get the page title
          */
+        @Override
         public void handleText(char[] data, int pos)
         {
             if (mCurrentTag != null && mCurrentTag.equals(Tag.TITLE))
diff --git a/app/src/main/java/org/apache/roller/weblogger/util/cache/LRUCacheImpl.java b/app/src/main/java/org/apache/roller/weblogger/util/cache/LRUCacheImpl.java
index bf1df9e..f2d702d 100644
--- a/app/src/main/java/org/apache/roller/weblogger/util/cache/LRUCacheImpl.java
+++ b/app/src/main/java/org/apache/roller/weblogger/util/cache/LRUCacheImpl.java
@@ -137,6 +137,7 @@
             this.maxsize = maxsize;
         }
         
+        @Override
         protected boolean removeEldestEntry(Map.Entry eldest) {
             return this.size() > this.maxsize;
         }
diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java
index 8cd85f1..39646a3 100644
--- a/app/src/main/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java
@@ -40,6 +40,7 @@
  */
 public class OpenSearchServlet extends HttpServlet {
     
+    @Override
     public void doGet(
             HttpServletRequest request, HttpServletResponse response) 
             throws ServletException, IOException {
diff --git a/app/src/main/java/org/apache/roller/weblogger/webservices/tagdata/TagDataServlet.java b/app/src/main/java/org/apache/roller/weblogger/webservices/tagdata/TagDataServlet.java
index e9ad619..9d2fa31 100644
--- a/app/src/main/java/org/apache/roller/weblogger/webservices/tagdata/TagDataServlet.java
+++ b/app/src/main/java/org/apache/roller/weblogger/webservices/tagdata/TagDataServlet.java
@@ -57,6 +57,7 @@
     private static final int MAX = WebloggerConfig.getIntProperty("services.tagdata.max", 30);
 
     
+    @Override
     protected void doPost(
             HttpServletRequest request, HttpServletResponse response) 
             throws ServletException, IOException {
@@ -64,6 +65,7 @@
     }
 
     
+    @Override
     public void doGet(
             HttpServletRequest request, HttpServletResponse response) 
             throws ServletException, IOException {
diff --git a/assembly-release/pom.xml b/assembly-release/pom.xml
index 8cc413a..8f46c2c 100644
--- a/assembly-release/pom.xml
+++ b/assembly-release/pom.xml
@@ -22,28 +22,36 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>6.0.0-SNAPSHOT</version>
+        <version>6.0.1-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>roller-release</artifactId>
+    <artifactId>apache-roller</artifactId>
     <packaging>pom</packaging>
 
     <name>Roller Release Assembly</name>
     <description>Assembles Roller into a distribution package</description>
 
+    <properties>
+        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
+        <asciidoctorj.pdf.version>1.5.0-beta.6</asciidoctorj.pdf.version>
+        <asciidoctorj.version>2.1.0</asciidoctorj.version>
+        <jruby.version>9.2.8.0</jruby.version>
+    </properties>
+
     <!--
          Check the README.md in the Roller base folder for
          information on creating the Roller distribution files.
     -->
     <build>
         <plugins>
+
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                     <descriptors>
-                        <descriptor>src/main/assembly/standard.xml</descriptor>
+                        <descriptor>src/main/assembly/binary.xml</descriptor>
                         <descriptor>src/main/assembly/source.xml</descriptor>
                     </descriptors>
                     <tarLongFileMode>gnu</tarLongFileMode>
@@ -58,6 +66,46 @@
                     </execution>
                 </executions>
             </plugin>
+
+            <plugin>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+                <version>${asciidoctor.maven.plugin.version}</version>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctorj-pdf</artifactId>
+                        <version>${asciidoctorj.pdf.version}</version>
+                    </dependency>
+                </dependencies>
+                <configuration>
+                    <sourceDirectory>../docs/adoc</sourceDirectory>
+                    <attributes>
+                        <sourcedir>${project.build.sourceDirectory}</sourcedir>
+                    </attributes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>generate-pdf-doc</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>process-asciidoc</goal>
+                        </goals>
+                        <configuration>
+                            <backend>pdf</backend>
+                            <sourceHighlighter>coderay</sourceHighlighter>
+                            <attributes>
+                                <icons>font</icons>
+                                <pagenums/>
+                                <toc/>
+                                <idprefix/>
+                                <idseparator>-</idseparator>
+                            </attributes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
         </plugins>
     </build>
 
diff --git a/assembly-release/sign-release.sh b/assembly-release/sign-release.sh
index 9342a35..8f322dd 100755
--- a/assembly-release/sign-release.sh
+++ b/assembly-release/sign-release.sh
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 
-export rcstring=""
-export vstring="6.0.0-SNAPSHOT"
+export rcstring="-rc-1"
+export vstring="6.0.0"
 
 # for rc releases we rename the release files
 if [ rcstring != "" ]; then
diff --git a/assembly-release/src/main/assembly/standard.xml b/assembly-release/src/main/assembly/binary.xml
similarity index 77%
rename from assembly-release/src/main/assembly/standard.xml
rename to assembly-release/src/main/assembly/binary.xml
index e206cfe..994f3ed 100644
--- a/assembly-release/src/main/assembly/standard.xml
+++ b/assembly-release/src/main/assembly/binary.xml
@@ -19,7 +19,7 @@
 -->
 
 <assembly>
-    <id>standard</id>
+    <id>binary</id>
     <formats>
         <format>zip</format>
         <format>tar.gz</format>
@@ -44,19 +44,7 @@
             <outputDirectory>${artifact.artifactId}-${artifact.version}</outputDirectory>
         </file> 
         <file>
-            <source>../docs/roller-install-guide.odt</source>
-            <outputDirectory>${artifact.artifactId}-${artifact.version}/docs</outputDirectory>
-        </file> 
-        <file> 
-            <source>../docs/roller-template-guide.odt</source>
-            <outputDirectory>${artifact.artifactId}-${artifact.version}/docs</outputDirectory>
-        </file> 
-        <file> 
-            <source>../docs/roller-user-guide.odt</source>
-            <outputDirectory>${artifact.artifactId}-${artifact.version}/docs</outputDirectory>
-        </file>
-        <file>
-            <source>../docs/roller-install-guide.pdf</source>
+            <source>target/generated-docs/roller-install-guide.pdf</source>
             <outputDirectory>${artifact.artifactId}-${artifact.version}/docs</outputDirectory>
         </file>
         <file>
diff --git a/docs/roller-install-guide.adoc b/docs/adoc/roller-install-guide.adoc
similarity index 100%
rename from docs/roller-install-guide.adoc
rename to docs/adoc/roller-install-guide.adoc
diff --git a/it-selenium/pom.xml b/it-selenium/pom.xml
index b155983..d1e485a 100644
--- a/it-selenium/pom.xml
+++ b/it-selenium/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>6.0.0-SNAPSHOT</version>
+        <version>6.0.1-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/it-selenium/src/test/resources/roller-jettyrun.properties b/it-selenium/src/test/resources/roller-jettyrun.properties
index e3fdd52..4fe3b10 100644
--- a/it-selenium/src/test/resources/roller-jettyrun.properties
+++ b/it-selenium/src/test/resources/roller-jettyrun.properties
@@ -23,7 +23,7 @@
 passwds.encryption.enabled=false
 
 # use src copy of themes for read-only access
-themes.dir=target/roller-selenium-tests-6.0.0-SNAPSHOT/themes
+themes.dir=target/roller-selenium-tests-6.0.0/themes
 
 # put work in work dir
 search.index.dir          =target/work/search-index
diff --git a/pom.xml b/pom.xml
index 8a91432..e91a230 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.apache.roller</groupId>
     <artifactId>roller-project</artifactId>
-    <version>6.0.0-SNAPSHOT</version>
+    <version>6.0.1-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <prerequisites>
@@ -47,7 +47,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <derby.version>10.11.1.1</derby.version>
-        <roller.version>6.0.0-SNAPSHOT</roller.version>
+        <roller.version>6.0.1-SNAPSHOT</roller.version>
     </properties>
 
     <modules>
@@ -61,7 +61,7 @@
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.8.0</version>
+                    <version>3.8.1</version>
                     <configuration>
                         <source>11</source>
                         <target>11</target>
@@ -91,6 +91,14 @@
                         <monitorPort>11527</monitorPort>
                     </configuration>
                 </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>versions-maven-plugin</artifactId>
+                    <version>2.7</version>
+                    <configuration>
+                        <rulesUri>file:version-rules.xml</rulesUri>
+                    </configuration>
+                </plugin>
             </plugins>
         </pluginManagement>
     </build>
@@ -100,7 +108,7 @@
             <dependency>
                 <groupId>org.junit.jupiter</groupId>
                 <artifactId>junit-jupiter-engine</artifactId>
-                <version>5.1.0</version>
+                <version>5.5.2</version>
                 <scope>test</scope>
             </dependency>
         </dependencies>
diff --git a/version-rules.xml b/version-rules.xml
new file mode 100644
index 0000000..b426d4f
--- /dev/null
+++ b/version-rules.xml
@@ -0,0 +1,16 @@
+<ruleset comparisonMethod="maven"
+         xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 http://mojo.codehaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
+    <ignoreVersions>
+        <!--only release builds-->
+        <ignoreVersion type="regex">.*(alpha|ALPHA|beta|BETA|b|rc|RC|M).*</ignoreVersion>
+        
+        <!--ignore some specific version strings which don't follow the common version format-->
+        <ignoreVersion type="exact">20020829</ignoreVersion>
+        <ignoreVersion type="exact">20040616</ignoreVersion>
+        <ignoreVersion type="exact">20040102.233541</ignoreVersion>
+        <ignoreVersion type="exact">20031027.000000</ignoreVersion>
+        <ignoreVersion type="exact">20030418.083655</ignoreVersion>
+    </ignoreVersions>
+
+</ruleset>
