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/01/09 22:17:17 UTC

[jspwiki] 07/32: JSPWIKI-120: getPage( String ) and getPage( String, int ) methods from WikiEngine moved to PageManager

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 94d45984877d3cdee9c629690fdcdf8e1fcfb757
Author: juanpablo <ju...@apache.org>
AuthorDate: Sat Jan 4 01:50:11 2020 +0100

    JSPWIKI-120: getPage( String ) and getPage( String, int ) methods from WikiEngine moved to PageManager
---
 .../src/main/java/org/apache/wiki/WikiContext.java |  45 ++-
 .../src/main/java/org/apache/wiki/WikiEngine.java  |  49 +---
 .../apache/wiki/attachment/AttachmentManager.java  |  38 +--
 .../org/apache/wiki/auth/AuthorizationManager.java |   2 +-
 .../apache/wiki/auth/acl/DefaultAclManager.java    |  36 +--
 .../apache/wiki/content/DefaultPageRenamer.java    |  12 +-
 .../java/org/apache/wiki/filters/SpamFilter.java   |  29 +-
 .../org/apache/wiki/pages/DefaultPageManager.java  |  31 +-
 .../java/org/apache/wiki/pages/PageManager.java    |  25 +-
 .../apache/wiki/plugin/AbstractReferralPlugin.java |   2 +-
 .../java/org/apache/wiki/plugin/InsertPage.java    |  36 +--
 .../apache/wiki/plugin/ReferringPagesPlugin.java   |   2 +-
 .../java/org/apache/wiki/plugin/WeblogPlugin.java  |   2 +-
 .../wiki/references/DefaultReferenceManager.java   |   2 +-
 .../org/apache/wiki/rpc/atom/AtomAPIServlet.java   |  27 +-
 .../apache/wiki/search/LuceneSearchProvider.java   |   2 +-
 .../java/org/apache/wiki/search/SearchManager.java |  37 +--
 .../java/org/apache/wiki/tags/CheckVersionTag.java |   6 +-
 .../java/org/apache/wiki/tags/DiffLinkTag.java     | 103 +++----
 .../java/org/apache/wiki/tags/EditLinkTag.java     |   8 +-
 .../java/org/apache/wiki/tags/InsertDiffTag.java   |   2 +-
 .../java/org/apache/wiki/tags/InsertPageTag.java   |  51 ++--
 .../main/java/org/apache/wiki/tags/LinkTag.java    |  27 +-
 .../java/org/apache/wiki/tags/NoSuchPageTag.java   |  37 +--
 .../java/org/apache/wiki/tags/PermissionTag.java   | 103 +++----
 .../apache/wiki/tasks/pages/SaveWikiPageTask.java  |   2 +-
 .../java/org/apache/wiki/ui/CommandResolver.java   |   2 +-
 .../org/apache/wiki/xmlrpc/MetaWeblogHandler.java  |  30 +-
 .../java/org/apache/wiki/xmlrpc/RPCHandler.java    |  24 +-
 .../org/apache/wiki/xmlrpc/RPCHandlerUTF8.java     |  22 +-
 .../src/test/java/org/apache/wiki/TestEngine.java  |  90 +++---
 .../test/java/org/apache/wiki/WikiEngineTest.java  | 312 ++-------------------
 .../apache/wiki/auth/AuthorizationManagerTest.java |   8 +-
 .../java/org/apache/wiki/auth/UserManagerTest.java |   8 +-
 .../wiki/auth/acl/DefaultAclManagerTest.java       |  33 +--
 .../org/apache/wiki/content/PageRenamerTest.java   |  26 +-
 .../apache/wiki/pages/DefaultPageManagerTest.java  | 214 ++++++++++++--
 .../java/org/apache/wiki/plugin/IfPluginTest.java  |   8 +-
 .../org/apache/wiki/plugin/PageViewPluginTest.java |  33 ++-
 .../apache/wiki/providers/CachingProviderTest.java |  28 +-
 .../wiki/providers/VersioningFileProviderTest.java |  83 +++---
 .../apache/wiki/render/RenderingManagerTest.java   |   4 +-
 .../java/org/apache/wiki/rss/RSSGeneratorTest.java |  29 +-
 .../wiki/stress/StressTestVersioningProvider.java  |  24 +-
 .../org/apache/wiki/ui/CommandResolverTest.java    |   2 +-
 .../java/org/apache/wiki/ui/PageCommandTest.java   |   2 +-
 .../org/apache/wiki/xmlrpc/RPCHandlerTest.java     |  19 +-
 .../apache/wiki/render/MarkdownRendererTest.java   |  19 +-
 jspwiki-war/src/main/webapp/Comment.jsp            |   2 +-
 jspwiki-war/src/main/webapp/Delete.jsp             |   8 +-
 jspwiki-war/src/main/webapp/Edit.jsp               |   2 +-
 .../src/main/webapp/templates/210/InfoContent.jsp  |   2 +-
 .../src/main/webapp/templates/210/PageTab.jsp      |   2 +-
 .../main/webapp/templates/210/editors/CKeditor.jsp |   2 +-
 .../src/main/webapp/templates/210/editors/FCK.jsp  |   2 +-
 .../main/webapp/templates/210/editors/TinyMCE.jsp  |   2 +-
 .../main/webapp/templates/210/editors/plain.jsp    |   2 +-
 .../main/webapp/templates/210/editors/wysiwyg.jsp  |   2 +-
 .../main/webapp/templates/default/InfoContent.jsp  |   2 +-
 .../src/main/webapp/templates/default/PageTab.jsp  |   2 +-
 .../webapp/templates/default/editors/CKeditor.jsp  |   2 +-
 .../webapp/templates/default/editors/TinyMCE.jsp   |   2 +-
 .../webapp/templates/default/editors/plain.jsp     |   2 +-
 .../webapp/templates/default/editors/wysiwyg.jsp   |   2 +-
 64 files changed, 734 insertions(+), 1040 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/WikiContext.java b/jspwiki-main/src/main/java/org/apache/wiki/WikiContext.java
