diff --git a/jspwiki-main/src/test/java/org/apache/wiki/plugin/RecentChangesPluginTest.java b/jspwiki-main/src/test/java/org/apache/wiki/plugin/RecentChangesPluginTest.java
index fcc8f47..3a4c3ad 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/plugin/RecentChangesPluginTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/plugin/RecentChangesPluginTest.java
@@ -32,24 +32,17 @@
 
 public class RecentChangesPluginTest {
     Properties props = TestEngine.getTestProperties();
-
-    TestEngine testEngine;
+    TestEngine testEngine = TestEngine.build( props );
+    PluginManager manager = new DefaultPluginManager(testEngine, props);
 
     WikiContext context;
 
-    PluginManager manager;
-
     @BeforeEach
     public void setUp() throws Exception {
-        CacheManager.getInstance().removeAllCaches();
-        testEngine = new TestEngine(props);
-
         testEngine.saveText("TestPage01", "Some Text for testing 01");
         testEngine.saveText("TestPage02", "Some Text for testing 02");
         testEngine.saveText("TestPage03", "Some Text for testing 03");
         testEngine.saveText("TestPage04", "Some Text for testing 04");
-
-        manager = new DefaultPluginManager(testEngine, props);
     }
 
     @AfterEach
@@ -60,6 +53,7 @@
         testEngine.deleteTestPage("TestPage04");
 
         TestEngine.emptyWorkDir();
+        CacheManager.getInstance().removeAllCaches();
     }
 
     /**
@@ -90,8 +84,7 @@
     public void testParmInClude() throws Exception {
         context = new WikiContext(testEngine, new WikiPage(testEngine, "TestPage02"));
 
-        final String res = manager.execute( context,
-                                      "{INSERT org.apache.wiki.plugin.RecentChangesPlugin include='TestPage02*'}" );
+        final String res = manager.execute( context, "{INSERT org.apache.wiki.plugin.RecentChangesPlugin include='TestPage02*'}" );
 
         Assertions.assertTrue(res.contains("<table class=\"recentchanges\" cellpadding=\"4\">"));
         Assertions.assertFalse(res.contains("<a href=\"/test/Wiki.jsp?page=TestPage01\">Test Page 01</a>"));
@@ -126,11 +119,10 @@
     public void testNoRecentChanges() throws Exception {
         context = new WikiContext(testEngine, new WikiPage(testEngine, "TestPage04"));
 
-        final String res = manager.execute( context,
-                                      "{INSERT org.apache.wiki.plugin.RecentChangesPlugin since='-1'}" );
+        final String res = manager.execute( context, "{INSERT org.apache.wiki.plugin.RecentChangesPlugin since='-1'}" );
 
-        Assertions.assertTrue( "<table class=\"recentchanges\" cellpadding=\"4\"></table>".equals( res ) );
-        Assertions.assertFalse( "<table class=\"recentchanges\" cellpadding=\"4\" />".equals( res ) );
+        Assertions.assertEquals( "<table class=\"recentchanges\" cellpadding=\"4\"></table>", res );
+        Assertions.assertNotEquals( "<table class=\"recentchanges\" cellpadding=\"4\" />", res );
     }
 
 }
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/providers/BasicAttachmentProviderTest.java b/jspwiki-main/src/test/java/org/apache/wiki/providers/BasicAttachmentProviderTest.java
index ff7809e..185fc08 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/providers/BasicAttachmentProviderTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/providers/BasicAttachmentProviderTest.java
@@ -45,7 +45,7 @@
     public static final String NAME2 = "AfterFirstTestPage";
 
     Properties props = TestEngine.getTestProperties();
-    TestEngine m_engine;
+    TestEngine m_engine = TestEngine.build( props );
     BasicAttachmentProvider m_provider;
 
     /** This is the sound of my head hitting the keyboard. */
