You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2020/02/24 16:53:07 UTC

[jspwiki] 25/38: JSPWIKI-120: propagate WikiContext#getEngine() now returns Engine instead of WikiEngine (2)

This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 5ea8be0fc6358bf8367eacb90113e5d1767c1d85
Author: juanpablo <ju...@apache.org>
AuthorDate: Mon Feb 24 17:11:26 2020 +0100

    JSPWIKI-120: propagate WikiContext#getEngine() now returns Engine instead of WikiEngine (2)
---
 .../org/apache/wiki/tags/AdminBeanIteratorTag.java |  20 +--
 .../apache/wiki/tags/AttachmentsIteratorTag.java   |   9 +-
 .../main/java/org/apache/wiki/tags/AuthorTag.java  |   9 +-
 .../java/org/apache/wiki/tags/BreadcrumbsTag.java  |  97 +++++------
 .../java/org/apache/wiki/tags/CalendarTag.java     |   9 +-
 .../java/org/apache/wiki/tags/CheckLockTag.java    |  70 +++-----
 .../java/org/apache/wiki/tags/CheckVersionTag.java |  12 +-
 .../org/apache/wiki/tags/ContentEncodingTag.java   |   7 +-
 .../main/java/org/apache/wiki/tags/ContentTag.java |  62 ++++---
 .../java/org/apache/wiki/tags/DiffLinkTag.java     |  15 +-
 .../java/org/apache/wiki/tags/EditLinkTag.java     |  78 ++++-----
 .../org/apache/wiki/tags/EditorIteratorTag.java    |  15 +-
 .../main/java/org/apache/wiki/tags/EditorTag.java  |  61 +++----
 .../org/apache/wiki/tags/FeedDiscoveryTag.java     |   8 +-
 .../org/apache/wiki/tags/HasAttachmentsTag.java    |  10 +-
 .../org/apache/wiki/tags/HistoryIteratorTag.java   |   9 +-
 .../main/java/org/apache/wiki/tags/IncludeTag.java |  56 +++----
 .../java/org/apache/wiki/tags/InsertDiffTag.java   |  14 +-
 .../java/org/apache/wiki/tags/InsertPageTag.java   |  18 +-
 .../main/java/org/apache/wiki/tags/LinkTag.java    |  34 ++--
 .../main/java/org/apache/wiki/tags/LinkToTag.java  |  31 ++--
 .../java/org/apache/wiki/tags/NoSuchPageTag.java   |  13 +-
 .../java/org/apache/wiki/tags/PageInfoLinkTag.java |   9 +-
 .../java/org/apache/wiki/tags/PageNameTag.java     |   8 +-
 .../java/org/apache/wiki/tags/PageSizeTag.java     |  10 +-
 .../org/apache/wiki/tags/ParentPageNameTag.java    |   9 +-
 .../java/org/apache/wiki/tags/PermissionTag.java   |   5 +-
 .../main/java/org/apache/wiki/tags/PluginTag.java  |  35 ++--
 .../java/org/apache/wiki/tags/RSSImageLinkTag.java |  50 +++---
 .../apache/wiki/tags/SearchResultIteratorTag.java  |  48 +++---
 .../java/org/apache/wiki/tags/TranslateTag.java    |   5 +-
 .../java/org/apache/wiki/tags/UserCheckTag.java    |   2 +-
 .../java/org/apache/wiki/tags/UserNameTag.java     |  43 +++--
 .../java/org/apache/wiki/tags/UserProfileTag.java  | 181 ++++++++-------------
 .../java/org/apache/wiki/tags/VariableTag.java     |  59 +++----
 35 files changed, 491 insertions(+), 630 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/AdminBeanIteratorTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/AdminBeanIteratorTag.java
index 444dd73..49af855 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/AdminBeanIteratorTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/AdminBeanIteratorTag.java
@@ -18,14 +18,13 @@
  */
 package org.apache.wiki.tags;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.api.engine.AdminBeanManager;
 import org.apache.wiki.ui.admin.AdminBean;
 
+import java.util.ArrayList;
+import java.util.Collection;
+
 /**
  *  Provides an iterator for all AdminBeans of a given type.
  *
@@ -41,11 +40,11 @@ public class AdminBeanIteratorTag extends IteratorTag {
      *  
      *  @param type Type to set
      */
