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/03/16 21:58:27 UTC

[jspwiki] 37/47: JSPWIKI-303: move WikiPageProvider to jspwiki-210-adapters

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 e52374654a092a49d981481a6aba1ee6efd5f625
Author: juanpablo <ju...@apache.org>
AuthorDate: Sun Mar 15 21:33:52 2020 +0100

    JSPWIKI-303: move WikiPageProvider to jspwiki-210-adapters
    
    and use PageProvider instead
    backwards compatibility with WikiPageProvider still to be done
---
 .../apache/wiki/providers/WikiPageProvider.java    |   0
 .../org/apache/wiki/api/search/SearchResult.java   |   2 +-
 .../src/main/java/org/apache/wiki/WikiPage.java    |  28 +-
 .../apache/wiki/auth/acl/DefaultAclManager.java    |   2 +-
 .../wiki/auth/permissions/PagePermission.java      |  59 ++--
 .../apache/wiki/diff/DefaultDifferenceManager.java |   4 +-
 .../org/apache/wiki/pages/DefaultPageManager.java  | 109 +++---
 .../main/java/org/apache/wiki/pages/PageLock.java  |  96 +++--
 .../java/org/apache/wiki/pages/PageManager.java    |  33 +-
 .../wiki/providers/AbstractFileProvider.java       |  56 ++-
 .../org/apache/wiki/providers/CachingProvider.java | 386 ++++++++-------------
 .../apache/wiki/providers/FileSystemProvider.java  |  19 +-
 .../wiki/providers/VersioningFileProvider.java     | 130 +++----
 .../wiki/references/DefaultReferenceManager.java   |  27 +-
 .../apache/wiki/references/ReferenceManager.java   |   4 +-
 .../wiki/render/DefaultRenderingManager.java       |  16 +-
 .../org/apache/wiki/render/RenderingManager.java   |   8 +-
 .../apache/wiki/search/BasicSearchProvider.java    |  11 +-
 .../apache/wiki/search/LuceneSearchProvider.java   |  15 +-
 .../java/org/apache/wiki/search/SearchMatcher.java |   2 +
 .../org/apache/wiki/search/SearchProvider.java     |   1 +
 .../apache/wiki/search/SearchResultComparator.java |   2 +
 .../src/test/java/org/apache/wiki/TestEngine.java  |   4 +-
 .../java/org/apache/wiki/plugin/IfPluginTest.java  |  13 +-
 .../org/apache/wiki/providers/CounterProvider.java |  69 ++--
 .../apache/wiki/providers/VerySimpleProvider.java  |  74 ++--
 26 files changed, 480 insertions(+), 690 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/providers/WikiPageProvider.java b/jspwiki-210-adapters/src/main/java/org/apache/wiki/providers/WikiPageProvider.java
