diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
index 99ec4e59545e3aeb163967673d2e872015807ced..f8ad0f9079daa2f6d04e15bec11ec3cbc3bfab3b 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
@@ -386,7 +386,9 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
     public PeerState getPeerState(char capacity) {
         long now = _context.clock().now();
         int index = _context.random().nextInt(1024);
-        List peers = _peersByCapacity[capacity-'A'];
+        int cap = capacity - 'A';
+        if ( (cap < 0) || (cap >= _peersByCapacity.length) ) return null;
+        List peers = _peersByCapacity[cap];
         int size = 0;
         int off = 0;
         PeerState rv = null;
@@ -447,7 +449,10 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
                                 PeerState peer = getPeerState(from);
                                 for (int i = 0; i < capacities.length(); i++) {
                                     char capacity = capacities.charAt(i);
-                                    List peers = _peersByCapacity[capacity-'A'];
+                                    int cap = capacity - 'A';
+                                    if ( (cap < 0) || (cap >= _peersByCapacity.length) ) 
+                                        continue;
+                                    List peers = _peersByCapacity[cap];
                                     synchronized (peers) {
                                         if ( (peers.size() < MAX_PEERS_PER_CAPACITY) && (!peers.contains(peer)) )
                                             peers.add(peer);
@@ -605,7 +610,10 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             if (capacities != null) {
                 for (int i = 0; i < capacities.length(); i++) {
                     char capacity = capacities.charAt(i);
-                    List peers = _peersByCapacity[capacity-'A'];
+                    int cap = capacity - 'A';
+                    if ( (cap < 0) || (cap >= _peersByCapacity.length) ) 
+                        continue;
+                    List peers = _peersByCapacity[cap];
                     synchronized (peers) {
                         peers.remove(peer);
                     }