diff --git a/jspwiki-210-adapters/src/test/java/org/apache/wiki/filters/FilterFrom210Test.java b/jspwiki-210-adapters/src/test/java/org/apache/wiki/filters/FilterFrom210Test.java
index 0bf6fc3..c7c55a2 100644
--- a/jspwiki-210-adapters/src/test/java/org/apache/wiki/filters/FilterFrom210Test.java
+++ b/jspwiki-210-adapters/src/test/java/org/apache/wiki/filters/FilterFrom210Test.java
@@ -3,8 +3,8 @@
 import com.example.filters.TwoXFilter;
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.exceptions.WikiException;
 import org.apache.wiki.render.RenderingManager;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -15,17 +15,24 @@
 public class FilterFrom210Test {
 
     @Test
-    public void testFilterNotUsingPublicApiStillWorks() {
+    public void testFilterNotUsingPublicApiStillWorks() throws WikiException {
         final Properties props = TestEngine.getTestProperties();
         // props.setProperty( FilterManager.PROP_FILTERXML, "filters.xml" );
-        final WikiEngine engine = TestEngine.build( props ); // trigger page filter#initialize
+        final TestEngine engine = TestEngine.build( props ); // trigger page filter#initialize
         final FilterManager fm = engine.getManager( FilterManager.class );
         final RenderingManager rm = engine.getManager( RenderingManager.class );
         Assertions.assertTrue( fm.getFilterList().stream().anyMatch( f -> f instanceof TwoXFilter ) );
 
+        engine.saveText( "Testpage", "Incredible and super important content here" ); // trigger pre / post methods
+        final TwoXFilter txf = ( TwoXFilter )fm.getFilterList().stream().filter( f -> f instanceof TwoXFilter ).findAny().get();
+        // post save triggers page references' update which in turn renders the page, which in turn triggers the preTranslate
+        // filter method, so we end up with 5 invocations to any given filter on a page save + 1 more from initialize
+        Assertions.assertEquals( 6, txf.invocations() );
+
         final WikiContext context = new WikiContext( engine, new WikiPage( engine, "Testpage" ) );
-        final String res = rm.textToHTML( context,"Incredible and super important content here" ); // trigger pre / post translate
+        final String res = rm.textToHTML( context,"Incredible and super important content here" ); // test only pre / post translate
         Assertions.assertEquals( "see how I care about yor content - hmmm...", res );
+
     }
 
 }
diff --git a/jspwiki-210-test-adaptees/src/main/java/com/example/filters/TwoXFilter.java b/jspwiki-210-test-adaptees/src/main/java/com/example/filters/TwoXFilter.java
index d0dfd38..b9d7fe6 100644
--- a/jspwiki-210-test-adaptees/src/main/java/com/example/filters/TwoXFilter.java
+++ b/jspwiki-210-test-adaptees/src/main/java/com/example/filters/TwoXFilter.java
@@ -11,18 +11,42 @@
 public class TwoXFilter extends BasicPageFilter {
 
     String newContent = "";
+    int invocations = 0;
 
     /** {@inheritDoc} */
     @Override
     public void initialize( final WikiEngine engine, final Properties properties ) throws FilterException {
         super.initialize( engine, properties );
-        newContent = "see how I care about yor content - hmmm...";
+        invocations++;
+    }
+
+    @Override
+    public String preTranslate( final WikiContext wikiContext, final String content ) throws FilterException {
+        invocations++;
+        return content;
     }
 
     /** {@inheritDoc} */
     @Override
     public String postTranslate( final WikiContext wikiContext, final String htmlContent ) {
+        invocations++;
+        newContent = "see how I care about yor content - hmmm...";
         return newContent;
     }
 
+    @Override
+    public String preSave( final WikiContext wikiContext, final String content ) throws FilterException {
+        invocations++;
+        return content;
+    }
+
+    @Override
+    public void postSave( final WikiContext wikiContext, final String content ) throws FilterException {
+        invocations++;
+    }
+
+    public int invocations() {
+        return invocations;
+    }
+
 }