-    public void setType( String type ) {
+    public void setType( final String type ) {
     	if (m_wikiContext == null) {
     		m_wikiContext = WikiContext.findContext(pageContext);
     	}
-        m_type = m_wikiContext.getEngine().getAdminBeanManager().getTypeFromString( type );
+        m_type = m_wikiContext.getEngine().getManager( AdminBeanManager.class ).getTypeFromString( type );
     }
 
     /**
@@ -53,11 +52,10 @@ public class AdminBeanIteratorTag extends IteratorTag {
      */
     @Override
     public void resetIterator() {
-        AdminBeanManager mgr = m_wikiContext.getEngine().getAdminBeanManager();
-        Collection< AdminBean > beans = mgr.getAllBeans();
-        ArrayList< AdminBean > typedBeans = new ArrayList< AdminBean >();
-        for( Iterator< AdminBean > i = beans.iterator(); i.hasNext(); ) {
-            AdminBean ab = i.next();
+        final AdminBeanManager mgr = m_wikiContext.getEngine().getManager( AdminBeanManager.class );
+        final Collection< AdminBean > beans = mgr.getAllBeans();
+        final ArrayList< AdminBean > typedBeans = new ArrayList<>();
+        for( final AdminBean ab : beans ) {
             if( ab.getType() == m_type ) {
                 typedBeans.add( ab );
             }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/AttachmentsIteratorTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/AttachmentsIteratorTag.java
index 41f1c67..1825aca 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/AttachmentsIteratorTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/AttachmentsIteratorTag.java
@@ -20,11 +20,12 @@ package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.attachment.Attachment;
 import org.apache.wiki.attachment.AttachmentManager;
+import org.apache.wiki.pages.PageManager;
 
 import javax.servlet.jsp.JspWriter;
 import javax.servlet.jsp.PageContext;
@@ -54,8 +55,8 @@ public class AttachmentsIteratorTag extends IteratorTag {
     @Override
     public final int doStartTag()  {
         m_wikiContext = (WikiContext) pageContext.getAttribute( WikiContext.ATTR_CONTEXT, PageContext.REQUEST_SCOPE );
-        final WikiEngine engine = m_wikiContext.getEngine();
-        final AttachmentManager mgr = engine.getAttachmentManager();
+        final Engine engine = m_wikiContext.getEngine();
+        final AttachmentManager mgr = engine.getManager( AttachmentManager.class );
         final WikiPage page;
 
         page = m_wikiContext.getPage();
@@ -66,7 +67,7 @@ public class AttachmentsIteratorTag extends IteratorTag {
         }
 
         try {
-            if( page != null && engine.getPageManager().wikiPageExists(page) ) {
+            if( page != null && engine.getManager( PageManager.class ).wikiPageExists(page) ) {
                 final List< Attachment > atts = mgr.listAttachments( page );
 
                 if( atts == null ) {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/AuthorTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/AuthorTag.java
index caac8e3..c278072 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/AuthorTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/AuthorTag.java
@@ -18,9 +18,10 @@
  */
 package org.apache.wiki.tags;
 
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.i18n.InternationalizationManager;
+import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.parser.WikiDocument;
 import org.apache.wiki.preferences.Preferences;
@@ -49,16 +50,16 @@ public class AuthorTag extends WikiTagBase {
      */
     @Override
     public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
         final WikiPage   page   = m_wikiContext.getPage();
         String author = page.getAuthor();
 
         if( author != null && author.length() > 0 ) {
             author = TextUtil.replaceEntities(author);
 
-            if( engine.getPageManager().wikiPageExists(author) && !( "plain".equalsIgnoreCase( m_format ) ) ) {
+            if( engine.getManager( PageManager.class ).wikiPageExists(author) && !( "plain".equalsIgnoreCase( m_format ) ) ) {
                 // FIXME: It's very boring to have to do this.  Slow, too.
-                final RenderingManager mgr = engine.getRenderingManager();
+                final RenderingManager mgr = engine.getManager( RenderingManager.class );
                 final MarkupParser p = mgr.getParser( m_wikiContext, "["+author+"|"+author+"]" );
                 final WikiDocument d = p.parse();
                 author = mgr.getHTML( m_wikiContext, d );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/BreadcrumbsTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/BreadcrumbsTag.java
index 0ffa258..a6f44bc 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/BreadcrumbsTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/BreadcrumbsTag.java
@@ -20,6 +20,7 @@ package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
+import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.util.TextUtil;
 
 import javax.servlet.http.HttpSession;
@@ -80,7 +81,7 @@ public class BreadcrumbsTag extends WikiTagBase
      *
      *  @param maxpages The amount.
      */
-    public void setMaxpages(int maxpages)
+    public void setMaxpages( final int maxpages)
     {
         m_maxQueueSize = maxpages + 1;
     }
@@ -100,7 +101,7 @@ public class BreadcrumbsTag extends WikiTagBase
      *
      *  @param separator A string which separates the page names.
      */
-    public void setSeparator(String separator)
+    public void setSeparator( final String separator)
     {
         m_separator = TextUtil.replaceEntities( separator );
     }
@@ -109,47 +110,34 @@ public class BreadcrumbsTag extends WikiTagBase
      *  {@inheritDoc}
      */
     @Override
-    public int doWikiStartTag() throws IOException
-    {
-        HttpSession session = pageContext.getSession();
-        FixedQueue  trail = (FixedQueue) session.getAttribute(BREADCRUMBTRAIL_KEY);
-
-        String page = m_wikiContext.getPage().getName();
+    public int doWikiStartTag() throws IOException {
+        final HttpSession session = pageContext.getSession();
+        FixedQueue trail = (FixedQueue) session.getAttribute(BREADCRUMBTRAIL_KEY);
+        final String page = m_wikiContext.getPage().getName();
 
-        if( trail == null )
-        {
+        if( trail == null ) {
             trail = new FixedQueue(m_maxQueueSize);
         } else {
             //  check if page still exists (could be deleted/renamed by another user)
             for (int i = 0;i<trail.size();i++) {
-                if (!m_wikiContext.getEngine().getPageManager().wikiPageExists(trail.get(i))) {
+                if( !m_wikiContext.getEngine().getManager( PageManager.class ).wikiPageExists( trail.get( i ) ) ) {
                     trail.remove(i);
                 }
             }
         }
 
-        if (m_wikiContext.getRequestContext().equals(WikiContext.VIEW))
-        {
-            if (m_wikiContext.getEngine().getPageManager().wikiPageExists(page))
-            {
-                if (trail.isEmpty())
-                {
-                    trail.pushItem(page);
-                }
-                else
-                {
-                    //
+        if( m_wikiContext.getRequestContext().equals( WikiContext.VIEW ) ) {
+            if( m_wikiContext.getEngine().getManager( PageManager.class ).wikiPageExists( page ) ) {
+                if( trail.isEmpty() ) {
+                    trail.pushItem( page );
+                } else {
                     // Don't add the page to the queue if the page was just refreshed
-                    //
-                    if (!trail.getLast().equals(page))
-                    {
-                        trail.pushItem(page);
+                    if( !trail.getLast().equals( page ) ) {
+                        trail.pushItem( page );
                     }
                 }
-            }
-            else
-            {
-                log.debug("didn't add page because it doesn't exist: " + page);
+            } else {
+                log.debug( "didn't add page because it doesn't exist: " + page );
             }
         }
 
@@ -162,22 +150,21 @@ public class BreadcrumbsTag extends WikiTagBase
         // FIXME: this code would be much simpler if we could just output the [pagename] and then use the
         // wiki engine to output the appropriate wikilink
 
-        JspWriter out     = pageContext.getOut();
-        int queueSize     = trail.size();
-        String linkclass  = "wikipage";
+        final JspWriter out     = pageContext.getOut();
+        final int queueSize     = trail.size();
+        final String linkclass  = "wikipage";
         String curPage    = null;
 
-        for( int i = 0; i < queueSize - 1; i++ )
-        {
+        for( int i = 0; i < queueSize - 1; i++ ) {
             curPage = trail.get(i);
 
             //FIXME: I can't figure out how to detect the appropriate jsp page to put here, so I hard coded Wiki.jsp
             //This breaks when you view an attachment metadata page
-            out.print("<a class=\"" + linkclass + "\" href=\"" + m_wikiContext.getViewURL(curPage)+ "\">"
-                        + TextUtil.replaceEntities( curPage ) + "</a>");
+            out.print( "<a class=\"" + linkclass + "\" href=\"" + m_wikiContext.getViewURL(curPage) + "\">" +
+                       TextUtil.replaceEntities( curPage ) +
+                       "</a>" );
 
-            if( i < queueSize - 2 )
-            {
+            if( i < queueSize - 2 ) {
                 out.print(m_separator);
             }
         }
@@ -188,23 +175,17 @@ public class BreadcrumbsTag extends WikiTagBase
     /**
      * Extends the LinkedList class to provide a fixed-size queue implementation
      */
-    public static class FixedQueue
-        extends LinkedList<String>
-        implements Serializable
-    {
+    public static class FixedQueue extends LinkedList< String > implements Serializable {
         private int m_size;
         private static final long serialVersionUID = 0L;
 
-        FixedQueue(int size)
-        {
+        FixedQueue( final int size ) {
             m_size = size;
         }
 
-        String pushItem(String o)
-        {
-            add(o);
-            if( size() > m_size )
-            {
+        String pushItem( final String o ) {
+            add( o );
+            if( size() > m_size ) {
                 return removeFirst();
             }
 
@@ -212,17 +193,13 @@ public class BreadcrumbsTag extends WikiTagBase
         }
 
         /**
-         * @param pageName
-         *            the page to be deleted from the breadcrumb
+         * @param pageName the page to be deleted from the breadcrumb
          */
-        public void removeItem(String pageName)
-        {
-            for (int i = 0; i < size(); i++)
-            {
-                String page = get(i);
-                if (page != null && page.equals(pageName))
-                {
-                    remove(page);
+        public void removeItem( final String pageName ) {
+            for( int i = 0; i < size(); i++ ) {
+                final String page = get( i );
+                if( page != null && page.equals( pageName ) ) {
+                    remove( page );
                 }
             }
         }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/CalendarTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/CalendarTag.java
index cbfd2f0..125e19c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/CalendarTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/CalendarTag.java
@@ -20,8 +20,9 @@ package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.util.HttpUtil;
 import org.apache.wiki.util.TextUtil;
 
@@ -138,13 +139,13 @@ public class CalendarTag extends WikiTagBase {
      *  Returns a link to the given day.
      */
     private String getDayLink( final Calendar day ) {
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
         final String result;
 
         if( m_pageFormat != null ) {
             final String pagename = m_pageFormat.format( day.getTime() );
             
-            if( engine.getPageManager().wikiPageExists( pagename ) ) {
+            if( engine.getManager( PageManager.class ).wikiPageExists( pagename ) ) {
                 if( m_urlFormat != null ) {
                     final String url = m_urlFormat.format( day.getTime() );
                     result = "<td class=\"link\"><a href=\""+url+"\">"+day.get( Calendar.DATE )+"</a></td>";
@@ -240,7 +241,7 @@ public class CalendarTag extends WikiTagBase {
      */
     @Override
     public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
         final JspWriter out = pageContext.getOut();
         final Calendar cal = Calendar.getInstance();
         final Calendar prevCal = Calendar.getInstance();
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/CheckLockTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/CheckLockTag.java
index 1dc4675..d6753c7 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/CheckLockTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/CheckLockTag.java
@@ -18,15 +18,14 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.pages.PageLock;
 import org.apache.wiki.pages.PageManager;
 
 import javax.servlet.http.HttpSession;
+import java.io.IOException;
 
 /**
  *  Checks whether the page is locked for editing.  If the mode matches,
@@ -40,13 +39,11 @@ import javax.servlet.http.HttpSession;
  *  
  *  @since 2.0
  */
-public class CheckLockTag
-    extends WikiTagBase
-{
+public class CheckLockTag extends WikiTagBase {
+
     private static final long serialVersionUID = 1L;
     
-    private static enum LockState
-    {
+    private enum LockState {
         LOCKED, NOTLOCKED, OWNED
     }
 
@@ -56,8 +53,7 @@ public class CheckLockTag
      *  {@inheritDoc}
      */
     @Override
-    public void initTag()
-    {
+    public void initTag() {
         super.initTag();
         m_mode = LockState.NOTLOCKED;
     }
@@ -67,18 +63,12 @@ public class CheckLockTag
      *  
      *  @param arg A String for the mode.
      */
-    public void setMode( String arg )
-    {
-        if( "locked".equals(arg) )
-        {
+    public void setMode( final String arg ) {
+        if( "locked".equals( arg ) ) {
             m_mode = LockState.LOCKED;
-        }
-        else if("owned".equals(arg) )
-        {
+        } else if( "owned".equals( arg ) ) {
             m_mode = LockState.OWNED;
-        }
-        else
-        {
+        } else {
             m_mode = LockState.NOTLOCKED;
         }
     }
@@ -87,31 +77,21 @@ public class CheckLockTag
      *  {@inheritDoc}
      */
     @Override
-    public final int doWikiStartTag()
-        throws IOException,
-               ProviderException
-    {
-        WikiEngine engine = m_wikiContext.getEngine();
-        WikiPage   page   = m_wikiContext.getPage();
-
-        if( page != null )
-        {
-            PageManager mgr = engine.getPageManager();
-
-            PageLock lock = mgr.getCurrentLock( page );
-
-            HttpSession session = pageContext.getSession();
-
-            PageLock userLock = (PageLock) session.getAttribute("lock-"+page.getName());
-
-            if( (lock != null && m_mode == LockState.LOCKED && lock != userLock ) ||
-                (lock != null && m_mode == LockState.OWNED && lock == userLock ) ||
-                (lock == null && m_mode == LockState.NOTLOCKED) )
-            {
-                String tid = getId();
-
-                if( tid != null && lock != null )
-                {
+    public final int doWikiStartTag() throws IOException, ProviderException {
+        final Engine engine = m_wikiContext.getEngine();
+        final WikiPage page = m_wikiContext.getPage();
+
+        if( page != null ) {
+            final PageManager mgr = engine.getManager( PageManager.class );
+            final PageLock lock = mgr.getCurrentLock( page );
+            final HttpSession session = pageContext.getSession();
+            final PageLock userLock = ( PageLock )session.getAttribute( "lock-" + page.getName() );
+            if( ( lock != null && m_mode == LockState.LOCKED && lock != userLock ) ||
+                ( lock != null && m_mode == LockState.OWNED && lock == userLock )  ||
+                ( lock == null && m_mode == LockState.NOTLOCKED ) ) {
+
+                final String tid = getId();
+                if( tid != null && lock != null ) {
                     pageContext.setAttribute( tid, lock );
                 }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/CheckVersionTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/CheckVersionTag.java
index c51bf6f..58d4676 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/CheckVersionTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/CheckVersionTag.java
@@ -19,8 +19,10 @@
 package org.apache.wiki.tags;
 
 import org.apache.wiki.InternalWikiException;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.pages.PageManager;
+
 
 /**
  *  Does a version check on the page.  Mode is as follows:
@@ -75,13 +77,13 @@ public class CheckVersionTag extends WikiTagBase {
      */
     @Override
     public final int doWikiStartTag() {
-        final WikiEngine engine = m_wikiContext.getEngine();
-        final WikiPage   page   = m_wikiContext.getPage();
+        final Engine engine = m_wikiContext.getEngine();
+        final WikiPage page   = m_wikiContext.getPage();
 
-        if( page != null && engine.getPageManager().wikiPageExists(page.getName()) ) {
+        if( page != null && engine.getManager( PageManager.class ).wikiPageExists(page.getName()) ) {
             final int version = page.getVersion();
             final boolean include;
-            final WikiPage latest = engine.getPageManager().getPage( page.getName() );
+            final WikiPage latest = engine.getManager( PageManager.class ).getPage( page.getName() );
 
             switch( m_mode ) {
                 case LATEST    : include = (version < 0) || (latest.getVersion() == version); break;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentEncodingTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentEncodingTag.java
index a33a0d3..611e9c8 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentEncodingTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentEncodingTag.java
@@ -18,7 +18,7 @@
  */
 package org.apache.wiki.tags;
 
-import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Engine;
 
 import java.io.IOException;
 
@@ -34,9 +34,10 @@ public class ContentEncodingTag extends WikiTagBase {
     /**
      *  {@inheritDoc}
      */
-    public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+    @Override public final int doWikiStartTag() throws IOException {
+        final Engine engine = m_wikiContext.getEngine();
         pageContext.getOut().print( engine.getContentEncoding() );
         return SKIP_BODY;
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentTag.java
index 3e4b1f2..033d6d8 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentTag.java
@@ -18,16 +18,16 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletException;
-import javax.servlet.jsp.JspException;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.ui.TemplateManager;
+
+import javax.servlet.ServletException;
+import javax.servlet.jsp.JspException;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 
 /**
@@ -41,14 +41,14 @@ public class ContentTag extends WikiTagBase {
     private static final long serialVersionUID = 0L;
     private static final Logger log = Logger.getLogger( ContentTag.class );
     
-    private Map<String, String> m_mappings = new HashMap<String, String>();
+    private Map<String, String> m_mappings = new HashMap<>();
 
     /**
      *  Set the template for the VIEW context.
      *  
      *  @param s The template name.
      */
-    public void setView( String s )
+    public void setView( final String s )
     {
         m_mappings.put( WikiContext.VIEW, s );
     }
@@ -58,7 +58,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setDiff( String s )
+    public void setDiff( final String s )
     {
         m_mappings.put( WikiContext.DIFF, s );
     }
@@ -68,7 +68,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setInfo( String s )
+    public void setInfo( final String s )
     {
         m_mappings.put( WikiContext.INFO, s );
     }
@@ -78,7 +78,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setPreview( String s )
+    public void setPreview( final String s )
     {
         m_mappings.put( WikiContext.PREVIEW, s );
     }
@@ -88,7 +88,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setConflict( String s )
+    public void setConflict( final String s )
     {
         m_mappings.put( WikiContext.CONFLICT, s );
     }
@@ -98,7 +98,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setFind( String s )
+    public void setFind( final String s )
     {
         m_mappings.put( WikiContext.FIND, s );
     }
@@ -108,7 +108,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setPrefs( String s )
+    public void setPrefs( final String s )
     {
         m_mappings.put( WikiContext.PREFS, s );
     }
@@ -118,7 +118,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setError( String s )
+    public void setError( final String s )
     {
         m_mappings.put( WikiContext.ERROR, s );
     }
@@ -128,7 +128,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setEdit( String s )
+    public void setEdit( final String s )
     {
         m_mappings.put( WikiContext.EDIT, s );
     }
@@ -138,7 +138,7 @@ public class ContentTag extends WikiTagBase {
      *  
      *  @param s The template name.
      */
-    public void setComment( String s )
+    public void setComment( final String s )
     {
         m_mappings.put( WikiContext.COMMENT, s );
     }
@@ -146,7 +146,7 @@ public class ContentTag extends WikiTagBase {
     /**
      *  {@inheritDoc}
      */
-    public final int doWikiStartTag()
+    @Override public final int doWikiStartTag()
         throws IOException,
                ProviderException
     {
@@ -156,39 +156,37 @@ public class ContentTag extends WikiTagBase {
     /**
      *  {@inheritDoc}
      */
-    public final int doEndTag()
+    @Override public final int doEndTag()
         throws JspException
     {
         try
         {
             // Check the overridden templates first
-            String requestContext = m_wikiContext.getRequestContext();
+            final String requestContext = m_wikiContext.getRequestContext();
             String contentTemplate = m_mappings.get( requestContext );
 
             // If not found, use the defaults
-            if ( contentTemplate == null )
-            {
+            if( contentTemplate == null ) {
                 contentTemplate = m_wikiContext.getContentTemplate();
             }
-            
+
             // If still no, something fishy is going on
-            if( contentTemplate == null )
-            {
-                throw new JspException("This template uses <wiki:Content/> in an unsupported context: " + requestContext );
+            if( contentTemplate == null ) {
+                throw new JspException( "This template uses <wiki:Content/> in an unsupported context: " + requestContext );
             }
 
-            String page = m_wikiContext.getEngine().getTemplateManager().findJSP( pageContext,
-                                                                                  m_wikiContext.getTemplate(),
-                                                                                  contentTemplate );
+            final String page = m_wikiContext.getEngine().getManager( TemplateManager.class ).findJSP( pageContext,
+                                                                                                 m_wikiContext.getTemplate(),
+                                                                                                 contentTemplate );
             pageContext.include( page );
         }
-        catch( ServletException e )
+        catch( final ServletException e )
         {
             log.warn( "Including failed, got a servlet exception from sub-page. "+
                       "Rethrowing the exception to the JSP engine.", e );
             throw new JspException( e.getMessage() );
         }
-        catch( IOException e )
+        catch( final IOException e )
         {
             log.warn( "I/O exception - probably the connection was broken. "+
                       "Rethrowing the exception to the JSP engine.", e );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/DiffLinkTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/DiffLinkTag.java
index d660c46..d62f5f6 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/DiffLinkTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/DiffLinkTag.java
@@ -19,9 +19,10 @@
 package org.apache.wiki.tags;
 
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.WikiProvider;
+import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.pages.PageManager;
 
 import javax.servlet.jsp.JspWriter;
 import java.io.IOException;
@@ -53,7 +54,7 @@ public class DiffLinkTag extends WikiLinkTag {
     private String m_version    = VER_LATEST;
     private String m_newVersion = VER_LATEST;
 
-    public void initTag()
+    @Override public void initTag()
     {
         super.initTag();
         m_version = m_newVersion = VER_LATEST;
@@ -79,8 +80,8 @@ public class DiffLinkTag extends WikiLinkTag {
         m_newVersion = arg;
     }
 
-    public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+    @Override public final int doWikiStartTag() throws IOException {
+        final Engine engine = m_wikiContext.getEngine();
         String pageName = m_pageName;
 
         if( m_pageName == null ) {
@@ -97,12 +98,12 @@ public class DiffLinkTag extends WikiLinkTag {
         int r2;
 
         //  In case the page does not exist, we fail silently.
-        if( !engine.getPageManager().wikiPageExists( pageName ) ) {
+        if( !engine.getManager( PageManager.class ).wikiPageExists( pageName ) ) {
             return SKIP_BODY;
         }
 
         if( VER_LATEST.equals(getVersion()) ) {
-            final WikiPage latest = engine.getPageManager().getPage( pageName, WikiProvider.LATEST_VERSION );
+            final WikiPage latest = engine.getManager( PageManager.class ).getPage( pageName, WikiProvider.LATEST_VERSION );
             if( latest == null ) {
                 // This may occur if matchEnglishPlurals is on, and we access the wrong page name
                 return SKIP_BODY;
@@ -118,7 +119,7 @@ public class DiffLinkTag extends WikiLinkTag {
         }
 
         if( VER_LATEST.equals( getNewVersion() ) ) {
-            final WikiPage latest = engine.getPageManager().getPage( pageName, WikiProvider.LATEST_VERSION );
+            final WikiPage latest = engine.getManager( PageManager.class ).getPage( pageName, WikiProvider.LATEST_VERSION );
             r2 = latest.getVersion();
         } else if( VER_PREVIOUS.equals( getNewVersion() ) ) {
             r2 = m_wikiContext.getPage().getVersion() - 1;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/EditLinkTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/EditLinkTag.java
index 8bbbd32..62622e1 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/EditLinkTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/EditLinkTag.java
@@ -19,8 +19,9 @@
 package org.apache.wiki.tags;
 
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.pages.PageManager;
 
 import javax.servlet.jsp.JspWriter;
 import java.io.IOException;
@@ -40,100 +41,82 @@ import java.io.IOException;
  *
  *  @since 2.0
  */
-public class EditLinkTag
-    extends WikiLinkTag
-{
+public class EditLinkTag extends WikiLinkTag {
+
     private static final long serialVersionUID = 0L;
     
     public String m_version = null;
     public String m_title = "";
     public String m_accesskey = "";
     
-    public void initTag()
-    {
+    @Override
+    public void initTag() {
         super.initTag();
         m_version = null;
     }
 
-    public void setVersion( String vers )
+    public void setVersion( final String vers )
     {
         m_version = vers;
     }
     
-    public void setTitle( String title )
+    public void setTitle( final String title )
     {
         m_title = title;
     }
 
-    public void setAccesskey( String access )
+    public void setAccesskey( final String access )
     {
         m_accesskey = access;
     }
 
-    public final int doWikiStartTag()
-        throws IOException
-    {
-        WikiEngine engine   = m_wikiContext.getEngine();
-        WikiPage   page     = null;
-        String     versionString = "";
-        String     pageName = null;
+    @Override
+    public final int doWikiStartTag() throws IOException {
+        final Engine engine   = m_wikiContext.getEngine();
+        WikiPage page = null;
+        String versionString = "";
+        final String pageName;
         
-        //
         //  Determine the page and the link.
-        //
-        if( m_pageName == null )
-        {
+        if( m_pageName == null ) {
             page = m_wikiContext.getPage();
-            if( page == null )
-            {
+            if( page == null ) {
                 // You can't call this on the page itself anyways.
                 return SKIP_BODY;
             }
 
             pageName = page.getName();
-        }
-        else
-        {
+        } else {
             pageName = m_pageName;
         }
 
         //
         //  Determine the latest version, if the version attribute is "this".
         //
-        if( m_version != null )
-        {
-            if( "this".equalsIgnoreCase(m_version) )
-            {
-                if( page == null )
-                {
+        if( m_version != null ) {
+            if( "this".equalsIgnoreCase( m_version ) ) {
+                if( page == null ) {
                     // No page, so go fetch according to page name.
-                    page = engine.getPageManager().getPage( m_pageName );
+                    page = engine.getManager( PageManager.class ).getPage( m_pageName );
                 }
-                
-                if( page != null )
-                {
-                    versionString = "version="+page.getVersion();
+
+                if( page != null ) {
+                    versionString = "version=" + page.getVersion();
                 }
-            }
-            else
-            {
-                versionString = "version="+m_version;
+            } else {
+                versionString = "version=" + m_version;
             }
         }
 
         //
-        //  Finally, print out the correct link, according to what
-        //  user commanded.
+        //  Finally, print out the correct link, according to what user commanded.
         //
-        JspWriter out = pageContext.getOut();
-
-        switch( m_format )
-        {
+        final JspWriter out = pageContext.getOut();
+        switch( m_format ) {
           case ANCHOR:
             out.print("<a href=\""+m_wikiContext.getURL(WikiContext.EDIT,pageName, versionString)
                      +"\" accesskey=\"" + m_accesskey + "\" title=\"" + m_title + "\">");
             break;
-
           case URL:
             out.print( m_wikiContext.getURL(WikiContext.EDIT,pageName,versionString) );
             break;
@@ -141,4 +124,5 @@ public class EditLinkTag
 
         return EVAL_BODY_INCLUDE;
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/EditorIteratorTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/EditorIteratorTag.java
index 690fe91..d1f6882 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/EditorIteratorTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/EditorIteratorTag.java
@@ -18,9 +18,8 @@
  */
 package org.apache.wiki.tags;
 
-import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.ui.Editor;
 import org.apache.wiki.ui.EditorManager;
 
@@ -36,20 +35,20 @@ import java.util.Collection;
 public class EditorIteratorTag extends IteratorTag  {
 
     private static final long serialVersionUID = 0L;
-    private static final Logger log = Logger.getLogger( EditorIteratorTag.class );
 
-    public final int doStartTag() {
+    @Override public final int doStartTag() {
         m_wikiContext = WikiContext.findContext(pageContext);
-        final WikiEngine engine = m_wikiContext.getEngine();
-        final EditorManager mgr = engine.getEditorManager();
+        final Engine engine = m_wikiContext.getEngine();
+        final EditorManager mgr = engine.getManager( EditorManager.class );
         final String[] editorList = mgr.getEditorList();
         final Collection< Editor > editors = new ArrayList<>();
 
-        for ( int i = 0; i < editorList.length; i++ ) {
-            editors.add( new Editor( m_wikiContext, editorList[ i ] ) );
+        for( final String editor : editorList ) {
+            editors.add( new Editor( m_wikiContext, editor ) );
         }
         setList( editors );
 
         return super.doStartTag();
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/EditorTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/EditorTag.java
index 9866d32..095f847 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/EditorTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/EditorTag.java
@@ -18,14 +18,14 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
+import org.apache.log4j.Logger;
+import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.ui.EditorManager;
+import org.apache.wiki.ui.TemplateManager;
 
 import javax.servlet.ServletException;
 import javax.servlet.jsp.JspException;
-
-import org.apache.log4j.Logger;
-import org.apache.wiki.WikiEngine;
-import org.apache.wiki.ui.EditorManager;
+import java.io.IOException;
 
 
 /**
@@ -42,45 +42,34 @@ public class EditorTag extends WikiBodyTag {
     private static final long serialVersionUID = 0L;
     private static final Logger log = Logger.getLogger( EditorTag.class );
     
-    public final int doWikiStartTag()
-        throws IOException
-    {
+    @Override
+    public final int doWikiStartTag() throws IOException {
         return SKIP_BODY;
     }
        
-    public int doEndTag() throws JspException
-    {
-        WikiEngine engine = m_wikiContext.getEngine();
-        EditorManager mgr = engine.getEditorManager();
-        
-        String editorPath = mgr.getEditorPath( m_wikiContext );
-        
-        try
-        {
-            String page = engine.getTemplateManager().findJSP( pageContext,
-                                                               m_wikiContext.getTemplate(),
-                                                               editorPath );
-            
-            if( page == null )
-            {
+    @Override
+    public int doEndTag() throws JspException {
+        final Engine engine = m_wikiContext.getEngine();
+        final EditorManager mgr = engine.getManager( EditorManager.class );
+        final String editorPath = mgr.getEditorPath( m_wikiContext );
+
+        try {
+            final String page = engine.getManager( TemplateManager.class ).findJSP( pageContext, m_wikiContext.getTemplate(), editorPath );
+
+            if( page == null ) {
                 //FIXME: should be I18N ...
-                pageContext.getOut().println("Unable to find editor '"+editorPath+"'");
-            }
-            else
-            {
+                pageContext.getOut().println( "Unable to find editor '" + editorPath + "'" );
+            } else {
                 pageContext.include( page );
             }
-        }
-        catch( ServletException e )
-        {
-            log.error("Failed to include editor",e);
-            throw new JspException("Failed to include editor: "+e.getMessage() );
-        }
-        catch( IOException e )
-        {
-            throw new JspException("Could not print Editor tag: "+e.getMessage() );
+        } catch( final ServletException e ) {
+            log.error( "Failed to include editor", e );
+            throw new JspException( "Failed to include editor: " + e.getMessage() );
+        } catch( final IOException e ) {
+            throw new JspException( "Could not print Editor tag: " + e.getMessage() );
         }
         
         return EVAL_PAGE;
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/FeedDiscoveryTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/FeedDiscoveryTag.java
index 2acff88..3dd20a5 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/FeedDiscoveryTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/FeedDiscoveryTag.java
@@ -19,8 +19,8 @@
 package org.apache.wiki.tags;
 
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.plugin.WeblogPlugin;
 import org.apache.wiki.rss.Feed;
 import org.apache.wiki.util.TextUtil;
@@ -36,9 +36,9 @@ public class FeedDiscoveryTag extends WikiTagBase {
 
     private static final long serialVersionUID = 0L;
     
-    public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
-        final WikiPage   page   = m_wikiContext.getPage();
+    @Override public final int doWikiStartTag() throws IOException {
+        final Engine engine = m_wikiContext.getEngine();
+        final WikiPage page = m_wikiContext.getPage();
 
         final String encodedName = engine.encodeName( page.getName() );
         final String rssURL      = engine.getGlobalRSSURL();
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/HasAttachmentsTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/HasAttachmentsTag.java
index 0192b7d..1d58bbd 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/HasAttachmentsTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/HasAttachmentsTag.java
@@ -19,10 +19,11 @@
 package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.attachment.AttachmentManager;
+import org.apache.wiki.pages.PageManager;
 
 
 /**
@@ -35,13 +36,14 @@ public class HasAttachmentsTag extends WikiTagBase {
     private static final long serialVersionUID = 0L;
     private static final Logger log = Logger.getLogger( HasAttachmentsTag.class );
     
+    @Override
     public final int doWikiStartTag() {
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
         final WikiPage page = m_wikiContext.getPage();
-        final AttachmentManager mgr = engine.getAttachmentManager();
+        final AttachmentManager mgr = engine.getManager( AttachmentManager.class );
 
         try {
-            if( page != null && engine.getPageManager().wikiPageExists(page) && mgr.attachmentsEnabled() ) {
+            if( page != null && engine.getManager( PageManager.class ).wikiPageExists(page) && mgr.attachmentsEnabled() ) {
                 if( mgr.hasAttachments(page) ) {
                     return EVAL_BODY_INCLUDE;
                 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/HistoryIteratorTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/HistoryIteratorTag.java
index 6686c54..0d674ae 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/HistoryIteratorTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/HistoryIteratorTag.java
@@ -20,9 +20,10 @@ package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.pages.PageManager;
 
 import javax.servlet.jsp.JspWriter;
 import javax.servlet.jsp.PageContext;
@@ -48,12 +49,12 @@ public class HistoryIteratorTag extends IteratorTag  {
     @Override
     public final int doStartTag() {
         m_wikiContext = (WikiContext) pageContext.getAttribute( WikiContext.ATTR_CONTEXT, PageContext.REQUEST_SCOPE );
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
         final WikiPage page = m_wikiContext.getPage();
 
         try {
-            if( page != null && engine.getPageManager().wikiPageExists( page ) ) {
-                final List< WikiPage > versions = engine.getPageManager().getVersionHistory( page.getName() );
+            if( page != null && engine.getManager( PageManager.class ).wikiPageExists( page ) ) {
+                final List< WikiPage > versions = engine.getManager( PageManager.class ).getVersionHistory( page.getName() );
 
                 if( versions == null ) {
                     // There is no history
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/IncludeTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/IncludeTag.java
index 7abb30a..8332c63 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/IncludeTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/IncludeTag.java
@@ -18,15 +18,15 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.ServletException;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.ui.TemplateManager;
 import org.apache.wiki.util.TextUtil;
 
+import javax.servlet.ServletException;
+import javax.servlet.jsp.JspException;
+import java.io.IOException;
+
 /**
  *  Includes an another JSP page, making sure that we actually pass
  *  the WikiContext correctly.
@@ -41,13 +41,12 @@ public class IncludeTag extends WikiTagBase {
     
     protected String m_page;
 
-    public void initTag()
-    {
+    @Override public void initTag() {
         super.initTag();
         m_page = null;
     }
 
-    public void setPage( String page )
+    public void setPage( final String page )
     {
         m_page = page;
     }
@@ -57,7 +56,7 @@ public class IncludeTag extends WikiTagBase {
         return m_page;
     }
 
-    public final int doWikiStartTag()
+    @Override public final int doWikiStartTag()
         throws IOException,
                ProviderException
     {
@@ -66,37 +65,26 @@ public class IncludeTag extends WikiTagBase {
         return SKIP_BODY;
     }
 
-    public final int doEndTag()
-        throws JspException
-    {
-        try
-        {
-            String page = m_wikiContext.getEngine().getTemplateManager().findJSP( pageContext,
-                                                                                  m_wikiContext.getTemplate(),
-                                                                                  m_page );
-            
-            if( page == null )
-            {
-                pageContext.getOut().println("No template file called '"+TextUtil.replaceEntities(m_page)+"'");
-            }
-            else
-            {
+    @Override public final int doEndTag() throws JspException {
+        try {
+            final String page = m_wikiContext.getEngine().getManager( TemplateManager.class ).findJSP( pageContext,
+                                                                                                 m_wikiContext.getTemplate(),
+                                                                                                 m_page );
+
+            if( page == null ) {
+                pageContext.getOut().println( "No template file called '" + TextUtil.replaceEntities( m_page ) + "'" );
+            } else {
                 pageContext.include( page );
             }
-        }
-        catch( ServletException e )
-        {
-            log.warn( "Including failed, got a servlet exception from sub-page. "+
-                      "Rethrowing the exception to the JSP engine.", e );
+        } catch( final ServletException e ) {
+            log.warn( "Including failed, got a servlet exception from sub-page. Rethrowing the exception to the JSP engine.", e );
             throw new JspException( e.getMessage() );
-        }
-        catch( IOException e )
-        {
-            log.warn( "I/O exception - probably the connection was broken. "+
-                      "Rethrowing the exception to the JSP engine.", e );
+        } catch( final IOException e ) {
+            log.warn( "I/O exception - probably the connection was broken. Rethrowing the exception to the JSP engine.", e );
             throw new JspException( e.getMessage() );
         }
 
         return EVAL_PAGE;
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/InsertDiffTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/InsertDiffTag.java
index 68152f6..7865639 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/InsertDiffTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/InsertDiffTag.java
@@ -20,7 +20,9 @@ package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.diff.DifferenceManager;
+import org.apache.wiki.pages.PageManager;
 
 import javax.servlet.jsp.JspWriter;
 import javax.servlet.jsp.PageContext;
@@ -51,7 +53,7 @@ public class InsertDiffTag extends WikiTagBase {
     protected String m_pageName;
 
     /** {@inheritDoc} */
-    public void initTag() {
+    @Override public void initTag() {
         super.initTag();
         m_pageName = null;
     }
@@ -75,15 +77,15 @@ public class InsertDiffTag extends WikiTagBase {
     }
 
     /** {@inheritDoc} */
-    public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+    @Override public final int doWikiStartTag() throws IOException {
+        final Engine engine = m_wikiContext.getEngine();
         final WikiContext ctx;
         
         if( m_pageName == null ) {
             ctx = m_wikiContext;
         } else {
             ctx = ( WikiContext )m_wikiContext.clone();
-            ctx.setPage( engine.getPageManager().getPage(m_pageName) );
+            ctx.setPage( engine.getManager( PageManager.class ).getPage(m_pageName) );
         }
 
         final Integer vernew = ( Integer )pageContext.getAttribute( ATTR_NEWVERSION, PageContext.REQUEST_SCOPE );
@@ -93,7 +95,7 @@ public class InsertDiffTag extends WikiTagBase {
 
         if( ctx.getPage() != null ) {
             final JspWriter out = pageContext.getOut();
-            final String diff = engine.getDifferenceManager().getDiff( ctx, vernew.intValue(), verold.intValue() );
+            final String diff = engine.getManager( DifferenceManager.class ).getDiff( ctx, vernew.intValue(), verold.intValue() );
 
             if( diff.length() == 0 ) {
                 return EVAL_BODY_INCLUDE;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/InsertPageTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/InsertPageTag.java
index e932cdd..1497f93 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/InsertPageTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/InsertPageTag.java
@@ -19,9 +19,11 @@
 package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.pages.PageManager;
+import org.apache.wiki.render.RenderingManager;
 
 import javax.servlet.jsp.JspWriter;
 import java.io.IOException;
@@ -58,7 +60,7 @@ public class InsertPageTag extends WikiTagBase {
     protected String m_pageName = null;
     private   int    m_mode = HTML;
 
-    public void initTag() {
+    @Override public void initTag() {
         super.initTag();
         m_pageName = null;
         m_mode = HTML;
@@ -82,8 +84,8 @@ public class InsertPageTag extends WikiTagBase {
         }
     }
 
-    public final int doWikiStartTag() throws IOException, ProviderException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+    @Override public final int doWikiStartTag() throws IOException, ProviderException {
+        final Engine engine = m_wikiContext.getEngine();
         final WikiPage insertedPage;
 
         //
@@ -94,9 +96,9 @@ public class InsertPageTag extends WikiTagBase {
 
         if( m_pageName == null ) {
             insertedPage = m_wikiContext.getPage();
-            if( !engine.getPageManager().wikiPageExists(insertedPage) ) return SKIP_BODY;
+            if( !engine.getManager( PageManager.class ).wikiPageExists(insertedPage) ) return SKIP_BODY;
         } else {
-            insertedPage = engine.getPageManager().getPage( m_pageName );
+            insertedPage = engine.getManager( PageManager.class ).getPage( m_pageName );
         }
 
         if( insertedPage != null ) {
@@ -109,8 +111,8 @@ public class InsertPageTag extends WikiTagBase {
             final WikiPage oldPage = m_wikiContext.setRealPage( insertedPage );
             
             switch( m_mode ) {
-              case HTML: out.print( engine.getRenderingManager().getHTML( m_wikiContext, insertedPage ) ); break;
-              case PLAIN: out.print( engine.getPageManager().getText( insertedPage ) ); break;
+              case HTML: out.print( engine.getManager( RenderingManager.class ).getHTML( m_wikiContext, insertedPage ) ); break;
+              case PLAIN: out.print( engine.getManager( PageManager.class ).getText( insertedPage ) ); break;
             }
             
             m_wikiContext.setRealPage( oldPage );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/LinkTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/LinkTag.java
index e464f59..c4609ed 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/LinkTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/LinkTag.java
@@ -20,11 +20,13 @@ package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.WikiProvider;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.attachment.Attachment;
+import org.apache.wiki.attachment.AttachmentManager;
+import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.util.TextUtil;
@@ -67,7 +69,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
 
     private BodyContent m_bodyContent;
 
-    public void initTag() {
+    @Override public void initTag() {
         super.initTag();
         m_version = m_cssClass = m_style = m_title = m_target = m_compareToVersion = m_rel = m_jsp = m_ref = m_accesskey = m_templatefile = null;
         m_context = WikiContext.VIEW;
@@ -147,7 +149,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
     /**
      * Support for ParamTag supplied parameters in body.
      */
-    public void setContainedParameter( final String name, final String value ) {
+    @Override public void setContainedParameter( final String name, final String value ) {
         if( name != null ) {
             if( m_containedParams == null ) {
                 m_containedParams = new HashMap<>();
@@ -165,7 +167,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
      */
     private String figureOutURL() throws ProviderException {
         String url = null;
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
 
         if( m_pageName == null ) {
             final WikiPage page = m_wikiContext.getPage();
@@ -206,7 +208,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
                 //
                 //  Internal wiki link, but is it an attachment link?
                 //
-                final WikiPage p = engine.getPageManager().getPage( m_pageName );
+                final WikiPage p = engine.getManager( PageManager.class ).getPage( m_pageName );
 
                 if( p instanceof Attachment ) {
                     url = m_wikiContext.getURL( WikiContext.ATTACH, m_pageName );
@@ -233,7 +235,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
                 }
             }
         } else if( m_pageName != null && m_pageName.length() > 0 ) {
-            final WikiPage p = engine.getPageManager().getPage( m_pageName );
+            final WikiPage p = engine.getManager( PageManager.class ).getPage( m_pageName );
 
             String parms = (m_version != null) ? "version="+getVersion() : null;
 
@@ -286,14 +288,14 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
     }
 
     private String makeBasicURL( final String context, final String page, String parms ) {
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
 
         if( context.equals( WikiContext.DIFF ) ) {
             int r1;
             int r2;
 
             if( DiffLinkTag.VER_LATEST.equals( getVersion() ) ) {
-                final WikiPage latest = engine.getPageManager().getPage( page, WikiProvider.LATEST_VERSION );
+                final WikiPage latest = engine.getManager( PageManager.class ).getPage( page, WikiProvider.LATEST_VERSION );
 
                 r1 = latest.getVersion();
             } else if( DiffLinkTag.VER_PREVIOUS.equals(getVersion()) ) {
@@ -306,7 +308,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
             }
 
             if( DiffLinkTag.VER_LATEST.equals(m_compareToVersion) ) {
-                final WikiPage latest = engine.getPageManager().getPage( page, WikiProvider.LATEST_VERSION );
+                final WikiPage latest = engine.getManager( PageManager.class ).getPage( page, WikiProvider.LATEST_VERSION );
 
                 r2 = latest.getVersion();
             } else if( DiffLinkTag.VER_PREVIOUS.equals(m_compareToVersion) ) {
@@ -324,13 +326,13 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
         return engine.getURL( m_context, m_pageName, parms );
     }
 
-    public int doWikiStartTag() throws Exception {
+    @Override public int doWikiStartTag() throws Exception {
         return EVAL_BODY_BUFFERED;
     }
 
-    public int doEndTag() {
+    @Override public int doEndTag() {
         try {
-            final WikiEngine engine = m_wikiContext.getEngine();
+            final Engine engine = m_wikiContext.getEngine();
             final JspWriter out = pageContext.getOut();
             final String url = figureOutURL();
 
@@ -344,8 +346,8 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
             sb.append( (m_accesskey != null) ? "accesskey=\""+m_accesskey+"\" " : "" );
             sb.append( (m_tabindex != null) ? "tabindex=\""+m_tabindex+"\" " : "" );
 
-            if( engine.getPageManager().getPage( m_pageName ) instanceof Attachment ) {
-                sb.append( engine.getAttachmentManager().forceDownload( m_pageName ) ? "download " : "" );
+            if( engine.getManager( PageManager.class ).getPage( m_pageName ) instanceof Attachment ) {
+                sb.append( engine.getManager( AttachmentManager.class ).forceDownload( m_pageName ) ? "download " : "" );
             }
 
             switch( m_format ) {
@@ -374,12 +376,12 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
         return EVAL_PAGE;
     }
 
-    public void setBodyContent( final BodyContent bc )
+    @Override public void setBodyContent( final BodyContent bc )
     {
         m_bodyContent = bc;
     }
 
-    public void doInitBody() {
+    @Override public void doInitBody() {
     }
 
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/LinkToTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/LinkToTag.java
index 8599189..8e48cbc 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/LinkToTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/LinkToTag.java
@@ -18,13 +18,14 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-
-import javax.servlet.jsp.JspWriter;
-
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.attachment.Attachment;
+import org.apache.wiki.attachment.AttachmentManager;
+
+import javax.servlet.jsp.JspWriter;
+import java.io.IOException;
+
 
 /**
  *  Writes a link to a Wiki page.  Body of the link becomes the actual text.
@@ -50,7 +51,7 @@ public class LinkToTag
     public String m_title = "";
     public String m_accesskey = "";
 
-    public void initTag()
+    @Override public void initTag()
     {
         super.initTag();
         m_version = null;
@@ -61,23 +62,23 @@ public class LinkToTag
         return m_version;
     }
 
-    public void setVersion( String arg )
+    public void setVersion( final String arg )
     {
         m_version = arg;
     }
 
-    public void setTitle( String title )
+    public void setTitle( final String title )
     {
         m_title = title;
     }
 
-    public void setAccesskey( String access )
+    public void setAccesskey( final String access )
     {
         m_accesskey = access;
     }
 
 
-    public int doWikiStartTag()
+    @Override public int doWikiStartTag()
         throws IOException
     {
         String     pageName = m_pageName;
@@ -85,7 +86,7 @@ public class LinkToTag
 
         if( m_pageName == null )
         {
-            WikiPage p = m_wikiContext.getPage();
+            final WikiPage p = m_wikiContext.getPage();
 
             if( p != null )
             {
@@ -99,9 +100,9 @@ public class LinkToTag
             }
         }
 
-        JspWriter out = pageContext.getOut();
-        String url;
-        String linkclass;
+        final JspWriter out = pageContext.getOut();
+        final String url;
+        final String linkclass;
         String forceDownload = "";
 
         if( isattachment )
@@ -110,7 +111,7 @@ public class LinkToTag
                                        (getVersion() != null) ? "version="+getVersion() : null );
             linkclass = "attachment";
 
-            if( m_wikiContext.getEngine().getAttachmentManager().forceDownload( pageName ) )
+            if( m_wikiContext.getEngine().getManager( AttachmentManager.class ).forceDownload( pageName ) )
             {
                 forceDownload = "download ";
             }
@@ -118,7 +119,7 @@ public class LinkToTag
         }
         else
         {
-        	StringBuilder params = new StringBuilder();
+        	final StringBuilder params = new StringBuilder();
             if( getVersion() != null ) params.append( "version="+getVersion() );
             if( getTemplate() != null ) params.append( (params.length()>0?"&amp;":"") + "skin="+getTemplate() );
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/NoSuchPageTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/NoSuchPageTag.java
index 40bfdb0..adbfacc 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/NoSuchPageTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/NoSuchPageTag.java
@@ -18,9 +18,10 @@
  */
 package org.apache.wiki.tags;
 
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.pages.PageManager;
 
 import java.io.IOException;
 
@@ -35,7 +36,7 @@ public class NoSuchPageTag extends WikiTagBase {
     
     private String m_pageName;
 
-    public void initTag() {
+    @Override public void initTag() {
         super.initTag();
         m_pageName = null;
     }
@@ -50,17 +51,17 @@ public class NoSuchPageTag extends WikiTagBase {
         return m_pageName;
     }
 
-    public int doWikiStartTag() throws IOException, ProviderException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+    @Override public int doWikiStartTag() throws IOException, ProviderException {
+        final Engine engine = m_wikiContext.getEngine();
         final WikiPage page;
 
         if( m_pageName == null ) {
             page = m_wikiContext.getPage();
         } else {
-            page = engine.getPageManager().getPage( m_pageName );
+            page = engine.getManager( PageManager.class ).getPage( m_pageName );
         }
 
-        if( page != null && engine.getPageManager().wikiPageExists( page.getName(), page.getVersion() ) ) {
+        if( page != null && engine.getManager( PageManager.class ).wikiPageExists( page.getName(), page.getVersion() ) ) {
             return SKIP_BODY;
         }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/PageInfoLinkTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/PageInfoLinkTag.java
index bcc170b..1ecbd73 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/PageInfoLinkTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/PageInfoLinkTag.java
@@ -19,8 +19,9 @@
 package org.apache.wiki.tags;
 
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.pages.PageManager;
 
 import javax.servlet.jsp.JspWriter;
 import java.io.IOException;
@@ -54,8 +55,8 @@ public class PageInfoLinkTag extends WikiLinkTag {
         m_accesskey = access;
     }
     
-    public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+    @Override public final int doWikiStartTag() throws IOException {
+        final Engine engine = m_wikiContext.getEngine();
         String     pageName = m_pageName;
 
         if( m_pageName == null ) {
@@ -67,7 +68,7 @@ public class PageInfoLinkTag extends WikiLinkTag {
             }
         }
 
-        if( engine.getPageManager().wikiPageExists(pageName) ) {
+        if( engine.getManager( PageManager.class ).wikiPageExists(pageName) ) {
             final JspWriter out = pageContext.getOut();
             final String url = m_wikiContext.getURL( WikiContext.INFO, pageName );
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/PageNameTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/PageNameTag.java
index 4372b04..7841a8c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/PageNameTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/PageNameTag.java
@@ -18,9 +18,10 @@
  */
 package org.apache.wiki.tags;
 
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.attachment.Attachment;
+import org.apache.wiki.render.RenderingManager;
 import org.apache.wiki.util.TextUtil;
 
 import java.io.IOException;
@@ -34,15 +35,16 @@ public class PageNameTag extends WikiTagBase {
 
     private static final long serialVersionUID = 0L;
 
+    @Override
     public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
         final WikiPage page = m_wikiContext.getPage();
 
         if( page != null ) {
             if( page instanceof Attachment ) {
                 pageContext.getOut().print( TextUtil.replaceEntities( ((Attachment)page).getFileName() ) );
             } else {
-                pageContext.getOut().print( engine.getRenderingManager().beautifyTitle( m_wikiContext.getName() ) );
+                pageContext.getOut().print( engine.getManager( RenderingManager.class ).beautifyTitle( m_wikiContext.getName() ) );
             }
         }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/PageSizeTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/PageSizeTag.java
index 0e5764f..7dba42c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/PageSizeTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/PageSizeTag.java
@@ -19,9 +19,10 @@
 package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.pages.PageManager;
 
 import java.io.IOException;
 
@@ -35,16 +36,17 @@ public class PageSizeTag extends WikiTagBase {
     private static final long serialVersionUID = 0L;
     private static final Logger log = Logger.getLogger( PageSizeTag.class );
     
+    @Override
     public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
         final WikiPage page = m_wikiContext.getPage();
 
         try {
             if( page != null ) {
                 long size = page.getSize();
 
-                if( size == -1 && engine.getPageManager().wikiPageExists( page ) ) { // should never happen with attachments
-                    size = engine.getPageManager().getPureText( page.getName(), page.getVersion() ).length();
+                if( size == -1 && engine.getManager( PageManager.class ).wikiPageExists( page ) ) { // should never happen with attachments
+                    size = engine.getManager( PageManager.class ).getPureText( page.getName(), page.getVersion() ).length();
                     page.setSize( size );
                 }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/ParentPageNameTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/ParentPageNameTag.java
index 6f32d83..44cd9d8 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/ParentPageNameTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/ParentPageNameTag.java
@@ -18,9 +18,10 @@
  */
 package org.apache.wiki.tags;
 
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.attachment.Attachment;
+import org.apache.wiki.render.RenderingManager;
 
 import java.io.IOException;
 
@@ -38,12 +39,12 @@ public class ParentPageNameTag extends WikiTagBase {
      */
     @Override
     public final int doWikiStartTag() throws IOException {
-        final WikiEngine engine = m_wikiContext.getEngine();
+        final Engine engine = m_wikiContext.getEngine();
         final WikiPage page = m_wikiContext.getPage();
 
         if( page != null ) {
             if( page instanceof Attachment ) {
-                pageContext.getOut().print( engine.getRenderingManager().beautifyTitle( ((Attachment)page).getParentName()) );
+                pageContext.getOut().print( engine.getManager( RenderingManager.class ).beautifyTitle( ((Attachment)page).getParentName()) );
             } else {
                 String name = page.getName();
                 final int entrystart = name.indexOf("_blogentry_");
@@ -56,7 +57,7 @@ public class ParentPageNameTag extends WikiTagBase {
                     name = name.substring( 0, commentstart );
                 }
 
-                pageContext.getOut().print( engine.getRenderingManager().beautifyTitle(name) );
+                pageContext.getOut().print( engine.getManager( RenderingManager.class ).beautifyTitle(name) );
             }
         }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/PermissionTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/PermissionTag.java
index a6a246b..e3f6c3d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/PermissionTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/PermissionTag.java
@@ -28,6 +28,7 @@ import org.apache.wiki.auth.permissions.AllPermission;
 import org.apache.wiki.auth.permissions.GroupPermission;
 import org.apache.wiki.auth.permissions.PermissionFactory;
 import org.apache.wiki.auth.permissions.WikiPermission;
+import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.ui.Command;
 import org.apache.wiki.ui.GroupCommand;
 
@@ -104,7 +105,7 @@ public class PermissionTag extends WikiTagBase {
     private boolean checkPermission( final String permission ) {
         final WikiSession session        = m_wikiContext.getWikiSession();
         final WikiPage    page           = m_wikiContext.getPage();
-        final AuthorizationManager mgr   = m_wikiContext.getEngine().getAuthorizationManager();
+        final AuthorizationManager mgr   = m_wikiContext.getEngine().getManager( AuthorizationManager.class );
         boolean gotPermission      = false;
         
         if ( CREATE_GROUPS.equals( permission ) || CREATE_PAGES.equals( permission ) || EDIT_PREFERENCES.equals( permission ) || EDIT_PROFILE.equals( permission ) || LOGIN.equals( permission ) ) {
@@ -130,7 +131,7 @@ public class PermissionTag extends WikiTagBase {
             //  Edit tag also checks that we're not trying to edit an old version: they cannot be edited.
             //
             if( EDIT.equals(permission) ) {
-                final WikiPage latest = m_wikiContext.getEngine().getPageManager().getPage( page.getName() );
+                final WikiPage latest = m_wikiContext.getEngine().getManager( PageManager.class ).getPage( page.getName() );
                 if( page.getVersion() != WikiProvider.LATEST_VERSION && latest.getVersion() != page.getVersion() ) {
                     return false;
                 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/PluginTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/PluginTag.java
index 55d560f..c971d71 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/PluginTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/PluginTag.java
@@ -18,17 +18,16 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-import java.util.Map;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.BodyContent;
-
 import org.apache.log4j.Logger;
-import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.engine.PluginManager;
 import org.apache.wiki.api.exceptions.PluginException;
 
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.BodyContent;
+import java.io.IOException;
+import java.util.Map;
+
 /**
  *  Inserts any Wiki plugin.  The body of the tag becomes then
  *  the body for the plugin.
@@ -67,7 +66,7 @@ public class PluginTag
      *  
      *  @param p Name of the plugin.
      */
-    public void setPlugin( String p )
+    public void setPlugin( final String p )
     {
         m_plugin = p;
     }
@@ -77,7 +76,7 @@ public class PluginTag
      *  
      *  @param a Arguments string.
      */
-    public void setArgs( String a )
+    public void setArgs( final String a )
     {
         m_args = a;
     }
@@ -92,22 +91,20 @@ public class PluginTag
         return EVAL_BODY_BUFFERED;
     }
 
-    private String executePlugin( String plugin, String args, String body )
-        throws PluginException, IOException
-    {
-        WikiEngine engine = m_wikiContext.getEngine();
-        PluginManager pm  = engine.getPluginManager();
+    private String executePlugin( final String plugin, final String args, final String body ) throws PluginException, IOException {
+        final Engine engine = m_wikiContext.getEngine();
+        final PluginManager pm  = engine.getManager( PluginManager.class );
 
         m_evaluated = true;
 
-        Map<String, String> argmap = pm.parseArgs( args );
+        final Map<String, String> argmap = pm.parseArgs( args );
         
         if( body != null ) 
         {
             argmap.put( "_body", body );
         }
 
-        String result = pm.execute( m_wikiContext, plugin, argmap );
+        final String result = pm.execute( m_wikiContext, plugin, argmap );
 
         return result;        
     }
@@ -125,7 +122,7 @@ public class PluginTag
             {
                 pageContext.getOut().write( executePlugin( m_plugin, m_args, null ) );
             }
-            catch( Exception e )
+            catch( final Exception e )
             {
                 log.error( "Failed to insert plugin", e );
                 throw new JspException( "Tag failed, check logs: "+e.getMessage() );
@@ -143,11 +140,11 @@ public class PluginTag
     {
         try
         {
-            BodyContent bc = getBodyContent();
+            final BodyContent bc = getBodyContent();
             
             getPreviousOut().write( executePlugin( m_plugin, m_args, (bc != null) ? bc.getString() : null) );
         }
-        catch( Exception e )
+        catch( final Exception e )
         {
             log.error( "Failed to insert plugin", e );
             throw new JspException( "Tag failed, check logs: "+e.getMessage() );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/RSSImageLinkTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/RSSImageLinkTag.java
index 3e35278..151a03c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/RSSImageLinkTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/RSSImageLinkTag.java
@@ -18,18 +18,17 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-
-import javax.servlet.jsp.JspWriter;
-
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.i18n.InternationalizationManager;
 import org.apache.wiki.preferences.Preferences;
 import org.apache.wiki.rss.RSSGenerator;
 
+import javax.servlet.jsp.JspWriter;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
 /**
  *  Writes an image link to a JSPWiki RSS file.  If RSS generation has
  *  been turned off in jspwiki.properties, returns an empty string.
@@ -62,12 +61,12 @@ public class RSSImageLinkTag
      *
      *  @param title A string for the title.
      */
-    public void setTitle( String title )
+    public void setTitle( final String title )
     {
         m_title = title;
     }
 
-    public void setMode( String mode )
+    public void setMode( final String mode )
     {
         m_mode = mode;
     }
@@ -87,31 +86,21 @@ public class RSSImageLinkTag
      *  {@inheritDoc}
      */
     @Override
-    public final int doWikiStartTag()
-        throws IOException
-    {
-        WikiEngine engine = m_wikiContext.getEngine();
-        JspWriter out = pageContext.getOut();
-        ResourceBundle rb = Preferences.getBundle( m_wikiContext, InternationalizationManager.CORE_BUNDLE );
-
-        if( engine.getRSSGenerator() != null && engine.getRSSGenerator().isEnabled() )
-        {
-            if( RSSGenerator.MODE_FULL.equals(m_mode) )
-            {
-                String rssURL = engine.getGlobalRSSURL();
-
-                if( rssURL != null )
-                {
+    public final int doWikiStartTag() throws IOException {
+        final Engine engine = m_wikiContext.getEngine();
+        final JspWriter out = pageContext.getOut();
+        final ResourceBundle rb = Preferences.getBundle( m_wikiContext, InternationalizationManager.CORE_BUNDLE );
+        if( engine.getManager( RSSGenerator.class ) != null && engine.getManager( RSSGenerator.class ).isEnabled() ) {
+            if( RSSGenerator.MODE_FULL.equals(m_mode) ) {
+                final String rssURL = engine.getGlobalRSSURL();
+                if( rssURL != null ) {
                     out.print("<a class=\"feed\" href=\""+rssURL);
                     out.print( " title='"+rb.getString( "rss.title.full" )+"'>" );
                     out.print( "&nbsp;</a> ");
                 }
-            }
-            else
-            {
-                String page = m_pageName != null ? m_pageName : m_wikiContext.getPage().getName();
-
-                String params = "page="+page+"&mode="+m_mode;
+            } else {
+                final String page = m_pageName != null ? m_pageName : m_wikiContext.getPage().getName();
+                final String params = "page="+page+"&mode="+m_mode;
                 out.print( "<a href='"+m_wikiContext.getURL( WikiContext.NONE, "rss.jsp", params ));
                 out.print( "' class='feed'" );
                 out.print( " title='"+MessageFormat.format( rb.getString( "rss.title" ), page )+"'>" );
@@ -121,4 +110,5 @@ public class RSSImageLinkTag
 
         return SKIP_BODY;
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/SearchResultIteratorTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/SearchResultIteratorTag.java
index f3f8ed2..a3da953 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/SearchResultIteratorTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/SearchResultIteratorTag.java
@@ -20,7 +20,7 @@ package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.search.SearchResult;
 import org.apache.wiki.ui.Command;
 import org.apache.wiki.ui.PageCommand;
@@ -41,11 +41,9 @@ import java.util.Collection;
  *
  *  @since 2.0
  */
-
 // FIXME: Shares MUCH too much in common with IteratorTag.  Must refactor.
-public class SearchResultIteratorTag
-    extends IteratorTag
-{
+public class SearchResultIteratorTag extends IteratorTag {
+
     private static final long serialVersionUID = 0L;
     
     private   int         m_maxItems;
@@ -54,30 +52,26 @@ public class SearchResultIteratorTag
     
     private static final Logger log = Logger.getLogger(SearchResultIteratorTag.class);
     
-    public void release()
+    @Override public void release()
     {
         super.release();
         m_maxItems = m_count = 0;
     }
 
-    public void setMaxItems( int arg )
+    public void setMaxItems( final int arg )
     {
         m_maxItems = arg;
     }
 
-    public void setStart( int arg )
+    public void setStart( final int arg )
     {
         m_start = arg;
     }
     
-    public final int doStartTag()
-    {
-        //
+    @Override public final int doStartTag() {
         //  Do lazy eval if the search results have not been set.
-        //
-        if( m_iterator == null )
-        {
-            Collection< ? > searchresults = (Collection< ? >)pageContext.getAttribute( "searchresults", PageContext.REQUEST_SCOPE );
+        if( m_iterator == null ) {
+            final Collection< ? > searchresults = (Collection< ? >)pageContext.getAttribute( "searchresults", PageContext.REQUEST_SCOPE );
             setList( searchresults );
             
             int skip = 0;
@@ -93,18 +87,16 @@ public class SearchResultIteratorTag
         return nextResult();
     }
 
-    private int nextResult()
-    {
-        if( m_iterator != null && m_iterator.hasNext() && m_count++ < m_maxItems )
-        {
-            SearchResult r = (SearchResult) m_iterator.next();
-            
+    private int nextResult() {
+        if( m_iterator != null && m_iterator.hasNext() && m_count++ < m_maxItems ) {
+            final SearchResult r = ( SearchResult )m_iterator.next();
+
             // Create a wiki context for the result
-            WikiEngine engine = m_wikiContext.getEngine();
-            HttpServletRequest request = m_wikiContext.getHttpRequest();
-            Command command = PageCommand.VIEW.targetedCommand( r.getPage() );
-            WikiContext context = new WikiContext( engine, request, command );
-            
+            final Engine engine = m_wikiContext.getEngine();
+            final HttpServletRequest request = m_wikiContext.getHttpRequest();
+            final Command command = PageCommand.VIEW.targetedCommand( r.getPage() );
+            final WikiContext context = new WikiContext( engine, request, command );
+
             // Stash it in the page context
             pageContext.setAttribute( WikiContext.ATTR_CONTEXT, context, PageContext.REQUEST_SCOPE );
             pageContext.setAttribute( getId(), r );
@@ -115,7 +107,7 @@ public class SearchResultIteratorTag
         return SKIP_BODY;
     }
 
-    public int doAfterBody() {
+    @Override public int doAfterBody() {
         if( bodyContent != null ) {
             try {
                 final JspWriter out = getPreviousOut();
@@ -130,7 +122,7 @@ public class SearchResultIteratorTag
         return nextResult();
     }
 
-    public int doEndTag() {
+    @Override public int doEndTag() {
         m_iterator = null;
         return super.doEndTag();
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/TranslateTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/TranslateTag.java
index f4355d2..48dec5e 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/TranslateTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/TranslateTag.java
@@ -20,6 +20,7 @@ package org.apache.wiki.tags;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
+import org.apache.wiki.render.RenderingManager;
 
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.PageContext;
@@ -38,7 +39,7 @@ public class TranslateTag
     
     private static final Logger log = Logger.getLogger( TranslateTag.class );
 
-    public final int doAfterBody() throws JspException {
+    @Override public final int doAfterBody() throws JspException {
         try {
             WikiContext context = (WikiContext) pageContext.getAttribute( WikiContext.ATTR_CONTEXT, PageContext.REQUEST_SCOPE );
 
@@ -52,7 +53,7 @@ public class TranslateTag
 
             if( wikiText != null ) {
                 wikiText = wikiText.trim();
-                final String result = context.getEngine().getRenderingManager().textToHTML( context, wikiText );
+                final String result = context.getEngine().getManager( RenderingManager.class ).textToHTML( context, wikiText );
                 getPreviousOut().write( result );
             }
         } catch( final Exception e ) {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/UserCheckTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/UserCheckTag.java
index 687d977..57fa5eb 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/UserCheckTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/UserCheckTag.java
@@ -112,7 +112,7 @@ public class UserCheckTag extends WikiTagBase {
     public final int doWikiStartTag() {
         final WikiSession session = m_wikiContext.getWikiSession();
         final String status = session.getStatus();
-        final AuthenticationManager mgr = m_wikiContext.getEngine().getAuthenticationManager();
+        final AuthenticationManager mgr = m_wikiContext.getEngine().getManager( AuthenticationManager.class );
         final boolean containerAuth = mgr.isContainerAuthenticated();
         final boolean cookieAssertions = mgr.allowsCookieAssertions();
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/UserNameTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/UserNameTag.java
index 3989c6c..9de5ee7 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/UserNameTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/UserNameTag.java
@@ -18,26 +18,25 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-import java.security.Principal;
-import java.util.regex.Pattern;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiSession;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.i18n.InternationalizationManager;
 import org.apache.wiki.preferences.Preferences;
 import org.apache.wiki.util.TextUtil;
 
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.security.Principal;
+import java.util.regex.Pattern;
+
+
 /**
- *  Returns the current user name, or empty, if the user has not been
- *  validated.
+ *  Returns the current user name, or empty, if the user has not been validated.
  *
  *  @since 2.0
  */
-public class UserNameTag extends WikiTagBase
-{
+public class UserNameTag extends WikiTagBase {
+
     private static final long serialVersionUID = 0L;
 
     private static String notStartWithBlankOrColon = "^[^( |:)]";
@@ -46,20 +45,15 @@ public class UserNameTag extends WikiTagBase
 
     private static final Pattern VALID_USER_NAME_PATTERN = Pattern.compile(notStartWithBlankOrColon + noColons);
 
-    public final int doWikiStartTag() throws IOException
-    {
-        WikiEngine engine = this.m_wikiContext.getEngine();
-        WikiSession wikiSession = WikiSession.getWikiSession(engine, (HttpServletRequest) pageContext.getRequest());
-        Principal user = wikiSession.getUserPrincipal();
+    @Override public final int doWikiStartTag() throws IOException {
+        final Engine engine = m_wikiContext.getEngine();
+        final WikiSession wikiSession = WikiSession.getWikiSession(engine, (HttpServletRequest) pageContext.getRequest());
+        final Principal user = wikiSession.getUserPrincipal();
 
-        if (user != null)
-        {
-            if (VALID_USER_NAME_PATTERN.matcher(user.getName()).matches())
-            {
-                pageContext.getOut().print(TextUtil.replaceEntities(user.getName()));
-            }
-            else
-            {
+        if( user != null ) {
+            if( VALID_USER_NAME_PATTERN.matcher( user.getName() ).matches() ) {
+                pageContext.getOut().print( TextUtil.replaceEntities( user.getName() ) );
+            } else {
                 pageContext.getOut().print( Preferences.getBundle( m_wikiContext, InternationalizationManager.CORE_BUNDLE )
                                                        .getString( "security.user.fullname.invalid" ) );
             }
@@ -67,4 +61,5 @@ public class UserNameTag extends WikiTagBase
 
         return SKIP_BODY;
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/UserProfileTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/UserProfileTag.java
index 5c6a75e..7d6fa86 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/UserProfileTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/UserProfileTag.java
@@ -18,17 +18,9 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ResourceBundle;
-
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiSession;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.auth.AuthenticationManager;
 import org.apache.wiki.auth.GroupPrincipal;
 import org.apache.wiki.auth.UserManager;
@@ -39,6 +31,13 @@ import org.apache.wiki.i18n.InternationalizationManager;
 import org.apache.wiki.preferences.Preferences;
 import org.apache.wiki.util.TextUtil;
 
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ResourceBundle;
+
 /**
  * <p>
  * Returns user profile attributes, or empty strings if the user has not been
@@ -72,8 +71,8 @@ import org.apache.wiki.util.TextUtil;
  * negative condition (for example, <code>!exists</code>).</p>
  * @since 2.3
  */
-public class UserProfileTag extends WikiTagBase
-{
+public class UserProfileTag extends WikiTagBase {
+
     private static final long serialVersionUID = 3258410625431582003L;
 
     public  static final String BLANK = "(not set)";
@@ -112,99 +111,70 @@ public class UserProfileTag extends WikiTagBase
 
     private String             m_prop;
 
-    public void initTag()
-    {
+    @Override
+    public void initTag() {
         super.initTag();
         m_prop = null;
     }
 
-    public final int doWikiStartTag() throws IOException, WikiSecurityException
-    {
-        UserManager manager = m_wikiContext.getEngine().getUserManager();
-        UserProfile profile = manager.getUserProfile( m_wikiContext.getWikiSession() );
+    @Override
+    public final int doWikiStartTag() throws IOException, WikiSecurityException {
+        final UserManager manager = m_wikiContext.getEngine().getManager( UserManager.class );
+        final UserProfile profile = manager.getUserProfile( m_wikiContext.getWikiSession() );
         String result = null;
 
-        if ( EXISTS.equals( m_prop ) || NOT_NEW.equals( m_prop ) )
-        {
+        if( EXISTS.equals( m_prop ) || NOT_NEW.equals( m_prop ) ) {
             return profile.isNew() ? SKIP_BODY : EVAL_BODY_INCLUDE;
-        }
-        else if ( NEW.equals( m_prop ) || NOT_EXISTS.equals( m_prop ) )
-        {
+        } else if( NEW.equals( m_prop ) || NOT_EXISTS.equals( m_prop ) ) {
             return profile.isNew() ? EVAL_BODY_INCLUDE : SKIP_BODY;
-        }
-
-        else if ( CREATED.equals( m_prop ) && profile.getCreated() != null )
-        {
+        } else if( CREATED.equals( m_prop ) && profile.getCreated() != null ) {
             result = profile.getCreated().toString();
-        }
-        else if ( EMAIL.equals( m_prop ) )
-        {
+        } else if( EMAIL.equals( m_prop ) ) {
             result = profile.getEmail();
-        }
-        else if ( FULLNAME.equals( m_prop ) )
-        {
+        } else if( FULLNAME.equals( m_prop ) ) {
             result = profile.getFullname();
-        }
-        else if ( GROUPS.equals( m_prop ) )
-        {
+        } else if( GROUPS.equals( m_prop ) ) {
             result = printGroups( m_wikiContext );
-        }
-        else if ( LOGINNAME.equals( m_prop ) )
-        {
+        } else if( LOGINNAME.equals( m_prop ) ) {
             result = profile.getLoginName();
-        }
-        else if ( MODIFIED.equals( m_prop ) && profile.getLastModified() != null )
-        {
+        } else if( MODIFIED.equals( m_prop ) && profile.getLastModified() != null ) {
             result = profile.getLastModified().toString();
-        }
-        else if ( ROLES.equals( m_prop ) )
-        {
+        } else if( ROLES.equals( m_prop ) ) {
             result = printRoles( m_wikiContext );
-        }
-        else if ( WIKINAME.equals( m_prop ) )
-        {
+        } else if( WIKINAME.equals( m_prop ) ) {
             result = profile.getWikiName();
 
-            if( result == null )
-            {
+            if( result == null ) {
                 //
                 //  Default back to the declared user name
                 //
-                WikiEngine engine = this.m_wikiContext.getEngine();
-                WikiSession wikiSession = WikiSession.getWikiSession( engine, (HttpServletRequest)pageContext.getRequest() );
-                Principal user = wikiSession.getUserPrincipal();
+                final Engine engine = this.m_wikiContext.getEngine();
+                final WikiSession wikiSession = WikiSession.getWikiSession( engine, ( HttpServletRequest )pageContext.getRequest() );
+                final Principal user = wikiSession.getUserPrincipal();
 
-                if( user != null )
-                {
+                if( user != null ) {
                     result = user.getName();
                 }
             }
-        }
-        else if ( CHANGE_PASSWORD.equals( m_prop ) || CHANGE_LOGIN_NAME.equals( m_prop ) )
-        {
-            AuthenticationManager authMgr = m_wikiContext.getEngine().getAuthenticationManager();
-            if ( !authMgr.isContainerAuthenticated() )
-            {
+        } else if( CHANGE_PASSWORD.equals( m_prop ) || CHANGE_LOGIN_NAME.equals( m_prop ) ) {
+            final AuthenticationManager authMgr = m_wikiContext.getEngine().getManager( AuthenticationManager.class );
+            if( !authMgr.isContainerAuthenticated() ) {
                 return EVAL_BODY_INCLUDE;
             }
-        }
-        else if ( NOT_CHANGE_PASSWORD.equals( m_prop ) || NOT_CHANGE_LOGIN_NAME.equals( m_prop ) )
-        {
-            AuthenticationManager authMgr = m_wikiContext.getEngine().getAuthenticationManager();
-            if ( authMgr.isContainerAuthenticated() )
-            {
+        } else if( NOT_CHANGE_PASSWORD.equals( m_prop ) || NOT_CHANGE_LOGIN_NAME.equals( m_prop ) ) {
+            final AuthenticationManager authMgr = m_wikiContext.getEngine().getManager( AuthenticationManager.class );
+            if( authMgr.isContainerAuthenticated() ) {
                 return EVAL_BODY_INCLUDE;
             }
         }
 
-        if ( result != null )
-        {
-            pageContext.getOut().print( TextUtil.replaceEntities(result) );
+        if( result != null ) {
+            pageContext.getOut().print( TextUtil.replaceEntities( result ) );
         }
         return SKIP_BODY;
     }
 
-    public void setProperty( String property )
+    public void setProperty( final String property )
     {
         m_prop = property.toLowerCase().trim();
     }
@@ -216,34 +186,28 @@ public class UserProfileTag extends WikiTagBase
      * and extracting those that are of type Group.
      * @return the list of groups, sorted by name
      */
-    public static String printGroups( WikiContext context )
-    {
-        Principal[] roles = context.getWikiSession().getRoles();
-        List<String> tempRoles = new ArrayList<String>();
-        ResourceBundle rb = Preferences.getBundle( context, InternationalizationManager.CORE_BUNDLE );
-        
-        for ( Principal role : roles )
-        {
-            if( role instanceof GroupPrincipal )
-            {
+    public static String printGroups( final WikiContext context ) {
+        final Principal[] roles = context.getWikiSession().getRoles();
+        final List< String > tempRoles = new ArrayList<>();
+        final ResourceBundle rb = Preferences.getBundle( context, InternationalizationManager.CORE_BUNDLE );
+
+        for( final Principal role : roles ) {
+            if( role instanceof GroupPrincipal ) {
                 tempRoles.add( role.getName() );
             }
         }
-        if ( tempRoles.size() == 0 )
-        {
-            return rb.getString("userprofile.nogroups");
+        if( tempRoles.size() == 0 ) {
+            return rb.getString( "userprofile.nogroups" );
         }
 
-        StringBuilder sb = new StringBuilder();
-        for ( int i = 0; i < tempRoles.size(); i++ )
-        {
-            String name = tempRoles.get( i );
+        final StringBuilder sb = new StringBuilder();
+        for( int i = 0; i < tempRoles.size(); i++ ) {
+            final String name = tempRoles.get( i );
 
             sb.append( name );
-            if ( i < ( tempRoles.size() - 1 ) )
-            {
-                sb.append(',');
-                sb.append(' ');
+            if( i < ( tempRoles.size() - 1 ) ) {
+                sb.append( ',' );
+                sb.append( ' ' );
             }
 
         }
@@ -257,37 +221,32 @@ public class UserProfileTag extends WikiTagBase
      * and extracting those that are of type Role.
      * @return the list of roles, sorted by name
      */
-    public static String printRoles( WikiContext context )
-    {
-        Principal[] roles = context.getWikiSession().getRoles();
-        List<String> tempRoles = new ArrayList<String>();
-        ResourceBundle rb = Preferences.getBundle( context, InternationalizationManager.CORE_BUNDLE );
-        
-        for ( Principal role : roles )
-        {
-            if ( role instanceof Role )
-            {
+    public static String printRoles( final WikiContext context ) {
+        final Principal[] roles = context.getWikiSession().getRoles();
+        final List< String > tempRoles = new ArrayList<>();
+        final ResourceBundle rb = Preferences.getBundle( context, InternationalizationManager.CORE_BUNDLE );
+
+        for( final Principal role : roles ) {
+            if( role instanceof Role ) {
                 tempRoles.add( role.getName() );
             }
         }
-        if ( tempRoles.size() == 0 )
-        {
+        if( tempRoles.size() == 0 ) {
             return rb.getString( "userprofile.noroles" );
         }
 
-        StringBuilder sb = new StringBuilder();
-        for ( int i = 0; i < tempRoles.size(); i++ )
-        {
-            String name = tempRoles.get( i );
+        final StringBuilder sb = new StringBuilder();
+        for( int i = 0; i < tempRoles.size(); i++ ) {
+            final String name = tempRoles.get( i );
 
             sb.append( name );
-            if ( i < ( tempRoles.size() - 1 ) )
-            {
-                sb.append(',');
-                sb.append(' ');
+            if( i < ( tempRoles.size() - 1 ) ) {
+                sb.append( ',' );
+                sb.append( ' ' );
             }
 
         }
         return sb.toString();
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tags/VariableTag.java b/jspwiki-main/src/main/java/org/apache/wiki/tags/VariableTag.java
index 82328b0..45ccae6 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/VariableTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/VariableTag.java
@@ -18,14 +18,14 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.JspException;
-
-import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.NoSuchVariableException;
 import org.apache.wiki.util.TextUtil;
+import org.apache.wiki.variables.VariableManager;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import java.io.IOException;
 
 /**
  *  Returns the value of an Wiki variable.
@@ -43,16 +43,14 @@ import org.apache.wiki.util.TextUtil;
  *
  *  @since 2.0
  */
-public class VariableTag
-    extends WikiTagBase
-{
+public class VariableTag extends WikiTagBase {
+
     private static final long serialVersionUID = 0L;
 
     private String m_var      = null;
     private String m_default  = null;
 
-    public void initTag()
-    {
+    @Override public void initTag() {
         super.initTag();
         m_var = m_default = null;
     }
@@ -62,49 +60,40 @@ public class VariableTag
         return m_var;
     }
 
-    public void setVar( String arg )
+    public void setVar( final String arg )
     {
         m_var = arg;
     }
 
-    public void setDefault( String arg )
+    public void setDefault( final String arg )
     {
         m_default = arg;
     }
 
-    public final int doWikiStartTag()
-        throws JspException,
-               IOException
-    {
-        WikiEngine engine   = m_wikiContext.getEngine();
-        JspWriter out = pageContext.getOut();
+    @Override
+    public final int doWikiStartTag() throws JspException, IOException {
+        final Engine engine = m_wikiContext.getEngine();
+        final JspWriter out = pageContext.getOut();
         String msg = null;
         String value = null;
 
-        try
-        {
-            value = engine.getVariableManager().getValue( m_wikiContext,
-                                                          getVar() );
-        }
-        catch( NoSuchVariableException e )
-        {
-            msg = "No such variable: "+e.getMessage();
-        }
-        catch( IllegalArgumentException e )
-        {
-            msg = "Incorrect variable name: "+e.getMessage();
+        try {
+            value = engine.getManager( VariableManager.class ).getValue( m_wikiContext, getVar() );
+        } catch( final NoSuchVariableException e ) {
+            msg = "No such variable: " + e.getMessage();
+        } catch( final IllegalArgumentException e ) {
+            msg = "Incorrect variable name: " + e.getMessage();
         }
 
-        if( value == null )
-        {
+        if( value == null ) {
             value = m_default;
         }
 
-        if( value == null )
-        {
+        if( value == null ) {
             value = msg;
         }
         out.write( TextUtil.replaceEntities(value) );
         return SKIP_BODY;
     }
+
 }