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 3412d3e..0bf6fc3 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
@@ -1,5 +1,6 @@
 package org.apache.wiki.filters;
 
+import com.example.filters.TwoXFilter;
 import org.apache.wiki.TestEngine;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -20,12 +21,11 @@
         final WikiEngine 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 ProfanityFilter ) );
+        Assertions.assertTrue( fm.getFilterList().stream().anyMatch( f -> f instanceof TwoXFilter ) );
 
         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
-        // Assertions.assertEquals( "see how I care about yor content - hmmm...", res );
-        Assertions.assertEquals( "Incredible and super important content here", res );
+        Assertions.assertEquals( "see how I care about yor content - hmmm...", res );
     }
 
 }
diff --git a/jspwiki-210-adapters/src/test/resources/filters.xml b/jspwiki-210-adapters/src/test/resources/filters.xml
index 3ad3892..658af2d 100644
--- a/jspwiki-210-adapters/src/test/resources/filters.xml
+++ b/jspwiki-210-adapters/src/test/resources/filters.xml
@@ -20,12 +20,12 @@
 
 <pagefilters>
 
-   <filter>
+   <!--<filter>
       <class>org.apache.wiki.filters.ProfanityFilter</class>
-   </filter>
-   
-   <!-- <filter>
-      <class>com.example.filters.TwoXFilter</class>
    </filter> -->
+   
+   <filter>
+      <class>com.example.filters.TwoXFilter</class>
+   </filter>
 
 </pagefilters>
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 d73ecf5..d0dfd38 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
@@ -1,17 +1,28 @@
 package com.example.filters;
 
 import org.apache.wiki.WikiContext;
+import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.exceptions.FilterException;
 import org.apache.wiki.api.filters.BasicPageFilter;
 
+import java.util.Properties;
+
 
 public class TwoXFilter extends BasicPageFilter {
 
-    /**
-     *  {@inheritDoc}
-     */
+    String newContent = "";
+
+    /** {@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...";
+    }
+
+    /** {@inheritDoc} */
     @Override
     public String postTranslate( final WikiContext wikiContext, final String htmlContent ) {
-        return "see how I care about yor content - hmmm...";
+        return newContent;
     }
 
 }
diff --git a/jspwiki-210-test-adaptees/src/test/java/com/example/filters/TwoXFilterTest.java b/jspwiki-210-test-adaptees/src/test/java/com/example/filters/TwoXFilterTest.java
index ca6cf3a..cb682c0 100644
--- a/jspwiki-210-test-adaptees/src/test/java/com/example/filters/TwoXFilterTest.java
+++ b/jspwiki-210-test-adaptees/src/test/java/com/example/filters/TwoXFilterTest.java
@@ -27,6 +27,7 @@
     @Test
     public void testFilter() throws Exception {
         final TwoXFilter txf = new TwoXFilter();
+        txf.initialize( null, null );
         Assertions.assertEquals("see how I care about yor content - hmmm...", txf.postTranslate( null, null ) );
     }
 