similarity index 100%
rename from jspwiki-main/src/main/java/org/apache/wiki/providers/WikiPageProvider.java
rename to jspwiki-210-adapters/src/main/java/org/apache/wiki/providers/WikiPageProvider.java
diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/search/SearchResult.java b/jspwiki-api/src/main/java/org/apache/wiki/api/search/SearchResult.java
index bd623ae..1e7cc20 100644
--- a/jspwiki-api/src/main/java/org/apache/wiki/api/search/SearchResult.java
+++ b/jspwiki-api/src/main/java/org/apache/wiki/api/search/SearchResult.java
@@ -31,7 +31,7 @@ public interface SearchResult {
      *  
      *  @return the WikiPage object containing this result
      */
-    < P extends Page> P getPage();
+    Page getPage();
 
     /**
      *  Returns the score.
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/WikiPage.java b/jspwiki-main/src/main/java/org/apache/wiki/WikiPage.java
index 6c8c973..1413923 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiPage.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiPage.java
@@ -20,11 +20,11 @@ package org.apache.wiki;
 
 import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.core.Page;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.auth.acl.Acl;
 import org.apache.wiki.auth.acl.AclEntry;
 import org.apache.wiki.auth.acl.AclImpl;
 import org.apache.wiki.pages.PageManager;
-import org.apache.wiki.providers.WikiPageProvider;
 
 import java.util.Date;
 import java.util.Enumeration;
@@ -39,36 +39,16 @@ import java.util.Map;
 //        author, date, etc. should also be part of the metadata.  We also
 //        need to figure out the metadata lifecycle.
 
-public class WikiPage implements Page, Comparable< WikiPage > {
+public class WikiPage implements Page {
 
     private       String     m_name;
     private       Engine     m_engine;
     private       String     m_wiki;
     private Date             m_lastModified;
     private long             m_fileSize = -1;
-    private int              m_version = WikiPageProvider.LATEST_VERSION;
+    private int              m_version = PageProvider.LATEST_VERSION;
     private String           m_author = null;
     private final Map<String,Object> m_attributes = new HashMap<>();
-
-    /**
-     *  "Summary" is a short summary of the page.  It is a String.
-     */
-    public static final String DESCRIPTION = "summary";
-
-    /** A special variable name for storing a page alias. */
-    public static final String ALIAS = "alias";
-    
-    /** A special variable name for storing a redirect note */
-    public static final String REDIRECT = "redirect";
-
-    /** A special variable name for storing the author. */
-    public static final String AUTHOR = "author";
-    
-    /** A special variable name for storing a changenote. */
-    public static final String CHANGENOTE = "changenote";
-
-    /** A special variable name for storing a viewcount. */
-    public static final String VIEWCOUNT = "viewcount";
     
     private Acl m_accessList = null;
     
@@ -362,7 +342,7 @@ public class WikiPage implements Page, Comparable< WikiPage > {
      *  @return -1, 0 or 1
      */
     @Override
-    public int compareTo( final WikiPage page ) {
+    public int compareTo( final Page page ) {
         if( this == page ) {
             return 0; // the same object
         }
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 81ac058..5f9a531 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
@@ -137,7 +137,7 @@ public class DefaultAclManager implements AclManager {
         if( acl == null ) {
             //  If null, try the parent.
             if( page instanceof Attachment ) {
-                final WikiPage parent = m_engine.getManager( PageManager.class ).getPage( ( ( Attachment ) page ).getParentName() );
+                final WikiPage parent = ( WikiPage )m_engine.getManager( PageManager.class ).getPage( ( ( Attachment ) page ).getParentName() );
                 acl = getPermissions(parent);
             } else {
                 //  Or, try parsing the page
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/permissions/PagePermission.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/permissions/PagePermission.java
index 6a18dd6..b65b88f 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/auth/permissions/PagePermission.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/permissions/PagePermission.java
@@ -19,7 +19,7 @@
 package org.apache.wiki.auth.permissions;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Page;
 
 import java.io.Serializable;
 import java.security.Permission;
@@ -149,7 +149,7 @@ public final class PagePermission extends Permission implements Serializable
      * (*:*) and set of actions.
      * @param actions
      */
-    private PagePermission( String actions )
+    private PagePermission( final String actions )
     {
         this( WILDCARD + WIKI_SEPARATOR + WILDCARD, actions );
     }
@@ -163,7 +163,7 @@ public final class PagePermission extends Permission implements Serializable
      * @param page the wiki page
      * @param actions the allowed actions for this page
      */
-    public PagePermission( String page, String actions )
+    public PagePermission( final String page, final String actions )
     {
         super( page );
 
@@ -171,8 +171,8 @@ public final class PagePermission extends Permission implements Serializable
         // Strip out attachment separator; it is irrelevant.
         
         // FIXME3.0: Assumes attachment separator is "/".
-        String[] pathParams = StringUtils.split( page, WIKI_SEPARATOR );
-        String pageName;
+        final String[] pathParams = StringUtils.split( page, WIKI_SEPARATOR );
+        final String pageName;
         if ( pathParams.length >= 2 )
         {
             m_wiki = pathParams[0].length() > 0 ? pathParams[0] : null;
@@ -183,14 +183,14 @@ public final class PagePermission extends Permission implements Serializable
             m_wiki = null;
             pageName = pathParams[0];
         }
-        int pos = pageName.indexOf( ATTACHMENT_SEPARATOR );
+        final int pos = pageName.indexOf( ATTACHMENT_SEPARATOR );
         m_page = ( pos == -1 ) ? pageName : pageName.substring( 0, pos );
 
         // Parse actions
-        String[] pageActions = StringUtils.split( actions.toLowerCase(), ACTION_SEPARATOR );
+        final String[] pageActions = StringUtils.split( actions.toLowerCase(), ACTION_SEPARATOR );
         Arrays.sort( pageActions, String.CASE_INSENSITIVE_ORDER );
         m_mask = createMask( actions );
-        StringBuilder buffer = new StringBuilder();
+        final StringBuilder buffer = new StringBuilder();
         for( int i = 0; i < pageActions.length; i++ )
         {
             buffer.append( pageActions[i] );
@@ -204,11 +204,11 @@ public final class PagePermission extends Permission implements Serializable
 
     /**
      * Creates a new PagePermission for a specified page and set of actions.
+     *
      * @param page The wikipage.
      * @param actions A set of actions; a comma-separated list of actions.
      */
-    public PagePermission( WikiPage page, String actions )
-    {
+    public PagePermission( final Page page, final String actions ) {
         this( page.getWiki() + WIKI_SEPARATOR + page.getName(), actions );
     }
 
@@ -218,15 +218,13 @@ public final class PagePermission extends Permission implements Serializable
      * @param obj {@inheritDoc}
      * @return {@inheritDoc}
      */
-    public boolean equals( Object obj )
-    {
-        if ( !( obj instanceof PagePermission ) )
-        {
+    public boolean equals( final Object obj ) {
+        if ( !( obj instanceof PagePermission ) ) {
             return false;
         }
-        PagePermission p = (PagePermission) obj;
+        final PagePermission p = ( PagePermission )obj;
         return  p.m_mask == m_mask && p.m_page.equals( m_page )
-                && p.m_wiki != null && p.m_wiki.equals( m_wiki );
+             && p.m_wiki != null && p.m_wiki.equals( m_wiki );
     }
 
     /**
@@ -264,12 +262,11 @@ public final class PagePermission extends Permission implements Serializable
      * Returns the hash code for this PagePermission.
      * @return {@inheritDoc}
      */
-    public int hashCode()
-    {
+    public int hashCode() {
         //  If the wiki has not been set, uses a dummy value for the hashcode
         //  calculation.  This may occur if the page given does not refer
         //  to any particular wiki
-        String wiki = m_wiki != null ? m_wiki : "dummy_value";
+        final String wiki = m_wiki != null ? m_wiki : "dummy_value";
         return m_mask + ( ( 13 * m_actionString.hashCode() ) * 23 * wiki.hashCode() );
     }
 
@@ -296,7 +293,7 @@ public final class PagePermission extends Permission implements Serializable
      * @param permission {@inheritDoc}
      * @return {@inheritDoc}
      */
-    public boolean implies( Permission permission )
+    public boolean implies( final Permission permission )
     {
         // Permission must be a PagePermission
         if ( !( permission instanceof PagePermission ) )
@@ -305,8 +302,8 @@ public final class PagePermission extends Permission implements Serializable
         }
 
         // Build up an "implied mask"
-        PagePermission p = (PagePermission) permission;
-        int impliedMask = impliedMask( m_mask );
+        final PagePermission p = (PagePermission) permission;
+        final int impliedMask = impliedMask( m_mask );
 
         // If actions aren't a proper subset, return false
         if ( ( impliedMask & p.m_mask ) != p.m_mask )
@@ -315,11 +312,11 @@ public final class PagePermission extends Permission implements Serializable
         }
 
         // See if the tested permission's wiki is implied
-        boolean impliedWiki = isSubset( m_wiki, p.m_wiki );
+        final boolean impliedWiki = isSubset( m_wiki, p.m_wiki );
 
         // If this page is "*", the tested permission's
         // page is implied
-        boolean impliedPage = isSubset( m_page, p.m_page );
+        final boolean impliedPage = isSubset( m_page, p.m_page );
 
         return  impliedWiki && impliedPage;
     }
@@ -343,7 +340,7 @@ public final class PagePermission extends Permission implements Serializable
      */
     public String toString()
     {
-        String wiki = ( m_wiki == null ) ? "" : m_wiki;
+        final String wiki = ( m_wiki == null ) ? "" : m_wiki;
         return "(\"" + this.getClass().getName() + "\",\"" + wiki + WIKI_SEPARATOR + m_page + "\",\"" + getActions() + "\")";
     }
 
@@ -389,7 +386,7 @@ public final class PagePermission extends Permission implements Serializable
      * @return the results of the test, where <code>true</code> indicates that
      *         <code>subSet</code> is a subset of <code>superSet</code>
      */
-    protected static boolean isSubset( String superSet, String subSet )
+    protected static boolean isSubset( final String superSet, final String subSet )
     {
         // If either is null, return false
         if ( superSet == null || subSet == null )
@@ -412,14 +409,14 @@ public final class PagePermission extends Permission implements Serializable
         // If super starts with "*", sub must end with everything after the *
         if ( superSet.startsWith( WILDCARD ) )
         {
-            String suffix = superSet.substring( 1 );
+            final String suffix = superSet.substring( 1 );
             return subSet.endsWith( suffix );
         }
 
         // If super ends with "*", sub must start with everything before *
         if ( superSet.endsWith( WILDCARD ) )
         {
-            String prefix = superSet.substring( 0, superSet.length() - 1 );
+            final String prefix = superSet.substring( 0, superSet.length() - 1 );
             return subSet.startsWith( prefix );
         }
 
@@ -432,15 +429,15 @@ public final class PagePermission extends Permission implements Serializable
      * @param actions the actions for this permission, separated by commas
      * @return the binary actions mask
      */
-    protected static int createMask( String actions )
+    protected static int createMask( final String actions )
     {
         if ( actions == null || actions.length() == 0 )
         {
             throw new IllegalArgumentException( "Actions cannot be blank or null" );
         }
         int mask = 0;
-        String[] actionList = StringUtils.split( actions, ACTION_SEPARATOR );
-        for( String action : actionList )
+        final String[] actionList = StringUtils.split( actions, ACTION_SEPARATOR );
+        for( final String action : actionList )
         {
             if ( action.equalsIgnoreCase( VIEW_ACTION ) )
             {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/diff/DefaultDifferenceManager.java b/jspwiki-main/src/main/java/org/apache/wiki/diff/DefaultDifferenceManager.java
index 28b1b08..27c0777 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/diff/DefaultDifferenceManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/diff/DefaultDifferenceManager.java
@@ -23,8 +23,8 @@ import org.apache.log4j.Logger;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.pages.PageManager;
-import org.apache.wiki.providers.WikiPageProvider;
 import org.apache.wiki.util.ClassUtil;
 
 import java.io.IOException;
@@ -120,7 +120,7 @@ public class DefaultDifferenceManager implements DifferenceManager {
         final String page2 = context.getEngine().getManager( PageManager.class ).getPureText( page, version2 );
 
         // Kludge to make diffs for new pages to work this way.
-        if( version1 == WikiPageProvider.LATEST_VERSION ) {
+        if( version1 == PageProvider.LATEST_VERSION ) {
             page1 = "";
         }
 
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 fcb7b87..eaa8934 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
@@ -22,14 +22,15 @@ import org.apache.commons.lang3.ArrayUtils;
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiBackgroundThread;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Attachment;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.exceptions.WikiException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.api.providers.WikiProvider;
-import org.apache.wiki.attachment.Attachment;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.auth.WikiPrincipal;
 import org.apache.wiki.auth.WikiSecurityException;
@@ -44,7 +45,6 @@ import org.apache.wiki.event.WikiEventManager;
 import org.apache.wiki.event.WikiPageEvent;
 import org.apache.wiki.event.WikiSecurityEvent;
 import org.apache.wiki.providers.RepositoryModifiedException;
-import org.apache.wiki.providers.WikiPageProvider;
 import org.apache.wiki.references.ReferenceManager;
 import org.apache.wiki.search.SearchManager;
 import org.apache.wiki.tasks.TasksManager;
@@ -89,7 +89,7 @@ public class DefaultPageManager implements PageManager {
 
     private static final Logger LOG = Logger.getLogger( DefaultPageManager.class );
 
-    private WikiPageProvider m_provider;
+    private PageProvider m_provider;
 
     private Engine m_engine;
 
@@ -127,7 +127,7 @@ public class DefaultPageManager implements PageManager {
         try {
             LOG.debug("Page provider class: '" + classname + "'");
             final Class<?> providerclass = ClassUtil.findClass("org.apache.wiki.providers", classname);
-            m_provider = (WikiPageProvider) providerclass.newInstance();
+            m_provider = ( PageProvider ) providerclass.newInstance();
 
             LOG.debug("Initializing page provider class " + m_provider);
             m_provider.initialize(m_engine, props);
@@ -155,7 +155,7 @@ public class DefaultPageManager implements PageManager {
      * @see org.apache.wiki.pages.PageManager#getProvider()
      */
     @Override
-    public WikiPageProvider getProvider() {
+    public PageProvider getProvider() {
         return m_provider;
     }
 
@@ -164,7 +164,7 @@ public class DefaultPageManager implements PageManager {
      * @see org.apache.wiki.pages.PageManager#getAllPages()
      */
     @Override
-    public Collection< WikiPage > getAllPages() throws ProviderException {
+    public Collection< Page > getAllPages() throws ProviderException {
         return m_provider.getAllPages();
     }
 
@@ -186,7 +186,7 @@ public class DefaultPageManager implements PageManager {
             LOG.info( "Repository has been modified externally while fetching page " + pageName );
 
             //  Empty the references and yay, it shall be recalculated
-            final WikiPage p = m_provider.getPageInfo( pageName, version );
+            final Page p = m_provider.getPageInfo( pageName, version );
 
             m_engine.getManager( ReferenceManager.class ).updateReferences( p );
             m_engine.getManager( SearchManager.class ).reindexPage( p );
@@ -285,10 +285,10 @@ public class DefaultPageManager implements PageManager {
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.pages.PageManager#putPageText(org.apache.wiki.WikiPage, java.lang.String)
+     * @see org.apache.wiki.pages.PageManager#putPageText(org.apache.wiki.api.core.Page, java.lang.String)
      */
     @Override
-    public void putPageText( final WikiPage page, final String content ) throws ProviderException {
+    public void putPageText( final Page page, final String content ) throws ProviderException {
         if (page == null || page.getName() == null || page.getName().length() == 0) {
             throw new ProviderException("Illegal page name");
         }
@@ -298,34 +298,30 @@ public class DefaultPageManager implements PageManager {
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.pages.PageManager#lockPage(org.apache.wiki.WikiPage, java.lang.String)
+     * @see org.apache.wiki.pages.PageManager#lockPage(org.apache.wiki.api.core.Page, java.lang.String)
      */
     @Override
-    public PageLock lockPage( final WikiPage page, final String user) {
-        if (m_reaper == null) {
-            //
-            //  Start the lock reaper lazily.  We don't want to start it in
-            //  the constructor, because starting threads in constructors
-            //  is a bad idea when it comes to inheritance.  Besides,
-            //  laziness is a virtue.
-            //
-            m_reaper = new LockReaper(m_engine);
+    public PageLock lockPage( final Page page, final String user ) {
+        if( m_reaper == null ) {
+            //  Start the lock reaper lazily.  We don't want to start it in the constructor, because starting threads in constructors
+            //  is a bad idea when it comes to inheritance.  Besides, laziness is a virtue.
+            m_reaper = new LockReaper( m_engine );
             m_reaper.start();
         }
 
-        fireEvent(WikiPageEvent.PAGE_LOCK, page.getName()); // prior to or after actual lock?
-        PageLock lock = m_pageLocks.get(page.getName());
+        fireEvent( WikiPageEvent.PAGE_LOCK, page.getName() ); // prior to or after actual lock?
+        PageLock lock = m_pageLocks.get( page.getName() );
 
-        if (lock == null) {
+        if( lock == null ) {
             //
             //  Lock is available, so make a lock.
             //
             final Date d = new Date();
-            lock = new PageLock(page, user, d, new Date(d.getTime() + m_expiryTime * 60 * 1000L));
-            m_pageLocks.put(page.getName(), lock);
-            LOG.debug("Locked page " + page.getName() + " for " + user);
+            lock = new PageLock( page, user, d, new Date( d.getTime() + m_expiryTime * 60 * 1000L ) );
+            m_pageLocks.put( page.getName(), lock );
+            LOG.debug( "Locked page " + page.getName() + " for " + user );
         } else {
-            LOG.debug("Page " + page.getName() + " already locked by " + lock.getLocker());
+            LOG.debug( "Page " + page.getName() + " already locked by " + lock.getLocker() );
             lock = null; // Nothing to return
         }
 
@@ -350,10 +346,10 @@ public class DefaultPageManager implements PageManager {
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.pages.PageManager#getCurrentLock(org.apache.wiki.WikiPage)
+     * @see org.apache.wiki.pages.PageManager#getCurrentLock(org.apache.wiki.api.core.Page)
      */
     @Override
-    public PageLock getCurrentLock( final WikiPage page ) {
+    public PageLock getCurrentLock( final Page page ) {
         return m_pageLocks.get( page.getName() );
     }
 
@@ -371,8 +367,8 @@ public class DefaultPageManager implements PageManager {
      * @see org.apache.wiki.pages.PageManager#getPage(java.lang.String)
      */
     @Override
-    public WikiPage getPage( final String pagereq ) {
-        return getPage( pagereq, WikiProvider.LATEST_VERSION );
+    public Page getPage( final String pagereq ) {
+        return getPage( pagereq, PageProvider.LATEST_VERSION );
     }
 
     /**
@@ -380,9 +376,9 @@ public class DefaultPageManager implements PageManager {
      * @see org.apache.wiki.pages.PageManager#getPage(java.lang.String, int)
      */
     @Override
-    public WikiPage getPage( final String pagereq, final int version ) {
+    public Page getPage( final String pagereq, final int version ) {
         try {
-            WikiPage p = getPageInfo( pagereq, version );
+            Page p = getPageInfo( pagereq, version );
             if( p == null ) {
                 p = m_engine.getManager( AttachmentManager.class ).getAttachmentInfo( null, pagereq );
             }
@@ -399,23 +395,23 @@ public class DefaultPageManager implements PageManager {
      * @see org.apache.wiki.pages.PageManager#getPageInfo(java.lang.String, int)
      */
     @Override
-    public WikiPage getPageInfo( final String pageName, final int version) throws ProviderException {
-        if (pageName == null || pageName.length() == 0) {
-            throw new ProviderException("Illegal page name '" + pageName + "'");
+    public Page getPageInfo( final String pageName, final int version) throws ProviderException {
+        if( pageName == null || pageName.length() == 0 ) {
+            throw new ProviderException( "Illegal page name '" + pageName + "'" );
         }
 
-        WikiPage page;
+        Page page;
 
         try {
-            page = m_provider.getPageInfo(pageName, version);
-        } catch ( final RepositoryModifiedException e) {
+            page = m_provider.getPageInfo( pageName, version );
+        } catch( final RepositoryModifiedException e ) {
             //  This only occurs with the latest version.
-            LOG.info("Repository has been modified externally while fetching info for " + pageName);
-            page = m_provider.getPageInfo(pageName, version);
-            if (page != null) {
-                m_engine.getManager( ReferenceManager.class ).updateReferences(page);
+            LOG.info( "Repository has been modified externally while fetching info for " + pageName );
+            page = m_provider.getPageInfo( pageName, version );
+            if( page != null ) {
+                m_engine.getManager( ReferenceManager.class ).updateReferences( page );
             } else {
-                m_engine.getManager( ReferenceManager.class ).pageRemoved(new WikiPage(m_engine, pageName));
+                m_engine.getManager( ReferenceManager.class ).pageRemoved( new WikiPage( m_engine, pageName ) );
             }
         }
 
@@ -427,7 +423,7 @@ public class DefaultPageManager implements PageManager {
      * @see org.apache.wiki.pages.PageManager#getVersionHistory(java.lang.String)
      */
     @Override @SuppressWarnings( "unchecked" )
-    public < T extends WikiPage > List< T > getVersionHistory( final String pageName ) {
+    public < T extends Page > List< T > getVersionHistory( final String pageName ) {
         List< T > c = null;
 
         try {
@@ -483,9 +479,9 @@ public class DefaultPageManager implements PageManager {
      * @see org.apache.wiki.pages.PageManager#getRecentChanges()
      */
     @Override
-    public Set< WikiPage > getRecentChanges() {
+    public Set< Page > getRecentChanges() {
         try {
-            final TreeSet< WikiPage > sortedPages = new TreeSet<>( new PageTimeComparator() );
+            final TreeSet< Page > sortedPages = new TreeSet<>( new PageTimeComparator() );
             sortedPages.addAll( getAllPages() );
             sortedPages.addAll( m_engine.getManager( AttachmentManager.class ).getAllAttachments() );
 
@@ -580,10 +576,10 @@ public class DefaultPageManager implements PageManager {
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.pages.PageManager#deleteVersion(org.apache.wiki.WikiPage)
+     * @see org.apache.wiki.pages.PageManager#deleteVersion(org.apache.wiki.api.core.Page)
      */
     @Override
-    public void deleteVersion( final WikiPage page ) throws ProviderException {
+    public void deleteVersion( final Page page ) throws ProviderException {
         if( page instanceof Attachment ) {
             m_engine.getManager( AttachmentManager.class ).deleteVersion( ( Attachment )page );
         } else {
@@ -598,7 +594,7 @@ public class DefaultPageManager implements PageManager {
      */
     @Override
     public void deletePage( final String pageName ) throws ProviderException {
-        final WikiPage p = getPage( pageName );
+        final Page p = getPage( pageName );
         if( p != null ) {
             if( p instanceof Attachment ) {
                 m_engine.getManager( AttachmentManager.class ).deleteAttachment( ( Attachment )p );
@@ -624,10 +620,10 @@ public class DefaultPageManager implements PageManager {
 
     /**
      * {@inheritDoc}
-     * @see org.apache.wiki.pages.PageManager#deletePage(org.apache.wiki.WikiPage)
+     * @see org.apache.wiki.pages.PageManager#deletePage(org.apache.wiki.api.core.Page)
      */
     @Override
-    public void deletePage( final WikiPage page ) throws ProviderException {
+    public void deletePage( final Page page ) throws ProviderException {
         fireEvent( WikiPageEvent.PAGE_DELETE_REQUEST, page.getName() );
         m_provider.deletePage( page.getName() );
         fireEvent( WikiPageEvent.PAGE_DELETED, page.getName() );
@@ -709,13 +705,13 @@ public class DefaultPageManager implements PageManager {
             // Examine each page ACL
             try {
                 int pagesChanged = 0;
-                final Collection< WikiPage > pages = getAllPages();
-                for( final WikiPage page : pages ) {
-                    final boolean aclChanged = changeAcl( page, oldPrincipals, newPrincipal );
+                final Collection< Page > pages = getAllPages();
+                for( final Page page : pages ) {
+                    final boolean aclChanged = changeAcl( ( WikiPage )page, oldPrincipals, newPrincipal );
                     if( aclChanged ) {
                         // If the Acl needed changing, change it now
                         try {
-                            m_engine.getManager( AclManager.class ).setPermissions( page, page.getAcl() );
+                            m_engine.getManager( AclManager.class ).setPermissions( ( WikiPage )page, ( ( WikiPage )page ).getAcl() );
                         } catch( final WikiSecurityException e ) {
                             LOG.error("Could not change page ACL for page " + page.getName() + ": " + e.getMessage(), e);
                         }
@@ -772,7 +768,8 @@ public class DefaultPageManager implements PageManager {
         return pageChanged;
     }
 
-    /* (non-Javadoc)
+    /**
+     * {@inheritDoc}
      * @see org.apache.wiki.pages.PageManager#getPageSorter()
      */
     @Override
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/pages/PageLock.java b/jspwiki-main/src/main/java/org/apache/wiki/pages/PageLock.java
index fcbc3a2..c14a53b 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/pages/PageLock.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/pages/PageLock.java
@@ -18,98 +18,90 @@
  */
 package org.apache.wiki.pages;
 
-import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Page;
 
 import java.io.Serializable;
 import java.util.Date;
 
+
 /**
- *  Describes a lock acquired by an user on a page.  For the most part,
- *  the regular developer does not have to instantiate this class.
- *  <p>
- *  The PageLock keeps no reference to a WikiPage because otherwise it could
- *  keep a reference to a page for a long time.
- *
+ * Describes a lock acquired by an user on a page.  For the most part, the regular developer does not have to instantiate this class.
+ * <p>
+ * The PageLock keeps no reference to a WikiPage because otherwise it could keep a reference to a page for a long time.
  */
-public class PageLock
-    implements Serializable
-{
+public class PageLock implements Serializable {
+
     private static final long serialVersionUID = 0L;
-    
-    private String   m_page;
-    private String   m_locker;
-    private Date     m_lockAcquired;
-    private Date     m_lockExpiry;
+
+    private String m_page;
+    private String m_locker;
+    private Date m_lockAcquired;
+    private Date m_lockExpiry;
 
     /**
-     *  Creates a new PageLock.  The lock is not attached to any objects at this point.
-     *  
-     *  @param page     WikiPage which is locked.
-     *  @param locker   The username who locked this page (for display purposes).
-     *  @param acquired The timestamp when the lock is acquired
-     *  @param expiry   The timestamp when the lock expires.
+     * Creates a new PageLock.  The lock is not attached to any objects at this point.
+     *
+     * @param page     WikiPage which is locked.
+     * @param locker   The username who locked this page (for display purposes).
+     * @param acquired The timestamp when the lock is acquired
+     * @param expiry   The timestamp when the lock expires.
      */
-    public PageLock( final WikiPage page, final String locker, final Date acquired, final Date expiry ) {
-        m_page         = page.getName();
-        m_locker       = locker;
-        m_lockAcquired = (Date)acquired.clone();
-        m_lockExpiry   = (Date)expiry.clone();
+    public PageLock( final Page page, final String locker, final Date acquired, final Date expiry ) {
+        m_page = page.getName();
+        m_locker = locker;
+        m_lockAcquired = ( Date )acquired.clone();
+        m_lockExpiry = ( Date )expiry.clone();
     }
 
     /**
-     *  Returns the name of the page which is locked.
-     *  
-     *  @return The name of the page.
+     * Returns the name of the page which is locked.
+     *
+     * @return The name of the page.
      */
-    public String getPage()
-    {
+    public String getPage() {
         return m_page;
     }
 
     /**
-     *  Returns the locker name.
-     *  
-     *  @return The name of the locker.
+     * Returns the locker name.
+     *
+     * @return The name of the locker.
      */
-    public String getLocker()
-    {
+    public String getLocker() {
         return m_locker;
     }
 
     /**
-     *  Returns the timestamp on which this lock was acquired.
-     *  
-     *  @return The acquisition time.
+     * Returns the timestamp on which this lock was acquired.
+     *
+     * @return The acquisition time.
      */
-    public Date getAcquisitionTime()
-    {
+    public Date getAcquisitionTime() {
         return m_lockAcquired;
     }
 
     /**
-     *  Returns the timestamp on which this lock will expire.
-     *  
-     *  @return The expiry date.
+     * Returns the timestamp on which this lock will expire.
+     *
+     * @return The expiry date.
      */
-    public Date getExpiryTime()
-    {
+    public Date getExpiryTime() {
         return m_lockExpiry;
     }
 
     /**
-     *  Returns the amount of time left in minutes, rounded up to the nearest
-     *  minute (so you get a zero only at the last minute).
-     *  
-     *  @return Time left in minutes.
+     * Returns the amount of time left in minutes, rounded up to the nearest minute (so you get a zero only at the last minute).
+     *
+     * @return Time left in minutes.
      */
     public long getTimeLeft() {
         final long time = m_lockExpiry.getTime() - new Date().getTime();
-
         return ( time / ( 1000L * 60 ) ) + 1;
     }
-    
+
     public boolean isExpired() {
         final Date now = new Date();
         return now.after( getExpiryTime() );
     }
+
 }
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 1fc7ec5..ec031e8 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
@@ -18,13 +18,12 @@
  */
 package org.apache.wiki.pages;
 
-import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.exceptions.WikiException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.event.WikiEventListener;
-import org.apache.wiki.providers.WikiPageProvider;
 
 import java.util.Collection;
 import java.util.List;
@@ -45,7 +44,7 @@ public interface PageManager extends WikiEventListener {
      *
      * @return A WikiPageProvider instance.
      */
-    WikiPageProvider getProvider();
+    PageProvider getProvider();
 
     /**
      * Returns all pages in some random order.  If you need just the page names,
@@ -55,7 +54,7 @@ public interface PageManager extends WikiEventListener {
      * @return A Collection of WikiPage objects.
      * @throws ProviderException If the backend has problems.
      */
-    Collection< WikiPage > getAllPages() throws ProviderException;
+    Collection< Page > getAllPages() throws ProviderException;
 
     /**
      * Fetches the page text from the repository.  This method also does some sanity checks, like checking for the pageName validity, etc.
@@ -118,7 +117,7 @@ public interface PageManager extends WikiEventListener {
      *  @return WikiText.
      */
     default String getText( final String page ) {
-        return getText( page, WikiPageProvider.LATEST_VERSION );
+        return getText( page, PageProvider.LATEST_VERSION );
     }
 
     /**
@@ -132,7 +131,7 @@ public interface PageManager extends WikiEventListener {
      *  @return The page content as HTMLized String.
      *  @see PageManager#getPureText(Page)
      */
-    default String getText( final WikiPage page ) {
+    default String getText( final Page page ) {
         return getText( page.getName(), page.getVersion() );
     }
 
@@ -162,7 +161,7 @@ public interface PageManager extends WikiEventListener {
      * @param content Wikimarkup to save
      * @throws ProviderException If something goes wrong in the saving phase
      */
-    void putPageText( WikiPage page, String content ) throws ProviderException;
+    void putPageText( Page page, String content ) throws ProviderException;
 
     /**
      * Locks page for editing.  Note, however, that the PageManager will in no way prevent you from actually editing this page;
@@ -172,7 +171,7 @@ public interface PageManager extends WikiEventListener {
      * @param user Username to use for locking
      * @return null, if page could not be locked.
      */
-    PageLock lockPage( WikiPage page, String user );
+    PageLock lockPage( Page page, String user );
 
     /**
      * Marks a page free to be written again.  If there has not been a lock, will fail quietly.
@@ -187,7 +186,7 @@ public interface PageManager extends WikiEventListener {
      * @param page The page to check the lock for
      * @return Current lock, or null, if there is no lock
      */
-    PageLock getCurrentLock( WikiPage page );
+    PageLock getCurrentLock( Page page );
 
     /**
      * Returns a list of currently applicable locks.  Note that by the time you get the list,
@@ -205,7 +204,7 @@ public interface PageManager extends WikiEventListener {
      *  @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 );
+    Page getPage( String pagereq );
 
     /**
      *  Finds the corresponding WikiPage object base on the page name and version.
@@ -219,7 +218,7 @@ public interface PageManager extends WikiEventListener {
      *  is no such version of the page.
      *  @since 1.6.7 (moved to PageManager on 2.11.0).
      */
-    WikiPage getPage( String pagereq, int version );
+    Page getPage( String pagereq, int version );
 
     /**
      * Finds a WikiPage object describing a particular page and version.
@@ -229,7 +228,7 @@ public interface PageManager extends WikiEventListener {
      * @return A WikiPage object, or null, if the page does not exist
      * @throws ProviderException If there is something wrong with the page name or the repository
      */
-    WikiPage getPageInfo( String pageName, int version ) throws ProviderException;
+    Page getPageInfo( String pageName, int version ) throws ProviderException;
 
     /**
      * Gets a version history of page.  Each element in the returned List is a WikiPage.
@@ -238,7 +237,7 @@ public interface PageManager extends WikiEventListener {
      * @return If the page does not exist or there's some problem retrieving the version history, returns null,
      *         otherwise a List of WikiPages / Attachments, each corresponding to a different revision of the page / attachment.
      */
-    < T extends WikiPage > List< T > getVersionHistory( String pageName );
+    < T extends Page > List< T > getVersionHistory( String pageName );
 
     /**
      *  Returns the provider name.
@@ -270,7 +269,7 @@ public interface PageManager extends WikiEventListener {
      *
      *  @return Set of WikiPage objects.
      */
-    Set< WikiPage > getRecentChanges();
+    Set< Page > getRecentChanges();
 
     /**
      * Returns true, if the page exists (any version) on the underlying WikiPageProvider.
@@ -300,7 +299,7 @@ public interface PageManager extends WikiEventListener {
      *  @throws ProviderException If something goes badly wrong.
      *  @since 2.0
      */
-    default boolean pageExists( final WikiPage page ) throws ProviderException {
+    default boolean pageExists( final Page page ) throws ProviderException {
         if( page != null ) {
             return pageExists( page.getName(), page.getVersion() );
         }
@@ -349,7 +348,7 @@ public interface PageManager extends WikiEventListener {
      * @param page The page to delete.
      * @throws ProviderException if the page fails
      */
-    void deleteVersion( WikiPage page ) throws ProviderException;
+    void deleteVersion( Page page ) throws ProviderException;
 
     /**
      *  Deletes a page or an attachment completely, including all versions.  If the page does not exist, does nothing.
@@ -365,7 +364,7 @@ public interface PageManager extends WikiEventListener {
      * @param page The WikiPage to delete
      * @throws ProviderException If the repository operation fails
      */
-    void deletePage( WikiPage page ) throws ProviderException;
+    void deletePage( Page page ) throws ProviderException;
 
     /**
      * Returns the configured {@link PageSorter}.
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java b/jspwiki-main/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
index fe28c63..cbad778 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/providers/AbstractFileProvider.java
@@ -22,12 +22,14 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.api.providers.WikiProvider;
-import org.apache.wiki.search.QueryItem;
+import org.apache.wiki.api.search.QueryItem;
+import org.apache.wiki.api.search.SearchResult;
 import org.apache.wiki.search.SearchMatcher;
-import org.apache.wiki.search.SearchResult;
 import org.apache.wiki.search.SearchResultComparator;
 import org.apache.wiki.util.FileUtil;
 import org.apache.wiki.util.TextUtil;
@@ -62,7 +64,7 @@ import java.util.TreeSet;
  *
  *  @since 2.1.21.
  */
-public abstract class AbstractFileProvider implements WikiPageProvider {
+public abstract class AbstractFileProvider implements PageProvider {
 
     private static final Logger log = Logger.getLogger(AbstractFileProvider.class);
     private String m_pageDirectory = "/tmp/";
@@ -78,9 +80,7 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
     public static final int DEFAULT_MAX_PROPKEYLENGTH = 255;
     public static final int DEFAULT_MAX_PROPVALUELENGTH = 4096;
 
-    /**
-     * This parameter limits the number of custom page properties allowed on a page
-     */
+    /** This parameter limits the number of custom page properties allowed on a page */
     public static int MAX_PROPLIMIT = DEFAULT_MAX_PROPLIMIT;
 
     /**
@@ -93,15 +93,12 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
      */
     public static int MAX_PROPVALUELENGTH = DEFAULT_MAX_PROPVALUELENGTH;
 
-    /**
-     *  Name of the property that defines where page directories are.
-     */
+    /** Name of the property that defines where page directories are. */
     public static final String PROP_PAGEDIR = "jspwiki.fileSystemProvider.pageDir";
 
     /**
-     *  All files should have this extension to be recognized as JSPWiki files.
-     *  We default to .txt, because that is probably easiest for Windows users,
-     *  and guarantees correct handling.
+     *  All files should have this extension to be recognized as JSPWiki files. We default to .txt, because that is probably easiest for
+     *  Windows users, and guarantees correct handling.
      */
     public static final String FILE_EXT = ".txt";
 
@@ -125,8 +122,7 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
 
         if( !f.exists() ) {
             if( !f.mkdirs() ) {
-                throw new IOException(
-                        "Failed to create page directory " + f.getAbsolutePath() + " , please check property " + PROP_PAGEDIR );
+                throw new IOException( "Failed to create page directory " + f.getAbsolutePath() + " , please check property " + PROP_PAGEDIR );
             }
         } else {
             if( !f.isDirectory() ) {
@@ -211,9 +207,8 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
      *  @param page The name of the page.
      *  @return A File to the page.  May be null.
      */
-    protected File findPage( final String page )
-    {
-        return new File( m_pageDirectory, mangleName(page)+FILE_EXT );
+    protected File findPage( final String page ) {
+        return new File( m_pageDirectory, mangleName( page ) + FILE_EXT );
     }
 
     /**
@@ -270,7 +265,7 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public void putPageText( final WikiPage page, final String text ) throws ProviderException {
+    public void putPageText( final Page page, final String text ) throws ProviderException {
         final File file = findPage( page.getName() );
         try( final PrintWriter out = new PrintWriter( new OutputStreamWriter( new FileOutputStream( file ), m_encoding ) ) ) {
             out.print( text );
@@ -283,9 +278,9 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public Collection< WikiPage > getAllPages()  throws ProviderException {
+    public Collection< Page > getAllPages()  throws ProviderException {
         log.debug("Getting all pages...");
-        final ArrayList< WikiPage > set = new ArrayList<>();
+        final ArrayList< Page > set = new ArrayList<>();
         final File wikipagedir = new File( m_pageDirectory );
         final File[] wikipages = wikipagedir.listFiles( new WikiFileFilter() );
 
@@ -297,8 +292,7 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
         for( final File wikipage : wikipages ) {
             final String wikiname = wikipage.getName();
             final int cutpoint = wikiname.lastIndexOf( FILE_EXT );
-
-            final WikiPage page = getPageInfo( unmangleName( wikiname.substring( 0, cutpoint ) ), WikiPageProvider.LATEST_VERSION );
+            final Page page = getPageInfo( unmangleName( wikiname.substring( 0, cutpoint ) ), PageProvider.LATEST_VERSION );
             if( page == null ) {
                 // This should not really happen.
                 // FIXME: Should we throw an exception here?
@@ -319,7 +313,7 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
      *  @return {@inheritDoc}
      */
     @Override
-    public Collection< WikiPage > getAllChangedSince( final Date date )
+    public Collection< Page > getAllChangedSince( final Date date )
     {
         return new ArrayList<>(); // FIXME
     }
@@ -391,9 +385,9 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public List< WikiPage > getVersionHistory( final String page ) throws ProviderException {
-        final ArrayList< WikiPage > list = new ArrayList<>();
-        list.add( getPageInfo( page, WikiPageProvider.LATEST_VERSION ) );
+    public List< Page > getVersionHistory( final String page ) throws ProviderException {
+        final ArrayList< Page > list = new ArrayList<>();
+        list.add( getPageInfo( page, PageProvider.LATEST_VERSION ) );
 
         return list;
     }
@@ -432,23 +426,23 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
      *
      * @since 2.10.2
      */
-    protected void setCustomProperties( final WikiPage page, final Properties properties ) {
+    protected void setCustomProperties( final Page page, final Properties properties ) {
         final Enumeration< ? > propertyNames = properties.propertyNames();
     	while( propertyNames.hasMoreElements() ) {
             final String key = ( String )propertyNames.nextElement();
-            if( !key.equals( WikiPage.AUTHOR ) && !key.equals( WikiPage.CHANGENOTE ) && !key.equals( WikiPage.VIEWCOUNT ) ) {
+            if( !key.equals( Page.AUTHOR ) && !key.equals( Page.CHANGENOTE ) && !key.equals( Page.VIEWCOUNT ) ) {
                 page.setAttribute( key, properties.get( key ) );
             }
     	}
     }
 
     /**
-     * Get custom properties using {@link #addCustomProperties(WikiPage, Properties)}, validate them using {@link #validateCustomPageProperties(Properties)}
+     * Get custom properties using {@link #addCustomProperties(Page, Properties)}, validate them using {@link #validateCustomPageProperties(Properties)}
      * and add them to default properties provided
      *
      * @since 2.10.2
      */
-    protected void getCustomProperties( final WikiPage page, final Properties defaultProperties ) throws IOException {
+    protected void getCustomProperties( final Page page, final Properties defaultProperties ) throws IOException {
         final Properties customPageProperties = addCustomProperties( page, defaultProperties );
         validateCustomPageProperties( customPageProperties );
         defaultProperties.putAll( customPageProperties );
@@ -464,7 +458,7 @@ public abstract class AbstractFileProvider implements WikiPageProvider {
      * @param props the default properties of this page
      * @return default implementation returns empty Properties.
      */
-    protected Properties addCustomProperties( final WikiPage page, final Properties props ) {
+    protected Properties addCustomProperties( final Page page, final Properties props ) {
         final Properties customProperties = new Properties();
         if( page != null ) {
             final Map< String, Object > atts = page.getAttributes();
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/providers/CachingProvider.java b/jspwiki-main/src/main/java/org/apache/wiki/providers/CachingProvider.java
index a2d18fb..47f253d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/providers/CachingProvider.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/providers/CachingProvider.java
@@ -23,22 +23,22 @@ import net.sf.ehcache.CacheManager;
 import net.sf.ehcache.Element;
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.providers.PageProvider;
+import org.apache.wiki.api.search.QueryItem;
+import org.apache.wiki.api.search.SearchResult;
 import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.render.RenderingManager;
-import org.apache.wiki.search.QueryItem;
-import org.apache.wiki.search.SearchResult;
 import org.apache.wiki.util.ClassUtil;
 import org.apache.wiki.util.TextUtil;
 
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Properties;
@@ -46,13 +46,10 @@ import java.util.TreeSet;
 
 
 /**
- *  Provides a caching page provider.  This class rests on top of a
- *  real provider class and provides a cache to speed things up.  Only
- *  if the cache copy of the page text has expired, we fetch it from
- *  the provider.
+ *  Provides a caching page provider.  This class rests on top of a real provider class and provides a cache to speed things up.  Only
+ *  if the cache copy of the page text has expired, we fetch it from the provider.
  *  <p>
- *  This class does not detect if someone has modified the page
- *  externally, not through JSPWiki routines.
+ *  This class does not detect if someone has modified the page externally, not through JSPWiki routines.
  *  <p>
  *  Heavily based on ideas by Chris Brooking.
  *  <p>
@@ -61,16 +58,14 @@ import java.util.TreeSet;
  *  @since 1.6.4
  */
 // FIXME: Synchronization is a bit inconsistent in places.
-// FIXME: A part of the stuff is now redundant, since we could easily use the text cache
-//        for a lot of things.  RefactorMe.
-
-public class CachingProvider implements WikiPageProvider {
+// FIXME: A part of the stuff is now redundant, since we could easily use the text cache for a lot of things.  RefactorMe.
+public class CachingProvider implements PageProvider {
 
     private static final Logger log = Logger.getLogger( CachingProvider.class );
 
     private CacheManager m_cacheManager = CacheManager.getInstance();
 
-    private WikiPageProvider m_provider;
+    private PageProvider m_provider;
     // FIXME: Find another way to the search engine to use instead of from Engine?
     private Engine m_engine;
 
@@ -154,8 +149,7 @@ public class CachingProvider implements WikiPageProvider {
 
         try {
             final Class< ? > providerclass = ClassUtil.findClass( "org.apache.wiki.providers", classname );
-
-            m_provider = ( WikiPageProvider )providerclass.newInstance();
+            m_provider = ( PageProvider )providerclass.newInstance();
 
             log.debug( "Initializing real provider class " + m_provider );
             m_provider.initialize( engine, properties );
@@ -171,23 +165,24 @@ public class CachingProvider implements WikiPageProvider {
         }
     }
 
-
-    private WikiPage getPageInfoFromCache( final String name) throws ProviderException {
+    private Page getPageInfoFromCache( final String name) throws ProviderException {
         // Sanity check; seems to occur sometimes
-        if (name == null) return null;
+        if( name == null ) {
+            return null;
+        }
 
-        final Element cacheElement = m_cache.get(name);
-        if (cacheElement == null) {
-            final WikiPage refreshed = m_provider.getPageInfo(name, WikiPageProvider.LATEST_VERSION);
-            if (refreshed != null) {
-                m_cache.put(new Element(name, refreshed));
+        final Element cacheElement = m_cache.get( name );
+        if( cacheElement == null ) {
+            final Page refreshed = m_provider.getPageInfo( name, PageProvider.LATEST_VERSION );
+            if( refreshed != null ) {
+                m_cache.put( new Element( name, refreshed ) );
                 return refreshed;
-            }  else {
+            } else {
                 // page does not exist anywhere
                 return null;
             }
         }
-        return (WikiPage) cacheElement.getObjectValue();
+        return ( Page )cacheElement.getObjectValue();
     }
 
 
@@ -195,40 +190,32 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public boolean pageExists( final String pageName, final int version )
-    {
-        if( pageName == null ) return false;
-
-        WikiPage p = null;
+    public boolean pageExists( final String pageName, final int version ) {
+        if( pageName == null ) {
+            return false;
+        }
 
-        try
-        {
+        final Page p;
+        try {
             p = getPageInfoFromCache( pageName );
-        }
-        catch( final ProviderException e )
-        {
-            log.info("Provider failed while trying to check if page exists: "+pageName);
+        } catch( final ProviderException e ) {
+            log.info( "Provider failed while trying to check if page exists: " + pageName );
             return false;
         }
 
-        if( p != null )
-        {
+        if( p != null ) {
             final int latestVersion = p.getVersion();
-
-            if( version == latestVersion || version == LATEST_VERSION )
-            {
+            if( version == latestVersion || version == LATEST_VERSION ) {
                 return true;
             }
 
             return m_provider.pageExists( pageName, version );
         }
 
-        try
-        {
+        try {
             return getPageInfo( pageName, version ) != null;
+        } catch( final ProviderException e ) {
         }
-        catch( final ProviderException e )
-        {}
 
         return false;
     }
@@ -237,50 +224,32 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public boolean pageExists( final String pageName )
-    {
-        if( pageName == null ) return false;
-
-        WikiPage p = null;
+    public boolean pageExists( final String pageName ) {
+        if( pageName == null ) {
+            return false;
+        }
 
-        try
-        {
+        final Page p;
+        try {
             p = getPageInfoFromCache( pageName );
-        }
-        catch( final ProviderException e )
-        {
-            log.info("Provider failed while trying to check if page exists: "+pageName);
+        } catch( final ProviderException e ) {
+            log.info( "Provider failed while trying to check if page exists: " + pageName );
             return false;
         }
 
-        //
-        //  A null item means that the page either does not
-        //  exist, or has not yet been cached; a non-null
-        //  means that the page does exist.
-        //
-        if( p != null )
-        {
+        //  A null item means that the page either does not exist, or has not yet been cached; a non-null means that the page does exist.
+        if( p != null ) {
             return true;
         }
 
-        //
-        //  If we have a list of all pages in memory, then any page
-        //  not in the cache must be non-existent.
-        //
-        if( m_gotall )
-        {
+        //  If we have a list of all pages in memory, then any page not in the cache must be non-existent.
+        if( m_gotall ) {
             return false;
         }
 
-        //
-        //  We could add the page to the cache here as well,
-        //  but in order to understand whether that is a
-        //  good thing or not we would need to analyze
-        //  the JSPWiki calling patterns extensively.  Presumably
-        //  it would be a good thing if pageExists() is called
-        //  many times before the first getPageText() is called,
-        //  and the whole page is cached.
-        //
+        //  We could add the page to the cache here as well, but in order to understand whether that is a good thing or not we would
+        //  need to analyze the JSPWiki calling patterns extensively.  Presumably it would be a good thing if pageExists() is called
+        //  many times before the first getPageText() is called, and the whole page is cached.
         return m_provider.pageExists( pageName );
     }
 
@@ -288,30 +257,21 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public String getPageText( final String pageName, final int version )
-        throws ProviderException
-    {
-        String result = null;
-
-        if( pageName == null ) return null;
+    public String getPageText( final String pageName, final int version ) throws ProviderException {
+        if( pageName == null ) {
+            return null;
+        }
 
-        if( version == WikiPageProvider.LATEST_VERSION )
-        {
+        final String result;
+        if( version == PageProvider.LATEST_VERSION ) {
             result = getTextFromCache( pageName );
-        }
-        else
-        {
-            final WikiPage p = getPageInfoFromCache( pageName );
+        } else {
+            final Page p = getPageInfoFromCache( pageName );
 
-            //
             //  Or is this the latest version fetched by version number?
-            //
-            if( p != null && p.getVersion() == version )
-            {
+            if( p != null && p.getVersion() == version ) {
                 result = getTextFromCache( pageName );
-            }
-            else
-            {
+            } else {
                 result = m_provider.getPageText( pageName, version );
             }
         }
@@ -320,20 +280,20 @@ public class CachingProvider implements WikiPageProvider {
     }
 
 
-    private String getTextFromCache( final String pageName) throws ProviderException {
-        String text = null;
-
-        if (pageName == null) return null;
+    private String getTextFromCache( final String pageName ) throws ProviderException {
+        if (pageName == null) {
+            return null;
+        }
 
+        final String text;
         final Element cacheElement = m_textCache.get(pageName);
-
-        if (cacheElement != null) {
+        if( cacheElement != null ) {
             m_cacheHits++;
-            return (String) cacheElement.getObjectValue();
+            return ( String )cacheElement.getObjectValue();
         }
-        if (pageExists(pageName)) {
-            text = m_provider.getPageText(pageName, WikiPageProvider.LATEST_VERSION);
-            m_textCache.put(new Element(pageName, text));
+        if( pageExists( pageName ) ) {
+            text = m_provider.getPageText( pageName, PageProvider.LATEST_VERSION );
+            m_textCache.put( new Element( pageName, text ) );
             m_cacheMisses++;
             return text;
         }
@@ -345,19 +305,17 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public void putPageText( final WikiPage page, final String text) throws ProviderException {
-        synchronized (this) {
-            m_provider.putPageText(page, text);
-
-            page.setLastModified(new Date());
+    public void putPageText( final Page page, final String text ) throws ProviderException {
+        synchronized( this ) {
+            m_provider.putPageText( page, text );
+            page.setLastModified( new Date() );
 
             // Refresh caches properly
+            m_cache.remove( page.getName() );
+            m_textCache.remove( page.getName() );
+            m_historyCache.remove( page.getName() );
 
-            m_cache.remove(page.getName());
-            m_textCache.remove(page.getName());
-            m_historyCache.remove(page.getName());
-
-            getPageInfoFromCache(page.getName());
+            getPageInfoFromCache( page.getName() );
         }
     }
 
@@ -365,19 +323,16 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public Collection< WikiPage > getAllPages() throws ProviderException {
-        final Collection< WikiPage > all;
+    public Collection< Page > getAllPages() throws ProviderException {
+        final Collection< Page > all;
 
-        if (m_gotall == false) {
+        if ( !m_gotall ) {
             all = m_provider.getAllPages();
 
             // Make sure that all pages are in the cache.
-
-            synchronized (this) {
-                for ( final Iterator< WikiPage > i = all.iterator(); i.hasNext(); ) {
-                    final WikiPage p = i.next();
-
-                    m_cache.put(new Element(p.getName(), p));
+            synchronized( this ) {
+                for( final Page p : all ) {
+                    m_cache.put( new Element( p.getName(), p ) );
                 }
 
                 m_gotall = true;
@@ -385,11 +340,11 @@ public class CachingProvider implements WikiPageProvider {
         } else {
             @SuppressWarnings("unchecked") final List< String > keys = m_cache.getKeysWithExpiryCheck();
             all = new TreeSet<>();
-            for ( final String key : keys) {
-                final Element element = m_cache.get(key);
-                final WikiPage cachedPage = ( WikiPage )element.getObjectValue();
-                if (cachedPage != null) {
-                    all.add(cachedPage);
+            for( final String key : keys ) {
+                final Element element = m_cache.get( key );
+                final Page cachedPage = ( Page )element.getObjectValue();
+                if( cachedPage != null ) {
+                    all.add( cachedPage );
                 }
             }
         }
@@ -408,8 +363,7 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public Collection< WikiPage > getAllChangedSince( final Date date )
-    {
+    public Collection< Page > getAllChangedSince( final Date date ) {
         return m_provider.getAllChangedSince( date );
     }
 
@@ -417,9 +371,7 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public int getPageCount()
-        throws ProviderException
-    {
+    public int getPageCount() throws ProviderException {
         return m_provider.getPageCount();
     }
 
@@ -427,29 +379,18 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public Collection< SearchResult > findPages( final QueryItem[] query )
-    {
-        //
-        //  If the provider is a fast searcher, then
-        //  just pass this request through.
-        //
+    public Collection< SearchResult > findPages( final QueryItem[] query ) {
+        //  If the provider is a fast searcher, then just pass this request through.
         return m_provider.findPages( query );
-
         // FIXME: Does not implement fast searching
     }
 
-    //
-    //  FIXME: Kludge: make sure that the page is also parsed and it gets all the
-    //         necessary variables.
-    //
-
-    private void refreshMetadata( final WikiPage page ) {
+    //  FIXME: Kludge: make sure that the page is also parsed and it gets all the necessary variables.
+    private void refreshMetadata( final Page page ) {
         if( page != null && !page.hasMetadata() ) {
             final RenderingManager mgr = m_engine.getManager( RenderingManager.class );
-
             try {
                 final String data = m_provider.getPageText( page.getName(), page.getVersion() );
-
                 final WikiContext ctx = new WikiContext( m_engine, page );
                 final MarkupParser parser = mgr.getParser( ctx, data );
 
@@ -464,39 +405,25 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public WikiPage getPageInfo( final String pageName, final int version ) throws ProviderException
-    {
-        WikiPage page = null;
-        final WikiPage cached = getPageInfoFromCache( pageName );
-
-        final int latestcached = (cached != null) ? cached.getVersion() : Integer.MIN_VALUE;
-
-        if( version == WikiPageProvider.LATEST_VERSION || version == latestcached )
-        {
-            if( cached == null )
-            {
-                final WikiPage data = m_provider.getPageInfo( pageName, version );
-
-                if( data != null )
-                {
-                    m_cache.put(new Element(pageName, data));
+    public Page getPageInfo( final String pageName, final int version ) throws ProviderException {
+        final Page page;
+        final Page cached = getPageInfoFromCache( pageName );
+        final int latestcached = ( cached != null ) ? cached.getVersion() : Integer.MIN_VALUE;
+        if( version == PageProvider.LATEST_VERSION || version == latestcached ) {
+            if( cached == null ) {
+                final Page data = m_provider.getPageInfo( pageName, version );
+                if( data != null ) {
+                    m_cache.put( new Element( pageName, data ) );
                 }
                 page = data;
-            }
-            else
-            {
+            } else {
                 page = cached;
             }
-        }
-        else
-        {
+        } else {
             // We do not cache old versions.
             page = m_provider.getPageInfo( pageName, version );
-            //refreshMetadata( page );
         }
-
         refreshMetadata( page );
-
         return page;
     }
 
@@ -505,18 +432,18 @@ public class CachingProvider implements WikiPageProvider {
      */
     @SuppressWarnings("unchecked")
     @Override
-    public List< WikiPage > getVersionHistory( final String pageName) throws ProviderException {
-        List< WikiPage > history = null;
-
-        if (pageName == null) return null;
-        final Element element = m_historyCache.get(pageName);
-
-        if (element != null) {
+    public List< Page > getVersionHistory( final String pageName) throws ProviderException {
+        final List< Page > history;
+        if( pageName == null ) {
+            return null;
+        }
+        final Element element = m_historyCache.get( pageName );
+        if( element != null ) {
             m_historyCacheHits++;
-            history = ( List< WikiPage > )element.getObjectValue();
+            history = ( List< Page > )element.getObjectValue();
         } else {
-            history = m_provider.getVersionHistory(pageName);
-            m_historyCache.put( new Element( pageName, history ));
+            history = m_provider.getVersionHistory( pageName );
+            m_historyCache.put( new Element( pageName, history ) );
             m_historyCacheMisses++;
         }
 
@@ -529,44 +456,32 @@ public class CachingProvider implements WikiPageProvider {
      * @return A plain string with all the above mentioned values.
      */
     @Override
-    public synchronized String getProviderInfo()
-    {
-        return "Real provider: "+m_provider.getClass().getName()+
-                ". Cache misses: "+m_cacheMisses+
-                ". Cache hits: "+m_cacheHits+
-                ". History cache hits: "+m_historyCacheHits+
-                ". History cache misses: "+m_historyCacheMisses;
+    public synchronized String getProviderInfo() {
+        return "Real provider: " + m_provider.getClass().getName()+
+                ". Cache misses: " + m_cacheMisses+
+                ". Cache hits: " + m_cacheHits+
+                ". History cache hits: " + m_historyCacheHits+
+                ". History cache misses: " + m_historyCacheMisses;
     }
 
     /**
      *  {@inheritDoc}
      */
     @Override
-    public void deleteVersion( final String pageName, final int version )
-        throws ProviderException
-    {
-        //
-        //  Luckily, this is such a rare operation it is okay
-        //  to synchronize against the whole thing.
-        //
-        synchronized( this )
-        {
-            final WikiPage cached = getPageInfoFromCache( pageName );
-
-            final int latestcached = (cached != null) ? cached.getVersion() : Integer.MIN_VALUE;
+    public void deleteVersion( final String pageName, final int version ) throws ProviderException {
+        //  Luckily, this is such a rare operation it is okay to synchronize against the whole thing.
+        synchronized( this ) {
+            final Page cached = getPageInfoFromCache( pageName );
+            final int latestcached = ( cached != null ) ? cached.getVersion() : Integer.MIN_VALUE;
 
-            //
             //  If we have this version cached, remove from cache.
-            //
-            if( version == WikiPageProvider.LATEST_VERSION ||
-                version == latestcached )
-            {
-                m_cache.remove(pageName);
-                m_textCache.remove(pageName);
+            if( version == PageProvider.LATEST_VERSION || version == latestcached ) {
+                m_cache.remove( pageName );
+                m_textCache.remove( pageName );
             }
 
             m_provider.deleteVersion( pageName, version );
-            m_historyCache.remove(pageName);
+            m_historyCache.remove( pageName );
         }
     }
 
@@ -574,18 +489,13 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public void deletePage( final String pageName )
-        throws ProviderException
-    {
-        //
+    public void deletePage( final String pageName ) throws ProviderException {
         //  See note in deleteVersion().
-        //
-        synchronized(this)
-        {
-            m_cache.put(new Element(pageName, null));
-            m_textCache.put(new Element( pageName, null ));
-            m_historyCache.put(new Element(pageName, null));
-            m_provider.deletePage(pageName);
+        synchronized( this ) {
+            m_cache.put( new Element( pageName, null ) );
+            m_textCache.put( new Element( pageName, null ) );
+            m_historyCache.put( new Element( pageName, null ) );
+            m_provider.deletePage( pageName );
         }
     }
 
@@ -593,28 +503,28 @@ public class CachingProvider implements WikiPageProvider {
      *  {@inheritDoc}
      */
     @Override
-    public void movePage( final String from, final String to) throws ProviderException {
-        m_provider.movePage(from, to);
+    public void movePage( final String from, final String to ) throws ProviderException {
+        m_provider.movePage( from, to );
 
-        synchronized (this) {
+        synchronized( this ) {
             // Clear any cached version of the old page and new page
-            m_cache.remove(from);
-            m_textCache.remove(from);
-            m_historyCache.remove(from);
-            log.debug("Removing to page " + to + " from cache");
-            m_cache.remove(to);
-            m_textCache.remove(to);
-            m_historyCache.remove(to);
+            m_cache.remove( from );
+            m_textCache.remove( from );
+            m_historyCache.remove( from );
+            log.debug( "Removing to page " + to + " from cache" );
+            m_cache.remove( to );
+            m_textCache.remove( to );
+            m_historyCache.remove( to );
         }
     }
 
     /**
      *  Returns the actual used provider.
+     *
      *  @since 2.0
      *  @return The real provider.
      */
-    public WikiPageProvider getRealProvider()
-    {
+    public PageProvider getRealProvider() {
         return m_provider;
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/providers/FileSystemProvider.java b/jspwiki-main/src/main/java/org/apache/wiki/providers/FileSystemProvider.java
index 802beab..8368f10 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/providers/FileSystemProvider.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/providers/FileSystemProvider.java
@@ -20,6 +20,7 @@ package org.apache.wiki.providers;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.ProviderException;
 
 import java.io.File;
@@ -49,7 +50,7 @@ public class FileSystemProvider extends AbstractFileProvider {
      *  {@inheritDoc}
      */
     @Override
-    public void putPageText( final WikiPage page, final String text ) throws ProviderException {
+    public void putPageText( final Page page, final String text ) throws ProviderException {
         try {
             super.putPageText( page, text );
             putPageProperties( page );
@@ -61,26 +62,26 @@ public class FileSystemProvider extends AbstractFileProvider {
     /**
      *  Stores basic metadata to a file.
      */
-    private void putPageProperties( final WikiPage page ) throws IOException {
+    private void putPageProperties( final Page page ) throws IOException {
         final Properties props = new Properties();
         final String author = page.getAuthor();
-        final String changenote = page.getAttribute( WikiPage.CHANGENOTE );
-        final String viewcount = page.getAttribute( WikiPage.VIEWCOUNT );
+        final String changenote = page.getAttribute( Page.CHANGENOTE );
+        final String viewcount = page.getAttribute( Page.VIEWCOUNT );
 
         if( author != null ) {
-            props.setProperty( WikiPage.AUTHOR, author );
+            props.setProperty( Page.AUTHOR, author );
         }
 
         if( changenote != null ) {
-            props.setProperty( WikiPage.CHANGENOTE, changenote );
+            props.setProperty( Page.CHANGENOTE, changenote );
         }
 
         if( viewcount != null ) {
-            props.setProperty( WikiPage.VIEWCOUNT, viewcount );
+            props.setProperty( Page.VIEWCOUNT, viewcount );
         }
 
         // Get additional custom properties from page and add to props
-        getCustomProperties(page, props);
+        getCustomProperties( page, props );
 
         final File file = new File( getPageDirectory(), mangleName( page.getName() ) + PROP_EXT );
         try( final OutputStream out = new FileOutputStream( file ) ) {
@@ -91,7 +92,7 @@ public class FileSystemProvider extends AbstractFileProvider {
     /**
      *  Gets basic metadata from file.
      */
-    private void getPageProperties( final WikiPage page ) throws IOException {
+    private void getPageProperties( final Page page ) throws IOException {
         final File file = new File( getPageDirectory(), mangleName( page.getName() ) + PROP_EXT );
         if( file.exists() ) {
             try( final InputStream in = new FileInputStream( file ) ) {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/providers/VersioningFileProvider.java b/jspwiki-main/src/main/java/org/apache/wiki/providers/VersioningFileProvider.java
index 5ca30c6..cfa6af2 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/providers/VersioningFileProvider.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/providers/VersioningFileProvider.java
@@ -22,8 +22,10 @@ import org.apache.log4j.Logger;
 import org.apache.wiki.InternalWikiException;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.api.providers.WikiProvider;
 import org.apache.wiki.util.FileUtil;
 
@@ -247,24 +249,17 @@ public class VersioningFileProvider extends AbstractFileProvider {
      *  @throws NoSuchVersionException if there is no such version.
      */
     private int realVersion( final String page, final int requestedVersion ) throws NoSuchVersionException {
-        //
         //  Quickly check for the most common case.
-        //
-        if( requestedVersion == WikiProvider.LATEST_VERSION )
-        {
+        if( requestedVersion == WikiProvider.LATEST_VERSION ) {
             return -1;
         }
 
         final int latest = findLatestVersion(page);
 
-        if( requestedVersion == latest ||
-            (requestedVersion == 1 && latest == -1 ) )
-        {
+        if( requestedVersion == latest || (requestedVersion == 1 && latest == -1 ) ) {
             return -1;
-        }
-        else if( requestedVersion <= 0 || requestedVersion > latest )
-        {
-            throw new NoSuchVersionException("Requested version "+requestedVersion+", but latest is "+latest );
+        } else if( requestedVersion <= 0 || requestedVersion > latest ) {
+            throw new NoSuchVersionException( "Requested version " + requestedVersion + ", but latest is " + latest );
         }
 
         return requestedVersion;
@@ -274,23 +269,19 @@ public class VersioningFileProvider extends AbstractFileProvider {
      *  {@inheritDoc}
      */
     @Override
-    public synchronized String getPageText( final String page, int version )
-        throws ProviderException
-    {
+    public synchronized String getPageText( final String page, int version ) throws ProviderException {
         final File dir = findOldPageDir( page );
 
         version = realVersion( page, version );
-        if( version == -1 )
-        {
-            // We can let the FileSystemProvider take care
-            // of these requests.
-            return super.getPageText( page, WikiPageProvider.LATEST_VERSION );
+        if( version == -1 ) {
+            // We can let the FileSystemProvider take care of these requests.
+            return super.getPageText( page, PageProvider.LATEST_VERSION );
         }
 
         final File pageFile = new File( dir, ""+version+FILE_EXT );
-
-        if( !pageFile.exists() )
+        if( !pageFile.exists() ) {
             throw new NoSuchVersionException("Version "+version+"does not exist.");
+        }
 
         return readFile( pageFile );
     }
@@ -335,11 +326,8 @@ public class VersioningFileProvider extends AbstractFileProvider {
      *  {@inheritDoc}
      */
     @Override
-    public synchronized void putPageText( final WikiPage page, final String text ) throws ProviderException {
-        //
-        //  This is a bit complicated.  We'll first need to
-        //  copy the old file to be the newest file.
-        //
+    public synchronized void putPageText( final Page page, final String text ) throws ProviderException {
+        // This is a bit complicated.  We'll first need to copy the old file to be the newest file.
         final int  latest  = findLatestVersion( page.getName() );
         final File pageDir = findOldPageDir( page.getName() );
         if( !pageDir.exists() ) {
@@ -347,16 +335,12 @@ public class VersioningFileProvider extends AbstractFileProvider {
         }
 
         try {
-            //
             // Copy old data to safety, if one exists.
-            //
             final File oldFile = findPage( page.getName() );
 
-            // Figure out which version should the old page be?
-            // Numbers should always start at 1.
+            // Figure out which version should the old page be? Numbers should always start at 1.
             // "most recent" = -1 ==> 1
             // "first"       = 1  ==> 2
-
             int versionNumber = (latest > 0) ? latest : 1;
             final boolean firstUpdate = (versionNumber == 1);
 
@@ -366,26 +350,18 @@ public class VersioningFileProvider extends AbstractFileProvider {
                      final OutputStream out = new BufferedOutputStream( new FileOutputStream( pageFile ) ) ) {
                     FileUtil.copyContents( in, out );
 
-                    //
                     // We need also to set the date, since we rely on this.
-                    //
                     pageFile.setLastModified( oldFile.lastModified() );
 
-                    //
                     // Kludge to make the property code to work properly.
-                    //
                     versionNumber++;
                 }
             }
 
-            //
             //  Let superclass handler writing data to a new version.
-            //
             super.putPageText( page, text );
 
-            //
             //  Finally, write page version data.
-            //
             // FIXME: No rollback available.
             final Properties props = getPageProperties( page.getName() );
 
@@ -402,8 +378,7 @@ public class VersioningFileProvider extends AbstractFileProvider {
             }
 
             String newAuthor = page.getAuthor();
-            if ( newAuthor == null )
-            {
+            if ( newAuthor == null ) {
                 newAuthor = ( authorFirst != null ) ? authorFirst : "unknown";
             }
             page.setAuthor(newAuthor);
@@ -433,7 +408,7 @@ public class VersioningFileProvider extends AbstractFileProvider {
 
         WikiPage p = null;
 
-        if( version == WikiPageProvider.LATEST_VERSION || version == latest || (version == 1 && latest == -1) ) {
+        if( version == PageProvider.LATEST_VERSION || version == latest || (version == 1 && latest == -1) ) {
             //
             // Yes, we need to talk to the top level directory to get this version.
             //
@@ -442,26 +417,20 @@ public class VersioningFileProvider extends AbstractFileProvider {
             //
             realVersion = (latest >= 0) ? latest : 1;
 
-            p = super.getPageInfo( page, WikiPageProvider.LATEST_VERSION );
+            p = super.getPageInfo( page, PageProvider.LATEST_VERSION );
 
             if( p != null ) {
                 p.setVersion( realVersion );
             }
         } else {
-            //
-            //  The file is not the most recent, so we'll need to
-            //  find it from the deep trenches of the "OLD" directory
-            //  structure.
-            //
+            // The file is not the most recent, so we'll need to find it from the deep trenches of the "OLD" directory structure.
             realVersion = version;
             final File dir = findOldPageDir( page );
-
             if( !dir.exists() || !dir.isDirectory() ) {
                 return null;
             }
 
             final File file = new File( dir, version + FILE_EXT );
-
             if( file.exists() ) {
                 p = new WikiPage( m_engine, page );
 
@@ -470,26 +439,24 @@ public class VersioningFileProvider extends AbstractFileProvider {
             }
         }
 
-        //
         //  Get author and other metadata information (Modification date has already been set.)
-        //
         if( p != null ) {
             try {
                 final Properties props = getPageProperties( page );
                 String author = props.getProperty( realVersion + ".author" );
                 if( author == null ) {
-                    // we might not have a versioned author because the
-                    // old page was last maintained by FileSystemProvider
+                    // we might not have a versioned author because the old page was last maintained by FileSystemProvider
                     final Properties props2 = getHeritagePageProperties( page );
-                    author = props2.getProperty( WikiPage.AUTHOR );
+                    author = props2.getProperty( Page.AUTHOR );
                 }
                 if( author != null ) {
                     p.setAuthor( author );
                 }
 
                 final String changenote = props.getProperty( realVersion + ".changenote" );
-                if( changenote != null )
-                    p.setAttribute( WikiPage.CHANGENOTE, changenote );
+                if( changenote != null ) {
+                    p.setAttribute( Page.CHANGENOTE, changenote );
+                }
 
                 // Set the props values to the page attributes
                 setCustomProperties( p, props );
@@ -506,7 +473,7 @@ public class VersioningFileProvider extends AbstractFileProvider {
      */
     @Override
     public boolean pageExists( final String pageName, final int version ) {
-        if (version == WikiPageProvider.LATEST_VERSION || version == findLatestVersion( pageName ) ) {
+        if (version == PageProvider.LATEST_VERSION || version == findLatestVersion( pageName ) ) {
             return pageExists(pageName);
         }
 
@@ -523,15 +490,11 @@ public class VersioningFileProvider extends AbstractFileProvider {
      */
      // FIXME: Does not get user information.
     @Override
-    public List< WikiPage > getVersionHistory( final String page ) throws ProviderException {
-        final ArrayList< WikiPage > list = new ArrayList<>();
+    public List< Page > getVersionHistory( final String page ) throws ProviderException {
+        final ArrayList< Page > list = new ArrayList<>();
         final int latest = findLatestVersion( page );
-
-        // list.add( getPageInfo(page,WikiPageProvider.LATEST_VERSION) );
-
         for( int i = latest; i > 0; i-- ) {
             final WikiPage info = getPageInfo( page, i );
-
             if( info != null ) {
                 list.add( info );
             }
@@ -541,8 +504,7 @@ public class VersioningFileProvider extends AbstractFileProvider {
     }
 
     /*
-     * Support for migration of simple properties created by the
-     * FileSystemProvider when coming under Versioning management.
+     * Support for migration of simple properties created by the FileSystemProvider when coming under Versioning management.
      * Simulate an initial version.
      */
     private Properties getHeritagePageProperties( final String page ) throws IOException {
@@ -579,9 +541,8 @@ public class VersioningFileProvider extends AbstractFileProvider {
     }
 
     /**
-     *  Removes the relevant page directory under "OLD" -directory as well,
-     *  but does not remove any extra subdirectories from it.  It will only
-     *  touch those files that it thinks to be WikiPages.
+     *  Removes the relevant page directory under "OLD" -directory as well, but does not remove any extra subdirectories from it.
+     *  It will only touch those files that it thinks to be WikiPages.
      *
      *  @param page {@inheritDoc}
      *  @throws {@inheritDoc}
@@ -593,13 +554,11 @@ public class VersioningFileProvider extends AbstractFileProvider {
         final File dir = findOldPageDir( page );
         if( dir.exists() && dir.isDirectory() ) {
             final File[] files = dir.listFiles( new WikiFileFilter() );
-
             for( int i = 0; i < files.length; i++ ) {
                 files[ i ].delete();
             }
 
             final File propfile = new File( dir, PROPERTYFILE );
-
             if( propfile.exists() ) {
                 propfile.delete();
             }
@@ -611,19 +570,17 @@ public class VersioningFileProvider extends AbstractFileProvider {
     /**
      *  {@inheritDoc}
      *
-     *  Deleting versions has never really worked, JSPWiki assumes that version histories are "not gappy".
-     *  Using deleteVersion() is definitely not recommended.
+     *  Deleting versions has never really worked, JSPWiki assumes that version histories are "not gappy". Using deleteVersion() is
+     *  definitely not recommended.
      */
     @Override
     public void deleteVersion( final String page, final int version ) throws ProviderException {
         final File dir = findOldPageDir( page );
         int latest = findLatestVersion( page );
-        if( version == WikiPageProvider.LATEST_VERSION ||
+        if( version == PageProvider.LATEST_VERSION ||
             version == latest ||
             (version == 1 && latest == -1) ) {
-            //
             //  Delete the properties
-            //
             try {
                 final Properties props = getPageProperties( page );
                 props.remove( ((latest > 0) ? latest : 1)+".author" );
@@ -633,13 +590,10 @@ public class VersioningFileProvider extends AbstractFileProvider {
                 throw new ProviderException("Could not modify page properties: " + e.getMessage());
             }
 
-            // We can let the FileSystemProvider take care
-            // of the actual deletion
-            super.deleteVersion( page, WikiPageProvider.LATEST_VERSION );
+            // We can let the FileSystemProvider take care of the actual deletion
+            super.deleteVersion( page, PageProvider.LATEST_VERSION );
 
-            //
             //  Copy the old file to the new location
-            //
             latest = findLatestVersion( page );
 
             final File pageDir = findOldPageDir( page );
@@ -649,9 +603,7 @@ public class VersioningFileProvider extends AbstractFileProvider {
                  final OutputStream out = new BufferedOutputStream( new FileOutputStream( pageFile ) ) ) {
                 if( previousFile.exists() ) {
                     FileUtil.copyContents( in, out );
-                    //
                     // We need also to set the date, since we rely on this.
-                    //
                     pageFile.setLastModified( previousFile.lastModified() );
                 }
             } catch( final IOException e ) {
@@ -662,7 +614,6 @@ public class VersioningFileProvider extends AbstractFileProvider {
         }
 
         final File pageFile = new File( dir, ""+version+FILE_EXT );
-
         if( pageFile.exists() ) {
             if( !pageFile.delete() ) {
                 log.error("Unable to delete page." + pageFile.getPath() );
@@ -677,11 +628,11 @@ public class VersioningFileProvider extends AbstractFileProvider {
      */
     // FIXME: This is kinda slow, we should need to do this only once.
     @Override
-    public Collection< WikiPage > getAllPages() throws ProviderException {
-        final Collection< WikiPage > pages = super.getAllPages();
-        final Collection< WikiPage > returnedPages = new ArrayList<>();
-        for( final WikiPage page : pages ) {
-            final WikiPage info = getPageInfo( page.getName(), WikiProvider.LATEST_VERSION );
+    public Collection< Page > getAllPages() throws ProviderException {
+        final Collection< Page > pages = super.getAllPages();
+        final Collection< Page > returnedPages = new ArrayList<>();
+        for( final Page page : pages ) {
+            final Page info = getPageInfo( page.getName(), WikiProvider.LATEST_VERSION );
             returnedPages.add( info );
         }
 
@@ -745,4 +696,5 @@ public class VersioningFileProvider extends AbstractFileProvider {
             this.m_lastModified = lastModified;
         }
     }
+
 }
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 77df623..e88496d 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
@@ -24,19 +24,19 @@ import org.apache.wiki.InternalWikiException;
 import org.apache.wiki.LinkCollector;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Attachment;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.filters.BasePageFilter;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.api.providers.WikiProvider;
-import org.apache.wiki.attachment.Attachment;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.event.WikiEvent;
 import org.apache.wiki.event.WikiEventManager;
 import org.apache.wiki.event.WikiPageEvent;
 import org.apache.wiki.pages.PageManager;
-import org.apache.wiki.providers.WikiPageProvider;
 import org.apache.wiki.render.RenderingManager;
 import org.apache.wiki.util.TextUtil;
 
@@ -167,8 +167,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
     /**
      *  Does a full reference update.  Does not sync; assumes that you do it afterwards.
      */
-    private void updatePageReferences( final WikiPage page ) throws ProviderException {
-        final String content = m_engine.getManager( PageManager.class ).getPageText( page.getName(), WikiPageProvider.LATEST_VERSION );
+    private void updatePageReferences( final Page page ) throws ProviderException {
+        final String content = m_engine.getManager( PageManager.class ).getPageText( page.getName(), PageProvider.LATEST_VERSION );
         final Collection< String > links = scanWikiLinks( page, content );
         final TreeSet< String > res = new TreeSet<>( links );
         final List< Attachment > attachments = m_engine.getManager( AttachmentManager.class ).listAttachments( page );
@@ -186,7 +186,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *  @since 2.2
      *  @throws ProviderException If reading of pages fails.
      */
-    @Override public void initialize( final Collection< WikiPage > pages ) throws ProviderException {
+    @Override
+    public void initialize( final Collection< WikiPage > pages ) throws ProviderException {
         log.debug( "Initializing new ReferenceManager with " + pages.size() + " initial pages." );
         final StopWatch sw = new StopWatch();
         sw.start();
@@ -201,16 +202,16 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
             //  Yes, this is a kludge.  We know.  Will be fixed.
             final long saved = unserializeFromDisk();
 
-            for( final WikiPage page : pages ) {
+            for( final Page page : pages ) {
                 unserializeAttrsFromDisk( page );
             }
 
             //  Now we must check if any of the pages have been changed  while we were in the electronic la-la-land,
             //  and update the references for them.
-            for( final WikiPage page : pages ) {
+            for( final Page page : pages ) {
                 if( !( page instanceof Attachment ) ) {
                     // Refresh with the latest copy
-                    final WikiPage wp = m_engine.getManager( PageManager.class ).getPage( page.getName() );
+                    final Page wp = m_engine.getManager( PageManager.class ).getPage( page.getName() );
 
                     if( wp.getLastModified() == null ) {
                         log.fatal( "Provider returns null lastModified.  Please submit a bug report." );
@@ -314,7 +315,7 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
     /**
      *  Reads the serialized data from the disk back to memory. Returns the date when the data was last written on disk
      */
-    private synchronized long unserializeAttrsFromDisk( final WikiPage p ) throws IOException, ClassNotFoundException {
+    private synchronized long unserializeAttrsFromDisk( final Page p ) throws IOException, ClassNotFoundException {
         long saved = 0L;
 
         //  Find attribute cache, and check if it exists
@@ -455,7 +456,7 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *  @param page Name of the page to remove from the maps.
      */
     @Override
-    public synchronized void pageRemoved( final WikiPage page ) {
+    public synchronized void pageRemoved( final Page page ) {
         pageRemoved( page.getName() );
     }
 
@@ -506,7 +507,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *
      *  @param page wiki page for which references should be updated
      */
-    @Override public void updateReferences( final WikiPage page ) {
+    @Override
+    public void updateReferences( final Page page ) {
         final String pageData = m_engine.getManager( PageManager.class ).getPureText( page.getName(), WikiProvider.LATEST_VERSION );
         updateReferences( page.getName(), scanWikiLinks( page, pageData ) );
     }
@@ -521,7 +523,8 @@ public class DefaultReferenceManager extends BasePageFilter implements Reference
      *  @param page Name of the page to update.
      *  @param references A Collection of Strings, each one pointing to a page this page references.
      */
-    @Override public synchronized void updateReferences( final String page, final Collection< String > references ) {
+    @Override
+    public synchronized void updateReferences( final String page, final Collection< String > references ) {
         internalUpdateReferences( page, references );
         serializeToDisk();
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/references/ReferenceManager.java b/jspwiki-main/src/main/java/org/apache/wiki/references/ReferenceManager.java
index 62de727..6a10adf 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/references/ReferenceManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/references/ReferenceManager.java
@@ -72,14 +72,14 @@ public interface ReferenceManager extends PageFilter, InternalModule, WikiEventL
      *
      *  @param page Name of the page to remove from the maps.
      */
-    void pageRemoved( final WikiPage page );
+    void pageRemoved( final Page page );
 
     /**
      *  Updates all references for the given page.
      *
      *  @param page wiki page for which references should be updated
      */
-    void updateReferences( final WikiPage page );
+    void updateReferences( final Page page );
 
     /**
      *  Updates the referred pages of a new or edited WikiPage. If a refersTo entry for this page already exists, it is removed
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/render/DefaultRenderingManager.java b/jspwiki-main/src/main/java/org/apache/wiki/render/DefaultRenderingManager.java
index 0645a12..9578916 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/render/DefaultRenderingManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/render/DefaultRenderingManager.java
@@ -25,13 +25,14 @@ import org.apache.commons.lang3.time.StopWatch;
 import org.apache.log4j.Logger;
 import org.apache.wiki.StringTransmutator;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Attachment;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.FilterException;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.exceptions.WikiException;
-import org.apache.wiki.attachment.Attachment;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.event.WikiEvent;
 import org.apache.wiki.event.WikiEventListener;
@@ -42,7 +43,6 @@ import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.parser.JSPWikiMarkupParser;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.parser.WikiDocument;
-import org.apache.wiki.providers.WikiPageProvider;
 import org.apache.wiki.references.ReferenceManager;
 import org.apache.wiki.util.ClassUtil;
 import org.apache.wiki.util.TextUtil;
@@ -275,7 +275,7 @@ public class DefaultRenderingManager implements RenderingManager {
      *  {@inheritDoc}
      */
     @Override
-    public String getHTML( final Context context, final WikiPage page ) {
+    public String getHTML( final Context context, final Page page ) {
         final String pagedata = m_engine.getManager( PageManager.class ).getPureText( page.getName(), page.getVersion() );
         return textToHTML( context, pagedata );
     }
@@ -290,7 +290,7 @@ public class DefaultRenderingManager implements RenderingManager {
      */
     @Override
     public String getHTML( final String pagename, final int version ) {
-        final WikiPage page = m_engine.getManager( PageManager.class ).getPage( pagename, version );
+        final Page page = m_engine.getManager( PageManager.class ).getPage( pagename, version );
         final Context context = new WikiContext( m_engine, page );
         context.setRequestContext( WikiContext.NONE );
         return getHTML( context, page );
@@ -447,9 +447,9 @@ public class DefaultRenderingManager implements RenderingManager {
                                 log.debug( "Flushing latest version of " + page );
                             }
                             // as there is a new version of the page expire both plugin and pluginless versions of the old page
-                            m_documentCache.remove( page + VERSION_DELIMITER + WikiPageProvider.LATEST_VERSION  + VERSION_DELIMITER + Boolean.FALSE );
-                            m_documentCache.remove( page + VERSION_DELIMITER + WikiPageProvider.LATEST_VERSION  + VERSION_DELIMITER + Boolean.TRUE );
-                            m_documentCache.remove( page + VERSION_DELIMITER + WikiPageProvider.LATEST_VERSION  + VERSION_DELIMITER + null );
+                            m_documentCache.remove( page + VERSION_DELIMITER + PageProvider.LATEST_VERSION  + VERSION_DELIMITER + Boolean.FALSE );
+                            m_documentCache.remove( page + VERSION_DELIMITER + PageProvider.LATEST_VERSION  + VERSION_DELIMITER + Boolean.TRUE );
+                            m_documentCache.remove( page + VERSION_DELIMITER + PageProvider.LATEST_VERSION  + VERSION_DELIMITER + null );
                         }
                     }
                 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java b/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
index e1affaf..d049ea7 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/render/RenderingManager.java
@@ -20,15 +20,15 @@ package org.apache.wiki.render;
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.StringTransmutator;
-import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.WikiException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.event.WikiEventListener;
 import org.apache.wiki.modules.InternalModule;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.parser.WikiDocument;
-import org.apache.wiki.providers.WikiPageProvider;
 
 import java.io.IOException;
 import java.util.Properties;
@@ -149,7 +149,7 @@ public interface RenderingManager extends WikiEventListener, InternalModule {
      *  @param  page WikiPage reference.
      *  @return HTML-rendered version of the page.
      */
-    String getHTML( Context context, WikiPage page );
+    String getHTML( Context context, Page page );
 
     /**
      *  Returns the converted HTML of the page's specific version. The version must be a positive integer, otherwise the current
@@ -189,7 +189,7 @@ public interface RenderingManager extends WikiEventListener, InternalModule {
      *  @return HTML-rendered version of the page.
      */
     default String getHTML( final String page ) {
-        return getHTML( page, WikiPageProvider.LATEST_VERSION );
+        return getHTML( page, PageProvider.LATEST_VERSION );
     }
 
     /**
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/BasicSearchProvider.java b/jspwiki-main/src/main/java/org/apache/wiki/search/BasicSearchProvider.java
index 3d7011f..9bc8b81 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/search/BasicSearchProvider.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/search/BasicSearchProvider.java
@@ -19,18 +19,19 @@
 package org.apache.wiki.search;
 
 import org.apache.log4j.Logger;
-import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Attachment;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.providers.PageProvider;
+import org.apache.wiki.api.search.QueryItem;
+import org.apache.wiki.api.search.SearchResult;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.auth.AuthorizationManager;
 import org.apache.wiki.auth.permissions.PagePermission;
 import org.apache.wiki.pages.PageManager;
-import org.apache.wiki.providers.WikiPageProvider;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -142,7 +143,7 @@ public class BasicSearchProvider implements SearchProvider {
     private Collection< SearchResult > findPages( final QueryItem[] query, final Context wikiContext ) {
         final TreeSet< SearchResult > res = new TreeSet<>( new SearchResultComparator() );
         final SearchMatcher matcher = new SearchMatcher( m_engine, query );
-        final Collection< WikiPage > allPages;
+        final Collection< Page > allPages;
         try {
             allPages = m_engine.getManager( PageManager.class ).getAllPages();
         } catch( final ProviderException pe ) {
@@ -152,14 +153,14 @@ public class BasicSearchProvider implements SearchProvider {
 
         final AuthorizationManager mgr = m_engine.getManager( AuthorizationManager.class );
 
-        for( final WikiPage page : allPages ) {
+        for( final Page page : allPages ) {
             try {
                 if( page != null ) {
                     final PagePermission pp = new PagePermission( page, PagePermission.VIEW_ACTION );
                     if( wikiContext == null || mgr.checkPermission( wikiContext.getWikiSession(), pp ) ) {
                         final String pageName = page.getName();
                         final String pageContent =
-                                m_engine.getManager( PageManager.class ).getPageText( pageName, WikiPageProvider.LATEST_VERSION ) + attachmentNames( page );
+                                m_engine.getManager( PageManager.class ).getPageText( pageName, PageProvider.LATEST_VERSION ) + attachmentNames( page );
                         final SearchResult comparison = matcher.matchPageContent( pageName, pageContent );
                         if( comparison != null ) {
                             res.add( comparison );
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 33c4368..d261e4d 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
@@ -56,12 +56,13 @@ import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
 import org.apache.wiki.api.exceptions.ProviderException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.api.providers.WikiProvider;
+import org.apache.wiki.api.search.SearchResult;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.auth.AuthorizationManager;
 import org.apache.wiki.auth.permissions.PagePermission;
 import org.apache.wiki.pages.PageManager;
-import org.apache.wiki.providers.WikiPageProvider;
 import org.apache.wiki.util.ClassUtil;
 import org.apache.wiki.util.FileUtil;
 import org.apache.wiki.util.TextUtil;
@@ -206,8 +207,8 @@ public class LuceneSearchProvider implements SearchProvider {
 
                 final Directory luceneDir = new SimpleFSDirectory( dir.toPath() );
                 try( final IndexWriter writer = getIndexWriter( luceneDir ) ) {
-                    final Collection< WikiPage > allPages = m_engine.getManager( PageManager.class ).getAllPages();
-                    for( final WikiPage page : allPages ) {
+                    final Collection< Page > allPages = m_engine.getManager( PageManager.class ).getAllPages();
+                    for( final Page page : allPages ) {
                         try {
                             final String text = m_engine.getManager( PageManager.class ).getPageText( page.getName(), WikiProvider.LATEST_VERSION );
                             luceneIndexPage( page, text, writer );
@@ -499,7 +500,7 @@ public class LuceneSearchProvider implements SearchProvider {
                 final int docID = hit.doc;
                 final Document doc = searcher.doc( docID );
                 final String pageName = doc.get( LUCENE_ID );
-                final WikiPage page = m_engine.getManager( PageManager.class ).getPage( pageName, WikiPageProvider.LATEST_VERSION );
+                final Page page = m_engine.getManager( PageManager.class ).getPage( pageName, PageProvider.LATEST_VERSION );
 
                 if( page != null ) {
                     final PagePermission pp = new PagePermission( page, PagePermission.VIEW_ACTION );
@@ -602,18 +603,18 @@ public class LuceneSearchProvider implements SearchProvider {
     // FIXME: This class is dumb; needs to have a better implementation
     private static class SearchResultImpl implements SearchResult {
 
-        private WikiPage m_page;
+        private Page m_page;
         private int      m_score;
         private String[] m_contexts;
 
-        public SearchResultImpl( final WikiPage page, final int score, final String[] contexts ) {
+        public SearchResultImpl( final Page page, final int score, final String[] contexts ) {
             m_page = page;
             m_score = score;
             m_contexts = contexts != null ? contexts.clone() : null;
         }
 
         @Override
-        public WikiPage getPage()
+        public Page getPage()
         {
             return m_page;
         }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchMatcher.java b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchMatcher.java
index c9db833..e0e4237 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchMatcher.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchMatcher.java
@@ -20,6 +20,8 @@ package org.apache.wiki.search;
 
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.search.QueryItem;
+import org.apache.wiki.api.search.SearchResult;
 
 import java.io.BufferedReader;
 import java.io.IOException;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchProvider.java b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchProvider.java
index b633e70..3623810 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchProvider.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchProvider.java
@@ -22,6 +22,7 @@ import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.providers.WikiProvider;
+import org.apache.wiki.api.search.SearchResult;
 
 import java.io.IOException;
 import java.util.Collection;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchResultComparator.java b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchResultComparator.java
index e727c06..cbc4518 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchResultComparator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchResultComparator.java
@@ -18,6 +18,8 @@
  */
 package org.apache.wiki.search;
 
+import org.apache.wiki.api.search.SearchResult;
+
 import java.io.Serializable;
 import java.util.Comparator;
 
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 980d01e..48e674e 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/TestEngine.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/TestEngine.java
@@ -27,6 +27,7 @@ import org.apache.log4j.Logger;
 import org.apache.wiki.api.core.Session;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.exceptions.WikiException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.attachment.Attachment;
 import org.apache.wiki.auth.AuthenticationManager;
 import org.apache.wiki.auth.SessionMonitor;
@@ -36,7 +37,6 @@ import org.apache.wiki.event.WikiPageEvent;
 import org.apache.wiki.providers.AbstractFileProvider;
 import org.apache.wiki.providers.BasicAttachmentProvider;
 import org.apache.wiki.providers.FileSystemProvider;
-import org.apache.wiki.providers.WikiPageProvider;
 import org.apache.wiki.util.FileUtil;
 import org.apache.wiki.util.PropertyReader;
 import org.apache.wiki.util.TextUtil;
@@ -408,7 +408,7 @@ public class TestEngine extends WikiEngine
      * @return (english) contents corresponding to the given page name.
      */
     public String getI18nHTML( final String pagename ) {
-        final WikiPage page = getPageManager().getPage( pagename, WikiPageProvider.LATEST_VERSION );
+        final WikiPage page = getPageManager().getPage( pagename, PageProvider.LATEST_VERSION );
         final WikiContext context = new WikiContext( this, newHttpRequest(), page );
         context.setRequestContext( WikiContext.NONE );
         return getRenderingManager().getHTML( context, page );
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 1afd5a9..22eaeea 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
@@ -23,11 +23,12 @@ import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.WikiSession;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.core.Session;
 import org.apache.wiki.api.exceptions.WikiException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.auth.Users;
 import org.apache.wiki.pages.PageManager;
-import org.apache.wiki.providers.WikiPageProvider;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -48,7 +49,7 @@ public class IfPluginTest {
      * @return {@link WikiContext} associated to given {@link WikiPage}.
      * @throws WikiException problems while logging in.
      */
-    WikiContext getJanneBasedWikiContextFor( final WikiPage page ) throws WikiException {
+    WikiContext getJanneBasedWikiContextFor( final Page page ) throws WikiException {
         final MockHttpServletRequest request = testEngine.newHttpRequest();
         final Session session =  WikiSession.getWikiSession( testEngine, request );
         testEngine.getAuthenticationManager().login( session, request, Users.JANNE, Users.JANNE_PASS );
@@ -67,7 +68,7 @@ public class IfPluginTest {
         final String expected = "<p>Content visible for Janne Jalkanen</p>\n";
 
         testEngine.saveText( "Test", src );
-        final WikiPage page = testEngine.getManager( PageManager.class ).getPage( "Test", WikiPageProvider.LATEST_VERSION );
+        final Page page = testEngine.getManager( PageManager.class ).getPage( "Test", PageProvider.LATEST_VERSION );
         final WikiContext context = getJanneBasedWikiContextFor( page );
 
         final String res = testEngine.getRenderingManager().getHTML( context, page );
@@ -86,7 +87,7 @@ public class IfPluginTest {
         final String expected = "\n";
 
         testEngine.saveText( "Test", src );
-        final WikiPage page = testEngine.getManager( PageManager.class ).getPage( "Test", WikiPageProvider.LATEST_VERSION );
+        final Page page = testEngine.getManager( PageManager.class ).getPage( "Test", PageProvider.LATEST_VERSION );
         final WikiContext context = getJanneBasedWikiContextFor( page );
 
         final String res = testEngine.getRenderingManager().getHTML( context, page );
@@ -104,7 +105,7 @@ public class IfPluginTest {
         final String expected = "<p>Content visible for 127.0.0.1</p>\n";
 
         testEngine.saveText( "Test", src );
-        final WikiPage page = testEngine.getManager( PageManager.class ).getPage( "Test", WikiPageProvider.LATEST_VERSION );
+        final Page page = testEngine.getManager( PageManager.class ).getPage( "Test", PageProvider.LATEST_VERSION );
         final WikiContext context = getJanneBasedWikiContextFor( page );
 
         final String res = testEngine.getRenderingManager().getHTML( context, page );
@@ -122,7 +123,7 @@ public class IfPluginTest {
         final String expected = "\n";
 
         testEngine.saveText( "Test", src );
-        final WikiPage page = testEngine.getManager( PageManager.class ).getPage( "Test", WikiPageProvider.LATEST_VERSION );
+        final Page page = testEngine.getManager( PageManager.class ).getPage( "Test", PageProvider.LATEST_VERSION );
         final WikiContext context = getJanneBasedWikiContextFor( page );
 
         final String res = testEngine.getRenderingManager().getHTML( context, page );
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/providers/CounterProvider.java b/jspwiki-main/src/test/java/org/apache/wiki/providers/CounterProvider.java
index 4a29105..624d7d1 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/providers/CounterProvider.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/providers/CounterProvider.java
@@ -20,12 +20,15 @@ package org.apache.wiki.providers;
 
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.ProviderException;
-import org.apache.wiki.search.QueryItem;
-import org.apache.wiki.search.SearchResult;
+import org.apache.wiki.api.providers.PageProvider;
+import org.apache.wiki.api.search.QueryItem;
+import org.apache.wiki.api.search.SearchResult;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Properties;
@@ -34,7 +37,7 @@ import java.util.Vector;
 /**
  *  A provider who counts the hits to different parts.
  */
-public class CounterProvider implements WikiPageProvider {
+public class CounterProvider implements PageProvider {
 
     public int m_getPageCalls     = 0;
     public int m_pageExistsCalls  = 0;
@@ -72,14 +75,11 @@ public class CounterProvider implements WikiPageProvider {
     }
 
     @Override
-    public void putPageText( final WikiPage page, final String text )
-        throws ProviderException
-    {
+    public void putPageText( final Page page, final String text ) throws ProviderException {
     }
 
     @Override
-    public boolean pageExists( final String page )
-    {
+    public boolean pageExists( final String page ) {
         m_pageExistsCalls++;
 
         return findPage( page ) != null;
@@ -97,44 +97,33 @@ public class CounterProvider implements WikiPageProvider {
         return null;
     }
 
-    private WikiPage findPage( final String page )
-    {
-        for( int i = 0; i < m_pages.length; i++ )
-        {
-            if( m_pages[i].getName().equals(page) )
-                return m_pages[i];
+    private Page findPage( final String page ) {
+        for( final WikiPage m_page : m_pages ) {
+            if( m_page.getName().equals( page ) ) {
+                return m_page;
+            }
         }
 
         return null;
     }
 
     @Override
-    public WikiPage getPageInfo( final String page, final int version )
-    {            
+    public Page getPageInfo( final String page, final int version ) {
         m_getPageCalls++;
-
-        final WikiPage p = findPage(page);
-
-        return p;
+        return findPage(page);
     }
 
     @Override
-    public Collection< WikiPage > getAllPages()
-    {
+    public Collection< Page > getAllPages() {
         m_getAllPagesCalls++;
-
-        final List<WikiPage> l = new ArrayList<>();
-
-        for( int i = 0; i < m_pages.length; i++ )
-        {
-            l.add( m_pages[i] );
-        }
+        final List<Page> l = new ArrayList<>();
+        Collections.addAll( l, m_pages );
 
         return l;
     }
 
     @Override
-    public Collection< WikiPage > getAllChangedSince( final Date date )
+    public Collection< Page > getAllChangedSince( final Date date )
     {
         return new ArrayList<>();
     }
@@ -146,35 +135,27 @@ public class CounterProvider implements WikiPageProvider {
     }
 
     @Override
-    public List< WikiPage > getVersionHistory( final String page )
+    public List< Page > getVersionHistory( final String page )
     {
         return new Vector<>();
     }
 
     @Override
-    public String getPageText( final String page, final int version )
-    {
+    public String getPageText( final String page, final int version ) {
         m_getPageTextCalls++;
         return m_defaultText;
     }
 
     @Override
-    public void deleteVersion( final String page, final int version )
-    {
+    public void deleteVersion( final String page, final int version ) {
     }
 
     @Override
-    public void deletePage( final String page )
-    {
+    public void deletePage( final String page ) {
     }
 
-    /* (non-Javadoc)
-     * @see org.apache.wiki.providers.WikiPageProvider#movePage(java.lang.String, java.lang.String)
-     */
     @Override
-    public void movePage( final String from, final String to ) throws ProviderException
-    {
+    public void movePage( final String from, final String to ) throws ProviderException {
     }
-    
-    
+
 }
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/providers/VerySimpleProvider.java b/jspwiki-main/src/test/java/org/apache/wiki/providers/VerySimpleProvider.java
index f7fa810..e91cb08 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/providers/VerySimpleProvider.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/providers/VerySimpleProvider.java
@@ -20,9 +20,11 @@ package org.apache.wiki.providers;
 
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.ProviderException;
-import org.apache.wiki.search.QueryItem;
-import org.apache.wiki.search.SearchResult;
+import org.apache.wiki.api.providers.PageProvider;
+import org.apache.wiki.api.search.QueryItem;
+import org.apache.wiki.api.search.SearchResult;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -32,59 +34,45 @@ import java.util.Properties;
 import java.util.Vector;
 
 /**
- *  This is a simple provider that is used by some of the tests.  It has some
- *  specific behaviours, like it always contains a single page.
+ *  This is a simple provider that is used by some of the tests.  It has some specific behaviours, like it always contains a single page.
  */
-public class VerySimpleProvider implements WikiPageProvider
-{
+public class VerySimpleProvider implements PageProvider {
+
     /** The last request is stored here. */
     public String m_latestReq = null;
     /** The version number of the last request is stored here. */
     public int    m_latestVers = -123989;
 
-    /**
-     *  This provider has only a single page, when you ask 
-     *  a list of all pages.
-     */
+    /** This provider has only a single page, when you ask a list of all pages. */
     public static final String PAGENAME = "foo";
 
-    /**
-     *  The name of the page list.
-     */
+    /** The name of the page list. */
     public static final String AUTHOR   = "default-author";
     
     private Engine m_engine;
 
     @Override
-    public void initialize( final Engine engine, final Properties props )
-    {
+    public void initialize( final Engine engine, final Properties props ) {
         m_engine = engine;
     }
 
     @Override
-    public String getProviderInfo()
-    {
+    public String getProviderInfo() {
         return "Very Simple Provider.";
     }
 
     @Override
-    public void putPageText( final WikiPage page, final String text )
-        throws ProviderException
-    {
+    public void putPageText( final Page page, final String text ) throws ProviderException {
     }
 
-    /**
-     *  Always returns true.
-     */
+    /** Always returns true. */
     @Override
     public boolean pageExists( final String page )
     {
         return true;
     }
 
-    /**
-     *  Always returns true.
-     */
+    /** Always returns true. */
     @Override
     public boolean pageExists( final String page, final int version )
     {
@@ -104,12 +92,11 @@ public class VerySimpleProvider implements WikiPageProvider
      *  Returns always a valid WikiPage.
      */
     @Override
-    public WikiPage getPageInfo( final String page, final int version )
-    {
+    public Page getPageInfo( final String page, final int version ) {
         m_latestReq  = page;
         m_latestVers = version;
 
-        final WikiPage p = new WikiPage( m_engine, page );
+        final Page p = new WikiPage( m_engine, page );
         p.setVersion( 5 );
         p.setAuthor( AUTHOR );
         p.setLastModified( new Date(0L) );
@@ -120,9 +107,8 @@ public class VerySimpleProvider implements WikiPageProvider
      *  Returns a single page.
      */
     @Override
-    public Collection< WikiPage > getAllPages()
-    {
-        final List< WikiPage > l = new ArrayList<>();
+    public Collection< Page > getAllPages() {
+        final List< Page > l = new ArrayList<>();
         l.add( getPageInfo( PAGENAME, 5 ) );
         return l;
     }
@@ -131,7 +117,7 @@ public class VerySimpleProvider implements WikiPageProvider
      *  Returns the same as getAllPages().
      */
     @Override
-    public Collection< WikiPage > getAllChangedSince( final Date date )
+    public Collection< Page > getAllChangedSince( final Date date )
     {
         return getAllPages();
     }
@@ -149,18 +135,16 @@ public class VerySimpleProvider implements WikiPageProvider
      *  Always returns an empty list.
      */
     @Override
-    public List< WikiPage > getVersionHistory( final String page )
+    public List< Page > getVersionHistory( final String page )
     {
         return new Vector<>();
     }
 
     /**
-     *  Stores the page and version into public fields of this class,
-     *  then returns an empty string.
+     *  Stores the page and version into public fields of this class, then returns an empty string.
      */
     @Override
-    public String getPageText( final String page, final int version )
-    {
+    public String getPageText( final String page, final int version ) {
         m_latestReq  = page;
         m_latestVers = version;
 
@@ -168,23 +152,15 @@ public class VerySimpleProvider implements WikiPageProvider
     }
 
     @Override
-    public void deleteVersion( final String page, final int version )
-    {
+    public void deleteVersion( final String page, final int version ) {
     }
 
     @Override
-    public void deletePage( final String page )
-    {
+    public void deletePage( final String page ) {
     }
 
-    /* (non-Javadoc)
-     * @see org.apache.wiki.providers.WikiPageProvider#movePage(java.lang.String, java.lang.String)
-     */
     @Override
-    public void movePage( final String from, final String to ) throws ProviderException
-    {
-        // TODO Auto-generated method stub
-        
+    public void movePage( final String from, final String to ) throws ProviderException {
     }
     
 }