@@ -53,8 +53,6 @@
 
     @BeforeEach
     public void setUp() throws Exception {
-        m_engine = new TestEngine( props );
-
         m_provider = new BasicAttachmentProvider();
         m_provider.initialize( m_engine, props );
 
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/providers/FileSystemProviderTest.java b/jspwiki-main/src/test/java/org/apache/wiki/providers/FileSystemProviderTest.java
index 30ea671..9cea2d2 100644
--- a/jspwiki-main/src/test/java/org/apache/wiki/providers/FileSystemProviderTest.java
+++ b/jspwiki-main/src/test/java/org/apache/wiki/providers/FileSystemProviderTest.java
@@ -18,10 +18,11 @@
  */
 
 package org.apache.wiki.providers;
-import org.apache.log4j.PropertyConfigurator;
+
 import org.apache.wiki.TestEngine;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
+import org.apache.wiki.api.core.Page;
 import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.util.FileUtil;
 import org.junit.jupiter.api.AfterEach;
@@ -34,31 +35,27 @@
 import java.io.IOException;
 import java.util.Properties;
 
+import static org.apache.wiki.TestEngine.with;
 
 
 public class FileSystemProviderTest {
 
     FileSystemProvider m_provider;
     FileSystemProvider m_providerUTF8;
-    String             m_pagedir;
     Properties props = TestEngine.getTestProperties();
 
-    TestEngine         m_engine;
+    Engine m_engine = TestEngine.build( with( PageManager.PROP_PAGEPROVIDER, "FileSystemProvider" ),
+                                        with( FileSystemProvider.PROP_PAGEDIR, "./target/jspwiki.test.pages" ) );
 
     @BeforeEach
     public void setUp() throws Exception {
-        m_pagedir = "./target/jspwiki.test.pages";
         props.setProperty( PageManager.PROP_PAGEPROVIDER, "FileSystemProvider" );
-        props.setProperty( FileSystemProvider.PROP_PAGEDIR, m_pagedir );
+        props.setProperty( FileSystemProvider.PROP_PAGEDIR, "./target/jspwiki.test.pages" );
 
-        Properties props2 = new Properties();
-        PropertyConfigurator.configure( props2 );
-
-        m_engine = new TestEngine(props);
         m_provider = new FileSystemProvider();
         m_provider.initialize( m_engine, props );
 
-        props.setProperty( WikiEngine.PROP_ENCODING, "UTF-8" );
+        props.setProperty( Engine.PROP_ENCODING, "UTF-8" );
         m_providerUTF8 = new FileSystemProvider();
         m_providerUTF8.initialize( m_engine, props );
     }
@@ -70,30 +67,30 @@
 
     @Test
     public void testScandinavianLetters() throws Exception {
-        WikiPage page = new WikiPage(m_engine, "\u00c5\u00e4Test");
+        final WikiPage page = new WikiPage(m_engine, "\u00c5\u00e4Test");
 
         m_provider.putPageText( page, "test" );
 
-        File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "%C5%E4Test.txt" );
+        final File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "%C5%E4Test.txt" );
 
         Assertions.assertTrue( resultfile.exists(), "No such file" );
 
-        String contents = FileUtil.readContents( new FileInputStream(resultfile), "ISO-8859-1" );
+        final String contents = FileUtil.readContents( new FileInputStream(resultfile), "ISO-8859-1" );
 
         Assertions.assertEquals( contents, "test", "Wrong contents" );
     }
 
     @Test
     public void testScandinavianLettersUTF8() throws Exception {
-        WikiPage page = new WikiPage(m_engine, "\u00c5\u00e4Test");
+        final WikiPage page = new WikiPage(m_engine, "\u00c5\u00e4Test");
 
         m_providerUTF8.putPageText( page, "test\u00d6" );
 
-        File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "%C3%85%C3%A4Test.txt" );
+        final File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "%C3%85%C3%A4Test.txt" );
 
         Assertions.assertTrue( resultfile.exists(), "No such file" );
 
-        String contents = FileUtil.readContents( new FileInputStream(resultfile),
+        final String contents = FileUtil.readContents( new FileInputStream(resultfile),
                                                  "UTF-8" );
 
         Assertions.assertEquals( contents, "test\u00d6", "Wrong contents" );
@@ -107,15 +104,15 @@
     public void testSlashesInPageNamesUTF8()
          throws Exception
     {
-        WikiPage page = new WikiPage(m_engine, "Test/Foobar");
+        final WikiPage page = new WikiPage(m_engine, "Test/Foobar");
 
         m_providerUTF8.putPageText( page, "test" );
 
-        File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "Test%2FFoobar.txt" );
+        final File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "Test%2FFoobar.txt" );
 
         Assertions.assertTrue( resultfile.exists(), "No such file" );
 
-        String contents = FileUtil.readContents( new FileInputStream(resultfile),
+        final String contents = FileUtil.readContents( new FileInputStream(resultfile),
                                                  "UTF-8" );
 
         Assertions.assertEquals( contents, "test", "Wrong contents" );
@@ -125,15 +122,15 @@
     public void testSlashesInPageNames()
          throws Exception
     {
-        WikiPage page = new WikiPage(m_engine, "Test/Foobar");
+        final WikiPage page = new WikiPage(m_engine, "Test/Foobar");
 
         m_provider.putPageText( page, "test" );
 
-        File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "Test%2FFoobar.txt" );
+        final File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "Test%2FFoobar.txt" );
 
         Assertions.assertTrue( resultfile.exists(), "No such file" );
 
-        String contents = FileUtil.readContents( new FileInputStream(resultfile),
+        final String contents = FileUtil.readContents( new FileInputStream(resultfile),
                                                  "ISO-8859-1" );
 
         Assertions.assertEquals( contents, "test", "Wrong contents" );
@@ -143,15 +140,15 @@
     public void testDotsInBeginning()
        throws Exception
     {
-        WikiPage page = new WikiPage(m_engine, ".Test");
+        final WikiPage page = new WikiPage(m_engine, ".Test");
 
         m_provider.putPageText( page, "test" );
 
-        File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "%2ETest.txt" );
+        final File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) , "%2ETest.txt" );
 
         Assertions.assertTrue( resultfile.exists(), "No such file" );
 
