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 {
 