index 7a3029a..4b33cf3 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiContext.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiContext.java
@@ -181,27 +181,19 @@ public class WikiContext implements Cloneable, Command {
 
     /**
      * <p>
-     * Creates a new WikiContext for the given WikiEngine, Command and
-     * HttpServletRequest.
+     * Creates a new WikiContext for the given WikiEngine, Command and HttpServletRequest.
      * </p>
      * <p>
-     * This constructor will also look up the HttpSession associated with the
-     * request, and determine if a WikiSession object is present. If not, a new
-     * one is created.
+     * This constructor will also look up the HttpSession associated with the request, and determine if a WikiSession object is present.
+     * If not, a new one is created.
      * </p>
      * @param engine The WikiEngine that is handling the request
-     * @param request The HttpServletRequest that should be associated with this
-     *            context. This parameter may be <code>null</code>.
+     * @param request The HttpServletRequest that should be associated with this context. This parameter may be <code>null</code>.
      * @param command the command
-     * @throws IllegalArgumentException if <code>engine</code> or
-     *             <code>command</code> are <code>null</code>
+     * @throws IllegalArgumentException if <code>engine</code> or <code>command</code> are <code>null</code>
      */
-    public WikiContext( WikiEngine engine, HttpServletRequest request, Command command )
-        throws IllegalArgumentException
-    {
-        super();
-        if ( engine == null || command == null )
-        {
+    public WikiContext( final WikiEngine engine, final HttpServletRequest request, final Command command ) throws IllegalArgumentException {
+        if ( engine == null || command == null ) {
             throw new IllegalArgumentException( "Parameter engine and command must not be null." );
         }
 
@@ -211,19 +203,16 @@ public class WikiContext implements Cloneable, Command {
         m_command = command;
 
         // If PageCommand, get the WikiPage
-        if( command instanceof PageCommand )
-        {
-            m_page = (WikiPage)((PageCommand)command).getTarget();
+        if( command instanceof PageCommand ) {
+            m_page = ( WikiPage )command.getTarget();
         }
 
         // If page not supplied, default to front page to avoid NPEs
-        if( m_page == null )
-        {
-            m_page = m_engine.getPage( m_engine.getFrontPage() );
+        if( m_page == null ) {
+            m_page = m_engine.getPageManager().getPage( m_engine.getFrontPage() );
 
             // Front page does not exist?
-            if( m_page == null )
-            {
+            if( m_page == null ) {
                 m_page = new WikiPage( m_engine, m_engine.getFrontPage() );
             }
         }
@@ -231,16 +220,14 @@ public class WikiContext implements Cloneable, Command {
         m_realPage = m_page;
 
         // Special case: retarget any empty 'view' PageCommands to the front page
-        if ( PageCommand.VIEW.equals( command ) && command.getTarget() == null )
-        {
+        if ( PageCommand.VIEW.equals( command ) && command.getTarget() == null ) {
             m_command = command.targetedCommand( m_page );
         }
 
         // Debugging...
-        if( log.isDebugEnabled() )
-        {
-            HttpSession session = ( request == null ) ? null : request.getSession( false );
-            String sid = ( session == null ) ? "(null)" : session.getId();
+        if( log.isDebugEnabled() ) {
+            final HttpSession session = ( request == null ) ? null : request.getSession( false );
+            final String sid = session == null ? "(null)" : session.getId();
             log.debug( "Creating WikiContext for session ID=" + sid + "; target=" + getName() );
         }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
index 3080f5d..387ce65 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
@@ -1322,7 +1322,7 @@ public class WikiEngine  {
      *  @return HTML-rendered page text.
      */
     public String getHTML( final String pagename, final int version ) {
-        final WikiPage page = getPage( pagename, version );
+        final WikiPage page = getPageManager().getPage( pagename, version );
         final WikiContext context = new WikiContext( this, page );
         context.setRequestContext( WikiContext.NONE );
         return getHTML( context, page );
@@ -1568,53 +1568,6 @@ public class WikiEngine  {
     }
 
     /**
-     *  Finds the corresponding WikiPage object based on the page name.  It always finds
-     *  the latest version of a page.
-     *
-     *  @param pagereq The name of the page to look for.
-     *  @return A WikiPage object, or null, if the page by the name could not be found.
-     */
-
-    public WikiPage getPage( String pagereq )
-    {
-        return getPage( pagereq, WikiProvider.LATEST_VERSION );
-    }
-
-    /**
-     *  Finds the corresponding WikiPage object base on the page name and version.
-     *
-     *  @param pagereq The name of the page to look for.
-     *  @param version The version number to look for.  May be WikiProvider.LATEST_VERSION,
-     *  in which case it will look for the latest version (and this method then becomes
-     *  the equivalent of getPage(String).
-     *
-     *  @return A WikiPage object, or null, if the page could not be found; or if there
-     *  is no such version of the page.
-     *  @since 1.6.7.
-     */
-
-    public WikiPage getPage( String pagereq, int version )
-    {
-        try
-        {
-            WikiPage p = m_pageManager.getPageInfo( pagereq, version );
-
-            if( p == null )
-            {
-                p = m_attachmentManager.getAttachmentInfo( (WikiContext)null, pagereq );
-            }
-
-            return p;
-        }
-        catch( ProviderException e )
-        {
-            log.error( "Unable to fetch page info",e);
-            return null;
-        }
-    }
-
-
-    /**
      *  Returns a Collection of WikiPages containing the version history of a page.
      *
      *  @param page Name of the page to look for
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/attachment/AttachmentManager.java b/jspwiki-main/src/main/java/org/apache/wiki/attachment/AttachmentManager.java
index ab819ab..8ec4634 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/attachment/AttachmentManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/attachment/AttachmentManager.java
@@ -299,31 +299,25 @@ public class AttachmentManager
      *  @throws ProviderException If something goes wrong.
      */
 
-    public Attachment getAttachmentInfo( WikiContext context,
+    public Attachment getAttachmentInfo( final WikiContext context,
                                          String attachmentname,
-                                         int version )
-        throws ProviderException
-    {
-        if( m_provider == null )
-        {
+                                         final int version ) throws ProviderException {
+        if( m_provider == null ) {
             return null;
         }
 
         WikiPage currentPage = null;
 
-        if( context != null )
-        {
+        if( context != null ) {
             currentPage = context.getPage();
         }
 
         //
-        //  Figure out the parent page of this attachment.  If we can't find it,
-        //  we'll assume this refers directly to the attachment.
+        //  Figure out the parent page of this attachment.  If we can't find it, we'll assume this refers directly to the attachment.
         //
-        int cutpt = attachmentname.lastIndexOf('/');
+        final int cutpt = attachmentname.lastIndexOf('/');
 
-        if( cutpt != -1 )
-        {
+        if( cutpt != -1 ) {
             String parentPage = attachmentname.substring(0,cutpt);
             parentPage = MarkupParser.cleanLink( parentPage );
             attachmentname = attachmentname.substring(cutpt+1);
@@ -332,7 +326,7 @@ public class AttachmentManager
             // this can't be an attachment
             if(parentPage.length() == 0) return null;
 
-            currentPage = m_engine.getPage( parentPage );
+            currentPage = m_engine.getPageManager().getPage( parentPage );
 
             //
             // Go check for legacy name
@@ -340,30 +334,24 @@ public class AttachmentManager
             // FIXME: This should be resolved using CommandResolver,
             //        not this adhoc way.  This also assumes that the
             //        legacy charset is a subset of the full allowed set.
-            if( currentPage == null )
-            {
-                currentPage = m_engine.getPage( MarkupParser.wikifyLink( parentPage ) );
+            if( currentPage == null ) {
+                currentPage = m_engine.getPageManager().getPage( MarkupParser.wikifyLink( parentPage ) );
             }
         }
 
         //
-        //  If the page cannot be determined, we cannot possibly find the
-        //  attachments.
+        //  If the page cannot be determined, we cannot possibly find the attachments.
         //
-        if( currentPage == null || currentPage.getName().length() == 0 )
-        {
+        if( currentPage == null || currentPage.getName().length() == 0 ) {
             return null;
         }
 
-        // System.out.println("Seeking info on "+currentPage+"::"+attachmentname);
-
         //
         //  Finally, figure out whether this is a real attachment or a generated attachment.
         //
         Attachment att = getDynamicAttachment( currentPage.getName()+"/"+attachmentname );
 
-        if( att == null )
-        {
+        if( att == null ) {
             att = m_provider.getAttachmentInfo( currentPage, attachmentname, version );
         }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/AuthorizationManager.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/AuthorizationManager.java
index 6d27142..e1acca7 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/auth/AuthorizationManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/AuthorizationManager.java
@@ -214,7 +214,7 @@ public class AuthorizationManager {
         // If the page or ACL is null, it's allowed.
         //
         String pageName = ((PagePermission)permission).getPage();
-        WikiPage page = m_engine.getPage( pageName );
+        WikiPage page = m_engine.getPageManager().getPage( pageName );
         Acl acl = ( page == null) ? null : m_engine.getAclManager().getPermissions( page );
         if ( page == null ||  acl == null || acl.isEmpty() )
         {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/acl/DefaultAclManager.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/acl/DefaultAclManager.java
index 07363a5..8cdad24 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/auth/acl/DefaultAclManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/acl/DefaultAclManager.java
@@ -18,20 +18,6 @@
  */
 package org.apache.wiki.auth.acl;
 
-import java.security.Permission;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.TreeMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -47,6 +33,20 @@ import org.apache.wiki.pages.PageLock;
 import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.render.RenderingManager;
 
+import java.security.Permission;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * Default implementation that parses Acls from wiki page markup.
  *
@@ -158,7 +158,7 @@ public class DefaultAclManager implements AclManager {
      * @return the Acl representing permissions for the page
      * @since 2.2.121
      */
-    public Acl getPermissions(WikiPage page) {
+    public Acl getPermissions( final WikiPage page ) {
         //
         //  Does the page already have cached ACLs?
         //
@@ -169,15 +169,15 @@ public class DefaultAclManager implements AclManager {
             //
             //  If null, try the parent.
             //
-            if (page instanceof Attachment) {
-                WikiPage parent = m_engine.getPage(((Attachment) page).getParentName());
+            if( page instanceof Attachment ) {
+                final WikiPage parent = m_engine.getPageManager().getPage( ( ( Attachment ) page ).getParentName() );
 
                 acl = getPermissions(parent);
             } else {
                 //
                 //  Or, try parsing the page
                 //
-                WikiContext ctx = new WikiContext(m_engine, page);
+                final WikiContext ctx = new WikiContext(m_engine, page);
 
                 ctx.setVariable(RenderingManager.VAR_EXECUTE_PLUGINS, Boolean.FALSE);
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/content/DefaultPageRenamer.java b/jspwiki-main/src/main/java/org/apache/wiki/content/DefaultPageRenamer.java
index 21f6204..e15de8c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/content/DefaultPageRenamer.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/content/DefaultPageRenamer.java
@@ -79,11 +79,11 @@ public class DefaultPageRenamer implements PageRenamer {
         
         //  Preconditions: "from" page must exist, and "to" page must not yet exist.
         final WikiEngine engine = context.getEngine();
-        final WikiPage fromPage = engine.getPage( renameFrom );
+        final WikiPage fromPage = engine.getPageManager().getPage( renameFrom );
         if( fromPage == null ) {
             throw new WikiException("No such page "+renameFrom);
         }
-        WikiPage toPage = engine.getPage( renameToClean );
+        WikiPage toPage = engine.getPageManager().getPage( renameToClean );
         if( toPage != null ) {
             throw new WikiException( "Page already exists " + renameToClean );
         }
@@ -94,7 +94,7 @@ public class DefaultPageRenamer implements PageRenamer {
         //  Remove references to attachments under old name
         final List< Attachment > attachmentsOldName = engine.getAttachmentManager().listAttachments( fromPage );
         for( final Attachment att: attachmentsOldName ) {
-            final WikiPage fromAttPage = engine.getPage( att.getName() );
+            final WikiPage fromAttPage = engine.getPageManager().getPage( att.getName() );
             engine.getReferenceManager().pageRemoved( fromAttPage );
         }
 
@@ -104,7 +104,7 @@ public class DefaultPageRenamer implements PageRenamer {
         }
         
         //  Add a comment to the page notifying what changed.  This adds a new revision to the repo with no actual change.
-        toPage = engine.getPage( renameToClean );
+        toPage = engine.getPageManager().getPage( renameToClean );
         if( toPage == null ) {
             throw new InternalWikiException( "Rename seems to have failed for some strange reason - please check logs!" );
         }
@@ -126,7 +126,7 @@ public class DefaultPageRenamer implements PageRenamer {
         
         final Collection< Attachment > attachmentsNewName = engine.getAttachmentManager().listAttachments( toPage );
         for( final Attachment att:attachmentsNewName ) {
-            final WikiPage toAttPage = engine.getPage( att.getName() );
+            final WikiPage toAttPage = engine.getPageManager().getPage( att.getName() );
             // add reference to attachment under new page name
             engine.getReferenceManager().updateReferences( toAttPage );
             engine.getSearchManager().reindexPage( att );
@@ -171,7 +171,7 @@ public class DefaultPageRenamer implements PageRenamer {
                 pageName = toPage.getName();
             }
             
-            final WikiPage p = engine.getPage( pageName );
+            final WikiPage p = engine.getPageManager().getPage( pageName );
 
             final String sourceText = engine.getPureText( p );
             String newText = replaceReferrerString( context, sourceText, fromPage.getName(), toPage.getName() );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java b/jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java
index 3ee127c..4dd287d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java
@@ -701,14 +701,13 @@ public class SpamFilter extends BasicPageFilter {
             String remote = HttpUtil.getRemoteAddress(req);
             long now = System.currentTimeMillis();
 
-            for( Iterator< Host > i = m_temporaryBanList.iterator(); i.hasNext(); ) {
-                Host host = i.next();
-
+            for( Host host : m_temporaryBanList ) {
                 if( host.getAddress().equals( remote ) ) {
                     long timeleft = ( host.getReleaseTime() - now ) / 1000L;
 
                     log( context, REJECT, REASON_IP_BANNED_TEMPORARILY, change.m_change );
-                    checkStrategy( context, REASON_IP_BANNED_TEMPORARILY, "You have been temporarily banned from modifying this wiki. (" + timeleft + " seconds of ban left)" );
+                    checkStrategy( context, REASON_IP_BANNED_TEMPORARILY,
+                            "You have been temporarily banned from modifying this wiki. (" + timeleft + " seconds of ban left)" );
                 }
             }
         }
@@ -717,9 +716,9 @@ public class SpamFilter extends BasicPageFilter {
     /**
      *  If the spam filter notices changes in the black list page, it will refresh them automatically.
      *
-     *  @param context
+     *  @param context associated WikiContext
      */
-    private void refreshBlacklists( WikiContext context ) {
+    private void refreshBlacklists( final WikiContext context ) {
         try {
 
             boolean rebuild = false;
@@ -727,21 +726,21 @@ public class SpamFilter extends BasicPageFilter {
             //
             //  Rebuild, if the spam words page, the attachment or the IP ban page has changed since.
             //
-            WikiPage sourceSpam = context.getEngine().getPage( m_forbiddenWordsPage );
+            final WikiPage sourceSpam = context.getEngine().getPageManager().getPage( m_forbiddenWordsPage );
             if( sourceSpam != null ) {
                 if( m_spamPatterns == null || m_spamPatterns.isEmpty() || sourceSpam.getLastModified().after( m_lastRebuild ) ) {
                     rebuild = true;
                 }
             }
 
-            Attachment att = context.getEngine().getAttachmentManager().getAttachmentInfo( context, m_blacklist );
+            final Attachment att = context.getEngine().getAttachmentManager().getAttachmentInfo( context, m_blacklist );
             if( att != null ) {
                 if( m_spamPatterns == null || m_spamPatterns.isEmpty() || att.getLastModified().after( m_lastRebuild ) ) {
                     rebuild = true;
                 }
             }
 
-            WikiPage sourceIPs = context.getEngine().getPage( m_forbiddenIPsPage );
+            final WikiPage sourceIPs = context.getEngine().getPageManager().getPage( m_forbiddenIPsPage );
             if( sourceIPs != null ) {
                 if( m_IPPatterns == null || m_IPPatterns.isEmpty() || sourceIPs.getLastModified().after( m_lastRebuild ) ) {
                     rebuild = true;
@@ -764,17 +763,17 @@ public class SpamFilter extends BasicPageFilter {
                 log.info( "IP filter reloaded - recognizing " + m_IPPatterns.size() + " patterns from page " + m_forbiddenIPsPage );
 
                 if( att != null ) {
-                    InputStream in = context.getEngine().getAttachmentManager().getAttachmentStream(att);
-                    StringWriter out = new StringWriter();
-                    FileUtil.copyContents( new InputStreamReader( in,"UTF-8" ), out );
-                    Collection< Pattern > blackList = parseBlacklist( out.toString() );
+                    final InputStream in = context.getEngine().getAttachmentManager().getAttachmentStream(att);
+                    final StringWriter out = new StringWriter();
+                    FileUtil.copyContents( new InputStreamReader( in, StandardCharsets.UTF_8 ), out );
+                    final Collection< Pattern > blackList = parseBlacklist( out.toString() );
                     log.info( "...recognizing additional " + blackList.size() + " patterns from blacklist " + m_blacklist );
                     m_spamPatterns.addAll( blackList );
                 }
             }
-        } catch( IOException ex ) {
+        } catch( final IOException ex ) {
             log.info( "Unable to read attachment data, continuing...", ex );
-        } catch( ProviderException ex ) {
+        } catch( final ProviderException ex ) {
             log.info( "Failed to read spam filter attachment, continuing...", ex );
         }
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java b/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java
index 945c401..5d605ed 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/pages/DefaultPageManager.java
@@ -276,6 +276,32 @@ public class DefaultPageManager extends ModuleManager implements PageManager {
 
     /**
      * {@inheritDoc}
+     * @see org.apache.wiki.pages.PageManager#getPage(java.lang.String)
+     */
+    public WikiPage getPage( final String pagereq ) {
+        return getPage( pagereq, WikiProvider.LATEST_VERSION );
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.wiki.pages.PageManager#getPage(java.lang.String, int)
+     */
+    public WikiPage getPage( final String pagereq, final int version ) {
+        try {
+            WikiPage p = getPageInfo( pagereq, version );
+            if( p == null ) {
+                p = m_engine.getAttachmentManager().getAttachmentInfo( null, pagereq );
+            }
+
+            return p;
+        } catch( final ProviderException e ) {
+            LOG.error( "Unable to fetch page info for " + pagereq + " [version " + version + "]", e );
+            return null;
+        }
+    }
+
+    /**
+     * {@inheritDoc}
      * @see org.apache.wiki.pages.PageManager#getPageInfo(java.lang.String, int)
      */
     @Override
@@ -386,8 +412,7 @@ public class DefaultPageManager extends ModuleManager implements PageManager {
             m_engine.getAttachmentManager().deleteVersion( ( Attachment )page );
         } else {
             m_provider.deleteVersion(page.getName(), page.getVersion());
-            // FIXME: If this was the latest, reindex Lucene
-            // FIXME: Update RefMgr
+            // FIXME: If this was the latest, reindex Lucene, update RefMgr
         }
     }
 
@@ -396,7 +421,7 @@ public class DefaultPageManager extends ModuleManager implements PageManager {
      * @see org.apache.wiki.pages.PageManager#deletePage(java.lang.String)
      */
     public void deletePage( final String pageName ) throws ProviderException {
-        final WikiPage p = m_engine.getPage( pageName );
+        final WikiPage p = getPage( pageName );
         if( p != null ) {
             if( p instanceof Attachment ) {
                 m_engine.getAttachmentManager().deleteAttachment( ( Attachment )p );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/pages/PageManager.java b/jspwiki-main/src/main/java/org/apache/wiki/pages/PageManager.java
index dbdf1db..c7a9674 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/pages/PageManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/pages/PageManager.java
@@ -116,7 +116,30 @@ public interface PageManager extends WikiEventListener {
      * @return List of PageLock objects, detailing the locks.  If no locks exist, returns an empty list.
      * @since 2.0.22.
      */
-    List<PageLock> getActiveLocks();
+    List< PageLock > getActiveLocks();
+
+    /**
+     *  Finds the corresponding WikiPage object based on the page name.  It always finds
+     *  the latest version of a page.
+     *
+     *  @param pagereq The name of the page to look for.
+     *  @return A WikiPage object, or null, if the page by the name could not be found.
+     */
+    WikiPage getPage( String pagereq );
+
+    /**
+     *  Finds the corresponding WikiPage object base on the page name and version.
+     *
+     *  @param pagereq The name of the page to look for.
+     *  @param version The version number to look for.  May be WikiProvider.LATEST_VERSION,
+     *  in which case it will look for the latest version (and this method then becomes
+     *  the equivalent of getPage(String).
+     *
+     *  @return A WikiPage object, or null, if the page could not be found; or if there
+     *  is no such version of the page.
+     *  @since 1.6.7 (moved to PageManager on 2.11.0).
+     */
+    WikiPage getPage( String pagereq, int version );
 
     /**
      * Finds a WikiPage object describing a particular page and version.
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/AbstractReferralPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/AbstractReferralPlugin.java
index 6838cf8..5bc2871 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/AbstractReferralPlugin.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/AbstractReferralPlugin.java
@@ -318,7 +318,7 @@ public abstract class AbstractReferralPlugin implements WikiPlugin
                 WikiPage page = null;
                 if( m_lastModified )
                 {
-                    page = m_engine.getPage( pageName );
+                    page = m_engine.getPageManager().getPage( pageName );
                     if( page != null )
                     {
                         Date lastModPage = page.getLastModified();
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/InsertPage.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/InsertPage.java
index afc12e3..3c92e9f 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/InsertPage.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/InsertPage.java
@@ -18,11 +18,6 @@
  */
 package org.apache.wiki.plugin;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.ResourceBundle;
-
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
@@ -31,9 +26,14 @@ import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.plugin.WikiPlugin;
 import org.apache.wiki.auth.AuthorizationManager;
 import org.apache.wiki.auth.permissions.PermissionFactory;
-import org.apache.wiki.util.TextUtil;
-import org.apache.wiki.util.HttpUtil;
 import org.apache.wiki.preferences.Preferences;
+import org.apache.wiki.util.HttpUtil;
+import org.apache.wiki.util.TextUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
 
 
 /**
@@ -106,21 +106,15 @@ public class InsertPage
 
         if( includedPage != null )
         {
-            WikiPage page = null;
-            try
-            {
-                String pageName = engine.getFinalPageName( includedPage );
-                if( pageName != null )
-                {
-                    page = engine.getPage( pageName );
+            WikiPage page;
+            try {
+                final String pageName = engine.getFinalPageName( includedPage );
+                if( pageName != null ) {
+                    page = engine.getPageManager().getPage( pageName );
+                } else {
+                    page = engine.getPageManager().getPage( includedPage );
                 }
-                else
-                {
-                    page = engine.getPage( includedPage );
-                }
-            }
-            catch( ProviderException e )
-            {
+            } catch( final ProviderException e ) {
                 res.append( "<span class=\"error\">Page could not be found by the page provider.</span>" );
                 return res.toString();
             }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringPagesPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringPagesPlugin.java
index 6d1bd72..51596ff 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringPagesPlugin.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringPagesPlugin.java
@@ -83,7 +83,7 @@ public class ReferringPagesPlugin
             pageName = context.getPage().getName();
         }
 
-        WikiPage page = context.getEngine().getPage( pageName );
+        WikiPage page = context.getEngine().getPageManager().getPage( pageName );
 
         if( page != null )
         {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogPlugin.java
index ae5e712..214a265 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogPlugin.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogPlugin.java
@@ -338,7 +338,7 @@ public class WeblogPlugin
         WikiContext entryCtx = (WikiContext) context.clone();
         entryCtx.setPage( entry );
 
-        String html = engine.getHTML( entryCtx, engine.getPage(entry.getName()) );
+        String html = engine.getHTML( entryCtx, engine.getPageManager().getPage( entry.getName() ) );
 
         // Extract the first h1/h2/h3 as title, and replace with null
         buffer.append("<div class=\"weblogentrytitle\">\n");
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/references/DefaultReferenceManager.java b/jspwiki-main/src/main/java/org/apache/wiki/references/DefaultReferenceManager.java
index 3360c9a..6c69498 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/references/DefaultReferenceManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/references/DefaultReferenceManager.java
@@ -205,7 +205,7 @@ public class DefaultReferenceManager extends BasicPageFilter implements Referenc
             for( final WikiPage page : pages ) {
                 if( !( page instanceof Attachment ) ) {
                     // Refresh with the latest copy
-                    final WikiPage wp = m_engine.getPage( page.getName() );
+                    final WikiPage wp = m_engine.getPageManager().getPage( page.getName() );
 
                     if( wp.getLastModified() == null ) {
                         log.fatal( "Provider returns null lastModified.  Please submit a bug report." );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/rpc/atom/AtomAPIServlet.java b/jspwiki-main/src/main/java/org/apache/wiki/rpc/atom/AtomAPIServlet.java
index 049a551..6abdf6c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/rpc/atom/AtomAPIServlet.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/rpc/atom/AtomAPIServlet.java
@@ -18,17 +18,6 @@
  */
 package org.apache.wiki.rpc.atom;
 
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Iterator;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -47,6 +36,16 @@ import org.intabulas.sandler.elements.Link;
 import org.intabulas.sandler.elements.Person;
 import org.intabulas.sandler.exceptions.FeedMarshallException;
 
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+
 
 /**
  *  Handles incoming requests for the Atom API.  This class uses the
@@ -117,7 +116,7 @@ public class AtomAPIServlet extends HttpServlet
         {
             String blogid = getPageName( request );
 
-            WikiPage page    = m_engine.getPage( blogid );
+            WikiPage page    = m_engine.getPageManager().getPage( blogid );
 
             if( page == null )
             {
@@ -224,8 +223,8 @@ public class AtomAPIServlet extends HttpServlet
     private Entry getBlogEntry( String entryid )
         throws ProviderException
     {
-        WikiPage page = m_engine.getPage( entryid );
-        WikiPage firstVersion = m_engine.getPage( entryid, 1 );
+        WikiPage page = m_engine.getPageManager().getPage( entryid );
+        WikiPage firstVersion = m_engine.getPageManager().getPage( entryid, 1 );
 
         Entry entry = SyndicationFactory.newSyndicationEntry();
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java b/jspwiki-main/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
index 5bb618d..2815e37 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
@@ -539,7 +539,7 @@ public class LuceneSearchProvider implements SearchProvider {
                 int docID = hits[curr].doc;
                 Document doc = searcher.doc( docID );
                 String pageName = doc.get(LUCENE_ID);
-                WikiPage page = m_engine.getPage(pageName, WikiPageProvider.LATEST_VERSION);
+                WikiPage page = m_engine.getPageManager().getPage(pageName, WikiPageProvider.LATEST_VERSION);
 
                 if( page != null ) {
                     if( page instanceof Attachment ) {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchManager.java b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchManager.java
index c8ac883..247d08d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchManager.java
@@ -314,10 +314,10 @@ public class SearchManager extends BasicPageFilter implements InternalModule, Wi
      * @throws ProviderException If the provider fails and a search cannot be completed.
      * @throws IOException If something else goes wrong.
      */
-    public Collection< SearchResult > findPages( String query, WikiContext wikiContext )
-        throws ProviderException, IOException
-    {
-        if( query == null ) query = "";
+    public Collection< SearchResult > findPages( String query, final WikiContext wikiContext ) throws ProviderException, IOException {
+        if( query == null ) {
+            query = "";
+        }
         return m_searchProvider.findPages( query, wikiContext );
     }
 
@@ -325,7 +325,7 @@ public class SearchManager extends BasicPageFilter implements InternalModule, Wi
      *  Removes the page from the search cache (if any).
      *  @param page  The page to remove
      */
-    public void pageRemoved(WikiPage page)
+    public void pageRemoved( final WikiPage page )
     {
         m_searchProvider.pageRemoved(page);
     }
@@ -337,13 +337,9 @@ public class SearchManager extends BasicPageFilter implements InternalModule, Wi
      *  @param content {@inheritDoc}
      */
     @Override
-    public void postSave( WikiContext wikiContext, String content )
-    {
-        //
-        //  Makes sure that we're indexing the latest version of this
-        //  page.
-        //
-        WikiPage p = m_engine.getPage( wikiContext.getPage().getName() );
+    public void postSave( final WikiContext wikiContext, final String content ) {
+        //  Makes sure that we're indexing the latest version of this page.
+        final WikiPage p = m_engine.getPageManager().getPage( wikiContext.getPage().getName() );
         reindexPage( p );
     }
 
@@ -352,9 +348,9 @@ public class SearchManager extends BasicPageFilter implements InternalModule, Wi
      *
      *   @param page The page.
      */
-    public void reindexPage(WikiPage page)
+    public void reindexPage( final WikiPage page )
     {
-        m_searchProvider.reindexPage(page);
+        m_searchProvider.reindexPage( page );
     }
 
     /**
@@ -363,15 +359,12 @@ public class SearchManager extends BasicPageFilter implements InternalModule, Wi
      *  @param event {@inheritDoc}
      */
     @Override
-    public void actionPerformed(WikiEvent event)
-    {
-        if( (event instanceof WikiPageEvent) && (event.getType() == WikiPageEvent.PAGE_DELETE_REQUEST) )
-        {
-            String pageName = ((WikiPageEvent) event).getPageName();
+    public void actionPerformed( final WikiEvent event ) {
+        if( event instanceof WikiPageEvent && event.getType() == WikiPageEvent.PAGE_DELETE_REQUEST ) {
+            final String pageName = ( ( WikiPageEvent ) event ).getPageName();
 
-            WikiPage p = m_engine.getPage( pageName );
-            if( p != null )
-            {
+            final WikiPage p = m_engine.getPageManager().getPage( pageName );
+            if( p != null ) {
                 pageRemoved( p );
             }
         }
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 16d5b69..2e170c1 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
@@ -18,13 +18,13 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-
 import org.apache.wiki.InternalWikiException;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.exceptions.ProviderException;
 
+import java.io.IOException;
+
 /**
  *  Does a version check on the page.  Mode is as follows:
  *  <UL>
@@ -100,7 +100,7 @@ public class CheckVersionTag
             int version = page.getVersion();
             boolean include = false;
 
-            WikiPage latest = engine.getPage( page.getName() );
+            WikiPage latest = engine.getPageManager().getPage( page.getName() );
 
             //log.debug("Doing version check: this="+page.getVersion()+
             //          ", latest="+latest.getVersion());
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 10772b1..3e9a827 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
@@ -18,10 +18,13 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-import javax.servlet.jsp.JspWriter;
+import org.apache.wiki.WikiContext;
+import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiPage;
+import org.apache.wiki.WikiProvider;
 
-import org.apache.wiki.*;
+import javax.servlet.jsp.JspWriter;
+import java.io.IOException;
 
 /**
  *  Writes a diff link.  Body of the link becomes the link text.
@@ -40,11 +43,9 @@ import org.apache.wiki.*;
  *
  *  @since 2.0
  */
-public class DiffLinkTag
-    extends WikiLinkTag
-{
+public class DiffLinkTag extends WikiLinkTag {
+
     private static final long serialVersionUID = 0L;
-    
     public static final String VER_LATEST   = "latest";
     public static final String VER_PREVIOUS = "previous";
     public static final String VER_CURRENT  = "current";
@@ -63,7 +64,7 @@ public class DiffLinkTag
         return m_version;
     }
 
-    public void setVersion( String arg )
+    public void setVersion( final String arg )
     {
         m_version = arg;
     }
@@ -73,99 +74,66 @@ public class DiffLinkTag
         return m_newVersion;
     }
 
-    public void setNewVersion( String arg )
+    public void setNewVersion( final String arg )
     {
         m_newVersion = arg;
     }
 
-    public final int doWikiStartTag()
-        throws IOException
-    {
-        WikiEngine engine   = m_wikiContext.getEngine();
-        String     pageName = m_pageName;
+    public final int doWikiStartTag() throws IOException {
+        final WikiEngine engine = m_wikiContext.getEngine();
+        String pageName = m_pageName;
 
-        if( m_pageName == null )
-        {
-            if( m_wikiContext.getPage() != null )
-            {
+        if( m_pageName == null ) {
+            if( m_wikiContext.getPage() != null ) {
                 pageName = m_wikiContext.getPage().getName();
-            }
-            else
-            {
+            } else {
                 return SKIP_BODY;
             }
         }
 
-        JspWriter out = pageContext.getOut();
+        final JspWriter out = pageContext.getOut();
 
-        int r1 = 0;
-        int r2 = 0;
+        int r1;
+        int r2;
 
-        //
         //  In case the page does not exist, we fail silently.
-        //
-        if(!engine.pageExists(pageName))
-        {
+        if( !engine.pageExists( pageName ) ) {
             return SKIP_BODY;
         }
 
-        if( VER_LATEST.equals(getVersion()) )
-        {
-            WikiPage latest = engine.getPage( pageName, 
-                                              WikiProvider.LATEST_VERSION );
-
-            if( latest == null )
-            {
+        if( VER_LATEST.equals(getVersion()) ) {
+            final WikiPage latest = engine.getPageManager().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;
             }
             r1 = latest.getVersion();
-        }
-        else if( VER_PREVIOUS.equals(getVersion()) )
-        {
+        } else if( VER_PREVIOUS.equals( getVersion() ) ) {
             r1 = m_wikiContext.getPage().getVersion() - 1;
-            r1 = (r1 < 1 ) ? 1 : r1;
-        }
-        else if( VER_CURRENT.equals(getVersion()) )
-        {
+            r1 = Math.max( r1, 1 );
+        } else if( VER_CURRENT.equals( getVersion() ) ) {
             r1 = m_wikiContext.getPage().getVersion();
-        }
-        else
-        {
+        } else {
             r1 = Integer.parseInt( getVersion() );
         }
 
-        if( VER_LATEST.equals(getNewVersion()) )
-        {
-            WikiPage latest = engine.getPage( pageName,
-                                              WikiProvider.LATEST_VERSION );
-
+        if( VER_LATEST.equals( getNewVersion() ) ) {
+            final WikiPage latest = engine.getPageManager().getPage( pageName, WikiProvider.LATEST_VERSION );
             r2 = latest.getVersion();
-        }
-        else if( VER_PREVIOUS.equals(getNewVersion()) )
-        {
+        } else if( VER_PREVIOUS.equals( getNewVersion() ) ) {
             r2 = m_wikiContext.getPage().getVersion() - 1;
-            r2 = (r2 < 1 ) ? 1 : r2;
-        }
-        else if( VER_CURRENT.equals(getNewVersion()) )
-        {
+            r2 = Math.max( r2, 1 );
+        } else if( VER_CURRENT.equals( getNewVersion() ) ) {
             r2 = m_wikiContext.getPage().getVersion();
-        }
-        else
-        {
+        } else {
             r2 = Integer.parseInt( getNewVersion() );
         }
 
-        String url = m_wikiContext.getURL( WikiContext.DIFF,
-                                           pageName,
-                                           "r1="+r1+"&amp;r2="+r2 );
-        switch( m_format )
-        {
+        final String url = m_wikiContext.getURL( WikiContext.DIFF, pageName, "r1="+r1+"&amp;r2="+r2 );
+        switch( m_format ) {
           case ANCHOR:
             out.print("<a href=\""+url+"\">");
-
             break;
-
           case URL:
             out.print( url );
             break;
@@ -173,4 +141,5 @@ public class DiffLinkTag
 
         return EVAL_BODY_INCLUDE;
     }
+
 }
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 390b01f..8bbbd32 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
@@ -18,13 +18,13 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-import javax.servlet.jsp.JspWriter;
-
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
 
+import javax.servlet.jsp.JspWriter;
+import java.io.IOException;
+
 /**
  *  Writes an edit link.  Body of the link becomes the link text.
  *  <P><B>Attributes</B></P>
@@ -107,7 +107,7 @@ public class EditLinkTag
                 if( page == null )
                 {
                     // No page, so go fetch according to page name.
-                    page = engine.getPage( m_pageName );
+                    page = engine.getPageManager().getPage( m_pageName );
                 }
                 
                 if( page != null )
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 761eff0..68152f6 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
@@ -83,7 +83,7 @@ public class InsertDiffTag extends WikiTagBase {
             ctx = m_wikiContext;
         } else {
             ctx = ( WikiContext )m_wikiContext.clone();
-            ctx.setPage( engine.getPage(m_pageName) );
+            ctx.setPage( engine.getPageManager().getPage(m_pageName) );
         }
 
         final Integer vernew = ( Integer )pageContext.getAttribute( ATTR_NEWVERSION, PageContext.REQUEST_SCOPE );
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 7a76288..643d0c4 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
@@ -18,15 +18,14 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-
-import javax.servlet.jsp.JspWriter;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.exceptions.ProviderException;
 
+import javax.servlet.jsp.JspWriter;
+import java.io.IOException;
+
 /**
  *  Renders WikiPage content.  For InsertPage tag and the InsertPage plugin
  *  the difference is that the tag will always render in the context of the page
@@ -59,14 +58,13 @@ public class InsertPageTag extends WikiTagBase {
     protected String m_pageName = null;
     private   int    m_mode = HTML;
 
-    public void initTag()
-    {
+    public void initTag() {
         super.initTag();
         m_pageName = null;
         m_mode = HTML;
     }
 
-    public void setPage( String page )
+    public void setPage( final String page )
     {
         m_pageName = page;
     }
@@ -76,24 +74,17 @@ public class InsertPageTag extends WikiTagBase {
         return m_pageName;
     }
 
-    public void setMode( String arg )
-    {
-        if( "plain".equals(arg) )
-        {
+    public void setMode( final String arg ) {
+        if( "plain".equals( arg ) ) {
             m_mode = PLAIN;
-        }
-        else
-        {
+        } else {
             m_mode = HTML;
         }
     }
 
-    public final int doWikiStartTag()
-        throws IOException,
-               ProviderException
-    {
-        WikiEngine engine = m_wikiContext.getEngine();
-        WikiPage   insertedPage;
+    public final int doWikiStartTag() throws IOException, ProviderException {
+        final WikiEngine engine = m_wikiContext.getEngine();
+        final WikiPage insertedPage;
 
         //
         //  NB: The page might not really exist if the user is currently
@@ -101,29 +92,23 @@ public class InsertPageTag extends WikiTagBase {
         //      AND we got the page from the wikiContext.
         //
 
-        if( m_pageName == null )
-        {
+        if( m_pageName == null ) {
             insertedPage = m_wikiContext.getPage();
             if( !engine.pageExists(insertedPage) ) return SKIP_BODY;
-        }
-        else
-        {
-            insertedPage = engine.getPage( m_pageName );
+        } else {
+            insertedPage = engine.getPageManager().getPage( m_pageName );
         }
 
-        if( insertedPage != null )
-        {
+        if( insertedPage != null ) {
             // FIXME: Do version setting later.
             // page.setVersion( WikiProvider.LATEST_VERSION );
 
             log.debug("Inserting page "+insertedPage);
 
-            JspWriter out = pageContext.getOut();
-
-            WikiPage oldPage = m_wikiContext.setRealPage( insertedPage );
+            final JspWriter out = pageContext.getOut();
+            final WikiPage oldPage = m_wikiContext.setRealPage( insertedPage );
             
-            switch( m_mode )
-            {
+            switch( m_mode ) {
               case HTML:
                 out.print( engine.getHTML( m_wikiContext, insertedPage ) );
                 break;
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 17af986..ec2bc91 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
@@ -18,15 +18,6 @@
  */
 package org.apache.wiki.tags;
 
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.tagext.BodyContent;
-import javax.servlet.jsp.tagext.BodyTag;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -38,6 +29,14 @@ import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.util.TextUtil;
 
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.tagext.BodyContent;
+import javax.servlet.jsp.tagext.BodyTag;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
 /**
  *  Provides a generic link tag for all kinds of linking
  *  purposes.
@@ -248,7 +247,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
                 //
                 //  Internal wiki link, but is it an attachment link?
                 //
-                WikiPage p = engine.getPage( m_pageName );
+                WikiPage p = engine.getPageManager().getPage( m_pageName );
 
                 if( p instanceof Attachment )
                 {
@@ -287,7 +286,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
         }
         else if( m_pageName != null && m_pageName.length() > 0 )
         {
-            WikiPage p = engine.getPage( m_pageName );
+            WikiPage p = engine.getPageManager().getPage( m_pageName );
 
             String parms = (m_version != null) ? "version="+getVersion() : null;
 
@@ -363,7 +362,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
 
             if( DiffLinkTag.VER_LATEST.equals(getVersion()) )
             {
-                WikiPage latest = engine.getPage( page, WikiProvider.LATEST_VERSION );
+                WikiPage latest = engine.getPageManager().getPage( page, WikiProvider.LATEST_VERSION );
 
                 r1 = latest.getVersion();
             }
@@ -383,7 +382,7 @@ public class LinkTag extends WikiLinkTag implements ParamHandler, BodyTag {
 
             if( DiffLinkTag.VER_LATEST.equals(m_compareToVersion) )
             {
-                WikiPage latest = engine.getPage( page, WikiProvider.LATEST_VERSION );
+                WikiPage latest = engine.getPageManager().getPage( page, WikiProvider.LATEST_VERSION );
 
                 r2 = latest.getVersion();
             }
@@ -440,7 +439,7 @@ 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.getPage( m_pageName ) instanceof Attachment )
+            if( engine.getPageManager().getPage( m_pageName ) instanceof Attachment )
             {
                 sb.append( engine.getAttachmentManager().forceDownload( m_pageName ) ? "download " : "" );
             }
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 038a4ad..8fca495 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,31 +18,29 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.exceptions.ProviderException;
 
+import java.io.IOException;
+
 /**
  *  Includes the body in case there is no such page available.
  *
  *  @since 2.0
  */
-public class NoSuchPageTag
-    extends WikiTagBase
-{
+public class NoSuchPageTag extends WikiTagBase {
+
     private static final long serialVersionUID = 0L;
     
     private String m_pageName;
 
-    public void initTag()
-    {
+    public void initTag() {
         super.initTag();
         m_pageName = null;
     }
 
-    public void setPage( String name )
+    public void setPage( final String name )
     {
         m_pageName = name;
     }
@@ -52,26 +50,17 @@ public class NoSuchPageTag
         return m_pageName;
     }
 
-    public int doWikiStartTag()
-        throws IOException,
-               ProviderException
-    {
-        WikiEngine engine = m_wikiContext.getEngine();
-        WikiPage   page;
+    public int doWikiStartTag() throws IOException, ProviderException {
+        final WikiEngine engine = m_wikiContext.getEngine();
+        final WikiPage page;
 
-        if( m_pageName == null )
-        {
+        if( m_pageName == null ) {
             page = m_wikiContext.getPage();
+        } else {
+            page = engine.getPageManager().getPage( m_pageName );
         }
-        else
-        {
-            page = engine.getPage( m_pageName );
-        }
-
-        // System.out.println("Checking "+page);
 
-        if( page != null && engine.pageExists( page.getName(), page.getVersion() ) )
-        {
+        if( page != null && engine.pageExists( page.getName(), page.getVersion() ) ) {
             return SKIP_BODY;
         }
 
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 0c41a28..a6a246b 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
@@ -31,7 +31,6 @@ import org.apache.wiki.auth.permissions.WikiPermission;
 import org.apache.wiki.ui.Command;
 import org.apache.wiki.ui.GroupCommand;
 
-import java.io.IOException;
 import java.security.Permission;
 
 /**
@@ -60,9 +59,8 @@ import java.security.Permission;
  *  
  *  @since 2.0
  */
-public class PermissionTag
-    extends WikiTagBase
-{
+public class PermissionTag extends WikiTagBase {
+
     private static final String ALL_PERMISSION   = "allPermission";
     private static final String CREATE_GROUPS    = "createGroups";
     private static final String CREATE_PAGES     = "createPages";
@@ -82,8 +80,7 @@ public class PermissionTag
      * Initializes the tag.
      */
     @Override
-    public void initTag()
-    {
+    public void initTag() {
         super.initTag();
         m_permissionList = null;
     }
@@ -93,7 +90,7 @@ public class PermissionTag
      * 
      * @param permission A list of permissions
      */
-    public void setPermission( String permission )
+    public void setPermission( final String permission )
     {
         m_permissionList = StringUtils.split(permission,'|');
     }
@@ -101,67 +98,46 @@ public class PermissionTag
     /**
      *  Checks a single permission.
      *  
-     *  @param permission
+     *  @param permission permission to check for
      *  @return true if granted, false if not
      */
-    private boolean checkPermission( String permission )
-    {
-        WikiSession session        = m_wikiContext.getWikiSession();
-        WikiPage    page           = m_wikiContext.getPage();
-        AuthorizationManager mgr   = m_wikiContext.getEngine().getAuthorizationManager();
-        boolean gotPermission     = false;
+    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();
+        boolean gotPermission      = false;
         
-        if ( CREATE_GROUPS.equals( permission ) || CREATE_PAGES.equals( permission )
-            || EDIT_PREFERENCES.equals( permission ) || EDIT_PROFILE.equals( permission )
-            || LOGIN.equals( permission ) )
-        {
+        if ( CREATE_GROUPS.equals( permission ) || CREATE_PAGES.equals( permission ) || EDIT_PREFERENCES.equals( permission ) || EDIT_PROFILE.equals( permission ) || LOGIN.equals( permission ) ) {
             gotPermission = mgr.checkPermission( session, new WikiPermission( page.getWiki(), permission ) );
-        }
-        else if ( VIEW_GROUP.equals( permission ) 
-            || EDIT_GROUP.equals( permission )
-            || DELETE_GROUP.equals( permission ) )
-        {
-            Command command = m_wikiContext.getCommand();
+        } else if ( VIEW_GROUP.equals( permission ) || EDIT_GROUP.equals( permission ) || DELETE_GROUP.equals( permission ) )  {
+            final Command command = m_wikiContext.getCommand();
             gotPermission = false;
-            if ( command instanceof GroupCommand && command.getTarget() != null )
-            {
-                GroupPrincipal group = (GroupPrincipal)command.getTarget();
-                String groupName = group.getName();
+            if ( command instanceof GroupCommand && command.getTarget() != null ) {
+                final GroupPrincipal group = (GroupPrincipal)command.getTarget();
+                final String groupName = group.getName();
                 String action = "view";
-                if( EDIT_GROUP.equals( permission ) )
-                {
+                if( EDIT_GROUP.equals( permission ) ) {
                     action = "edit";
-                }
-                else if ( DELETE_GROUP.equals( permission ) )
-                {
+                } else if ( DELETE_GROUP.equals( permission ) ) {
                     action = "delete";
                 }
                 gotPermission = mgr.checkPermission( session, new GroupPermission( groupName, action ) );
             }
-        }
-        else if ( ALL_PERMISSION.equals( permission ) )
-        {
+        } else if ( ALL_PERMISSION.equals( permission ) ) {
             gotPermission = mgr.checkPermission( session, new AllPermission( m_wikiContext.getEngine().getApplicationName() ) );
-        }
-        else if ( page != null )
-        {
+        } else if ( page != null ) {
             //
-            //  Edit tag also checks that we're not trying to edit an
-            //  old version: they cannot be edited.
+            //  Edit tag also checks that we're not trying to edit an old version: they cannot be edited.
             //
-            if( EDIT.equals(permission) )
-            {
-                WikiPage latest = m_wikiContext.getEngine().getPage( page.getName() );
-                if( page.getVersion() != WikiProvider.LATEST_VERSION &&
-                    latest.getVersion() != page.getVersion() )
-                {
+            if( EDIT.equals(permission) ) {
+                final WikiPage latest = m_wikiContext.getEngine().getPageManager().getPage( page.getName() );
+                if( page.getVersion() != WikiProvider.LATEST_VERSION && latest.getVersion() != page.getVersion() ) {
                     return false;
                 }
             }
 
-            Permission p = PermissionFactory.getPagePermission( page, permission );
-            gotPermission = mgr.checkPermission( session,
-                                                  p );
+            final Permission p = PermissionFactory.getPagePermission( page, permission );
+            gotPermission = mgr.checkPermission( session, p );
         }
         
         return gotPermission;
@@ -170,29 +146,20 @@ public class PermissionTag
     /**
      * Initializes the tag.
      * @return the result of the tag: SKIP_BODY or EVAL_BODY_CONTINUE
-     * @throws IOException this exception will never be thrown
      */
     @Override
-    public final int doWikiStartTag()
-        throws IOException
-    {
-        for( int i = 0; i < m_permissionList.length; i++ )
-        {
-            String perm = m_permissionList[i];
-         
-            boolean hasPermission = false;
-
-            if( perm.charAt(0) == '!' )
-            {
-                hasPermission = !checkPermission( perm.substring(1) );
-            }
-            else
-            {
+    public final int doWikiStartTag() {
+        for( final String perm : m_permissionList ) {
+            final boolean hasPermission;
+            if( perm.charAt( 0 ) == '!' ) {
+                hasPermission = !checkPermission( perm.substring( 1 ) );
+            } else {
                 hasPermission = checkPermission( perm );
             }
-            
-            if( hasPermission )
+
+            if( hasPermission ) {
                 return EVAL_BODY_INCLUDE;
+            }
         }
 
         return SKIP_BODY;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java b/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
index 34e7e7f..72ee1b3 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
@@ -58,7 +58,7 @@ public class SaveWikiPageTask extends Task {
         engine.getPageManager().putPageText(page, proposedText);
 
         // Refresh the context for post save filtering.
-        engine.getPage(page.getName());
+        engine.getPageManager().getPage(page.getName());
         engine.textToHTML(context, proposedText);
         engine.getFilterManager().doPostSaveFiltering(context, proposedText);
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
index c3ca5de..5c7af48 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
@@ -486,7 +486,7 @@ public final class CommandResolver
             }
         }
 
-        wikipage = m_engine.getPage( page, version );
+        wikipage = m_engine.getPageManager().getPage( page, version );
 
         if ( wikipage == null )
         {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/MetaWeblogHandler.java b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/MetaWeblogHandler.java
index a61e87f..db56148 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/MetaWeblogHandler.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/MetaWeblogHandler.java
@@ -18,13 +18,6 @@
  */
 package org.apache.wiki.xmlrpc;
 
-import java.io.ByteArrayInputStream;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -41,6 +34,13 @@ import org.apache.wiki.plugin.WeblogEntryPlugin;
 import org.apache.wiki.plugin.WeblogPlugin;
 import org.apache.xmlrpc.XmlRpcException;
 
+import java.io.ByteArrayInputStream;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
 /**
  *  Provides handlers for all RPC routines of the MetaWeblog API.
  *  <P>
@@ -122,7 +122,7 @@ public class MetaWeblogHandler
                                     String password )
         throws XmlRpcException
     {
-        WikiPage page = m_context.getEngine().getPage( blogid );
+        WikiPage page = m_context.getEngine().getPageManager().getPage( blogid );
 
         checkPermissions( page, username, password, "view" );
 
@@ -147,9 +147,9 @@ public class MetaWeblogHandler
      */
     private Hashtable<String,Object> makeEntry( WikiPage page )
     {
-        Hashtable<String, Object> ht = new Hashtable<String, Object>();
+        Hashtable<String, Object> ht = new Hashtable<>();
 
-        WikiPage firstVersion = m_context.getEngine().getPage( page.getName(), 1 );
+        WikiPage firstVersion = m_context.getEngine().getPageManager().getPage( page.getName(), 1 );
 
         ht.put("dateCreated", firstVersion.getLastModified());
         ht.put("link", getURL(page.getName()));
@@ -201,7 +201,7 @@ public class MetaWeblogHandler
 
         log.info( "metaWeblog.getRecentPosts() called");
 
-        WikiPage page = m_context.getEngine().getPage( blogid );
+        WikiPage page = m_context.getEngine().getPageManager().getPage( blogid );
 
         checkPermissions( page, username, password, "view" );
 
@@ -256,7 +256,7 @@ public class MetaWeblogHandler
         log.info("metaWeblog.newPost() called");
         WikiEngine engine = m_context.getEngine();
 
-        WikiPage page = engine.getPage( blogid );
+        WikiPage page = engine.getPageManager().getPage( blogid );
         checkPermissions( page, username, password, "createPages" );
 
         try
@@ -312,7 +312,7 @@ public class MetaWeblogHandler
 
         log.info("metaWeblog.newMediaObject() called");
 
-        WikiPage page = engine.getPage( blogid );
+        WikiPage page = engine.getPageManager().getPage( blogid );
         checkPermissions( page, username, password, "upload" );
 
         String name = (String) content.get( "name" );
@@ -357,7 +357,7 @@ public class MetaWeblogHandler
         log.info("metaWeblog.editPost("+postid+") called");
 
         // FIXME: Is postid correct?  Should we determine it from the page name?
-        WikiPage page = engine.getPage( postid );
+        WikiPage page = engine.getPageManager().getPage( postid );
         checkPermissions( page, username, password, "edit" );
 
         try
@@ -396,7 +396,7 @@ public class MetaWeblogHandler
     {
         String wikiname = "FIXME";
 
-        WikiPage page = m_context.getEngine().getPage( wikiname );
+        WikiPage page = m_context.getEngine().getPageManager().getPage( wikiname );
 
         checkPermissions( page, username, password, "view" );
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandler.java b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandler.java
index 9fbfe9b..0dc2359 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandler.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandler.java
@@ -18,14 +18,6 @@
  */
 package org.apache.wiki.xmlrpc;
 
-import java.nio.charset.StandardCharsets;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Vector;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.LinkCollector;
 import org.apache.wiki.WikiContext;
@@ -37,6 +29,14 @@ import org.apache.wiki.auth.permissions.PermissionFactory;
 import org.apache.wiki.util.TextUtil;
 import org.apache.xmlrpc.XmlRpcException;
 
+import java.nio.charset.StandardCharsets;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Vector;
+
 /**
  *  Provides handlers for all RPC routines.
  *
@@ -188,7 +188,7 @@ public class RPCHandler
             throw new XmlRpcException( ERR_NOPAGE, "No such page '"+pagename+"' found, o master." );
         }
 
-        WikiPage p = m_engine.getPage( pagename );
+        WikiPage p = m_engine.getPageManager().getPage( pagename );
 
         checkPermission( PermissionFactory.getPagePermission( p, PagePermission.VIEW_ACTION ) );
 
@@ -199,7 +199,7 @@ public class RPCHandler
         throws XmlRpcException
     {
         pagename = parsePageCheckCondition( pagename );
-        return encodeWikiPage( m_engine.getPage(pagename) );
+        return encodeWikiPage( m_engine.getPageManager().getPage(pagename) );
     }
 
     public Hashtable getPageInfoVersion( String pagename, int version )
@@ -207,7 +207,7 @@ public class RPCHandler
     {
         pagename = parsePageCheckCondition( pagename );
 
-        return encodeWikiPage( m_engine.getPage( pagename, version ) );
+        return encodeWikiPage( m_engine.getPageManager().getPage( pagename, version ) );
     }
 
     public byte[] getPage( String pagename )
@@ -249,7 +249,7 @@ public class RPCHandler
     {
         pagename = parsePageCheckCondition( pagename );
 
-        WikiPage page = m_engine.getPage( pagename );
+        WikiPage page = m_engine.getPageManager().getPage( pagename );
         String pagedata = m_engine.getPureText( page );
 
         LinkCollector localCollector = new LinkCollector();
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandlerUTF8.java b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandlerUTF8.java
index 667c7fc..3b5cff0 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandlerUTF8.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/xmlrpc/RPCHandlerUTF8.java
@@ -18,13 +18,6 @@
  */
 package org.apache.wiki.xmlrpc;
 
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Vector;
-
 import org.apache.wiki.LinkCollector;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -34,6 +27,13 @@ import org.apache.wiki.auth.permissions.PagePermission;
 import org.apache.wiki.auth.permissions.PermissionFactory;
 import org.apache.xmlrpc.XmlRpcException;
 
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Vector;
+
 /**
  *  Provides handlers for all RPC routines.  These routines are used by
  *  the UTF-8 interface.
@@ -149,7 +149,7 @@ public class RPCHandlerUTF8
             throw new XmlRpcException( ERR_NOPAGE, "No such page '"+pagename+"' found, o master." );
         }
 
-        WikiPage p = m_engine.getPage( pagename );
+        WikiPage p = m_engine.getPageManager().getPage( pagename );
 
         checkPermission( PermissionFactory.getPagePermission( p, PagePermission.VIEW_ACTION ) );
         return pagename;
@@ -160,7 +160,7 @@ public class RPCHandlerUTF8
     {
         pagename = parsePageCheckCondition( pagename );
 
-        return encodeWikiPage( m_engine.getPage(pagename) );
+        return encodeWikiPage( m_engine.getPageManager().getPage(pagename) );
     }
 
     public Hashtable getPageInfoVersion( String pagename, int version )
@@ -168,7 +168,7 @@ public class RPCHandlerUTF8
     {
         pagename = parsePageCheckCondition( pagename );
 
-        return encodeWikiPage( m_engine.getPage( pagename, version ) );
+        return encodeWikiPage( m_engine.getPageManager().getPage( pagename, version ) );
     }
 
     public String getPage( String pagename )
@@ -210,7 +210,7 @@ public class RPCHandlerUTF8
     {
         pagename = parsePageCheckCondition( pagename );
 
-        WikiPage page = m_engine.getPage( pagename );
+        WikiPage page = m_engine.getPageManager().getPage( pagename );
         String pagedata = m_engine.getPureText( page );
 
         LinkCollector localCollector = new LinkCollector();
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/TestEngine.java b/jspwiki-main/src/test/java/org/apache/wiki/TestEngine.java
index 6115fea..0437b48 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/TestEngine.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/TestEngine.java
@@ -312,20 +312,15 @@ public class TestEngine extends WikiEngine
     /**
      *  Deletes all attachments related to the given page.
      */
-    public static void deleteAttachments( String page )
-    {
-        Properties properties = getTestProperties();
-
-        try
-        {
-            String files = properties.getProperty( BasicAttachmentProvider.PROP_STORAGEDIR );
+    public static void deleteAttachments( final String page ) {
+        final Properties properties = getTestProperties();
 
-            File f = new File( files, TextUtil.urlEncodeUTF8( page ) + BasicAttachmentProvider.DIR_EXTENSION );
+        try {
+            final String files = properties.getProperty( BasicAttachmentProvider.PROP_STORAGEDIR );
+            final File f = new File( files, TextUtil.urlEncodeUTF8( page ) + BasicAttachmentProvider.DIR_EXTENSION );
 
             deleteAll( f );
-        }
-        catch( Exception e )
-        {
+        } catch( final Exception e ) {
             log.error("Could not remove attachments.",e);
         }
     }
@@ -333,17 +328,13 @@ public class TestEngine extends WikiEngine
     /**
      *  Makes a temporary file with some content, and returns a handle to it.
      */
-    public File makeAttachmentFile()
-        throws Exception
-    {
-        File tmpFile = File.createTempFile("test","txt");
+    public File makeAttachmentFile() throws Exception {
+        final File tmpFile = File.createTempFile("test","txt");
         tmpFile.deleteOnExit();
 
-        FileWriter out = new FileWriter( tmpFile );
-
-        FileUtil.copyContents( new StringReader( "asdfa???dfzbvasdjkfbwfkUg783gqdwog" ), out );
-
-        out.close();
+        try( final FileWriter out = new FileWriter( tmpFile ) ) {
+            FileUtil.copyContents( new StringReader( "asdfa???dfzbvasdjkfbwfkUg783gqdwog" ), out );
+        }
 
         return tmpFile;
     }
@@ -354,12 +345,9 @@ public class TestEngine extends WikiEngine
      * @param attachmentName
      * @param data
      */
-    public void addAttachment( String pageName, String attachmentName, byte[] data )
-        throws ProviderException, IOException
-    {
-        Attachment att = new Attachment(this,pageName,attachmentName);
-
-        getAttachmentManager().storeAttachment(att, new ByteArrayInputStream(data));
+    public void addAttachment( final String pageName, final String attachmentName, final byte[] data ) throws ProviderException, IOException {
+        final Attachment att = new Attachment( this,pageName,attachmentName );
+        getAttachmentManager().storeAttachment( att, new ByteArrayInputStream( data ) );
     }
 
     /**
@@ -371,36 +359,28 @@ public class TestEngine extends WikiEngine
      * @param content
      * @throws WikiException
      */
-    public void saveText( String pageName, String content )
-        throws WikiException
-    {
+    public void saveText( final String pageName, final String content ) throws WikiException {
         // Build new request and associate our admin session
-        MockHttpServletRequest request = newHttpRequest();
-        WikiSession wikiSession = SessionMonitor.getInstance( this ).find( request.getSession() );
-        this.getAuthenticationManager().login( wikiSession, request,
-                Users.ADMIN,
-                Users.ADMIN_PASS );
+        final MockHttpServletRequest request = newHttpRequest();
+        final WikiSession wikiSession = SessionMonitor.getInstance( this ).find( request.getSession() );
+        this.getAuthenticationManager().login( wikiSession, request, Users.ADMIN, Users.ADMIN_PASS );
 
         // Create page and wiki context
-        WikiPage page = new WikiPage( this, pageName );
-        WikiContext context = new WikiContext( this, request, page );
+        final WikiPage page = new WikiPage( this, pageName );
+        final WikiContext context = new WikiContext( this, request, page );
         saveText( context, content );
     }
 
-    public void saveTextAsJanne( String pageName, String content )
-        throws WikiException
-    {
+    public void saveTextAsJanne( final String pageName, final String content ) throws WikiException {
         // Build new request and associate our Janne session
-        MockHttpServletRequest request = newHttpRequest();
-        WikiSession wikiSession = SessionMonitor.getInstance( this ).find( request.getSession() );
-        this.getAuthenticationManager().login( wikiSession, request,
-                Users.JANNE,
-                Users.JANNE_PASS );
+        final MockHttpServletRequest request = newHttpRequest();
+        final WikiSession wikiSession = SessionMonitor.getInstance( this ).find( request.getSession() );
+        this.getAuthenticationManager().login( wikiSession, request, Users.JANNE, Users.JANNE_PASS );
 
         // Create page and wiki context
-        WikiPage page = new WikiPage( this, pageName );
+        final WikiPage page = new WikiPage( this, pageName );
         page.setAuthor(Users.JANNE);
-        WikiContext context = new WikiContext( this, request, page );
+        final WikiContext context = new WikiContext( this, request, page );
         saveText( context, content );
     }
 
@@ -411,21 +391,17 @@ public class TestEngine extends WikiEngine
      * @param pagename name of the page.
      * @return (english) contents corresponding to the given page name.
      */
-    public String getI18nHTML( String pagename ) {
-        WikiPage page = getPage( pagename, WikiPageProvider.LATEST_VERSION );
-        WikiContext context = new WikiContext( this, newHttpRequest(), page );
+    public String getI18nHTML( final String pagename ) {
+        final WikiPage page = getPageManager().getPage( pagename, WikiPageProvider.LATEST_VERSION );
+        final WikiContext context = new WikiContext( this, newHttpRequest(), page );
         context.setRequestContext( WikiContext.NONE );
         return getHTML( context, page );
     }
 
-    public static void trace()
-    {
-        try
-        {
+    public static void trace() {
+        try {
             throw new Exception("Foo");
-        }
-        catch( Exception e )
-        {
+        } catch( final Exception e ) {
             e.printStackTrace();
         }
     }
@@ -436,7 +412,7 @@ public class TestEngine extends WikiEngine
      * @return the corrected/clean properties
      */
     private static Properties cleanTestProps( final Properties props ) {
-        long millis = System.currentTimeMillis();
+        final long millis = System.currentTimeMillis();
         props.put( AuthenticationManager.PROP_LOGIN_THROTTLING, "false" );
         props.setProperty( "jspwiki.fileSystemProvider.pageDir", cleanNewDirFrom( props.getProperty( "jspwiki.fileSystemProvider.pageDir" ), millis ) );
         props.setProperty( "jspwiki.basicAttachmentProvider.storageDir", cleanNewDirFrom( props.getProperty( "jspwiki.basicAttachmentProvider.storageDir" ), millis ) );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java b/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
index 4cf1930..ce676ce 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/WikiEngineTest.java
@@ -24,9 +24,7 @@ import org.apache.wiki.attachment.Attachment;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.providers.BasicAttachmentProvider;
-import org.apache.wiki.providers.CachingProvider;
 import org.apache.wiki.providers.FileSystemProvider;
-import org.apache.wiki.providers.VerySimpleProvider;
 import org.apache.wiki.references.ReferenceManager;
 import org.apache.wiki.util.TextUtil;
 import org.junit.jupiter.api.AfterEach;
@@ -39,55 +37,42 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.Properties;
 
-public class WikiEngineTest
-{
+public class WikiEngineTest {
+
     public static final String NAME1 = "Test1";
-    public static final long PAGEPROVIDER_RESCAN_PERIOD = 2;
 
     Properties props = TestEngine.getTestProperties();
-
     TestEngine m_engine;
 
-
     @BeforeEach
-    public void setUp()
-        throws Exception
-    {
+    public void setUp() {
         props.setProperty( WikiEngine.PROP_MATCHPLURALS, "true" );
-
-        CacheManager.getInstance().removeAllCaches();
-
-        TestEngine.emptyWorkDir();
-        m_engine = new TestEngine(props);
+        m_engine = TestEngine.build( props );
     }
 
     @AfterEach
-    public void tearDown()
-    {
-        String files = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
-
-        if( files != null )
-        {
-            File f = new File( files );
+    public void tearDown() {
+        final String files = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
 
+        if( files != null ) {
+            final File f = new File( files );
             TestEngine.deleteAll( f );
         }
 
         TestEngine.emptyWorkDir();
+        CacheManager.getInstance().removeAllCaches();
     }
 
     @Test
-    public void testNonExistentDirectory()
-        throws Exception
-    {
-        String tmpdir = "./target";
-        String dirname = "non-existent-directory";
-        String newdir = tmpdir + File.separator + dirname;
+    public void testNonExistentDirectory() throws Exception {
+        final String tmpdir = "./target";
+        final String dirname = "non-existent-directory";
+        final String newdir = tmpdir + File.separator + dirname;
 
         props.setProperty( FileSystemProvider.PROP_PAGEDIR, newdir );
         new TestEngine( props );
 
-        File f = new File( props.getProperty( FileSystemProvider.PROP_PAGEDIR ) );
+        final File f = new File( props.getProperty( FileSystemProvider.PROP_PAGEDIR ) );
         Assertions.assertTrue( f.exists(), "didn't create it" );
         Assertions.assertTrue( f.isDirectory(), "isn't a dir" );
 
@@ -98,30 +83,21 @@ public class WikiEngineTest
      *  Check that calling pageExists( String ) works.
      */
     @Test
-    public void testNonExistentPage()
-        throws Exception
-    {
-        String pagename = "Test1";
-
-        Assertions.assertEquals( false, m_engine.pageExists( pagename ), "Page already exists" );
+    public void testNonExistentPage() {
+        Assertions.assertFalse( m_engine.pageExists( NAME1 ), "Page already exists" );
     }
 
     /**
      *  Check that calling pageExists( WikiPage ) works.
      */
     @Test
-    public void testNonExistentPage2()
-        throws Exception
-    {
-        WikiPage page = new WikiPage(m_engine, "Test1");
-
-        Assertions.assertEquals( false, m_engine.pageExists( page ), "Page already exists" );
+    public void testNonExistentPage2() throws Exception {
+        final WikiPage page = new WikiPage(m_engine, NAME1 );
+        Assertions.assertFalse( m_engine.pageExists( page ), "Page already exists" );
     }
 
     @Test
-    public void testFinalPageName()
-        throws Exception
-    {
+    public void testFinalPageName() throws Exception {
         m_engine.saveText( "Foobar", "1" );
         m_engine.saveText( "Foobars", "2" );
 
@@ -130,9 +106,7 @@ public class WikiEngineTest
     }
 
     @Test
-    public void testFinalPageNameSingular()
-        throws Exception
-    {
+    public void testFinalPageNameSingular() throws Exception {
         m_engine.saveText( "Foobar", "1" );
 
         Assertions.assertEquals( "Foobar", m_engine.getFinalPageName( "Foobars" ), "plural mistake" );
@@ -140,9 +114,7 @@ public class WikiEngineTest
     }
 
     @Test
-    public void testFinalPageNamePlural()
-        throws Exception
-    {
+    public void testFinalPageNamePlural() throws Exception {
         m_engine.saveText( "Foobars", "1" );
 
         Assertions.assertEquals( "Foobars", m_engine.getFinalPageName( "Foobars" ), "plural mistake" );
@@ -150,9 +122,7 @@ public class WikiEngineTest
     }
 
     @Test
-    public void testPutPage()
-        throws Exception
-    {
+    public void testPutPage() throws Exception {
         String text = "Foobar.\r\n";
         String name = NAME1;
 
@@ -284,96 +254,6 @@ public class WikiEngineTest
     }
 
     /**
-     *  English articles too, pathological case...
-     */
-    /*
-    @Test
-    public void testBeautifyTitleArticle2()
-    {
-        String src = "ThisIsAJSPWikiPage";
-
-        Assertions.assertEquals("This Is A JSP Wiki Page", m_engine.beautifyTitle( src ) );
-    }
-    */
-
-    @Test
-    public void testLatestGet()
-        throws Exception
-    {
-        props.setProperty( "jspwiki.pageProvider",
-                           "org.apache.wiki.providers.VerySimpleProvider" );
-        props.setProperty( "jspwiki.usePageCache", "false" );
-
-        WikiEngine engine = new TestEngine( props );
-
-        WikiPage p = engine.getPage( "test", -1 );
-
-        VerySimpleProvider vsp = (VerySimpleProvider) engine.getPageManager().getProvider();
-
-        Assertions.assertEquals( "test", vsp.m_latestReq, "wrong page" );
-        Assertions.assertEquals( -1, vsp.m_latestVers, "wrong version" );
-        Assertions.assertNotNull( p, "null" );
-    }
-
-    @Test
-    public void testLatestGet2()
-        throws Exception
-    {
-        props.setProperty( "jspwiki.pageProvider",
-                           "org.apache.wiki.providers.VerySimpleProvider" );
-        props.setProperty( "jspwiki.usePageCache", "false" );
-
-        WikiEngine engine = new TestEngine( props );
-
-        String p = engine.getText( "test", -1 );
-
-        VerySimpleProvider vsp = (VerySimpleProvider) engine.getPageManager().getProvider();
-
-        Assertions.assertEquals( "test", vsp.m_latestReq, "wrong page" );
-        Assertions.assertEquals( -1, vsp.m_latestVers, "wrong version" );
-        Assertions.assertNotNull( p, "null" );
-    }
-
-    @Test
-    public void testLatestGet3()
-        throws Exception
-    {
-        props.setProperty( "jspwiki.pageProvider",
-                           "org.apache.wiki.providers.VerySimpleProvider" );
-        props.setProperty( "jspwiki.usePageCache", "false" );
-
-        WikiEngine engine = new TestEngine( props );
-
-        String p = engine.getHTML( "test", -1 );
-
-        VerySimpleProvider vsp = (VerySimpleProvider) engine.getPageManager().getProvider();
-
-        Assertions.assertEquals( "test", vsp.m_latestReq, "wrong page" );
-        Assertions.assertEquals( 5, vsp.m_latestVers, "wrong version" );
-        Assertions.assertNotNull( p, "null" );
-    }
-
-    @Test
-    public void testLatestGet4()
-        throws Exception
-    {
-        props.setProperty( "jspwiki.pageProvider",
-                           "org.apache.wiki.providers.VerySimpleProvider" );
-        props.setProperty( "jspwiki.usePageCache", "true" );
-
-        WikiEngine engine = new TestEngine( props );
-
-        String p = engine.getHTML( VerySimpleProvider.PAGENAME, -1 );
-
-        CachingProvider cp = (CachingProvider)engine.getPageManager().getProvider();
-        VerySimpleProvider vsp = (VerySimpleProvider) cp.getRealProvider();
-
-        Assertions.assertEquals( VerySimpleProvider.PAGENAME, vsp.m_latestReq, "wrong page" );
-        Assertions.assertEquals( -1, vsp.m_latestVers,  "wrong version" );
-        Assertions.assertNotNull( p, "null" );
-    }
-
-    /**
      *  Checks, if ReferenceManager is informed of new attachments.
      */
     @Test
@@ -552,141 +432,6 @@ public class WikiEngineTest
         }
     }
 
-
-
-
-    @Test
-    public void testDeletePage()
-        throws Exception
-    {
-        m_engine.saveText( NAME1, "Test" );
-
-        String files = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
-        File saved = new File( files, NAME1+FileSystemProvider.FILE_EXT );
-
-        Assertions.assertTrue( saved.exists(), "Didn't create it!" );
-
-        WikiPage page = m_engine.getPage( NAME1, WikiProvider.LATEST_VERSION );
-
-        m_engine.getPageManager().deletePage( page.getName() );
-
-        Assertions.assertFalse( saved.exists(), "Page has not been removed!" );
-    }
-
-
-    @Test
-    public void testDeletePageAndAttachments()
-        throws Exception
-    {
-        m_engine.saveText( NAME1, "Test" );
-
-        Attachment att = new Attachment( m_engine, NAME1, "TestAtt.txt" );
-        att.setAuthor( "FirstPost" );
-        m_engine.getAttachmentManager().storeAttachment( att, m_engine.makeAttachmentFile() );
-
-        String files = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
-        File saved = new File( files, NAME1+FileSystemProvider.FILE_EXT );
-
-        String atts = props.getProperty( BasicAttachmentProvider.PROP_STORAGEDIR );
-        File attfile = new File( atts, NAME1+"-att/TestAtt.txt-dir" );
-
-        Assertions.assertTrue( saved.exists(), "Didn't create it!" );
-
-        Assertions.assertTrue( attfile.exists(), "Attachment dir does not exist" );
-
-        WikiPage page = m_engine.getPage( NAME1, WikiProvider.LATEST_VERSION );
-
-        m_engine.getPageManager().deletePage( page.getName() );
-
-        Assertions.assertFalse( saved.exists(), "Page has not been removed!" );
-        Assertions.assertFalse( attfile.exists(), "Attachment has not been removed" );
-    }
-
-    @Test
-    public void testDeletePageAndAttachments2()
-        throws Exception
-    {
-        m_engine.saveText( NAME1, "Test" );
-
-        Attachment att = new Attachment( m_engine, NAME1, "TestAtt.txt" );
-        att.setAuthor( "FirstPost" );
-        m_engine.getAttachmentManager().storeAttachment( att, m_engine.makeAttachmentFile() );
-
-        String files = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
-        File saved = new File( files, NAME1+FileSystemProvider.FILE_EXT );
-
-        String atts = props.getProperty( BasicAttachmentProvider.PROP_STORAGEDIR );
-        File attfile = new File( atts, NAME1+"-att/TestAtt.txt-dir" );
-
-        Assertions.assertTrue( saved.exists(), "Didn't create it!" );
-
-        Assertions.assertTrue( attfile.exists(), "Attachment dir does not exist" );
-
-        WikiPage page = m_engine.getPage( NAME1, WikiProvider.LATEST_VERSION );
-
-        Assertions.assertNotNull( page, "page" );
-
-        att = m_engine.getAttachmentManager().getAttachmentInfo(NAME1+"/TestAtt.txt");
-
-        m_engine.getPageManager().deletePage(att.getName());
-
-        m_engine.getPageManager().deletePage( NAME1 );
-
-        Assertions.assertNull( m_engine.getPage(NAME1), "Page not removed" );
-        Assertions.assertNull( m_engine.getPage(NAME1+"/TestAtt.txt"), "Att not removed" );
-
-        Collection< String > refs = m_engine.getReferenceManager().findReferrers(NAME1);
-
-        Assertions.assertNull( refs, "referrers" );
-    }
-
-    @Test
-    public void testDeleteVersion()
-        throws Exception
-    {
-        props.setProperty( "jspwiki.pageProvider", "VersioningFileProvider" );
-
-        TestEngine engine = new TestEngine( props );
-        engine.saveText( NAME1, "Test1" );
-        engine.saveText( NAME1, "Test2" );
-        engine.saveText( NAME1, "Test3" );
-
-        WikiPage page = engine.getPage( NAME1, 3 );
-
-        engine.getPageManager().deleteVersion( page );
-
-        Assertions.assertNull( engine.getPage( NAME1, 3 ), "got page" );
-
-        String content = engine.getText( NAME1, WikiProvider.LATEST_VERSION );
-
-        Assertions.assertEquals( "Test2", content.trim(), "content" );
-    }
-
-    @Test
-    public void testDeleteVersion2()
-        throws Exception
-    {
-        props.setProperty( "jspwiki.pageProvider", "VersioningFileProvider" );
-
-        TestEngine engine = new TestEngine( props );
-        engine.saveText( NAME1, "Test1" );
-        engine.saveText( NAME1, "Test2" );
-        engine.saveText( NAME1, "Test3" );
-
-        WikiPage page = engine.getPage( NAME1, 1 );
-
-        engine.getPageManager().deleteVersion( page );
-
-        Assertions.assertNull( engine.getPage( NAME1, 1 ), "got page" );
-
-        String content = engine.getText( NAME1, WikiProvider.LATEST_VERSION );
-
-        Assertions.assertEquals( "Test3", content.trim(), "content" );
-
-        Assertions.assertEquals( "", engine.getText(NAME1, 1).trim(), "content1" );
-    }
-
-
     /**
      *  Tests BugReadingOfVariableNotWorkingForOlderVersions
      * @throws Exception
@@ -705,9 +450,8 @@ public class WikiEngineTest
 
         engine.saveText( NAME1, "[{SET foo=notbar}]");
 
-        WikiPage v1 = engine.getPage( NAME1, 1 );
-
-        WikiPage v2 = engine.getPage( NAME1, 2 );
+        WikiPage v1 = engine.getPageManager().getPage( NAME1, 1 );
+        WikiPage v2 = engine.getPageManager().getPage( NAME1, 2 );
 
         Assertions.assertEquals( "bar", v1.getAttribute("foo"), "V1" );
 
@@ -751,7 +495,7 @@ public class WikiEngineTest
         Collection< String > pages = m_engine.getReferenceManager().findReferrers( "RenameBugTestPage" );
         Assertions.assertEquals( "OldNameTestPage", pages.iterator().next(), "has one" );
 
-        WikiContext ctx = new WikiContext( m_engine, m_engine.getPage("OldNameTestPage") );
+        WikiContext ctx = new WikiContext( m_engine, m_engine.getPageManager().getPage("OldNameTestPage") );
 
         m_engine.getPageRenamer().renamePage( ctx, "OldNameTestPage", "NewNameTestPage", true );
 
@@ -778,7 +522,7 @@ public class WikiEngineTest
 
         for( int i = 0; i < 5; i++ )
         {
-            WikiPage p2 = (WikiPage)m_engine.getPage( NAME1 ).clone();
+            WikiPage p2 = (WikiPage)m_engine.getPageManager().getPage( NAME1 ).clone();
             p2.removeAttribute(WikiPage.CHANGENOTE);
 
             context.setPage( p2 );
@@ -786,7 +530,7 @@ public class WikiEngineTest
             m_engine.saveText( context, "test"+i );
         }
 
-        WikiPage p3 = m_engine.getPage( NAME1, -1 );
+        WikiPage p3 = m_engine.getPageManager().getPage( NAME1, -1 );
 
         Assertions.assertEquals( null, p3.getAttribute(WikiPage.CHANGENOTE) );
     }
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/auth/AuthorizationManagerTest.java b/jspwiki-main/src/test/java/org/apache/wiki/auth/AuthorizationManagerTest.java
index 674c821..b199b14 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/auth/AuthorizationManagerTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/auth/AuthorizationManagerTest.java
@@ -277,7 +277,7 @@ public class AuthorizationManagerTest
         att.setAuthor( "FirstPost" );
         m_engine.getAttachmentManager().storeAttachment( att, f );
 
-        Attachment p = (Attachment) m_engine.getPage( "Test/test1.txt" );
+        Attachment p = (Attachment) m_engine.getPageManager().getPage( "Test/test1.txt" );
         Permission view = PermissionFactory.getPagePermission( p, "view" );
         Permission edit = PermissionFactory.getPagePermission( p, "edit" );
 
@@ -309,7 +309,7 @@ public class AuthorizationManagerTest
         att.setAuthor( "FirstPost" );
         m_engine.getAttachmentManager().storeAttachment( att, f );
 
-        Attachment p = (Attachment) m_engine.getPage( "Test/test1.txt" );
+        Attachment p = (Attachment) m_engine.getPageManager().getPage( "Test/test1.txt" );
         Permission view = PermissionFactory.getPagePermission( p, "view" );
         Permission edit = PermissionFactory.getPagePermission( p, "edit" );
 
@@ -450,7 +450,7 @@ public class AuthorizationManagerTest
         String src = "[{ALLOW edit Alice}] ";
         m_engine.saveText( "Test", src );
 
-        WikiPage p = m_engine.getPage( "Test" );
+        WikiPage p = m_engine.getPageManager().getPage( "Test" );
         Permission view = PermissionFactory.getPagePermission( p, "view" );
         Permission edit = PermissionFactory.getPagePermission( p, "edit" );
 
@@ -572,7 +572,7 @@ public class AuthorizationManagerTest
         String src = "[{ALLOW edit Authenticated}] ";
         m_engine.saveText( "Test", src );
 
-        WikiPage p = m_engine.getPage( "Test" );
+        WikiPage p = m_engine.getPageManager().getPage( "Test" );
         Permission view = PermissionFactory.getPagePermission( p, "view" );
         Permission edit = PermissionFactory.getPagePermission( p, "edit" );
 
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/auth/UserManagerTest.java b/jspwiki-main/src/test/java/org/apache/wiki/auth/UserManagerTest.java
index e9d770d..05ad867 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/auth/UserManagerTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/auth/UserManagerTest.java
@@ -144,7 +144,7 @@ public class UserManagerTest {
         m_engine.saveText( pageName, "Test text. [{ALLOW view " + oldName + ", " + oldLogin + ", Alice}] More text." );
 
         // 3a. Make sure the page got saved, and that ONLY our test user has permission to read it.
-        WikiPage p = m_engine.getPage( pageName );
+        WikiPage p = m_engine.getPageManager().getPage( pageName );
         Assertions.assertEquals( oldPageCount + 1, pageManager.getTotalPageCount() );
         Assertions.assertNotNull( p.getAcl().getEntry( new WikiPrincipal( oldLogin ) ) );
         Assertions.assertNotNull( p.getAcl().getEntry( new WikiPrincipal( oldName ) ) );
@@ -179,7 +179,7 @@ public class UserManagerTest {
 
         // Test 3: our page should not contain the old wiki name OR login name
         // in the ACL any more (the full name is always used)
-        p = m_engine.getPage( pageName );
+        p = m_engine.getPageManager().getPage( pageName );
         Assertions.assertNull( p.getAcl().getEntry( new WikiPrincipal( oldLogin ) ) );
         Assertions.assertNull( p.getAcl().getEntry( new WikiPrincipal( oldName ) ) );
         Assertions.assertNull( p.getAcl().getEntry( new WikiPrincipal( newLogin ) ) );
@@ -204,7 +204,7 @@ public class UserManagerTest {
         // The test user should still be able to see the page (because the login name matches...)
         pageName = "TestPage2" + now;
         m_engine.saveText( pageName, "More test text. [{ALLOW view " + oldName + ", " + oldLogin + ", Alice}] More text." );
-        p = m_engine.getPage( pageName );
+        p = m_engine.getPageManager().getPage( pageName );
         Assertions.assertEquals( oldPageCount + 1, pageManager.getTotalPageCount() );
         Assertions.assertNotNull( p.getAcl().getEntry( new WikiPrincipal( oldLogin ) ) );
         Assertions.assertNotNull( p.getAcl().getEntry( new WikiPrincipal( oldName ) ) );
@@ -238,7 +238,7 @@ public class UserManagerTest {
 
         // Test 7: our page should not contain the old wiki name OR login name
         // in the ACL any more (the full name is always used)
-        p = m_engine.getPage( pageName );
+        p = m_engine.getPageManager().getPage( pageName );
         Assertions.assertNull( p.getAcl().getEntry( new WikiPrincipal( oldLogin ) ) );
         Assertions.assertNotNull( p.getAcl().getEntry( new WikiPrincipal( oldName ) ) );
         Assertions.assertNull( p.getAcl().getEntry( new WikiPrincipal( newLogin ) ) );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/auth/acl/DefaultAclManagerTest.java b/jspwiki-main/src/test/java/org/apache/wiki/auth/acl/DefaultAclManagerTest.java
index 3326cfc..c6a92e1 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/auth/acl/DefaultAclManagerTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/auth/acl/DefaultAclManagerTest.java
@@ -29,49 +29,36 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.security.Principal;
-import java.util.Properties;
 import java.util.regex.Matcher;
 
 public class DefaultAclManagerTest
 {
-    TestEngine m_engine;
+    TestEngine m_engine = TestEngine.build();
 
     @BeforeEach
-    public void setUp()
-        throws Exception
-    {
-        Properties props = TestEngine.getTestProperties();
-        m_engine = new TestEngine(props);
-
-        String text = "Foo";
-        m_engine.saveText( "TestDefaultPage", text );
-
-        text = "Bar. [{ALLOW edit Charlie, Herman}] ";
-        m_engine.saveText( "TestAclPage", text );
+    public void setUp() throws Exception {
+        m_engine.saveText( "TestDefaultPage", "Foo" );
+        m_engine.saveText( "TestAclPage", "Bar. [{ALLOW edit Charlie, Herman}] " );
     }
 
     @AfterEach
-    public void tearDown()
-    {
-        try
-        {
+    public void tearDown() {
+        try {
             m_engine.getPageManager().deletePage( "TestDefaultPage" );
             m_engine.getPageManager().deletePage( "TestAclPage" );
-        }
-        catch ( ProviderException e )
-        {
+        } catch ( final ProviderException e ) {
         }
     }
 
     @Test
     public void testGetPermissions()
     {
-        WikiPage page = m_engine.getPage( "TestDefaultPage" );
+        WikiPage page = m_engine.getPageManager().getPage( "TestDefaultPage" );
         Acl acl = m_engine.getAclManager().getPermissions( page );
         Assertions.assertNotNull( page.getAcl() );
         Assertions.assertTrue(page.getAcl().isEmpty());
 
-        page = m_engine.getPage( "TestAclPage" );
+        page = m_engine.getPageManager().getPage( "TestAclPage" );
         acl = m_engine.getAclManager().getPermissions( page );
         Assertions.assertNotNull( page.getAcl() );
         Assertions.assertFalse(page.getAcl().isEmpty());
@@ -172,7 +159,7 @@ public class DefaultAclManagerTest
     public void testPrintAcl()
     {
         // Verify that the printed Acl for the test page is OK
-        WikiPage page = m_engine.getPage( "TestAclPage" );
+        WikiPage page = m_engine.getPageManager().getPage( "TestAclPage" );
         Acl acl = m_engine.getAclManager().getPermissions( page );
         String aclString = DefaultAclManager.printAcl( acl );
         Assertions.assertEquals( "[{ALLOW edit Charlie,Herman}]\n", aclString );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/content/PageRenamerTest.java b/jspwiki-main/src/test/java/org/apache/wiki/content/PageRenamerTest.java
index c4dc60e..d6d2fb1 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/content/PageRenamerTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/content/PageRenamerTest.java
@@ -75,16 +75,16 @@ public class PageRenamerTest
 
         m_engine.saveText("TestPage", "the big lazy dog thing" );
 
-        WikiPage p = m_engine.getPage("TestPage");
+        WikiPage p = m_engine.getPageManager().getPage("TestPage");
 
         WikiContext context = new WikiContext(m_engine, p);
 
         m_engine.getPageRenamer().renamePage(context, "TestPage", "FooTest", false);
 
-        WikiPage newpage = m_engine.getPage("FooTest");
+        WikiPage newpage = m_engine.getPageManager().getPage("FooTest");
 
         Assertions.assertNotNull( newpage, "no new page" );
-        Assertions.assertNull( m_engine.getPage("TestPage"), "old page not gone" );
+        Assertions.assertNull( m_engine.getPageManager().getPage("TestPage"), "old page not gone" );
 
         // Refmgr
         Collection< String > refs = m_engine.getReferenceManager().findCreated();
@@ -101,7 +101,7 @@ public class PageRenamerTest
         m_engine.saveText("TestPage", "foofoo" );
         m_engine.saveText("TestPage2", "[TestPage]");
 
-        WikiPage p = m_engine.getPage("TestPage");
+        WikiPage p = m_engine.getPageManager().getPage("TestPage");
 
         WikiContext context = new WikiContext(m_engine, p);
 
@@ -127,7 +127,7 @@ public class PageRenamerTest
         m_engine.saveText("TestPage", "foofoo" );
         m_engine.saveText("TestPage2", "TestPage");
 
-        WikiPage p = m_engine.getPage("TestPage");
+        WikiPage p = m_engine.getPageManager().getPage("TestPage");
 
         WikiContext context = new WikiContext(m_engine, p);
 
@@ -152,7 +152,7 @@ public class PageRenamerTest
         m_engine.saveText("TestPage", "foofoo" );
         m_engine.saveText("TestPage2", "[TestPage#heading1]");
 
-        WikiPage p = m_engine.getPage("TestPage");
+        WikiPage p = m_engine.getPageManager().getPage("TestPage");
 
         WikiContext context = new WikiContext(m_engine, p);
 
@@ -177,7 +177,7 @@ public class PageRenamerTest
         m_engine.saveText("TestPage", "foofoo" );
         m_engine.saveText("TestPage2", "[TestPage] [TestPage] [linktext|TestPage] TestPage [linktext|TestPage] [TestPage#Anchor] [TestPage] TestPage [TestPage]");
 
-        WikiPage p = m_engine.getPage("TestPage");
+        WikiPage p = m_engine.getPageManager().getPage("TestPage");
 
         WikiContext context = new WikiContext(m_engine, p);
 
@@ -205,7 +205,7 @@ public class PageRenamerTest
         m_engine.saveText("Test","foo");
         m_engine.saveText("TestPage2", "[Test] [Test#anchor] test Test [test] [link|test] [link|test]");
 
-        WikiPage p = m_engine.getPage("TestPage");
+        WikiPage p = m_engine.getPageManager().getPage("TestPage");
 
         WikiContext context = new WikiContext(m_engine, p);
 
@@ -225,7 +225,7 @@ public class PageRenamerTest
 
         m_engine.addAttachment("TestPage", "foo.txt", "testing".getBytes() );
         m_engine.addAttachment("TestPage", "bar.jpg", "pr0n".getBytes() );
-        WikiPage p = m_engine.getPage("TestPage");
+        WikiPage p = m_engine.getPageManager().getPage("TestPage");
 
         WikiContext context = new WikiContext(m_engine, p);
 
@@ -263,7 +263,7 @@ public class PageRenamerTest
 
         rename( "TestPage", "FooTest" );
 
-        WikiPage p = m_engine.getPage( "FooTest" );
+        WikiPage p = m_engine.getPageManager().getPage( "FooTest" );
 
         Assertions.assertNotNull( p, "no page" );
 
@@ -278,7 +278,7 @@ public class PageRenamerTest
 
         rename( "TestPage", "FooTest" );
 
-        WikiPage p = m_engine.getPage( "FooTest" );
+        WikiPage p = m_engine.getPageManager().getPage( "FooTest" );
 
         Assertions.assertNotNull( p, "no page" );
 
@@ -295,7 +295,7 @@ public class PageRenamerTest
         WikiPage p;
         rename( "TestPage", "FooTest" );
 
-        p = m_engine.getPage( "FooTest" );
+        p = m_engine.getPageManager().getPage( "FooTest" );
 
         Assertions.assertNotNull( p, "no page" );
 
@@ -304,7 +304,7 @@ public class PageRenamerTest
 
     private void rename( String src, String dst ) throws WikiException
     {
-        WikiPage p = m_engine.getPage(src);
+        WikiPage p = m_engine.getPageManager().getPage(src);
 
         WikiContext context = new WikiContext(m_engine, p);
 
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/pages/DefaultPageManagerTest.java b/jspwiki-main/src/test/java/org/apache/wiki/pages/DefaultPageManagerTest.java
index df39c25..b52b706 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/pages/DefaultPageManagerTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/pages/DefaultPageManagerTest.java
@@ -18,53 +18,215 @@
  */
 
 package org.apache.wiki.pages;
-import java.util.Properties;
 
-import org.apache.log4j.PropertyConfigurator;
+import net.sf.ehcache.CacheManager;
 import org.apache.wiki.TestEngine;
+import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiPage;
+import org.apache.wiki.WikiProvider;
+import org.apache.wiki.attachment.Attachment;
+import org.apache.wiki.providers.BasicAttachmentProvider;
 import org.apache.wiki.providers.CachingProvider;
+import org.apache.wiki.providers.FileSystemProvider;
+import org.apache.wiki.providers.VerySimpleProvider;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-public class DefaultPageManagerTest
-{
-    Properties props = TestEngine.getTestProperties();
+import java.io.File;
+import java.util.Collection;
+import java.util.Properties;
+
+public class DefaultPageManagerTest {
 
-    TestEngine engine;
+    static final String NAME1 = "Test1";
 
-    @BeforeEach
-    public void setUp()
-        throws Exception
-    {
-        PropertyConfigurator.configure(props);
-        engine = new TestEngine(props);
-    }
+    TestEngine engine = TestEngine.build();
 
     @AfterEach
-    public void tearDown()
-    {
+    public void tearDown() {
+        final String files = engine.getWikiProperties().getProperty( FileSystemProvider.PROP_PAGEDIR );
+
+        if( files != null ) {
+            final File f = new File( files );
+            TestEngine.deleteAll( f );
+        }
+
+        TestEngine.emptyWorkDir();
+        CacheManager.getInstance().removeAllCaches();
     }
 
     @Test
-    public void testPageCacheExists()
-        throws Exception
-    {
-        props.setProperty( "jspwiki.usePageCache", "true" );
-        PageManager m = new DefaultPageManager( engine, props );
+    public void testPageCacheExists() throws Exception {
+        engine.getWikiProperties().setProperty( "jspwiki.usePageCache", "true" );
+        final PageManager m = new DefaultPageManager( engine, engine.getWikiProperties() );
 
         Assertions.assertTrue( m.getProvider() instanceof CachingProvider );
     }
 
     @Test
-    public void testPageCacheNotInUse()
-        throws Exception
-    {
+    public void testPageCacheNotInUse() throws Exception {
+        engine.getWikiProperties().setProperty( "jspwiki.usePageCache", "false" );
+        final PageManager m = new DefaultPageManager( engine, engine.getWikiProperties() );
+
+        Assertions.assertFalse( m.getProvider() instanceof CachingProvider );
+    }
+
+    @Test
+    public void testDeletePage() throws Exception {
+        engine.saveText( NAME1, "Test" );
+        final String files = engine.getWikiProperties().getProperty( FileSystemProvider.PROP_PAGEDIR );
+        final File saved = new File( files, NAME1+FileSystemProvider.FILE_EXT );
+        Assertions.assertTrue( saved.exists(), "Didn't create it!" );
+
+        final WikiPage page = engine.getPageManager().getPage( NAME1, WikiProvider.LATEST_VERSION );
+        engine.getPageManager().deletePage( page.getName() );
+        Assertions.assertFalse( saved.exists(), "Page has not been removed!" );
+    }
+
+    @Test
+    public void testDeletePageAndAttachments() throws Exception {
+        engine.saveText( NAME1, "Test" );
+        final Attachment att = new Attachment( engine, NAME1, "TestAtt.txt" );
+        att.setAuthor( "FirstPost" );
+        engine.getAttachmentManager().storeAttachment( att, engine.makeAttachmentFile() );
+
+        final String files = engine.getWikiProperties().getProperty( FileSystemProvider.PROP_PAGEDIR );
+        final File saved = new File( files, NAME1+FileSystemProvider.FILE_EXT );
+
+        final String atts = engine.getWikiProperties().getProperty( BasicAttachmentProvider.PROP_STORAGEDIR );
+        final File attfile = new File( atts, NAME1+"-att/TestAtt.txt-dir" );
+
+        Assertions.assertTrue( saved.exists(), "Didn't create it!" );
+        Assertions.assertTrue( attfile.exists(), "Attachment dir does not exist" );
+
+        final WikiPage page = engine.getPageManager().getPage( NAME1, WikiProvider.LATEST_VERSION );
+
+        engine.getPageManager().deletePage( page.getName() );
+
+        Assertions.assertFalse( saved.exists(), "Page has not been removed!" );
+        Assertions.assertFalse( attfile.exists(), "Attachment has not been removed" );
+    }
+
+    @Test
+    public void testDeletePageAndAttachments2() throws Exception {
+        engine.saveText( NAME1, "Test" );
+        Attachment att = new Attachment( engine, NAME1, "TestAtt.txt" );
+        att.setAuthor( "FirstPost" );
+        engine.getAttachmentManager().storeAttachment( att, engine.makeAttachmentFile() );
+
+        final String files = engine.getWikiProperties().getProperty( FileSystemProvider.PROP_PAGEDIR );
+        final File saved = new File( files, NAME1+FileSystemProvider.FILE_EXT );
+
+        final String atts = engine.getWikiProperties().getProperty( BasicAttachmentProvider.PROP_STORAGEDIR );
+        final File attfile = new File( atts, NAME1+"-att/TestAtt.txt-dir" );
+
+        Assertions.assertTrue( saved.exists(), "Didn't create it!" );
+        Assertions.assertTrue( attfile.exists(), "Attachment dir does not exist" );
+
+        final WikiPage page = engine.getPageManager().getPage( NAME1, WikiProvider.LATEST_VERSION );
+        Assertions.assertNotNull( page, "page" );
+
+        att = engine.getAttachmentManager().getAttachmentInfo(NAME1+"/TestAtt.txt");
+        engine.getPageManager().deletePage(att.getName());
+        engine.getPageManager().deletePage( NAME1 );
+        Assertions.assertNull( engine.getPageManager().getPage(NAME1), "Page not removed" );
+        Assertions.assertNull( engine.getPageManager().getPage(NAME1+"/TestAtt.txt"), "Att not removed" );
+
+        final Collection< String > refs = engine.getReferenceManager().findReferrers(NAME1);
+        Assertions.assertNull( refs, "referrers" );
+    }
+
+    @Test
+    public void testDeleteVersion() throws Exception {
+        final Properties props = engine.getWikiProperties();
+        props.setProperty( "jspwiki.pageProvider", "VersioningFileProvider" );
+        final TestEngine engine = new TestEngine( props );
+        engine.saveText( NAME1, "Test1" );
+        engine.saveText( NAME1, "Test2" );
+        engine.saveText( NAME1, "Test3" );
+
+        final WikiPage page = engine.getPageManager().getPage( NAME1, 3 );
+        engine.getPageManager().deleteVersion( page );
+        Assertions.assertNull( engine.getPageManager().getPage( NAME1, 3 ), "got page" );
+
+        final String content = engine.getText( NAME1, WikiProvider.LATEST_VERSION );
+        Assertions.assertEquals( "Test2", content.trim(), "content" );
+    }
+
+    @Test
+    public void testDeleteVersion2() throws Exception {
+        final Properties props = engine.getWikiProperties();
+        props.setProperty( "jspwiki.pageProvider", "VersioningFileProvider" );
+        final TestEngine engine = new TestEngine( props );
+        engine.saveText( NAME1, "Test1" );
+        engine.saveText( NAME1, "Test2" );
+        engine.saveText( NAME1, "Test3" );
+
+        final WikiPage page = engine.getPageManager().getPage( NAME1, 1 );
+        engine.getPageManager().deleteVersion( page );
+        Assertions.assertNull( engine.getPageManager().getPage( NAME1, 1 ), "got page" );
+
+        final String content = engine.getText( NAME1, WikiProvider.LATEST_VERSION );
+        Assertions.assertEquals( "Test3", content.trim(), "content" );
+        Assertions.assertEquals( "", engine.getText(NAME1, 1).trim(), "content1" );
+    }
+
+    @Test
+    public void testLatestGet() throws Exception {
+        final Properties props = engine.getWikiProperties();
+        props.setProperty( "jspwiki.pageProvider", "org.apache.wiki.providers.VerySimpleProvider" );
         props.setProperty( "jspwiki.usePageCache", "false" );
-        PageManager m = new DefaultPageManager( engine, props );
+        final WikiEngine engine = new TestEngine( props );
+        final WikiPage p = engine.getPageManager().getPage( "test", -1 );
+        final VerySimpleProvider vsp = (VerySimpleProvider) engine.getPageManager().getProvider();
+
+        Assertions.assertEquals( "test", vsp.m_latestReq, "wrong page" );
+        Assertions.assertEquals( -1, vsp.m_latestVers, "wrong version" );
+        Assertions.assertNotNull( p, "null" );
+    }
+
+    @Test
+    public void testLatestGet2() throws Exception {
+        final Properties props = engine.getWikiProperties();
+        props.setProperty( "jspwiki.pageProvider", "org.apache.wiki.providers.VerySimpleProvider" );
+        props.setProperty( "jspwiki.usePageCache", "false" );
+        final WikiEngine engine = new TestEngine( props );
+        final String p = engine.getText( "test", -1 );
+        final VerySimpleProvider vsp = (VerySimpleProvider) engine.getPageManager().getProvider();
+
+        Assertions.assertEquals( "test", vsp.m_latestReq, "wrong page" );
+        Assertions.assertEquals( -1, vsp.m_latestVers, "wrong version" );
+        Assertions.assertNotNull( p, "null" );
+    }
+
+    @Test
+    public void testLatestGet3() throws Exception {
+        final Properties props = engine.getWikiProperties();
+        props.setProperty( "jspwiki.pageProvider", "org.apache.wiki.providers.VerySimpleProvider" );
+        props.setProperty( "jspwiki.usePageCache", "false" );
+        final WikiEngine engine = new TestEngine( props );
+        final String p = engine.getHTML( "test", -1 );
+        final VerySimpleProvider vsp = (VerySimpleProvider) engine.getPageManager().getProvider();
+
+        Assertions.assertEquals( "test", vsp.m_latestReq, "wrong page" );
+        Assertions.assertEquals( 5, vsp.m_latestVers, "wrong version" );
+        Assertions.assertNotNull( p, "null" );
+    }
+
+    @Test
+    public void testLatestGet4() throws Exception {
+        final Properties props = engine.getWikiProperties();
+        props.setProperty( "jspwiki.pageProvider", "org.apache.wiki.providers.VerySimpleProvider" );
+        props.setProperty( "jspwiki.usePageCache", "true" );
+        final WikiEngine engine = new TestEngine( props );
+        final String p = engine.getHTML( VerySimpleProvider.PAGENAME, -1 );
+        final CachingProvider cp = (CachingProvider)engine.getPageManager().getProvider();
+        final VerySimpleProvider vsp = (VerySimpleProvider) cp.getRealProvider();
 
-        Assertions.assertTrue( !(m.getProvider() instanceof CachingProvider) );
+        Assertions.assertEquals( VerySimpleProvider.PAGENAME, vsp.m_latestReq, "wrong page" );
+        Assertions.assertEquals( -1, vsp.m_latestVers,  "wrong version" );
+        Assertions.assertNotNull( p, "null" );
     }
 
 }
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/plugin/IfPluginTest.java b/jspwiki-main/src/test/java/org/apache/wiki/plugin/IfPluginTest.java
index 4ac3c19..90eaff2 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/plugin/IfPluginTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/plugin/IfPluginTest.java
@@ -71,7 +71,7 @@ public class IfPluginTest {
         String expected = "<p>Content visible for Janne Jalkanen</p>\n";
 
         testEngine.saveText( "Test", src );
-        WikiPage page = testEngine.getPage( "Test", WikiPageProvider.LATEST_VERSION );
+        WikiPage page = testEngine.getPageManager().getPage( "Test", WikiPageProvider.LATEST_VERSION );
         WikiContext context = getJanneBasedWikiContextFor( page );
 
         String res = testEngine.getHTML( context, page );
@@ -92,7 +92,7 @@ public class IfPluginTest {
         String expected = "\n";
 
         testEngine.saveText( "Test", src );
-        WikiPage page = testEngine.getPage( "Test", WikiPageProvider.LATEST_VERSION );
+        WikiPage page = testEngine.getPageManager().getPage( "Test", WikiPageProvider.LATEST_VERSION );
         WikiContext context = getJanneBasedWikiContextFor( page );
 
         String res = testEngine.getHTML( context, page );
@@ -113,7 +113,7 @@ public class IfPluginTest {
         String expected = "<p>Content visible for 127.0.0.1</p>\n";
 
         testEngine.saveText( "Test", src );
-        WikiPage page = testEngine.getPage( "Test", WikiPageProvider.LATEST_VERSION );
+        WikiPage page = testEngine.getPageManager().getPage( "Test", WikiPageProvider.LATEST_VERSION );
         WikiContext context = getJanneBasedWikiContextFor( page );
 
         String res = testEngine.getHTML( context, page );
@@ -134,7 +134,7 @@ public class IfPluginTest {
         String expected = "\n";
 
         testEngine.saveText( "Test", src );
-        WikiPage page = testEngine.getPage( "Test", WikiPageProvider.LATEST_VERSION );
+        WikiPage page = testEngine.getPageManager().getPage( "Test", WikiPageProvider.LATEST_VERSION );
         WikiContext context = getJanneBasedWikiContextFor( page );
 
         String res = testEngine.getHTML( context, page );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/plugin/PageViewPluginTest.java b/jspwiki-main/src/test/java/org/apache/wiki/plugin/PageViewPluginTest.java
index 63222ad..d7a8f6b 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/plugin/PageViewPluginTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/plugin/PageViewPluginTest.java
@@ -18,8 +18,7 @@
  */
 package org.apache.wiki.plugin;
 
-import java.util.Properties;
-
+import net.sf.ehcache.CacheManager;
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiPage;
@@ -29,7 +28,7 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import net.sf.ehcache.CacheManager;
+import java.util.Properties;
 
 public class PageViewPluginTest
 {
@@ -66,9 +65,9 @@ public class PageViewPluginTest
     @Test
     public void testShowCountsBasic() throws Exception
     {
-        WikiPage page1 = testEngine.getPage( "TestPage01" );
+        WikiPage page1 = testEngine.getPageManager().getPage( "TestPage01" );
         WikiContext context1 = new WikiContext( testEngine, page1 );
-        WikiPage page2 = testEngine.getPage( "TestPage02" );
+        WikiPage page2 = testEngine.getPageManager().getPage( "TestPage02" );
         WikiContext context2 = new WikiContext( testEngine, page2 );
 
         // generate counts:
@@ -80,7 +79,7 @@ public class PageViewPluginTest
         String pageViewPageContent = "[{PageViewPlugin show='list''\n\n* {1} ({2} views)\n}]";
         testEngine.saveText( "PageViews", pageViewPageContent );
 
-        WikiPage pageviews = testEngine.getPage( "PageViews" );
+        WikiPage pageviews = testEngine.getPageManager().getPage( "PageViews" );
         WikiContext contextPV = new WikiContext( testEngine, pageviews );
 
         String result = testEngine.getHTML( contextPV, pageviews );
@@ -96,9 +95,9 @@ public class PageViewPluginTest
     {
         testEngine.saveText( "TestPageExcluded", "this is test page that should be excluded [{PageViewPlugin}]" );
 
-        WikiPage page1 = testEngine.getPage( "TestPage01" );
+        WikiPage page1 = testEngine.getPageManager().getPage( "TestPage01" );
         WikiContext context1 = new WikiContext( testEngine, page1 );
-        WikiPage page2 = testEngine.getPage( "TestPage02" );
+        WikiPage page2 = testEngine.getPageManager().getPage( "TestPage02" );
         WikiContext context2 = new WikiContext( testEngine, page2 );
 
         // generate counts:
@@ -110,7 +109,7 @@ public class PageViewPluginTest
         String pageViewPageContent = "[{PageViewPlugin show='list' exclude='TestPageExcl*' '\n\n* {1} ({2} views)\n}]";
         testEngine.saveText( "PageViews", pageViewPageContent );
 
-        WikiPage pageviews = testEngine.getPage( "PageViews" );
+        WikiPage pageviews = testEngine.getPageManager().getPage( "PageViews" );
         WikiContext contextPV = new WikiContext( testEngine, pageviews );
 
         String result = testEngine.getHTML( contextPV, pageviews );
@@ -127,9 +126,9 @@ public class PageViewPluginTest
     @Test
     public void testShowCountsSorted() throws Exception
     {
-        WikiPage page1 = testEngine.getPage( "TestPage01" );
+        WikiPage page1 = testEngine.getPageManager().getPage( "TestPage01" );
         WikiContext context1 = new WikiContext( testEngine, page1 );
-        WikiPage page2 = testEngine.getPage( "TestPage02" );
+        WikiPage page2 = testEngine.getPageManager().getPage( "TestPage02" );
         WikiContext context2 = new WikiContext( testEngine, page2 );
 
         // generate counts:
@@ -141,7 +140,7 @@ public class PageViewPluginTest
         String pageViewPageContent = "[{PageViewPlugin show='list' sort=count '\n\n* {1} ({2} views)\n}]";
         testEngine.saveText( "PageViews", pageViewPageContent );
 
-        WikiPage pageviews = testEngine.getPage( "PageViews" );
+        WikiPage pageviews = testEngine.getPageManager().getPage( "PageViews" );
         WikiContext contextPV = new WikiContext( testEngine, pageviews );
 
         String result = testEngine.getHTML( contextPV, pageviews );
@@ -161,13 +160,13 @@ public class PageViewPluginTest
         testEngine.saveText( "TestPage03", "this is test page 03 [{PageViewPlugin}]" );
         testEngine.saveText( "TestPage04", "this is test page 04 [{PageViewPlugin}]" );
 
-        WikiPage page1 = testEngine.getPage( "TestPage01" );
+        WikiPage page1 = testEngine.getPageManager().getPage( "TestPage01" );
         WikiContext context1 = new WikiContext( testEngine, page1 );
-        WikiPage page2 = testEngine.getPage( "TestPage02" );
+        WikiPage page2 = testEngine.getPageManager().getPage( "TestPage02" );
         WikiContext context2 = new WikiContext( testEngine, page2 );
-        WikiPage page3 = testEngine.getPage( "TestPage03" );
+        WikiPage page3 = testEngine.getPageManager().getPage( "TestPage03" );
         WikiContext context3 = new WikiContext( testEngine, page3 );
-        WikiPage page4 = testEngine.getPage( "TestPage04" );
+        WikiPage page4 = testEngine.getPageManager().getPage( "TestPage04" );
         WikiContext context4 = new WikiContext( testEngine, page4 );
 
         // generate counts:
@@ -181,7 +180,7 @@ public class PageViewPluginTest
         String pageViewPageContent = "[{PageViewPlugin show='list' entries=3'\n\n* {1} ({2} views)\n}]";
         testEngine.saveText( "PageViews", pageViewPageContent );
 
-        WikiPage pageviews = testEngine.getPage( "PageViews" );
+        WikiPage pageviews = testEngine.getPageManager().getPage( "PageViews" );
         WikiContext contextPV = new WikiContext( testEngine, pageviews );
 
         String result = testEngine.getHTML( contextPV, pageviews );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/providers/CachingProviderTest.java b/jspwiki-main/src/test/java/org/apache/wiki/providers/CachingProviderTest.java
index 5a34e13..6aa93d8 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/providers/CachingProviderTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/providers/CachingProviderTest.java
@@ -20,14 +20,12 @@
 package org.apache.wiki.providers;
 
 import net.sf.ehcache.CacheManager;
-import org.apache.log4j.PropertyConfigurator;
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.util.FileUtil;
 import org.awaitility.Awaitility;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.io.File;
@@ -38,25 +36,13 @@ import java.util.Properties;
 
 public class CachingProviderTest
 {
-    protected TestEngine testEngine;
-
-    @BeforeEach
-    public void setUp()
-        throws Exception
-    {
-        TestEngine.emptyWorkDir();
-        CacheManager.getInstance().removeAllCaches();
-
-        Properties props2 = TestEngine.getTestProperties();
-        testEngine = new TestEngine(props2);
-        PropertyConfigurator.configure(props2);
-    }
+    protected TestEngine testEngine = TestEngine.build();
 
     @AfterEach
-    public void tearDown()
-    {
-        TestEngine.emptyWorkDir();
+    public void tearDown() {
         testEngine.deleteTestPage("Testi");
+        TestEngine.emptyWorkDir();
+        CacheManager.getInstance().removeAllCaches();
     }
 
     /**
@@ -81,7 +67,7 @@ public class CachingProviderTest
         Assertions.assertEquals( 0, p.m_pageExistsCalls, "pageExists" );
         Assertions.assertEquals( 4, p.m_getPageTextCalls, "getPageText" );
 
-        engine.getPage( "Foo" );
+        engine.getPageManager().getPage( "Foo" );
 
         Assertions.assertEquals( 0, p.m_pageExistsCalls, "pageExists2" );
     }
@@ -105,8 +91,8 @@ public class CachingProviderTest
         FileUtil.copyContents( new StringReader(content), out );
         out.close();
 
-        Awaitility.await( "testSneakyAdd" ).until( () -> engine.getPage( "Testi" ) != null );
-        WikiPage p = engine.getPage( "Testi" );
+        Awaitility.await( "testSneakyAdd" ).until( () -> engine.getPageManager().getPage( "Testi" ) != null );
+        WikiPage p = engine.getPageManager().getPage( "Testi" );
         Assertions.assertNotNull( p, "page did not exist?" );
 
         String text = engine.getText( "Testi");
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/providers/VersioningFileProviderTest.java b/jspwiki-main/src/test/java/org/apache/wiki/providers/VersioningFileProviderTest.java
index 8d9da15..5f9f703 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/providers/VersioningFileProviderTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/providers/VersioningFileProviderTest.java
@@ -27,7 +27,6 @@ import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.util.FileUtil;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.io.File;
@@ -52,37 +51,23 @@ public class VersioningFileProviderTest
                 + "#Wed Jan 01 12:27:57 GMT 2012" + "\n"
                 + "author=" + OLD_AUTHOR + "\n";
 
-    // we always use the same properties for this suite, but
-    // they can be changed by our tests and also TestEngine,
-    // and so must be reloaded from source for each test case
-    private Properties PROPS = TestEngine.getTestProperties("/jspwiki-vers-custom.properties");
+    private Properties PROPS = TestEngine.getTestProperties( "/jspwiki-vers-custom.properties" );
+    private TestEngine engine = TestEngine.build( PROPS );
 
     // this is the testing page directory
-    private String files;
+    private String files = engine.getWikiProperties().getProperty( AbstractFileProvider.PROP_PAGEDIR );
 
-    private TestEngine engine;
-
-    @BeforeEach
-    public void setUp()
-        throws Exception
-    {
-        // make sure that the reference manager cache is cleaned first
-        TestEngine.emptyWorkDir(null);
-
-        engine = new TestEngine(PROPS);
-        files = engine.getWikiProperties().getProperty( AbstractFileProvider.PROP_PAGEDIR );
-    }
 
     @AfterEach
-    public void tearDown()
-    {
+    public void tearDown() {
         // Remove all/any files and subdirs left in test page directory
         TestEngine.deleteAll( new File(files) );
 
-        // jspwiki always uses a singleton CacheManager, so
-        // clear the cache at the end of every test case to avoid
-        // polluting another test case
+        // clear the cache at the end of every test case to avoid polluting another test case
         CacheManager.getInstance().removeAllCaches();
+
+        // make sure that the reference manager cache is cleaned first
+        TestEngine.emptyWorkDir(null);
     }
 
     /*
@@ -104,7 +89,7 @@ public class VersioningFileProviderTest
         String res = engine.getText( NAME1 );
         Assertions.assertEquals( fakeWikiPage, res, "fetch latest should work" );
 
-        WikiPage page = engine.getPage( NAME1, 1 );
+        WikiPage page = engine.getPageManager().getPage( NAME1, 1 );
         Assertions.assertEquals( 1, page.getVersion(), "original version expected" );
         Assertions.assertEquals( OLD_AUTHOR, page.getAuthor(), "original author" );
     }
@@ -128,7 +113,7 @@ public class VersioningFileProviderTest
         res = engine.getText( NAME1, 1 ); // Should be the first version.
         Assertions.assertEquals( "foobar", res, "fetch by direct version did not work" );
 
-        WikiPage page = engine.getPage( NAME1 );
+        WikiPage page = engine.getPageManager().getPage( NAME1 );
         Assertions.assertEquals( 1, page.getVersion(), "original version expected" );
         Assertions.assertNull( page.getAuthor(), "original author not expected" );
     }
@@ -156,7 +141,7 @@ public class VersioningFileProviderTest
         res = engine.getText( NAME1, 1 ); // Should be the first version.
         Assertions.assertEquals( fakeWikiPage, res, "fetch by direct version did not work" );
 
-        WikiPage page = engine.getPage( NAME1, 1 );
+        WikiPage page = engine.getPageManager().getPage( NAME1, 1 );
         Assertions.assertEquals( 1, page.getVersion(), "original version expected" );
         Assertions.assertEquals( OLD_AUTHOR, page.getAuthor(), "original author" );
     }
@@ -201,11 +186,11 @@ public class VersioningFileProviderTest
         String result4 = engine.getText( NAME1, 1 );
         Assertions.assertEquals( fakeWikiPage, result4, "fetch original by version Assertions.failed" );
 
-        WikiPage pageNew = engine.getPage( NAME1, 2 );
+        WikiPage pageNew = engine.getPageManager().getPage( NAME1, 2 );
         Assertions.assertEquals( 2, pageNew.getVersion(), "new version" );
         Assertions.assertEquals( "Guest", pageNew.getAuthor(), "new author" );
 
-        WikiPage pageOld = engine.getPage( NAME1, 1 );
+        WikiPage pageOld = engine.getPageManager().getPage( NAME1, 1 );
         Assertions.assertEquals( 1, pageOld.getVersion(), "old version" );
         Assertions.assertEquals( OLD_AUTHOR, pageOld.getAuthor(), "old author" );
     }
@@ -253,15 +238,15 @@ public class VersioningFileProviderTest
         String result4 = engine.getText( NAME1, 2 );
         Assertions.assertEquals( text2, result4, "fetch original by version Assertions.failed" );
 
-        WikiPage pageNew = engine.getPage( NAME1 );
+        WikiPage pageNew = engine.getPageManager().getPage( NAME1 );
         Assertions.assertEquals( 3, pageNew.getVersion(), "newest version" );
         Assertions.assertEquals( pageNew.getAuthor(), "Guest", "newest author" );
 
-        WikiPage pageMiddle = engine.getPage( NAME1, 2 );
+        WikiPage pageMiddle = engine.getPageManager().getPage( NAME1, 2 );
         Assertions.assertEquals( 2, pageMiddle.getVersion(), "middle version" );
         Assertions.assertEquals( Users.JANNE, pageMiddle.getAuthor(), "middle author" );
 
-        WikiPage pageOld = engine.getPage( NAME1, 1 );
+        WikiPage pageOld = engine.getPageManager().getPage( NAME1, 1 );
         Assertions.assertEquals( 1, pageOld.getVersion(), "old version" );
         Assertions.assertEquals( OLD_AUTHOR, pageOld.getAuthor(), "old author" );
     }
@@ -320,15 +305,15 @@ public class VersioningFileProviderTest
         String result4 = engine.getText( NAME1, 2 );
         Assertions.assertEquals( text2, result4, "fetch original by version Assertions.failed" );
 
-        WikiPage pageNew = engine.getPage( NAME1 );
+        WikiPage pageNew = engine.getPageManager().getPage( NAME1 );
         Assertions.assertEquals( 3, pageNew.getVersion(), "newest version" );
         Assertions.assertEquals( "Guest", pageNew.getAuthor(), "newest author" );
 
-        WikiPage pageMiddle = engine.getPage( NAME1, 2 );
+        WikiPage pageMiddle = engine.getPageManager().getPage( NAME1, 2 );
         Assertions.assertEquals( 2, pageMiddle.getVersion(), "middle version" );
         Assertions.assertEquals( Users.JANNE, pageMiddle.getAuthor(), "middle author" );
 
-        WikiPage pageOld = engine.getPage( NAME1, 1 );
+        WikiPage pageOld = engine.getPageManager().getPage( NAME1, 1 );
         Assertions.assertEquals( 1, pageOld.getVersion(), "old version" );
         Assertions.assertEquals( OLD_AUTHOR, pageOld.getAuthor(), "old author" );
     }
@@ -347,7 +332,7 @@ public class VersioningFileProviderTest
             engine.saveText( name, text );
         }
 
-        WikiPage pageinfo = engine.getPage( NAME1 );
+        WikiPage pageinfo = engine.getPageManager().getPage( NAME1 );
 
         Assertions.assertEquals( maxver, pageinfo.getVersion(), "wrong version" );
 
@@ -376,7 +361,7 @@ public class VersioningFileProviderTest
 
         engine.saveText( NAME1, text );
 
-        WikiPage page = engine.getPage( NAME1, 1 );
+        WikiPage page = engine.getPageManager().getPage( NAME1, 1 );
 
         Assertions.assertEquals( NAME1, page.getName(), "name" );
         Assertions.assertEquals( 1, page.getVersion(), "version" );
@@ -390,7 +375,7 @@ public class VersioningFileProviderTest
 
         engine.saveText( NAME1, text );
 
-        WikiPage res = engine.getPage(NAME1);
+        WikiPage res = engine.getPageManager().getPage(NAME1);
 
         Assertions.assertEquals( 1, res.getVersion() );
     }
@@ -407,7 +392,7 @@ public class VersioningFileProviderTest
         engine.saveText( NAME1, text2 );
         engine.saveText( NAME1, text3 );
 
-        WikiPage res = engine.getPage(NAME1);
+        WikiPage res = engine.getPageManager().getPage(NAME1);
 
         Assertions.assertEquals( 3, res.getVersion(), "wrong version" );
 
@@ -428,13 +413,13 @@ public class VersioningFileProviderTest
         engine.saveText( NAME1, text2 );
         engine.saveText( NAME1, text3 );
 
-        WikiPage res = engine.getPage(NAME1);
+        WikiPage res = engine.getPageManager().getPage(NAME1);
 
         Assertions.assertEquals( 3, res.getVersion(), "wrong version" );
 
-        Assertions.assertEquals( 1, engine.getPage( NAME1, 1 ).getVersion(), "ver1" );
-        Assertions.assertEquals( 2, engine.getPage( NAME1, 2 ).getVersion(), "ver2" );
-        Assertions.assertEquals( 3, engine.getPage( NAME1, 3 ).getVersion(), "ver3" );
+        Assertions.assertEquals( 1, engine.getPageManager().getPage( NAME1, 1 ).getVersion(), "ver1" );
+        Assertions.assertEquals( 2, engine.getPageManager().getPage( NAME1, 2 ).getVersion(), "ver2" );
+        Assertions.assertEquals( 3, engine.getPageManager().getPage( NAME1, 3 ).getVersion(), "ver3" );
 }
 
     /**
@@ -452,7 +437,7 @@ public class VersioningFileProviderTest
         engine.saveText( NAME1, text2 );
         engine.saveText( NAME1, text3 );
 
-        WikiPage res = engine.getPage(NAME1);
+        WikiPage res = engine.getPageManager().getPage(NAME1);
 
         Assertions.assertEquals( 3, res.getVersion(), "wrong version" );
 
@@ -464,7 +449,7 @@ public class VersioningFileProviderTest
     @Test
     public void testNonexistentPage()
     {
-        Assertions.assertNull( engine.getPage("fjewifjeiw") );
+        Assertions.assertNull( engine.getPageManager().getPage("fjewifjeiw") );
     }
 
     @Test
@@ -546,7 +531,7 @@ public class VersioningFileProviderTest
 
         engine.saveText( context, "test" );
 
-        WikiPage p2 = engine.getPage( NAME1 );
+        WikiPage p2 = engine.getPageManager().getPage( NAME1 );
 
         Assertions.assertEquals( "Test change", p2.getAttribute(WikiPage.CHANGENOTE) );
     }
@@ -566,11 +551,11 @@ public class VersioningFileProviderTest
         context.getPage().setAttribute(WikiPage.CHANGENOTE, "Change 2" );
         engine.saveText( context, "test2" );
 
-        WikiPage p2 = engine.getPage( NAME1, 1 );
+        WikiPage p2 = engine.getPageManager().getPage( NAME1, 1 );
 
         Assertions.assertEquals( "Test change", p2.getAttribute(WikiPage.CHANGENOTE) );
 
-        WikiPage p3 = engine.getPage( NAME1, 2 );
+        WikiPage p3 = engine.getPageManager().getPage( NAME1, 2 );
 
         Assertions.assertEquals( "Change 2", p3.getAttribute(WikiPage.CHANGENOTE) );
     }
@@ -588,7 +573,7 @@ public class VersioningFileProviderTest
 
         for( int i = 0; i < 5; i++ )
         {
-            WikiPage p2 = (WikiPage)engine.getPage( NAME1 ).clone();
+            WikiPage p2 = (WikiPage)engine.getPageManager().getPage( NAME1 ).clone();
             p2.removeAttribute(WikiPage.CHANGENOTE);
 
             context.setPage( p2 );
@@ -596,7 +581,7 @@ public class VersioningFileProviderTest
             engine.saveText( context, "test"+i );
         }
 
-        WikiPage p3 = engine.getPage( NAME1, -1 );
+        WikiPage p3 = engine.getPageManager().getPage( NAME1, -1 );
 
         Assertions.assertEquals( null, p3.getAttribute(WikiPage.CHANGENOTE) );
     }
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/render/RenderingManagerTest.java b/jspwiki-main/src/test/java/org/apache/wiki/render/RenderingManagerTest.java
index cf5aada..06962d9 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/render/RenderingManagerTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/render/RenderingManagerTest.java
@@ -58,7 +58,7 @@ public class RenderingManagerTest {
 
         for( int i = 0; i < 300; i++ )
         {
-            WikiPage page = m_engine.getPage( "TestPage" );
+            WikiPage page = m_engine.getPageManager().getPage( "TestPage" );
             String pagedata = m_engine.getPureText( page );
 
             WikiContext context = new WikiContext( m_engine, page );
@@ -81,7 +81,7 @@ public class RenderingManagerTest {
 
         for( int i = 0; i < 300; i++ )
         {
-            WikiPage page = m_engine.getPage( "TestPage" );
+            WikiPage page = m_engine.getPageManager().getPage( "TestPage" );
             String pagedata = m_engine.getPureText( page );
 
             WikiContext context = new WikiContext( m_engine, page );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/rss/RSSGeneratorTest.java b/jspwiki-main/src/test/java/org/apache/wiki/rss/RSSGeneratorTest.java
index aa58605..ce8949d 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/rss/RSSGeneratorTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/rss/RSSGeneratorTest.java
@@ -22,11 +22,7 @@
  */
 package org.apache.wiki.rss;
 
-import java.io.File;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-
+import net.sf.ehcache.CacheManager;
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiPage;
@@ -38,30 +34,31 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import net.sf.ehcache.CacheManager;
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
 
 
 /**
  *
  *  @since
  */
-public class RSSGeneratorTest
-{
+public class RSSGeneratorTest {
+
     TestEngine m_testEngine;
     Properties props = TestEngine.getTestProperties();
 
     @BeforeEach
-    public void setUp() throws Exception
-    {
+    public void setUp() {
         props.setProperty( RSSGenerator.PROP_GENERATE_RSS, "true" );
-        CacheManager.getInstance().removeAllCaches();
-        m_testEngine = new TestEngine(props);
+        m_testEngine = TestEngine.build( props );
     }
 
     @AfterEach
-    public void tearDown() throws Exception
-    {
+    public void tearDown() {
         TestEngine.deleteAll( new File(props.getProperty( FileSystemProvider.PROP_PAGEDIR )) );
+        CacheManager.getInstance().removeAllCaches();
     }
 
     @Test
@@ -79,7 +76,7 @@ public class RSSGeneratorTest
 
         RSSGenerator gen = m_testEngine.getRSSGenerator();
 
-        WikiContext context = new WikiContext( m_testEngine, m_testEngine.getPage("TestBlog") );
+        WikiContext context = new WikiContext( m_testEngine, m_testEngine.getPageManager().getPage("TestBlog") );
 
         WeblogPlugin blogplugin = new WeblogPlugin();
 
@@ -110,7 +107,7 @@ public class RSSGeneratorTest
 
         RSSGenerator gen = m_testEngine.getRSSGenerator();
 
-        WikiContext context = new WikiContext( m_testEngine, m_testEngine.getPage("TestBlog") );
+        WikiContext context = new WikiContext( m_testEngine, m_testEngine.getPageManager().getPage("TestBlog") );
 
         WeblogPlugin blogplugin = new WeblogPlugin();
 
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/stress/StressTestVersioningProvider.java b/jspwiki-main/src/test/java/org/apache/wiki/stress/StressTestVersioningProvider.java
index d7a2688..20ed0ac 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/stress/StressTestVersioningProvider.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/stress/StressTestVersioningProvider.java
@@ -18,32 +18,22 @@
  */
 package org.apache.wiki.stress;
 
-import java.io.File;
-import java.util.Collection;
-import java.util.Properties;
-
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.providers.FileSystemProvider;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
 
+import java.io.File;
+import java.util.Collection;
+import java.util.Properties;
 
-public class StressTestVersioningProvider 
-{
+
+public class StressTestVersioningProvider {
     public static final String NAME1 = "Test1";
 
     Properties props = TestEngine.getTestProperties("/jspwiki-vers-custom.properties");
-
-    TestEngine engine;
-
-    @BeforeEach
-    public void setUp()
-        throws Exception
-    {
-        engine = new TestEngine(props);
-    }
+    TestEngine engine = TestEngine.build( props );
 
     @AfterEach
     public void tearDown()
@@ -77,7 +67,7 @@ public class StressTestVersioningProvider
         mark.stop();
 
         System.out.println("Benchmark: "+mark.toString(2000)+" pages/second");
-        WikiPage pageinfo = engine.getPage( NAME1 );
+        WikiPage pageinfo = engine.getPageManager().getPage( NAME1 );
 
         Assertions.assertEquals( maxver, pageinfo.getVersion(), "wrong version" );
 
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/CommandResolverTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/CommandResolverTest.java
index a557d5c..634bc7d 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/ui/CommandResolverTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/CommandResolverTest.java
@@ -124,7 +124,7 @@ public class CommandResolverTest {
 
     @Test
     public void testFindWikiActionWithParams() {
-        final WikiPage page = m_engine.getPage( "SinglePage" );
+        final WikiPage page = m_engine.getPageManager().getPage( "SinglePage" );
 
         // Passing an EDIT request with page param yields a wrapped action
         MockHttpServletRequest request = m_engine.newHttpRequest( "/Edit.jsp?page=SinglePage" );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/PageCommandTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/PageCommandTest.java
index a5a7b83..5e222d9 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/ui/PageCommandTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/PageCommandTest.java
@@ -64,7 +64,7 @@ public class PageCommandTest {
     public void testTargetedCommand() throws Exception {
         final TestEngine testEngine = TestEngine.build();
         testEngine.saveText( "TestPage", "This is a test." );
-        final WikiPage testPage = testEngine.getPage( "TestPage" );
+        final WikiPage testPage = testEngine.getPageManager().getPage( "TestPage" );
 
         // Get view command
         Command a = PageCommand.VIEW;
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/xmlrpc/RPCHandlerTest.java b/jspwiki-main/src/test/java/org/apache/wiki/xmlrpc/RPCHandlerTest.java
index fcbac61..3ed8c2d 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/xmlrpc/RPCHandlerTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/xmlrpc/RPCHandlerTest.java
@@ -19,12 +19,7 @@
 
 package org.apache.wiki.xmlrpc;
 
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.Vector;
-
+import net.sf.ehcache.CacheManager;
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiPage;
@@ -35,7 +30,11 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import net.sf.ehcache.CacheManager;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Properties;
+import java.util.Vector;
 
 public class RPCHandlerTest
 {
@@ -87,7 +86,7 @@ public class RPCHandlerTest
         Vector previousChanges = m_handler.getRecentChanges( time );
 
         m_engine.saveText( NAME1, "Foo" );
-        WikiPage directInfo = m_engine.getPage( NAME1 );
+        WikiPage directInfo = m_engine.getPageManager().getPage( NAME1 );
         time = getCalendarTime( directInfo.getLastModified() );
         Vector recentChanges = m_handler.getRecentChanges( time );
 
@@ -105,7 +104,7 @@ public class RPCHandlerTest
         Attachment att = new Attachment( m_engine, NAME1, "TestAtt.txt" );
         att.setAuthor( "FirstPost" );
         m_engine.getAttachmentManager().storeAttachment( att, m_engine.makeAttachmentFile() );
-        WikiPage directInfo = m_engine.getPage( NAME1 );
+        WikiPage directInfo = m_engine.getPageManager().getPage( NAME1 );
         time = getCalendarTime( directInfo.getLastModified() );
         Vector recentChanges = m_handler.getRecentChanges( time );
 
@@ -117,7 +116,7 @@ public class RPCHandlerTest
         throws Exception
     {
         m_engine.saveText( NAME1, "Foobar.[{ALLOW view Anonymous}]" );
-        WikiPage directInfo = m_engine.getPage( NAME1 );
+        WikiPage directInfo = m_engine.getPageManager().getPage( NAME1 );
 
         Hashtable ht = m_handler.getPageInfo( NAME1 );
         Assertions.assertEquals( (String)ht.get( "name" ), NAME1, "name" );
diff --git a/jspwiki-markdown/src/test/java/org/apache/wiki/render/MarkdownRendererTest.java b/jspwiki-markdown/src/test/java/org/apache/wiki/render/MarkdownRendererTest.java
index 58b05b6..4ae2dde 100755
--- a/jspwiki-markdown/src/test/java/org/apache/wiki/render/MarkdownRendererTest.java
+++ b/jspwiki-markdown/src/test/java/org/apache/wiki/render/MarkdownRendererTest.java
@@ -18,12 +18,7 @@
  */
 package org.apache.wiki.render;
 
-import java.io.BufferedReader;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
+import net.sf.ehcache.CacheManager;
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -37,7 +32,11 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import net.sf.ehcache.CacheManager;
+import java.io.BufferedReader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
 
 
 public class MarkdownRendererTest {
@@ -106,14 +105,14 @@ public class MarkdownRendererTest {
         Assertions.assertEquals( "<p> This should be visible if the ACL allows you to see it</p>\n", translate( src ) );
         // in any case, we also check that the created wikipage has the ACL added
         Assertions.assertEquals( "  user = PerryMason: ((\"org.apache.wiki.auth.permissions.PagePermission\",\"JSPWiki:testpage\",\"view\"))\n",
-        		             testEngine.getPage( PAGE_NAME ).getAcl().toString() );
+        		             testEngine.getPageManager().getPage( PAGE_NAME ).getAcl().toString() );
     }
 
     @Test
     public void testMarkupExtensionMetadata() throws Exception {
         String src = "[{SET Perry='Mason'}]() Some text after setting metadata";
         Assertions.assertEquals( "<p> Some text after setting metadata</p>\n", translate( src ) );
-        Assertions.assertEquals( "Mason", testEngine.getPage( PAGE_NAME ).getAttribute( "Perry" ) );
+        Assertions.assertEquals( "Mason", testEngine.getPageManager().getPage( PAGE_NAME ).getAttribute( "Perry" ) );
     }
 
     @Test
@@ -271,7 +270,6 @@ public class MarkdownRendererTest {
 
     @BeforeEach
     public void setUp() throws Exception {
-        CacheManager.getInstance().removeAllCaches();
         props.setProperty( "jspwiki.translatorReader.matchEnglishPlurals", "true" );
         props.setProperty( "jspwiki.fileSystemProvider.pageDir", "./target/md-pageDir" );
         props.setProperty( "jspwiki.renderingManager.markupParser", MarkdownParser.class.getName() );
@@ -287,6 +285,7 @@ public class MarkdownRendererTest {
         }
 
         created.clear();
+        CacheManager.getInstance().removeAllCaches();
     }
 
     String translate( final String src ) throws Exception {
diff --git a/jspwiki-war/src/main/webapp/Comment.jsp b/jspwiki-war/src/main/webapp/Comment.jsp
index 1577189..5b998a9 100644
--- a/jspwiki-war/src/main/webapp/Comment.jsp
+++ b/jspwiki-war/src/main/webapp/Comment.jsp
@@ -87,7 +87,7 @@
     String changenote = TextUtil.replaceEntities( request.getParameter( "changenote" ) );
 
     WikiPage wikipage = wikiContext.getPage();
-    WikiPage latestversion = wiki.getPage( pagereq );
+    WikiPage latestversion = wiki.getPageManager().getPage( pagereq );
 
     session.removeAttribute( EditorManager.REQ_EDITEDTEXT );
 
diff --git a/jspwiki-war/src/main/webapp/Delete.jsp b/jspwiki-war/src/main/webapp/Delete.jsp
index b20fcce..40063d3 100644
--- a/jspwiki-war/src/main/webapp/Delete.jsp
+++ b/jspwiki-war/src/main/webapp/Delete.jsp
@@ -45,7 +45,7 @@
     String pagereq = wikiContext.getName();
 
     WikiPage wikipage      = wikiContext.getPage();
-    WikiPage latestversion = wiki.getPage( pagereq );
+    WikiPage latestversion = wiki.getPageManager().getPage( pagereq );
 
     String delete = request.getParameter( "delete" );
     String deleteall = request.getParameter( "delete-all" );
@@ -65,7 +65,7 @@
     {
         log.info("Deleting page "+pagereq+". User="+request.getRemoteUser()+", host="+HttpUtil.getRemoteAddress(request) );
 
-        wiki.deletePage( pagereq );
+        wiki.getPageManager().deletePage( pagereq );
 
         FixedQueue trail = (FixedQueue) session.getAttribute( BreadcrumbsTag.BREADCRUMBTRAIL_KEY );
         if( trail != null )
@@ -89,10 +89,10 @@
             {
                 int version = Integer.parseInt( paramName.substring(7) );
 
-                WikiPage p = wiki.getPage( pagereq, version );
+                WikiPage p = wiki.getPageManager().getPage( pagereq, version );
 
                 log.debug("Deleting version "+version);
-                wiki.deleteVersion( p );
+                wiki.getPageManager().deleteVersion( p );
             }
         }
 
diff --git a/jspwiki-war/src/main/webapp/Edit.jsp b/jspwiki-war/src/main/webapp/Edit.jsp
index 002a832..1178cc7 100644
--- a/jspwiki-war/src/main/webapp/Edit.jsp
+++ b/jspwiki-war/src/main/webapp/Edit.jsp
@@ -92,7 +92,7 @@
     }
 
     WikiPage wikipage = wikiContext.getPage();
-    WikiPage latestversion = wiki.getPage( pagereq );
+    WikiPage latestversion = wiki.getPageManager().getPage( pagereq );
 
     if( latestversion == null )
     {
diff --git a/jspwiki-war/src/main/webapp/templates/210/InfoContent.jsp b/jspwiki-war/src/main/webapp/templates/210/InfoContent.jsp
index f4cd8d6..7d02d4a 100644
--- a/jspwiki-war/src/main/webapp/templates/210/InfoContent.jsp
+++ b/jspwiki-war/src/main/webapp/templates/210/InfoContent.jsp
@@ -44,7 +44,7 @@
   String creationAuthor ="";
 
   //FIXME -- seems not to work correctly for attachments !!
-  WikiPage firstPage = c.getEngine().getPage( wikiPage.getName(), 1 );
+  WikiPage firstPage = c.getEngine().getPageManager().getPage( wikiPage.getName(), 1 );
   if( firstPage != null )
   {
     creationAuthor = firstPage.getAuthor();
diff --git a/jspwiki-war/src/main/webapp/templates/210/PageTab.jsp b/jspwiki-war/src/main/webapp/templates/210/PageTab.jsp
index 05fde13..5b892a4 100644
--- a/jspwiki-war/src/main/webapp/templates/210/PageTab.jsp
+++ b/jspwiki-war/src/main/webapp/templates/210/PageTab.jsp
@@ -52,7 +52,7 @@
           <%--<wiki:PageVersion/>--%>
           <select id="version" name="version" onchange="this.form.submit();" >
 <% 
-   int latestVersion = c.getEngine().getPage( pagename, WikiProvider.LATEST_VERSION ).getVersion();
+   int latestVersion = c.getEngine().getPageManager().getPage( pagename, WikiProvider.LATEST_VERSION ).getVersion();
    int thisVersion = p.getVersion();
 
    if( thisVersion == WikiProvider.LATEST_VERSION ) thisVersion = latestVersion; //should not happen
diff --git a/jspwiki-war/src/main/webapp/templates/210/editors/CKeditor.jsp b/jspwiki-war/src/main/webapp/templates/210/editors/CKeditor.jsp
index 4192bb0..a99e778 100644
--- a/jspwiki-war/src/main/webapp/templates/210/editors/CKeditor.jsp
+++ b/jspwiki-war/src/main/webapp/templates/210/editors/CKeditor.jsp
@@ -66,7 +66,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();
diff --git a/jspwiki-war/src/main/webapp/templates/210/editors/FCK.jsp b/jspwiki-war/src/main/webapp/templates/210/editors/FCK.jsp
index 1fd54f0..16e33a0 100644
--- a/jspwiki-war/src/main/webapp/templates/210/editors/FCK.jsp
+++ b/jspwiki-war/src/main/webapp/templates/210/editors/FCK.jsp
@@ -55,7 +55,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();
diff --git a/jspwiki-war/src/main/webapp/templates/210/editors/TinyMCE.jsp b/jspwiki-war/src/main/webapp/templates/210/editors/TinyMCE.jsp
index 96d72ca..0073bbb 100644
--- a/jspwiki-war/src/main/webapp/templates/210/editors/TinyMCE.jsp
+++ b/jspwiki-war/src/main/webapp/templates/210/editors/TinyMCE.jsp
@@ -66,7 +66,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();
diff --git a/jspwiki-war/src/main/webapp/templates/210/editors/plain.jsp b/jspwiki-war/src/main/webapp/templates/210/editors/plain.jsp
index 6a6bc71..22c1c34 100644
--- a/jspwiki-war/src/main/webapp/templates/210/editors/plain.jsp
+++ b/jspwiki-war/src/main/webapp/templates/210/editors/plain.jsp
@@ -48,7 +48,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();
diff --git a/jspwiki-war/src/main/webapp/templates/210/editors/wysiwyg.jsp b/jspwiki-war/src/main/webapp/templates/210/editors/wysiwyg.jsp
index 4893ba2..3bc866c 100644
--- a/jspwiki-war/src/main/webapp/templates/210/editors/wysiwyg.jsp
+++ b/jspwiki-war/src/main/webapp/templates/210/editors/wysiwyg.jsp
@@ -48,7 +48,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();
diff --git a/jspwiki-war/src/main/webapp/templates/default/InfoContent.jsp b/jspwiki-war/src/main/webapp/templates/default/InfoContent.jsp
index ef39366..bfda22b 100644
--- a/jspwiki-war/src/main/webapp/templates/default/InfoContent.jsp
+++ b/jspwiki-war/src/main/webapp/templates/default/InfoContent.jsp
@@ -42,7 +42,7 @@
   String creationAuthor ="";
 
   //FIXME -- seems not to work correctly for attachments !!
-  WikiPage firstPage = c.getEngine().getPage( wikiPage.getName(), 1 );
+  WikiPage firstPage = c.getEngine().getPageManager().getPage( wikiPage.getName(), 1 );
   if( firstPage != null )
   {
     creationAuthor = firstPage.getAuthor();
diff --git a/jspwiki-war/src/main/webapp/templates/default/PageTab.jsp b/jspwiki-war/src/main/webapp/templates/default/PageTab.jsp
index 05ceafd..1a17317 100644
--- a/jspwiki-war/src/main/webapp/templates/default/PageTab.jsp
+++ b/jspwiki-war/src/main/webapp/templates/default/PageTab.jsp
@@ -41,7 +41,7 @@
     WikiContext c = WikiContext.findContext( pageContext );
   %>
   <c:set var="thisVersion" value="<%= c.getPage().getVersion() %>" />
-  <c:set var="latestVersion" value="<%= c.getEngine().getPage( c.getPage().getName(), WikiProvider.LATEST_VERSION ).getVersion() %>" />
+  <c:set var="latestVersion" value="<%= c.getEngine().getPageManager().getPage( c.getPage().getName(), WikiProvider.LATEST_VERSION ).getVersion() %>" />
 
   <form action="<wiki:Link format='url' jsp='Wiki.jsp'/>"
         method="get"  accept-charset='UTF-8'>
diff --git a/jspwiki-war/src/main/webapp/templates/default/editors/CKeditor.jsp b/jspwiki-war/src/main/webapp/templates/default/editors/CKeditor.jsp
index fe62516..c3c60e2 100644
--- a/jspwiki-war/src/main/webapp/templates/default/editors/CKeditor.jsp
+++ b/jspwiki-war/src/main/webapp/templates/default/editors/CKeditor.jsp
@@ -68,7 +68,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();
diff --git a/jspwiki-war/src/main/webapp/templates/default/editors/TinyMCE.jsp b/jspwiki-war/src/main/webapp/templates/default/editors/TinyMCE.jsp
index 28eb602..2acd953 100644
--- a/jspwiki-war/src/main/webapp/templates/default/editors/TinyMCE.jsp
+++ b/jspwiki-war/src/main/webapp/templates/default/editors/TinyMCE.jsp
@@ -66,7 +66,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();
diff --git a/jspwiki-war/src/main/webapp/templates/default/editors/plain.jsp b/jspwiki-war/src/main/webapp/templates/default/editors/plain.jsp
index e3ba123..bc657a6 100644
--- a/jspwiki-war/src/main/webapp/templates/default/editors/plain.jsp
+++ b/jspwiki-war/src/main/webapp/templates/default/editors/plain.jsp
@@ -48,7 +48,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();
diff --git a/jspwiki-war/src/main/webapp/templates/default/editors/wysiwyg.jsp b/jspwiki-war/src/main/webapp/templates/default/editors/wysiwyg.jsp
index 8f66f7f..6c62d9a 100644
--- a/jspwiki-war/src/main/webapp/templates/default/editors/wysiwyg.jsp
+++ b/jspwiki-war/src/main/webapp/templates/default/editors/wysiwyg.jsp
@@ -60,7 +60,7 @@
   String clone = request.getParameter( "clone" );
   if( clone != null )
   {
-    WikiPage p = engine.getPage( clone );
+    WikiPage p = engine.getPageManager().getPage( clone );
     if( p != null )
     {
         AuthorizationManager mgr = engine.getAuthorizationManager();