diff --git a/pom.xml b/pom.xml
index c3c4dd8..d23c498 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling-bundle-parent</artifactId>
-        <version>41</version>
+        <version>43</version>
         <relativePath />
     </parent>
 
@@ -45,6 +45,7 @@
     <properties>
         <site.jira.version.id>12314287</site.jira.version.id>
         <site.javadoc.exclude>**.impl.**</site.javadoc.exclude>
+        <project.build.outputTimestamp>1</project.build.outputTimestamp>
     </properties>
 
     <build>
diff --git a/src/test/java/org/apache/sling/engine/impl/filter/AbstractFilterTest.java b/src/test/java/org/apache/sling/engine/impl/filter/AbstractFilterTest.java
index 2c7a7cd..4c280f3 100644
--- a/src/test/java/org/apache/sling/engine/impl/filter/AbstractFilterTest.java
+++ b/src/test/java/org/apache/sling/engine/impl/filter/AbstractFilterTest.java
@@ -18,30 +18,27 @@
  */
 package org.apache.sling.engine.impl.filter;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Dictionary;
+import java.util.Hashtable;
 
 import javax.servlet.Filter;
 
-import junit.framework.TestCase;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestPathInfo;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
 import org.jmock.integration.junit4.JUnit4Mockery;
-import org.junit.runner.RunWith;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceReference;
 
-@RunWith(JMock.class)
-public abstract class AbstractFilterTest extends TestCase {
+public abstract class AbstractFilterTest {
+
     protected final Mockery context = new JUnit4Mockery();
     protected ServiceReference<Filter> mockService(Object... map){
 
-        final Map props = new HashMap();
+        final Dictionary<String, Object> props = new Hashtable<>();
         for (int i = 0;  i < map.length; i += 2){
-            props.put(map[i], map[i + 1]);
+            props.put(map[i].toString(), map[i + 1]);
         }
 
         ServiceReference<Filter> ref = new ServiceReference<Filter>() {
@@ -74,6 +71,11 @@
             public int compareTo(Object reference) {
                 return 0;
             }
+
+            @Override
+            public Dictionary<String, Object> getProperties() {
+                return props;
+            }
         };
         return ref;
     }
diff --git a/src/test/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChainTest.java b/src/test/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChainTest.java
index 3d07c3a..ee9ec30 100644
--- a/src/test/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChainTest.java
+++ b/src/test/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChainTest.java
@@ -18,13 +18,9 @@
  */
 package org.apache.sling.engine.impl.filter;
 
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
-import org.apache.sling.engine.impl.SlingHttpServletRequestImpl;
-import org.apache.sling.engine.impl.SlingRequestProcessorImpl;
-import org.apache.sling.engine.impl.request.RequestData;
+import static org.junit.Assert.assertTrue;
 
-import org.junit.Test;
+import java.io.IOException;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -34,10 +30,16 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.engine.impl.SlingHttpServletRequestImpl;
+import org.apache.sling.engine.impl.SlingRequestProcessorImpl;
+import org.apache.sling.engine.impl.request.RequestData;
+import org.junit.Test;
 
 public class AbstractSlingFilterChainTest extends AbstractFilterTest {
-    
+
     @Test
     public void testDoubleCall() throws Exception {
         Filter badFilter = new Filter() {
diff --git a/src/test/java/org/apache/sling/engine/impl/filter/FilterHandleTest.java b/src/test/java/org/apache/sling/engine/impl/filter/FilterHandleTest.java
index 5d71da7..2b673f2 100644
--- a/src/test/java/org/apache/sling/engine/impl/filter/FilterHandleTest.java
+++ b/src/test/java/org/apache/sling/engine/impl/filter/FilterHandleTest.java
@@ -18,10 +18,11 @@
  */
 package org.apache.sling.engine.impl.filter;
 
-import org.junit.Test;
-
 import static org.apache.sling.engine.EngineConstants.SLING_FILTER_PATTERN;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
 
 public class FilterHandleTest extends AbstractFilterTest {
 
diff --git a/src/test/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelperTest.java b/src/test/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelperTest.java
index 1fd0517..b8092b5 100644
--- a/src/test/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelperTest.java
+++ b/src/test/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelperTest.java
@@ -21,18 +21,16 @@
 import javax.servlet.Filter;
 
 import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
 import org.jmock.integration.junit4.JUnit4Mockery;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 
 /**
  * Basic tests for the filter chain.
  */
-@RunWith(JMock.class)
 public class SlingFilterChainHelperTest {
 
     private final Mockery context = new JUnit4Mockery();
+
     @Test public void testOrdering() {
         final SlingFilterChainHelper chain = new SlingFilterChainHelper();
 
