diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 711d3d792d95a5598b2ac75c0439fb0c6bb1758c..b0e9c6c1609ea1d4bc4bd8e356754f88f7b5950f 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -6,6 +6,8 @@ import java.io.PrintWriter;
 import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -3069,6 +3071,11 @@ public class I2PSnarkServlet extends BasicServlet {
                 announce = meta.getAnnounce();
                 if (announce == null)
                     announce = snark.getTrackerURL();
+                if (announce != null) {
+                    // strip non-i2p trackers
+                    if (!isI2PTracker(announce))
+                        announce = null;
+                }
                 if (announce != null) {
                     announce = DataHelper.stripHTML(announce);
                     buf.append("<tr><td>");
@@ -3078,21 +3085,29 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("</span></td></tr>");
                 }
                 List<List<String>> alist = meta.getAnnounceList();
+                List<String> annlist = new ArrayList<String>();
                 if (alist != null && !alist.isEmpty()) {
+                    // strip non-i2p trackers
+                    for (List<String> alist2 : alist) {
+                        for (String s : alist2) {
+                            if (isI2PTracker(s))
+                                annlist.add(s);
+                        }
+                    }
+                }
+                if (!annlist.isEmpty()) {
                     buf.append("<tr><td>");
                     toThemeImg(buf, "details");
                     buf.append("</td><td><b>")
                        .append(_t("Tracker List")).append("</b></td><td>");
-                    for (List<String> alist2 : alist) {
+                    boolean more = false;
+                    for (String s : annlist) {
                         buf.append("<span class=\"info_tracker\">");
-                        boolean more = false;
-                        for (String s : alist2) {
-                            if (more)
-                                buf.append(' ');
-                            else
-                                more = true;
-                            buf.append(getShortTrackerLink(DataHelper.stripHTML(s), snark.getInfoHash()));
-                        }
+                        if (more)
+                            buf.append(' ');
+                        else
+                            more = true;
+                        buf.append(getShortTrackerLink(DataHelper.stripHTML(s), snark.getInfoHash()));
                         buf.append("</span> ");
                     }
                     buf.append("</td></tr>\n");
@@ -3660,6 +3675,26 @@ public class I2PSnarkServlet extends BasicServlet {
         return buf.toString();
     }
 
+    /**
+     * Basic checks only, not as comprehensive as what TrackerClient does.
+     * Just to hide non-i2p trackers from the details page.
+     * @since 0.9.46
+     */
+    private static boolean isI2PTracker(String url) {
+        try {
+            URI uri = new URI(url);
+            String method = uri.getScheme();
+            if (!"http".equals(method) && !"https".equals(method))
+                return false;
+            String host = uri.getHost();
+            if (host == null || !host.endsWith(".i2p"))
+                return false;
+        } catch (URISyntaxException use) {
+            return false;
+        }
+        return true;
+    }
+
     /**
      * @param mime non-null
      * @since 0.9.44