diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java
index 6a7d9b86c7c7028e2ea2702fd66c9100847109fa..ecbc9af6069417960f99a5559af2de12e5ba38aa 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java
@@ -228,7 +228,7 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
             File filterDefinition = new File(getTunnel().filterDefinition);
             I2PAppContext context = getTunnel().getContext();
             try {
-                filter = FilterFactory.createFilter(context, filterDefinition);
+                filter = FilterFactory.createFilter(context, filterDefinition, this);
             } catch (IOException | InvalidDefinitionException bad) {
                 throw new IllegalArgumentException("Can't create socket manager", bad);
             }
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java
index f44e81713bc4d2c6b068da1366a1990db6ec0cd4..72e1e3be78f5228d112e7ae21b1e6be27dde68db 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/AccessFilter.java
@@ -17,6 +17,7 @@ import net.i2p.I2PAppContext;
 import net.i2p.util.SimpleTimer2;
 import net.i2p.util.Log;
 import net.i2p.data.Destination;
+import net.i2p.i2ptunnel.I2PTunnelTask;
 import net.i2p.client.streaming.IncomingConnectionFilter;
 
 class AccessFilter implements IncomingConnectionFilter {
@@ -26,6 +27,7 @@ class AccessFilter implements IncomingConnectionFilter {
 
     private final FilterDefinition definition;
     private final I2PAppContext context;
+    private final I2PTunnelTask task;
 
     /**
      * Trackers for known destinations defined in access lists
@@ -36,9 +38,11 @@ class AccessFilter implements IncomingConnectionFilter {
      */
     private final Map<String, DestTracker> unknownDests = new HashMap<String, DestTracker>();
 
-    AccessFilter(I2PAppContext context, FilterDefinition definition) throws IOException {
+    AccessFilter(I2PAppContext context, FilterDefinition definition, I2PTunnelTask task) 
+            throws IOException {
         this.context = context;
         this.definition = definition;
+        this.task = task;
 
         reload();
 
@@ -139,6 +143,8 @@ class AccessFilter implements IncomingConnectionFilter {
             super(context.simpleTimer2(), PURGE_INTERVAL);
         }
         public void timeReached() {
+            if (!task.isOpen())
+                return;
             purge();
             schedule(PURGE_INTERVAL);
         }
@@ -149,6 +155,8 @@ class AccessFilter implements IncomingConnectionFilter {
             super(context.simpleTimer2(), SYNC_INTERVAL);
         }
         public void timeReached() {
+            if (!task.isOpen())
+                return;
             try {
                 record();
                 reload();
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/FilterFactory.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/FilterFactory.java
index 0571e96d05e1deef7db8382511b0f25bb95c8278..4333a529a9e0f52ef2cb1bf7b07256437f7013da 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/FilterFactory.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/access/FilterFactory.java
@@ -9,10 +9,13 @@ import java.util.List;
 import java.util.ArrayList;
 
 import net.i2p.I2PAppContext;
+import net.i2p.i2ptunnel.I2PTunnelTask;
 import net.i2p.client.streaming.IncomingConnectionFilter;
 
 public class FilterFactory {
-    public static IncomingConnectionFilter createFilter(I2PAppContext context, File definition) 
+    public static IncomingConnectionFilter createFilter(I2PAppContext context, 
+                                                        File definition,
+                                                        I2PTunnelTask task)
         throws IOException, InvalidDefinitionException {
         List<String> linesList = new ArrayList<String>();
 
@@ -33,6 +36,6 @@ public class FilterFactory {
         }
 
         FilterDefinition parsedDefinition = DefinitionParser.parse(linesList.toArray(new String[0]));
-        return new AccessFilter(context, parsedDefinition);
+        return new AccessFilter(context, parsedDefinition, task);
     }
 }