diff --git a/router/java/src/net/i2p/router/transport/udp/ACKSender.java b/router/java/src/net/i2p/router/transport/udp/ACKSender.java
index b7cb7d6cbe6034a15451dd7c772e11ce0ad4b798..f2ca91fc85ba1b0558adcdd5ac6a938a7e60642a 100644
--- a/router/java/src/net/i2p/router/transport/udp/ACKSender.java
+++ b/router/java/src/net/i2p/router/transport/udp/ACKSender.java
@@ -84,7 +84,18 @@ class ACKSender implements Runnable {
     }
     
     public void run() {
+        try {
+            run2();
+        } finally {
+            // prevent OOM on thread death
+            if (_alive) {
+                _alive = false;
+                _log.error("ACK Sender died");
+            }
+        }
+    }
 
+    private void run2() {
         // we use a Set to strip out dups that come in on the Queue
         Set<PeerState> notYet = new HashSet<PeerState>();
         while (_alive) {