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 {