-        String contents = FileUtil.readContents( new FileInputStream(resultfile), "ISO-8859-1" );
+        final String contents = FileUtil.readContents( new FileInputStream(resultfile), "ISO-8859-1" );
 
         Assertions.assertEquals( contents, "test", "Wrong contents" );
     }
@@ -162,12 +159,12 @@
     {
         try
         {
-            WikiPage page = new WikiPage(m_engine, "\u00c5\u00e4Test");
+            final WikiPage page = new WikiPage(m_engine, "\u00c5\u00e4Test");
             page.setAuthor("Min\u00e4");
 
             m_provider.putPageText( page, "test" );
 
-            WikiPage page2 = m_provider.getPageInfo( "\u00c5\u00e4Test", 1 );
+            final Page page2 = m_provider.getPageInfo( "\u00c5\u00e4Test", 1 );
 
             Assertions.assertEquals( "Min\u00e4", page2.getAuthor() );
         }
@@ -176,32 +173,32 @@
             File resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ), "%C5%E4Test.txt" );
             try {
                 resultfile.delete();
-            } catch(Exception e) {}
+            } catch( final Exception e) {}
 
             resultfile = new File(  props.getProperty( FileSystemProvider.PROP_PAGEDIR ), "%C5%E4Test.properties" );
             try {
                 resultfile.delete();
-            } catch(Exception e) {}
+            } catch( final Exception e) {}
         }
     }
 
     @Test
     public void testNonExistantDirectory() throws Exception {
-        String tmpdir =  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) ;
-        String dirname = "non-existant-directory";
+        final String tmpdir =  props.getProperty( FileSystemProvider.PROP_PAGEDIR ) ;
+        final String dirname = "non-existant-directory";
 
-        String newdir = tmpdir + File.separator + dirname;
+        final String newdir = tmpdir + File.separator + dirname;
 
-        Properties pr = new Properties();
+        final Properties pr = new Properties();
 
         pr.setProperty( FileSystemProvider.PROP_PAGEDIR,
                            newdir );
 
-        FileSystemProvider test = new FileSystemProvider();
+        final FileSystemProvider test = new FileSystemProvider();
 
         test.initialize( m_engine, pr );
 
-        File f = new File( newdir );
+        final File f = new File( newdir );
 
         Assertions.assertTrue( f.exists(), "didn't create it" );
         Assertions.assertTrue( f.isDirectory(), "isn't a dir" );
@@ -219,11 +216,11 @@
         {
             tmpFile = FileUtil.newTmpFile("foobar"); // Content does not matter.
 
-            Properties pr = new Properties();
+            final Properties pr = new Properties();
 
             pr.setProperty( FileSystemProvider.PROP_PAGEDIR, tmpFile.getAbsolutePath() );
 
-            FileSystemProvider test = new FileSystemProvider();
+            final FileSystemProvider test = new FileSystemProvider();
 
             try
             {
@@ -231,7 +228,7 @@
 
                 Assertions.fail( "Wiki did not warn about wrong property." );
             }
-            catch( IOException e )
+            catch( final IOException e )
             {
                 // This is okay.
             }
@@ -249,9 +246,9 @@
     public void testDelete()
         throws Exception
     {
-        String files = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
+        final String files = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
 
-        WikiPage p = new WikiPage(m_engine,"Test");
+        final WikiPage p = new WikiPage(m_engine,"Test");
         p.setAuthor("AnonymousCoward");
 
         m_provider.putPageText( p, "v1" );
@@ -277,23 +274,23 @@
 
     @Test
     public void testCustomProperties() throws Exception {
-        String pageDir = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
-        String pageName = "CustomPropertiesTest";
-        String fileName = pageName+FileSystemProvider.FILE_EXT;
-        File file = new File (pageDir,fileName);
+        final String pageDir = props.getProperty( FileSystemProvider.PROP_PAGEDIR );
+        final String pageName = "CustomPropertiesTest";
+        final String fileName = pageName+FileSystemProvider.FILE_EXT;
+        final File file = new File (pageDir,fileName);
 
         Assertions.assertFalse( file.exists() );
-        WikiPage testPage = new WikiPage(m_engine,pageName);
+        final WikiPage testPage = new WikiPage(m_engine,pageName);
         testPage.setAuthor("TestAuthor");
         testPage.setAttribute("@test","Save Me");
         testPage.setAttribute("@test2","Save You");
         testPage.setAttribute("test3","Do not save");
         m_provider.putPageText( testPage, "This page has custom properties" );
         Assertions.assertTrue( file.exists(), "No such file" );
-        WikiPage pageRetrieved = m_provider.getPageInfo( pageName, -1 );
-        String value = pageRetrieved.getAttribute("@test");
-        String value2 = pageRetrieved.getAttribute("@test2");
-        String value3 = pageRetrieved.getAttribute("test3");
+        final Page pageRetrieved = m_provider.getPageInfo( pageName, -1 );
+        final String value = pageRetrieved.getAttribute("@test");
+        final String value2 = pageRetrieved.getAttribute("@test2");
+        final String value3 = pageRetrieved.getAttribute("test3");
         Assertions.assertNotNull(value);
         Assertions.assertNotNull(value2);
         Assertions.assertNull(value3);
