diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java
index 9a8379111a5c54ea1fb9e9d839aa489c68deb2f2..3a2f859879ffc4bcc211ca8f0f4768aaab46ac8d 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java
@@ -1667,10 +1667,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
      */
     void routerDisconnected() {
         _log.error(getPrefix() + "Router disconnected - firing notification events");
-            for (Iterator<ConnectionEventListener> iter = listeners.iterator(); iter.hasNext();) {
-                ConnectionEventListener lsnr = iter.next();
+            for (ConnectionEventListener lsnr : listeners)
                 if (lsnr != null) lsnr.routerDisconnected();
-            }
     }
 
     /**
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java
index d246e61e16de16e86149c1d19c064127b6e72b40..5daa64935fc58ceb9438e4e5246178934f511fdd 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java
@@ -16,7 +16,6 @@ import java.net.Socket;
 import java.net.SocketException;
 import java.net.SocketTimeoutException;
 import java.security.GeneralSecurityException;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
@@ -320,8 +319,8 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
         synchronized (lock) {
             if (!forced && sockMgr.listSockets().size() != 0) {
                 l.log("There are still active connections!");
-                for (Iterator<I2PSocket> it = sockMgr.listSockets().iterator(); it.hasNext();) {
-                    l.log("->" + it.next());
+                for (I2PSocket skt : sockMgr.listSockets()) {
+                    l.log("->" + skt);
                 }
                 return false;
             }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
index 9850bd383376b935ce8462bedd08a01b600d2fe4..9ae98ce991c4bfea63e0605a5fd142d23bbd3137 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
@@ -3,7 +3,6 @@ package net.i2p.router.web;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
@@ -139,8 +138,7 @@ public class ConfigClientsHelper extends HelperBase {
         buf.append("<tr><th align=\"right\">" + _("WebApp") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n");
         Properties props = RouterConsoleRunner.webAppProperties(_context);
         Set<String> keys = new TreeSet(props.keySet());
-        for (Iterator<String> iter = keys.iterator(); iter.hasNext(); ) {
-            String name = iter.next();
+        for (String name : keys) {
             if (name.startsWith(RouterConsoleRunner.PREFIX) && name.endsWith(RouterConsoleRunner.ENABLED)) {
                 String app = name.substring(RouterConsoleRunner.PREFIX.length(), name.lastIndexOf(RouterConsoleRunner.ENABLED));
                 String val = props.getProperty(name);
@@ -165,8 +163,7 @@ public class ConfigClientsHelper extends HelperBase {
         buf.append("<tr><th align=\"right\">" + _("Plugin") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n");
         Properties props = PluginStarter.pluginProperties();
         Set<String> keys = new TreeSet(props.keySet());
-        for (Iterator<String> iter = keys.iterator(); iter.hasNext(); ) {
-            String name = iter.next();
+        for (String name : keys) {
             if (name.startsWith(PluginStarter.PREFIX) && name.endsWith(PluginStarter.ENABLED)) {
                 String app = name.substring(PluginStarter.PREFIX.length(), name.lastIndexOf(PluginStarter.ENABLED));
                 String val = props.getProperty(name);
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
index 19cd5ed591f9ebac31d93430f00ea24802dd1758..276acd342aaaf48053e045f377bfaaeb415e2807 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.io.Writer;
 import java.text.DecimalFormat;
 import java.util.Comparator;
-import java.util.Iterator;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -45,8 +44,7 @@ class ProfileOrganizerRenderer {
         Set<PeerProfile> order = new TreeSet<PeerProfile>(mode == 2 ? new HashComparator() : new ProfileComparator());
         int older = 0;
         int standard = 0;
-        for (Iterator<Hash> iter = peers.iterator(); iter.hasNext();) {
-            Hash peer = iter.next();
+        for (Hash peer : peers) {
             if (_organizer.getUs().equals(peer)) continue;
             PeerProfile prof = _organizer.getProfile(peer);
             if (mode == 2) {
@@ -94,8 +92,7 @@ class ProfileOrganizerRenderer {
                    buf.append("<th>&nbsp;</th>");
                    buf.append("</tr>");
         int prevTier = 1;
-        for (Iterator<PeerProfile> iter = order.iterator(); iter.hasNext();) {
-            PeerProfile prof = iter.next();
+        for (PeerProfile prof : order) {
             Hash peer = prof.getPeer();
             
             int tier = 0;
@@ -217,8 +214,7 @@ class ProfileOrganizerRenderer {
         buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>");
         buf.append("</tr>");
         RateAverages ra = RateAverages.getTemp();
-        for (Iterator<PeerProfile> iter = order.iterator(); iter.hasNext();) {
-            PeerProfile prof = iter.next();
+        for (PeerProfile prof : order) {
             Hash peer = prof.getPeer();
 
             buf.append("<tr><td align=\"center\" nowrap>");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
index ac032e4974d6d3bf41d612831effa24e5bfcd3ef..a548cbe5980d568ba0f0ff1fdac577b891dc5ffc 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
@@ -7,7 +7,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeSet;
@@ -417,8 +416,7 @@ public class SummaryHelper extends HelperBase {
             Collections.sort(clients, new AlphaComparator());
             buf.append("<table>");
             
-            for (Iterator<Destination> iter = clients.iterator(); iter.hasNext(); ) {
-                Destination client = iter.next();
+            for (Destination client : clients) {
                 String name = getName(client);
                 Hash h = client.calculateHash();
                 
diff --git a/apps/sam/java/src/net/i2p/sam/SAMBridge.java b/apps/sam/java/src/net/i2p/sam/SAMBridge.java
index 102c27fa09584d8e70e94dae17f1a252148703e9..580f5e88ed35c36236d357110dcfbd73bea34485 100644
--- a/apps/sam/java/src/net/i2p/sam/SAMBridge.java
+++ b/apps/sam/java/src/net/i2p/sam/SAMBridge.java
@@ -20,7 +20,6 @@ import java.nio.channels.SocketChannel;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
 
@@ -244,9 +243,9 @@ public class SAMBridge implements Runnable, ClientApp {
             FileOutputStream out = null;
             try {
                 out = new FileOutputStream(persistFilename);
-                for (Iterator<String> iter = nameToPrivKeys.keySet().iterator(); iter.hasNext(); ) {
-                    String name = iter.next();
-                    String privKeys = nameToPrivKeys.get(name);
+                for (Map.Entry<String, String> entry : nameToPrivKeys.entrySet()) {
+                    String name = entry.getKey();
+                    String privKeys = entry.getValue();
                     out.write(name.getBytes());
                     out.write('=');
                     out.write(privKeys.getBytes());
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java
index b0201a89c53cad6567c26739943b6e34cf619fd6..86e6d0e5e40126742390b4da50799980433b3b2a 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java
@@ -1,6 +1,5 @@
 package net.i2p.client.streaming;
 
-import java.util.Iterator;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 
@@ -94,10 +93,8 @@ class MessageHandler implements I2PSessionMuxedListener {
             _log.warn("I2PSession disconnected");
         _manager.disconnectAllHard();
         
-        for (Iterator<I2PSocketManager.DisconnectListener> iter = _listeners.iterator(); iter.hasNext(); ) {
-            I2PSocketManager.DisconnectListener lsnr = iter.next();
+        for (I2PSocketManager.DisconnectListener lsnr : _listeners)
             lsnr.sessionDisconnected();
-        }
         _listeners.clear();
     }
 
diff --git a/apps/susimail/src/src/i2p/susi/webmail/Mail.java b/apps/susimail/src/src/i2p/susi/webmail/Mail.java
index 56be408b5536168631338342a55b6caa1df50361..4cd3cf729f338ebe218d2707abae7f4ee538397d 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/Mail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/Mail.java
@@ -36,7 +36,6 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.Locale;
 
 /**
@@ -143,10 +142,10 @@ public class Mail {
 	}
 	public static void appendRecipients( StringBuilder buf, ArrayList<String> recipients, String prefix )
 	{
-		for( Iterator<String> it = recipients.iterator(); it.hasNext(); ) {
+		for( String recipient : recipients ) {
 			buf.append( prefix );
 			prefix ="\t";
-			buf.append( it.next() );
+			buf.append( recipient );
 			buf.append( "\r\n" );
 		}
 	}
diff --git a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java
index 8ebfdbf9030d98f902662004860778baab421eaf..bf415f6b5f7e17807773a033599a387edc348782 100644
--- a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java
+++ b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java
@@ -541,14 +541,10 @@ public class TransientSessionKeyManager extends SessionKeyManager {
         if (old != null) {
             // drop both old and tagSet tags
             synchronized (_inboundTagSets) {
-                for (Iterator<SessionTag> iter = old.getTags().iterator(); iter.hasNext(); ) {
-                    SessionTag tag = iter.next();
+                for (SessionTag tag : old.getTags())
                     _inboundTagSets.remove(tag);
-                }
-                for (Iterator<SessionTag> iter = sessionTags.iterator(); iter.hasNext(); ) {
-                    SessionTag tag = iter.next();
+                for (SessionTag tag : sessionTags)
                     _inboundTagSets.remove(tag);
-                }
             }
 
             if (_log.shouldLog(Log.WARN)) {
@@ -734,8 +730,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
             buf.append("<tr><td><b>Session key</b>: ").append(skey.toBase64()).append("</td>" +
                        "<td><b># Sets:</b> ").append(sets.size()).append("</td></tr>" +
                        "<tr><td colspan=\"2\"><ul>");
-            for (Iterator<TagSet> siter = sets.iterator(); siter.hasNext();) {
-                TagSet ts = siter.next();
+            for (TagSet ts : sets) {
                 int size = ts.getTags().size();
                 total += size;
                 buf.append("<li><b>ID: ").append(ts.getID());
@@ -1050,8 +1045,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
         public long getLastExpirationDate() {
             long last = 0;
             synchronized (_tagSets) {
-                for (Iterator<TagSet> iter = _tagSets.iterator(); iter.hasNext();) {
-                    TagSet set = iter.next();
+                for (TagSet set : _tagSets) {
                     if ( (set.getDate() > last) && (!set.getTags().isEmpty()) ) 
                         last = set.getDate();
                 }
diff --git a/core/java/src/net/i2p/stat/StatManager.java b/core/java/src/net/i2p/stat/StatManager.java
index d148bbe30481ee07916e503884814b5d2486e6d5..0331ac96c6448f9919ef9741c8e1ca604c87873a 100644
--- a/core/java/src/net/i2p/stat/StatManager.java
+++ b/core/java/src/net/i2p/stat/StatManager.java
@@ -2,7 +2,6 @@ package net.i2p.stat;
 
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.SortedSet;
@@ -63,10 +62,8 @@ public class StatManager {
     public StatLog getStatLog() { return _statLog; }
     public void setStatLog(StatLog log) { 
         _statLog = log; 
-            for (Iterator<RateStat> iter = _rateStats.values().iterator(); iter.hasNext(); ) {
-                RateStat rs = iter.next();
+            for (RateStat rs : _rateStats.values())
                 rs.setStatLog(log);
-            }
     }
 
     /**
@@ -168,8 +165,7 @@ public class StatManager {
                     }
                 }
         }
-            for (Iterator<RateStat> iter = _rateStats.values().iterator(); iter.hasNext();) {
-                RateStat stat = iter.next();
+            for (RateStat stat : _rateStats.values()) {
                 if (stat != null) {
                     stat.coalesceStats();
                 }
diff --git a/core/java/src/net/i2p/util/SimpleTimer.java b/core/java/src/net/i2p/util/SimpleTimer.java
index d4b537e584e9dba18c20369b467fb8c5061e4936..a5ad981f7be7202f5e4f68fb3bb9a15941e4cdfb 100644
--- a/core/java/src/net/i2p/util/SimpleTimer.java
+++ b/core/java/src/net/i2p/util/SimpleTimer.java
@@ -2,7 +2,6 @@ package net.i2p.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -155,8 +154,7 @@ public class SimpleTimer {
             
             if ( (_events.size() != _eventTimes.size()) ) {
                 _log.error("Skewed events: " + _events.size() + " for " + _eventTimes.size());
-                for (Iterator<TimedEvent> iter = _eventTimes.keySet().iterator(); iter.hasNext(); ) {
-                    TimedEvent evt = iter.next();
+                for (TimedEvent evt : _eventTimes.keySet()) {
                     Long when = _eventTimes.get(evt);
                     TimedEvent cur = _events.get(when);
                     if (cur != evt) {
diff --git a/core/java/test/junit/net/i2p/stat/SimpleStatDumper.java b/core/java/test/junit/net/i2p/stat/SimpleStatDumper.java
index fd47800f228fe1fb8ea00fc34a0e2557ba184540..889820477e37a16d6e569fee6bbcce777fcc3185 100644
--- a/core/java/test/junit/net/i2p/stat/SimpleStatDumper.java
+++ b/core/java/test/junit/net/i2p/stat/SimpleStatDumper.java
@@ -1,7 +1,6 @@
 package net.i2p.stat;
 
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -22,8 +21,7 @@ public class SimpleStatDumper {
 
     private static void dumpFrequencies(I2PAppContext ctx, StringBuilder buf) {
         Set<String> frequencies = new TreeSet<String>(ctx.statManager().getFrequencyNames());
-        for (Iterator<String> iter = frequencies.iterator(); iter.hasNext();) {
-            String name = iter.next();
+        for (String name : frequencies) {
             FrequencyStat freq = ctx.statManager().getFrequency(name);
             buf.append('\n');
             buf.append(freq.getGroupName()).append('.').append(freq.getName()).append(": ")
@@ -42,8 +40,7 @@ public class SimpleStatDumper {
 
     private static void dumpRates(I2PAppContext ctx, StringBuilder buf) {
         Set<String> rates = new TreeSet<String>(ctx.statManager().getRateNames());
-        for (Iterator<String> iter = rates.iterator(); iter.hasNext();) {
-            String name = iter.next();
+        for (String name : rates) {
             RateStat rate = ctx.statManager().getRate(name);
             buf.append('\n');
             buf.append(rate.getGroupName()).append('.').append(rate.getName()).append(": ")
diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java
index 66617507bb1b46f6799f145412fbf1e11e03715e..9e711016dacb8b0555104cb3e870bf4ab581c248 100644
--- a/router/java/src/net/i2p/router/Blocklist.java
+++ b/router/java/src/net/i2p/router/Blocklist.java
@@ -137,8 +137,7 @@ public class Blocklist {
                     return;
                 }
             }
-            for (Iterator<Hash> iter = _peerBlocklist.keySet().iterator(); iter.hasNext(); ) {
-                Hash peer = iter.next();
+            for (Hash peer : _peerBlocklist.keySet()) {
                 String reason;
                 String comment = _peerBlocklist.get(peer);
                 if (comment != null)
diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java
index 5ad45279568389151f0906458b900f4a04459014..4bab3bd061f71b743827c201c9d55a0e9c950899 100644
--- a/router/java/src/net/i2p/router/client/ClientManager.java
+++ b/router/java/src/net/i2p/router/client/ClientManager.java
@@ -12,7 +12,6 @@ import java.io.IOException;
 import java.io.Writer;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -125,21 +124,15 @@ class ClientManager {
             _listener.stopListening();
         Set<ClientConnectionRunner> runners = new HashSet<ClientConnectionRunner>();
         synchronized (_runners) {
-            for (Iterator<ClientConnectionRunner> iter = _runners.values().iterator(); iter.hasNext();) {
-                ClientConnectionRunner runner = iter.next();
+            for (ClientConnectionRunner runner : _runners.values())
                 runners.add(runner);
-            }
         }
         synchronized (_pendingRunners) {
-            for (Iterator<ClientConnectionRunner> iter = _pendingRunners.iterator(); iter.hasNext();) {
-                ClientConnectionRunner runner = iter.next();
+            for (ClientConnectionRunner runner : _pendingRunners)
                 runners.add(runner);
-            }
         }
-        for (Iterator<ClientConnectionRunner> iter = runners.iterator(); iter.hasNext(); ) {
-            ClientConnectionRunner runner = iter.next();
+        for (ClientConnectionRunner runner : runners)
             runner.disconnectClient(msg, Log.WARN);
-        }
         _runnersByHash.clear();
     }
     
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java
index c07f3de9be505e84a0cb4c307b1767f49ad8cdf3..9f730d72d3e661c70c770bf7f4c9c99733a86829 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java
@@ -3,7 +3,6 @@ package net.i2p.router.networkdb.kademlia;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 
 import net.i2p.data.Hash;
@@ -216,8 +215,8 @@ class FloodOnlySearchJob extends FloodSearchJob {
             _log.info(getJobId() + ": Floodfill search for " + _key + " failed with " + timeRemaining + " remaining after " + time);
         }
         synchronized(_unheardFrom) {
-            for (Iterator<Hash> iter = _unheardFrom.iterator(); iter.hasNext(); ) 
-                getContext().profileManager().dbLookupFailed(iter.next());
+            for (Hash h : _unheardFrom)
+                getContext().profileManager().dbLookupFailed(h);
         }
         _facade.complete(_key);
         getContext().statManager().addRateData("netDb.failedTime", time, 0);
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java
index 868f0d0b880a9d2818566fe055b42a3db3e75bcb..f6cc0b1d5ab74f7101d13b9412c7ab57e2e470a8 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java
@@ -383,8 +383,8 @@ class IterativeSearchJob extends FloodSearchJob {
         synchronized(this) {
             tries = _unheardFrom.size() + _failedPeers.size();
             // blame the unheard-from (others already blamed in failed() above)
-            for (Iterator<Hash> iter = _unheardFrom.iterator(); iter.hasNext(); ) 
-                getContext().profileManager().dbLookupFailed(iter.next());
+            for (Hash h : _unheardFrom)
+                getContext().profileManager().dbLookupFailed(h);
         }
         long time = System.currentTimeMillis() - _created;
         if (_log.shouldLog(Log.INFO)) {
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java
index 72f6315aef4f5d5856048505ca64003a23753fa4..e4647b23e4219dbc66ad81997caa8274b80273c9 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java
@@ -9,7 +9,6 @@ package net.i2p.router.networkdb.kademlia;
  */
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -157,8 +156,7 @@ class StoreJob extends JobImpl {
             //_state.addPending(closestHashes);
             if (_log.shouldLog(Log.INFO))
                 _log.info(getJobId() + ": Continue sending key " + _state.getTarget() + " after " + _state.getAttempted().size() + " tries to " + closestHashes);
-            for (Iterator<Hash> iter = closestHashes.iterator(); iter.hasNext(); ) {
-                Hash peer = iter.next();
+            for (Hash peer : closestHashes) {
                 DatabaseEntry ds = _facade.getDataStore().get(peer);
                 if ( (ds == null) || !(ds.getType() == DatabaseEntry.KEY_TYPE_ROUTERINFO) ) {
                     if (_log.shouldLog(Log.INFO))
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StoreState.java b/router/java/src/net/i2p/router/networkdb/kademlia/StoreState.java
index 2b14b80b2032e0819e44af4630da875cef000a9b..5473f891b185ecaaf5c6c7f78a681f409a4237ad 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/StoreState.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/StoreState.java
@@ -4,7 +4,6 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -124,8 +123,8 @@ class StoreState {
     public void addPending(Collection<Hash> pending) {
         synchronized (_pendingPeers) {
             _pendingPeers.addAll(pending);
-            for (Iterator<Hash> iter = pending.iterator(); iter.hasNext(); ) 
-                _pendingPeerTimes.put(iter.next(), Long.valueOf(_context.clock().now()));
+            for (Hash peer : pending) 
+                _pendingPeerTimes.put(peer, Long.valueOf(_context.clock().now()));
         }
         synchronized (_attemptedPeers) {
             _attemptedPeers.addAll(pending);
@@ -191,34 +190,26 @@ class StoreState {
         buf.append(" Attempted: ");
         synchronized (_attemptedPeers) {
             buf.append(_attemptedPeers.size()).append(' ');
-            for (Iterator<Hash> iter = _attemptedPeers.iterator(); iter.hasNext(); ) {
-                Hash peer = iter.next();
+            for (Hash peer : _attemptedPeers)
                 buf.append(peer.toBase64()).append(" ");
-            }
         }
         buf.append(" Pending: ");
         synchronized (_pendingPeers) {
             buf.append(_pendingPeers.size()).append(' ');
-            for (Iterator<Hash> iter = _pendingPeers.iterator(); iter.hasNext(); ) {
-                Hash peer = iter.next();
+            for (Hash peer : _pendingPeers)
                 buf.append(peer.toBase64()).append(" ");
-            }
         }
         buf.append(" Failed: ");
         synchronized (_failedPeers) { 
             buf.append(_failedPeers.size()).append(' ');
-            for (Iterator<Hash> iter = _failedPeers.iterator(); iter.hasNext(); ) {
-                Hash peer = iter.next();
+            for (Hash peer : _failedPeers)
                 buf.append(peer.toBase64()).append(" ");
-            }
         }
         buf.append(" Successful: ");
         synchronized (_successfulPeers) {
             buf.append(_successfulPeers.size()).append(' ');
-            for (Iterator<Hash> iter = _successfulPeers.iterator(); iter.hasNext(); ) {
-                Hash peer = iter.next();
+            for (Hash peer : _successfulPeers)
                 buf.append(peer.toBase64()).append(" ");
-            }
         }
 /****
         buf.append(" Successful Exploratory: ");
diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java
index 4d5a6548c1656cc9156ba77ca445c4616dc435c9..1edfbe45d1b326561c18edfdcd9dfc0b279c0d8f 100644
--- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java
+++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java
@@ -236,15 +236,13 @@ public class ProfileOrganizer {
        
         getReadLock();
         try {
-            for (Iterator<PeerProfile> iter = _failingPeers.values().iterator(); iter.hasNext(); ) {
-                PeerProfile profile = iter.next();
+            for (PeerProfile profile : _failingPeers.values()) {
                 if (profile.getLastSendSuccessful() >= hideBefore)
                     activePeers++;
                 else if (profile.getLastHeardFrom() >= hideBefore)
                     activePeers++;
             }
-            for (Iterator<PeerProfile> iter = _notFailingPeers.values().iterator(); iter.hasNext(); ) {
-                PeerProfile profile = iter.next();
+            for (PeerProfile profile : _notFailingPeers.values()) {
                 if (profile.getLastSendSuccessful() >= hideBefore)
                     activePeers++;
                 else if (profile.getLastHeardFrom() >= hideBefore)
@@ -539,8 +537,7 @@ public class ProfileOrganizer {
         if (matches.size() < howMany) {
             getReadLock();
             try {
-                for (Iterator<Hash> iter = _notFailingPeers.keySet().iterator(); iter.hasNext(); ) {
-                    Hash peer = iter.next();
+                for (Hash peer : _notFailingPeers.keySet()) {
                     if (!_context.commSystem().isEstablished(peer))
                         exclude.add(peer);
                 }
@@ -567,8 +564,7 @@ public class ProfileOrganizer {
             Map<Hash, PeerProfile> activePeers = new HashMap<Hash, PeerProfile>();
             getReadLock();
             try {
-                for (Iterator<Map.Entry<Hash, PeerProfile>> iter = _notFailingPeers.entrySet().iterator(); iter.hasNext(); ) {
-                    Map.Entry<Hash, PeerProfile> e = iter.next();
+                for (Map.Entry<Hash, PeerProfile> e : _notFailingPeers.entrySet()) {
                     if (_context.commSystem().isEstablished(e.getKey()))
                         activePeers.put(e.getKey(), e.getValue());
                 }
@@ -666,8 +662,7 @@ public class ProfileOrganizer {
             n = new ArrayList<Hash>(_notFailingPeers.keySet());
         } finally { releaseReadLock(); }
         List<Hash> l = new ArrayList<Hash>(count / 4);
-        for (Iterator<Hash> iter = n.iterator(); iter.hasNext(); ) {
-            Hash peer = iter.next();
+        for (Hash peer : n) {
             if (_context.commSystem().wasUnreachable(peer))
                 l.add(peer);
             else {
@@ -717,8 +712,7 @@ public class ProfileOrganizer {
             long cutoff = _context.clock().now() - (20*1000);
             int count = _notFailingPeers.size();
             List<Hash> l = new ArrayList<Hash>(count / 128);
-            for (Iterator<PeerProfile> iter = _notFailingPeers.values().iterator(); iter.hasNext(); ) {
-                PeerProfile prof = iter.next();
+            for (PeerProfile prof : _notFailingPeers.values()) {
                 if (prof.getTunnelHistory().getLastRejectedBandwidth() > cutoff)
                     l.add(prof.getPeer());
             }
@@ -779,8 +773,7 @@ public class ProfileOrganizer {
         if (shouldCoalesce) {
             getReadLock();
             try {
-                for (Iterator<PeerProfile> iter = _strictCapacityOrder.iterator(); iter.hasNext(); ) {
-                    PeerProfile prof = iter.next();
+                for (PeerProfile prof : _strictCapacityOrder) {
                     if ( (expireOlderThan > 0) && (prof.getLastSendSuccessful() <= expireOlderThan) ) {
                         continue;
                     }
@@ -887,8 +880,7 @@ public class ProfileOrganizer {
         if (numToPromote > 0) {
             if (_log.shouldLog(Log.INFO))
                 _log.info("Need to explicitly promote " + numToPromote + " peers to the fast group");
-            for (Iterator<PeerProfile> iter = _strictCapacityOrder.iterator(); iter.hasNext(); ) {
-                PeerProfile cur = iter.next();
+            for (PeerProfile cur : _strictCapacityOrder) {
                 if ( (!_fastPeers.containsKey(cur.getPeer())) && (!cur.getIsFailing()) ) {
                     if (!isSelectable(cur.getPeer())) {
                         // skip peers we dont have in the netDb
@@ -990,8 +982,7 @@ public class ProfileOrganizer {
         int needToUnfail = MIN_NOT_FAILING_ACTIVE - notFailingActive;
         if (needToUnfail > 0) {
             int unfailed = 0;
-            for (Iterator<PeerProfile> iter = _strictCapacityOrder.iterator(); iter.hasNext(); ) {
-                PeerProfile best = iter.next();
+            for (PeerProfile best : _strictCapacityOrder) {
                 if ( (best.getIsActive()) && (best.getIsFailing()) ) {
                     if (_log.shouldLog(Log.WARN))
                         _log.warn("All peers were failing, so we have overridden the failing flag for one of the most reliable active peers (" + best.getPeer().toBase64() + ")");
@@ -1022,9 +1013,7 @@ public class ProfileOrganizer {
         double totalCapacity = 0;
         double totalIntegration = 0;
         Set<PeerProfile> reordered = new TreeSet<PeerProfile>(_comp);
-        for (Iterator<PeerProfile> iter = allPeers.iterator(); iter.hasNext(); ) {
-            PeerProfile profile = iter.next();
-            
+        for (PeerProfile profile : allPeers) {
             if (_us.equals(profile.getPeer())) continue;
             
             // only take into account active peers that aren't failing
@@ -1072,8 +1061,7 @@ public class ProfileOrganizer {
         double thresholdAtMinHighCap = 0;
         double thresholdAtLowest = CapacityCalculator.GROWTH_FACTOR;
         int cur = 0;
-        for (Iterator<PeerProfile> iter = reordered.iterator(); iter.hasNext(); ) {
-            PeerProfile profile = iter.next();
+        for (PeerProfile profile : reordered) {
             double val = profile.getCapacityValue();
             if (val > meanCapacity)
                 numExceedingMean++;
@@ -1164,8 +1152,7 @@ public class ProfileOrganizer {
     private void locked_calculateSpeedThresholdMean(Set<PeerProfile> reordered) {
         double total = 0;
         int count = 0;
-        for (Iterator<PeerProfile> iter = reordered.iterator(); iter.hasNext(); ) {
-            PeerProfile profile = iter.next();
+        for (PeerProfile profile : reordered) {
             if (profile.getCapacityValue() >= _thresholdCapacityValue) {
                 // duplicates being clobbered is fine by us
                 total += profile.getSpeedValue();
@@ -1524,8 +1511,7 @@ public class ProfileOrganizer {
         DecimalFormat fmt = new DecimalFormat("0,000.0");
         fmt.setPositivePrefix("+");
         
-        for (Iterator<Hash> iter = organizer.selectAllPeers().iterator(); iter.hasNext(); ) {
-            Hash peer = iter.next();
+        for (Hash peer : organizer.selectAllPeers()) {
             PeerProfile profile = organizer.getProfile(peer);
             if (!profile.getIsActive()) {
                 System.out.println("Peer " + profile.getPeer().toBase64().substring(0,4) 
diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
index 88ad248d7a5b3b1dc8ceef18ec48f33ccabf39a5..c99535548707b135d3e8bca87cd7b38511aafb8d 100644
--- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
+++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
@@ -12,7 +12,6 @@ import java.io.IOException;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Vector;
@@ -233,8 +232,8 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
      */
     private class QueueAll implements SimpleTimer.TimedEvent {
         public void timeReached() {
-            for (Iterator<Hash> iter = _context.netDb().getAllRouters().iterator(); iter.hasNext(); ) {
-                RouterInfo ri = _context.netDb().lookupRouterInfoLocally(iter.next());
+            for (Hash h : _context.netDb().getAllRouters()) {
+                RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h);
                 if (ri == null)
                     continue;
                 byte[] ip = getIP(ri);
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 062e756861219e99a72ce27cdae83ca2129b1a96..63e9042dd348bf66d26e4559863b5fb53967931c 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
@@ -2114,8 +2114,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
     public int countActivePeers() {
         long now = _context.clock().now();
         int active = 0;
-        for (Iterator<PeerState> iter = _peersByIdent.values().iterator(); iter.hasNext(); ) {
-                PeerState peer = iter.next();
+        for (PeerState peer : _peersByIdent.values()) {
                 if (now-peer.getLastReceiveTime() <= 5*60*1000)
                     active++;
             }
@@ -2126,8 +2125,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
     public int countActiveSendPeers() {
         long now = _context.clock().now();
         int active = 0;
-        for (Iterator<PeerState> iter = _peersByIdent.values().iterator(); iter.hasNext(); ) {
-                PeerState peer = iter.next();
+        for (PeerState peer : _peersByIdent.values()) {
                 if (now-peer.getLastSendFullyTime() <= 1*60*1000)
                     active++;
             }