diff --git a/router/java/src/net/i2p/router/RouterContext.java b/router/java/src/net/i2p/router/RouterContext.java
index 517a5ba35883f68de8d4d765956d90ec7884a4e7..e3b5e384667b7dadbf30e028d715cccb7a98f054 100644
--- a/router/java/src/net/i2p/router/RouterContext.java
+++ b/router/java/src/net/i2p/router/RouterContext.java
@@ -16,9 +16,7 @@ import net.i2p.router.peermanager.IsFailingCalculator;
 import net.i2p.router.peermanager.PeerManagerFacadeImpl;
 import net.i2p.router.peermanager.ProfileManagerImpl;
 import net.i2p.router.peermanager.ProfileOrganizer;
-import net.i2p.router.peermanager.ReliabilityCalculator;
 import net.i2p.router.peermanager.SpeedCalculator;
-import net.i2p.router.peermanager.StrictSpeedCalculator;
 import net.i2p.router.transport.CommSystemFacadeImpl;
 import net.i2p.router.transport.FIFOBandwidthLimiter;
 import net.i2p.router.transport.OutboundMessageRegistry;
@@ -65,9 +63,7 @@ public class RouterContext extends I2PAppContext {
     private Calculator _isFailingCalc;
     private Calculator _integrationCalc;
     private Calculator _speedCalc;
-    private Calculator _reliabilityCalc;
     private Calculator _capacityCalc;
-    private Calculator _oldSpeedCalc;
 
 
     private static List _contexts = new ArrayList(1);
@@ -135,8 +131,6 @@ public class RouterContext extends I2PAppContext {
         _isFailingCalc = new IsFailingCalculator(this);
         _integrationCalc = new IntegrationCalculator(this);
         _speedCalc = new SpeedCalculator(this);
-        _oldSpeedCalc = new StrictSpeedCalculator(this);
-        _reliabilityCalc = new ReliabilityCalculator(this);
         _capacityCalc = new CapacityCalculator(this);
     }
     
@@ -270,9 +264,6 @@ public class RouterContext extends I2PAppContext {
     public Calculator integrationCalculator() { return _integrationCalc; }
     /** how do we rank the speed of profiles? */
     public Calculator speedCalculator() { return _speedCalc; } 
-    public Calculator oldSpeedCalculator() { return _oldSpeedCalc; }
-    /** how do we rank the reliability of profiles? */
-    public Calculator reliabilityCalculator() { return _reliabilityCalc; }
     /** how do we rank the capacity of profiles? */
     public Calculator capacityCalculator() { return _capacityCalc; }
     
@@ -301,7 +292,6 @@ public class RouterContext extends I2PAppContext {
         buf.append(_isFailingCalc).append('\n');
         buf.append(_integrationCalc).append('\n');
         buf.append(_speedCalc).append('\n');
-        buf.append(_reliabilityCalc).append('\n');
         return buf.toString();
     }
     
diff --git a/router/java/src/net/i2p/router/peermanager/IsFailingCalculator.java b/router/java/src/net/i2p/router/peermanager/IsFailingCalculator.java
deleted file mode 100644
index 1391bd8a1e5997283f7a810820f9663197fe8b64..0000000000000000000000000000000000000000
--- a/router/java/src/net/i2p/router/peermanager/IsFailingCalculator.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package net.i2p.router.peermanager;
-
-import net.i2p.router.RouterContext;
-import net.i2p.util.Log;
-
-/**
- * Simple boolean calculation to determine whether the given profile is "failing" -
- * meaning we shouldn't bother trying to get them to do something.  However, if we
- * have a specific need to contact them in particular - e.g. instructions in a garlic
- * or leaseSet - we will try.  The currently implemented algorithm determines that
- * a profile is failing if withing the last few minutes, they've done something bad: <ul>
- * <li>It has a comm error (TCP disconnect, etc) in the last minute or two</li>
- * <li>They've failed to respond to a db message in the last minute or two</li>
- * <li>They've rejected a tunnel in the last 5 minutes</li>
- * <li>They've been unreachable any time in the last 5 minutes</li>
- * </ul>
- *
- */
-public class IsFailingCalculator extends Calculator {
-    private Log _log;
-    private RouterContext _context;
-    
-    /** if they haven't b0rked in the last 2 minutes, they're ok */
-    private final static long GRACE_PERIOD = 2*60*1000;
-    
-    public IsFailingCalculator(RouterContext context) {
-        _context = context;
-        _log = context.logManager().getLog(IsFailingCalculator.class);
-    }
-    
-    public boolean calcBoolean(PeerProfile profile) {
-        // have we failed in the last 119 seconds?
-        /*
-        if ( (profile.getCommError().getRate(60*1000).getCurrentEventCount() > 0) ||
-             (profile.getCommError().getRate(60*1000).getLastEventCount() > 0) || 
-             (profile.getCommError().getRate(10*60*1000).getCurrentEventCount() > 0) ) {
-            if (_log.shouldLog(Log.DEBUG))
-                _log.debug("Peer " + profile.getPeer().toBase64() 
-                           + " is failing because it had a comm error recently ");
-            return true;
-        } else {
-        */  
-            //if ( (profile.getDBHistory().getFailedLookupRate().getRate(60*1000).getCurrentEventCount() > 0) ||
-            //     (profile.getDBHistory().getFailedLookupRate().getRate(60*1000).getLastEventCount() > 0) ) {
-            //    // are they overloaded (or disconnected)?
-            //    return true;
-            //}
-            
-            // this doesn't make sense with probabalistic rejections - we should be
-            // adequately dampening the capacity so these peers aren't queried
-            
-            //Rate rejectRate = profile.getTunnelHistory().getRejectionRate().getRate(10*60*1000);
-            //if (rejectRate.getCurrentEventCount() >= 2) {
-            //    if (_log.shouldLog(Log.DEBUG))
-            //        _log.debug("Peer " + profile.getPeer().toBase64() 
-            //                   + " is failing because they rejected some tunnels recently");
-            //    return true;
-            //}
-            
-            ////
-            // the right way to behave would be to use some statistical 
-            // analysis on the failure rate, and only mark the peer as failing
-            // if their rate exceeded the expected rate (mean, median, stddev, etc)
-            ////
-            
-            //Rate failedRate = profile.getTunnelHistory().getFailedRate().getRate(60*1000);
-            //if (failedRate.getCurrentEventCount() >= 2) {
-            //    if (_log.shouldLog(Log.DEBUG))
-            //        _log.debug("Peer " + profile.getPeer().toBase64() 
-            //                   + " is failing because too many of their tunnels failed recently");
-            //    return true;
-            //}
-            
-            // if they have rejected us saying they're totally broken anytime in the last 
-            // 10 minutes, dont bother 'em
-            if (profile.getTunnelHistory().getLastRejectedCritical() > _context.clock().now() - 10*60*1000)
-                return true;
-            
-            return false;
-        //}
-    }
-}
diff --git a/router/java/src/net/i2p/router/peermanager/PeerProfile.java b/router/java/src/net/i2p/router/peermanager/PeerProfile.java
index 4a94100bda53180a968a332f08e5c01495031432..5c058b4938d8d0563d8525d04e7bb63d3357100d 100644
--- a/router/java/src/net/i2p/router/peermanager/PeerProfile.java
+++ b/router/java/src/net/i2p/router/peermanager/PeerProfile.java
@@ -37,25 +37,19 @@ public class PeerProfile {
     private double _tunnelTestResponseTimeAvg;
     // periodic rates
     private RateStat _sendSuccessSize = null;
-    private RateStat _sendFailureSize = null;
     private RateStat _receiveSize = null;
     private RateStat _dbResponseTime = null;
     private RateStat _tunnelCreateResponseTime = null;
     private RateStat _tunnelTestResponseTime = null;
-    private RateStat _tunnelTestResponseTimeSlow = null;
-    private RateStat _commError = null;
     private RateStat _dbIntroduction = null;
     // calculation bonuses
     private long _speedBonus;
-    private long _reliabilityBonus;
     private long _capacityBonus;
     private long _integrationBonus;
     // calculation values
     private double _speedValue;
-    private double _reliabilityValue;
     private double _capacityValue;
     private double _integrationValue;
-    private double _oldSpeedValue;
     private boolean _isFailing;
     // good vs bad behavior
     private TunnelHistory _tunnelHistory;
@@ -72,7 +66,6 @@ public class PeerProfile {
         _log = context.logManager().getLog(PeerProfile.class);
         _expanded = false;
         _speedValue = 0;
-        _reliabilityValue = 0;
         _capacityValue = 0;
         _integrationValue = 0;
         _isFailing = false;
@@ -111,6 +104,11 @@ public class PeerProfile {
      * given period?)
      * Also mark active if it is connected, as this will tend to encourage use
      * of already-connected peers.
+     *
+     * Note: this appears to be the only use for these two RateStats.
+     *
+     * @param period must be one of the periods in the RateStat constructors below
+     *        (5*60*1000 or 60*60*1000)
      */
     public boolean getIsActive(long period) {
         if ( (getSendSuccessSize().getRate(period).getCurrentEventCount() > 0) ||
@@ -154,8 +152,6 @@ public class PeerProfile {
     
     /** how large successfully sent messages are, calculated over a 1 minute, 1 hour, and 1 day period */
     public RateStat getSendSuccessSize() { return _sendSuccessSize; }
-    /** how large messages that could not be sent were, calculated over a 1 minute, 1 hour, and 1 day period */
-    public RateStat getSendFailureSize() { return _sendFailureSize; }
     /** how large received messages are, calculated over a 1 minute, 1 hour, and 1 day period */
     public RateStat getReceiveSize() { return _receiveSize; }
     /** how long it takes to get a db response from the peer (in milliseconds), calculated over a 1 minute, 1 hour, and 1 day period */
@@ -164,10 +160,6 @@ public class PeerProfile {
     public RateStat getTunnelCreateResponseTime() { return _tunnelCreateResponseTime; }
     /** how long it takes to successfully test a tunnel this peer participates in (in milliseconds), calculated over a 10 minute, 1 hour, and 1 day period */
     public RateStat getTunnelTestResponseTime() { return _tunnelTestResponseTime; }
-    /** how long it takes to successfully test the peer (in milliseconds) when the time exceeds 5s */
-    public RateStat getTunnelTestResponseTimeSlow() { return _tunnelTestResponseTimeSlow; }
-    /** how long between communication errors with the peer (disconnection, etc), calculated over a 1 minute, 1 hour, and 1 day period */
-    public RateStat getCommError() { return _commError; }
     /** how many new peers we get from dbSearchReplyMessages or dbStore messages, calculated over a 1 hour, 1 day, and 1 week period */
     public RateStat getDbIntroduction() { return _dbIntroduction; }
     
@@ -179,14 +171,6 @@ public class PeerProfile {
     public long getSpeedBonus() { return _speedBonus; }
     public void setSpeedBonus(long bonus) { _speedBonus = bonus; }
     
-    /**
-     * extra factor added to the reliability ranking - this can be updated in the profile
-     * written to disk to affect how the algorithm ranks reliability.  Negative values are
-     * penalties
-     */
-    public long getReliabilityBonus() { return _reliabilityBonus; }
-    public void setReliabilityBonus(long bonus) { _reliabilityBonus = bonus; }
-    
     /**
      * extra factor added to the capacity ranking - this can be updated in the profile
      * written to disk to affect how the algorithm ranks capacity.  Negative values are
@@ -210,14 +194,6 @@ public class PeerProfile {
      *
      */
     public double getSpeedValue() { return _speedValue; }
-    public double getOldSpeedValue() { return _oldSpeedValue; }
-    /**
-     * How likely are they to stay up and pass on messages over the next few minutes.
-     * Positive numbers means more likely, negative numbers means its probably not
-     * even worth trying.
-     *
-     */
-    public double getReliabilityValue() { return _reliabilityValue; }
     /**
      * How many tunnels do we think this peer can handle over the next hour? 
      *
@@ -354,13 +330,10 @@ public class PeerProfile {
      */
     public void shrinkProfile() {
         _sendSuccessSize = null;
-        _sendFailureSize = null;
         _receiveSize = null;
         _dbResponseTime = null;
         _tunnelCreateResponseTime = null;
         _tunnelTestResponseTime = null;
-        _tunnelTestResponseTimeSlow = null;
-        _commError = null;
         _dbIntroduction = null;
         _tunnelHistory = null;
         _dbHistory = null;
@@ -378,21 +351,15 @@ public class PeerProfile {
     public void expandProfile() {
         String group = (null == _peer ? "profileUnknown" : _peer.toBase64().substring(0,6));
         if (_sendSuccessSize == null)
-            _sendSuccessSize = new RateStat("sendSuccessSize", "How large successfully sent messages are", group, new long[] { 60*1000l, 5*60*1000l, 60*60*1000l, 24*60*60*1000l });
-        if (_sendFailureSize == null)
-            _sendFailureSize = new RateStat("sendFailureSize", "How large messages that could not be sent were", group, new long[] { 60*1000l, 60*60*1000l, 24*60*60*1000 } );
+            _sendSuccessSize = new RateStat("sendSuccessSize", "How large successfully sent messages are", group, new long[] { 5*60*1000l, 60*60*1000l });
         if (_receiveSize == null)
-            _receiveSize = new RateStat("receiveSize", "How large received messages are", group, new long[] { 60*1000l, 5*60*1000l, 60*60*1000l, 24*60*60*1000 } );
+            _receiveSize = new RateStat("receiveSize", "How large received messages are", group, new long[] { 5*60*1000l, 60*60*1000l } );
         if (_dbResponseTime == null)
             _dbResponseTime = new RateStat("dbResponseTime", "how long it takes to get a db response from the peer (in milliseconds)", group, new long[] { 10*60*1000l, 60*60*1000l, 24*60*60*1000 } );
         if (_tunnelCreateResponseTime == null)
             _tunnelCreateResponseTime = new RateStat("tunnelCreateResponseTime", "how long it takes to get a tunnel create response from the peer (in milliseconds)", group, new long[] { 10*60*1000l, 30*60*1000l, 60*60*1000l, 24*60*60*1000 } );
         if (_tunnelTestResponseTime == null)
             _tunnelTestResponseTime = new RateStat("tunnelTestResponseTime", "how long it takes to successfully test a tunnel this peer participates in (in milliseconds)", group, new long[] { 10*60*1000l, 30*60*1000l, 60*60*1000l, 3*60*60*1000l, 24*60*60*1000 } );
-        if (_tunnelTestResponseTimeSlow == null)
-            _tunnelTestResponseTimeSlow = new RateStat("tunnelTestResponseTimeSlow", "how long it takes to successfully test a peer when the time exceeds 5s", group, new long[] { 10*60*1000l, 30*60*1000l, 60*60*1000l, 3*60*60*1000l, 24*60*60*1000l, });
-        if (_commError == null)
-            _commError = new RateStat("commErrorRate", "how long between communication errors with the peer (e.g. disconnection)", group, new long[] { 60*1000l, 10*60*1000l, 60*60*1000l, 24*60*60*1000 } );
         if (_dbIntroduction == null)
             _dbIntroduction = new RateStat("dbIntroduction", "how many new peers we get from dbSearchReplyMessages or dbStore messages", group, new long[] { 60*60*1000l, 6*60*60*1000l, 24*60*60*1000l });
 
@@ -402,18 +369,17 @@ public class PeerProfile {
             _dbHistory = new DBHistory(_context, group);
 
         _sendSuccessSize.setStatLog(_context.statManager().getStatLog());
-        _sendFailureSize.setStatLog(_context.statManager().getStatLog());
         _receiveSize.setStatLog(_context.statManager().getStatLog());
         _dbResponseTime.setStatLog(_context.statManager().getStatLog());
         _tunnelCreateResponseTime.setStatLog(_context.statManager().getStatLog());
         _tunnelTestResponseTime.setStatLog(_context.statManager().getStatLog());
-        _tunnelTestResponseTimeSlow.setStatLog(_context.statManager().getStatLog());
-        _commError.setStatLog(_context.statManager().getStatLog());
         _dbIntroduction.setStatLog(_context.statManager().getStatLog());
         _expanded = true;
     }
     /** once a day, on average, cut the measured throughtput values in half */
-    private static final long DROP_PERIOD_MINUTES = 24*60;
+    /** let's try once an hour times 3/4 */
+    private static final int DROP_PERIOD_MINUTES = 60;
+    private static final double DEGRADE_FACTOR = 0.75;
     private long _lastCoalesceDate = System.currentTimeMillis();
     private void coalesceThroughput() {
         long now = System.currentTimeMillis();
@@ -430,46 +396,19 @@ public class PeerProfile {
                         break;
                     }
                 }
-                
-                if (false && _log.shouldLog(Log.WARN) ) {
-                    StringBuffer buf = new StringBuffer(128);
-                    buf.append("Updating throughput after ").append(tot).append(" to ");
-                    for (int i = 0; i < THROUGHPUT_COUNT; i++)
-                        buf.append(_peakThroughput[i]).append(',');
-                    buf.append(" for ").append(_peer.toBase64());
-                    _log.warn(buf.toString());
-                }
             } else {
-                if (_context.random().nextLong(DROP_PERIOD_MINUTES*2) <= 0) {
-                    for (int i = 0; i < THROUGHPUT_COUNT; i++) 
-                        _peakThroughput[i] /= 2;
-
-                    if (false && _log.shouldLog(Log.WARN) ) {
-                        StringBuffer buf = new StringBuffer(128);
-                        buf.append("Degrading the throughput measurements to ");
-                        for (int i = 0; i < THROUGHPUT_COUNT; i++)
-                            buf.append(_peakThroughput[i]).append(',');
-                        buf.append(" for ").append(_peer.toBase64());
-                        _log.warn(buf.toString());
-                    }
+                if (_context.random().nextInt(DROP_PERIOD_MINUTES*2) <= 0) {
+                    for (int i = 0; i < THROUGHPUT_COUNT; i++)
+                        _peakThroughput[i] *= DEGRADE_FACTOR;
                 }
             }
             
             // we degrade the tunnel throughput here too, regardless of the current
             // activity
-            if (_context.random().nextLong(DROP_PERIOD_MINUTES*2) <= 0) {
+            if (_context.random().nextInt(DROP_PERIOD_MINUTES*2) <= 0) {
                 for (int i = 0; i < THROUGHPUT_COUNT; i++) {
-                    _peakTunnelThroughput[i] /= 2;
-                    _peakTunnel1mThroughput[i] /= 2;
-                }
-
-                if (_log.shouldLog(Log.WARN) ) {
-                    StringBuffer buf = new StringBuffer(128);
-                    buf.append("Degrading the tunnel throughput measurements to ");
-                    for (int i = 0; i < THROUGHPUT_COUNT; i++)
-                        buf.append(_peakTunnel1mThroughput[i]).append(',');
-                    buf.append(" for ").append(_peer.toBase64());
-                    _log.warn(buf.toString());
+                    _peakTunnelThroughput[i] *= DEGRADE_FACTOR;
+                    _peakTunnel1mThroughput[i] *= DEGRADE_FACTOR;
                 }
             }
             _peakThroughputCurrentTotal = 0;
@@ -480,34 +419,27 @@ public class PeerProfile {
     /** update the stats and rates (this should be called once a minute) */
     public void coalesceStats() {
         if (!_expanded) return;
-        _commError.coalesceStats();
         _dbIntroduction.coalesceStats();
         _dbResponseTime.coalesceStats();
         _receiveSize.coalesceStats();
-        _sendFailureSize.coalesceStats();
         _sendSuccessSize.coalesceStats();
         _tunnelCreateResponseTime.coalesceStats();
         _tunnelTestResponseTime.coalesceStats();
-        _tunnelTestResponseTimeSlow.coalesceStats();
         _dbHistory.coalesceStats();
         _tunnelHistory.coalesceStats();
         
         coalesceThroughput();
         
         _speedValue = calculateSpeed();
-        _oldSpeedValue = calculateOldSpeed();
-        _reliabilityValue = calculateReliability();
         _capacityValue = calculateCapacity();
         _integrationValue = calculateIntegration();
         _isFailing = calculateIsFailing();
         
         if (_log.shouldLog(Log.DEBUG))
-            _log.debug("Coalesced: speed [" + _speedValue + "] reliability [" + _reliabilityValue + "] capacity [" + _capacityValue + "] integration [" + _integrationValue + "] failing? [" + _isFailing + "]");
+            _log.debug("Coalesced: speed [" + _speedValue + "] capacity [" + _capacityValue + "] integration [" + _integrationValue + "] failing? [" + _isFailing + "]");
     }
     
     private double calculateSpeed() { return _context.speedCalculator().calc(this); }
-    private double calculateOldSpeed() { return _context.oldSpeedCalculator().calc(this); }
-    private double calculateReliability() { return _context.reliabilityCalculator().calc(this); }
     private double calculateCapacity() { return _context.capacityCalculator().calc(this); }
     private double calculateIntegration() { return _context.integrationCalculator().calc(this); }
     private boolean calculateIsFailing() { return _context.isFailingCalculator().calcBoolean(this); }
@@ -584,7 +516,6 @@ public class PeerProfile {
             //profile.coalesceStats();
             buf.append("Peer " + profile.getPeer().toBase64() 
                        + ":\t Speed:\t" + fmt.format(profile.calculateSpeed())
-                       + " Reliability:\t" + fmt.format(profile.calculateReliability())
                        + " Capacity:\t" + fmt.format(profile.calculateCapacity())
                        + " Integration:\t" + fmt.format(profile.calculateIntegration())
                        + " Active?\t" + profile.getIsActive() 
diff --git a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java
index 9e789f9c6ebd1053bae7926f461585be946f5be4..df7691bd16a44d45482a4e51f217bdd7c95098c8 100644
--- a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java
+++ b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java
@@ -50,7 +50,6 @@ public class ProfileManagerImpl implements ProfileManager {
         PeerProfile data = getProfile(peer);
         if (data == null) return;
         data.setLastSendFailed(_context.clock().now());
-        data.getSendFailureSize().addData(0, 0); // yeah, should be a frequency...
     }
     
     /**
@@ -61,7 +60,6 @@ public class ProfileManagerImpl implements ProfileManager {
         PeerProfile data = getProfile(peer);
         if (data == null) return;
         data.setLastSendFailed(_context.clock().now());
-        data.getSendFailureSize().addData(0, 0); // yeah, should be a frequency...
     }
     
     /**
@@ -74,8 +72,6 @@ public class ProfileManagerImpl implements ProfileManager {
         PeerProfile data = getProfile(peer);
         if (data == null) return;
         data.setLastSendFailed(_context.clock().now());
-        data.getSendFailureSize().addData(1, 0); // yeah, should be a frequency...
-        data.getCommError().addData(1, 0); // see above
     }
     
     /**
@@ -125,8 +121,6 @@ public class ProfileManagerImpl implements ProfileManager {
         if (data == null) return;
         data.updateTunnelTestTimeAverage(responseTimeMs);
         data.getTunnelTestResponseTime().addData(responseTimeMs, responseTimeMs);
-        if (responseTimeMs > getSlowThreshold())
-            data.getTunnelTestResponseTimeSlow().addData(responseTimeMs, responseTimeMs);
     }
     
     public void tunnelDataPushed(Hash peer, long rtt, int size) {
diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java
index b090d6cc781bf21bd3637f2b809754d0aa3f6ced..1a42a244c6c1a459c19fbda3cdff133ec430ce01 100644
--- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java
+++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java
@@ -1028,7 +1028,7 @@ public class ProfileOrganizer {
     
     /**
      * called after locking the reorganizeLock, place the profile in the appropriate tier.
-     * This is where we implement the (betterThanAverage ? goToPierX : goToPierY) algorithms
+     * This is where we implement the (betterThanAverage ? goToTierX : goToTierY) algorithms
      *
      */
     private void locked_placeProfile(PeerProfile profile) {
@@ -1153,7 +1153,6 @@ public class ProfileOrganizer {
                                      organizer.isHighCapacity(peer) ? "IR  " :
                                      organizer.isFailing(peer) ? "IX  " : "I   ") + "]: "
                            + "\t Speed:\t" + fmt.format(profile.getSpeedValue())
-                           + " Reliability:\t" + fmt.format(profile.getReliabilityValue())
                            + " Capacity:\t" + fmt.format(profile.getCapacityValue())
                            + " Integration:\t" + fmt.format(profile.getIntegrationValue())
                            + " Active?\t" + profile.getIsActive() 
@@ -1164,7 +1163,6 @@ public class ProfileOrganizer {
                                      organizer.isHighCapacity(peer) ? "R   " :
                                      organizer.isFailing(peer) ? "X   " : "    ") + "]: "
                            + "\t Speed:\t" + fmt.format(profile.getSpeedValue())
-                           + " Reliability:\t" + fmt.format(profile.getReliabilityValue())
                            + " Capacity:\t" + fmt.format(profile.getCapacityValue())
                            + " Integration:\t" + fmt.format(profile.getIntegrationValue())
                            + " Active?\t" + profile.getIsActive() 
diff --git a/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java b/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java
index fd88c406bbc70cd9e641cfc480f4ff70ea7e03a6..4f5d23611622b5213b2cfc2442308b0f99ea449d 100644
--- a/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java
+++ b/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java
@@ -95,7 +95,6 @@ class ProfilePersistenceHelper {
         if (_us != null)
             buf.append("# as calculated by ").append(_us.toBase64()).append(NL);
         buf.append("#").append(NL);
-        buf.append("# reliability: ").append(profile.getReliabilityValue()).append(NL);
         buf.append("# capacity: ").append(profile.getCapacityValue()).append(NL);
         buf.append("# integration: ").append(profile.getIntegrationValue()).append(NL);
         buf.append("# speedValue: ").append(profile.getSpeedValue()).append(NL);
@@ -134,15 +133,12 @@ class ProfilePersistenceHelper {
         
         if (profile.getIsExpanded()) {
             // only write out expanded data if, uh, we've got it
-            profile.getCommError().store(out, "commError");
             profile.getDbIntroduction().store(out, "dbIntroduction");
             profile.getDbResponseTime().store(out, "dbResponseTime");
             profile.getReceiveSize().store(out, "receiveSize");
-            profile.getSendFailureSize().store(out, "sendFailureSize");
             profile.getSendSuccessSize().store(out, "sendSuccessSize");
             profile.getTunnelCreateResponseTime().store(out, "tunnelCreateResponseTime");
             profile.getTunnelTestResponseTime().store(out, "tunnelTestResponseTime");
-            profile.getTunnelTestResponseTimeSlow().store(out, "tunnelTestResponseTimeSlow");
         }
     }
     
@@ -217,15 +213,12 @@ class ProfilePersistenceHelper {
             profile.getTunnelHistory().load(props);
             profile.getDBHistory().load(props);
             
-            profile.getCommError().load(props, "commError", true);
             profile.getDbIntroduction().load(props, "dbIntroduction", true);
             profile.getDbResponseTime().load(props, "dbResponseTime", true);
             profile.getReceiveSize().load(props, "receiveSize", true);
-            profile.getSendFailureSize().load(props, "sendFailureSize", true);
             profile.getSendSuccessSize().load(props, "sendSuccessSize", true);
             profile.getTunnelCreateResponseTime().load(props, "tunnelCreateResponseTime", true);
             profile.getTunnelTestResponseTime().load(props, "tunnelTestResponseTime", true);
-            profile.getTunnelTestResponseTimeSlow().load(props, "tunnelTestResponseTimeSlow", true);
             
             if (_log.shouldLog(Log.DEBUG))
                 _log.debug("Loaded the profile for " + peer.toBase64() + " from " + file.getName());
diff --git a/router/java/src/net/i2p/router/peermanager/ReliabilityCalculator.java b/router/java/src/net/i2p/router/peermanager/ReliabilityCalculator.java
deleted file mode 100644
index 674b2fd9159c7ff4eb19964fd271876501ba63e1..0000000000000000000000000000000000000000
--- a/router/java/src/net/i2p/router/peermanager/ReliabilityCalculator.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package net.i2p.router.peermanager;
-
-import net.i2p.router.RouterContext;
-import net.i2p.stat.RateStat;
-import net.i2p.util.Log;
-
-/**
- * Determine how reliable the peer is - how likely they'll be able to respond or
- * otherwise carry out whatever we ask them to (or even merely be reachable)
- *
- */
-public class ReliabilityCalculator extends Calculator {
-    private Log _log;
-    private RouterContext _context;
-    
-    public ReliabilityCalculator(RouterContext context) {
-        _context = context;
-        _log = context.logManager().getLog(ReliabilityCalculator.class);
-    }
-    
-    public double calc(PeerProfile profile) {
-        // if we've never succeeded (even if we've never tried), the reliability is zip
-        if (profile.getSendSuccessSize().getRate(60*60*1000).getLifetimeEventCount() < 0)
-            return profile.getReliabilityBonus();
-        
-        long val = 0;
-        val += profile.getSendSuccessSize().getRate(60*1000).getCurrentEventCount() * 20;
-        val += profile.getSendSuccessSize().getRate(60*1000).getLastEventCount() * 10;
-        val += profile.getSendSuccessSize().getRate(60*60*1000).getLastEventCount() * 1;
-        val += profile.getSendSuccessSize().getRate(60*60*1000).getCurrentEventCount() * 5;
-        
-        val += profile.getTunnelCreateResponseTime().getRate(10*60*1000).getLastEventCount() * 5;
-        val += profile.getTunnelCreateResponseTime().getRate(60*60*1000).getCurrentEventCount();
-        val += profile.getTunnelCreateResponseTime().getRate(60*60*1000).getLastEventCount();
-        
-        //val -= profile.getSendFailureSize().getRate(60*1000).getLastEventCount() * 5;
-        //val -= profile.getSendFailureSize().getRate(60*60*1000).getCurrentEventCount()*2;
-        //val -= profile.getSendFailureSize().getRate(60*60*1000).getLastEventCount()*2;
-        
-        RateStat rejRate = profile.getTunnelHistory().getRejectionRate();
-        if (rejRate.getRate(60*1000).getCurrentEventCount() > 0)
-            val -= 200;
-        if (rejRate.getRate(60*1000).getLastEventCount() > 0)
-            val -= 100;
-        if (rejRate.getRate(10*60*1000).getCurrentEventCount() > 0)
-            val -= 10;
-        if (rejRate.getRate(10*60*1000).getCurrentEventCount() > 0)
-            val -= 5;
-        
-        // penalize them heavily for dropping netDb requests (though these could have
-        // failed due to tunnel timeouts, so don't be too mean)
-        if (profile.getDBHistory().getFailedLookupRate().getRate(60*1000).getCurrentEventCount() > 0)
-            val -= 10;
-        if (profile.getDBHistory().getFailedLookupRate().getRate(60*1000).getLastEventCount() > 0)
-            val -= 5;
-        
-        // scream and shout on network errors
-        if (profile.getCommError().getRate(60*1000).getCurrentEventCount() > 0)
-            val -= 200;
-        if (profile.getCommError().getRate(60*1000).getLastEventCount() > 0)
-            val -= 200;
-        
-        if (profile.getCommError().getRate(60*60*1000).getCurrentEventCount() > 0)
-            val -= 10;
-        if (profile.getCommError().getRate(60*60*1000).getLastEventCount() > 0)
-            val -= 10;
-        
-        val -= profile.getCommError().getRate(24*60*60*1000).getCurrentEventCount() * 1;
-        
-        //long now = _context.clock().now();
-        
-        long timeSinceRejection = 61*60*1000; // now - profile.getTunnelHistory().getLastRejected();
-        if (timeSinceRejection > 60*60*1000) {
-            // noop.  rejection was over 60 minutes ago
-        } else if (timeSinceRejection > 10*60*1000) {
-            val -= 10; // 10-60 minutes ago we got a rejection
-        } else if (timeSinceRejection > 60*1000) {
-            val -= 50; // 1-10 minutes ago we got a rejection
-        } else {
-            val -= 100; // we got a rejection within the last minute
-        }
-        
-        //if ( (profile.getLastSendSuccessful() > 0) && (now - 24*60*60*1000 > profile.getLastSendSuccessful()) ) {
-        //    // we know they're real, but we havent sent them a message successfully in over a day.
-        //    val -= 1000;
-        //}
-        
-        val += profile.getReliabilityBonus();
-        return val;
-    }
-}
diff --git a/router/java/src/net/i2p/router/peermanager/StrictSpeedCalculator.java b/router/java/src/net/i2p/router/peermanager/StrictSpeedCalculator.java
deleted file mode 100644
index 99453b0abfb3ffcc59cacb8c6bf0e37038e77021..0000000000000000000000000000000000000000
--- a/router/java/src/net/i2p/router/peermanager/StrictSpeedCalculator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package net.i2p.router.peermanager;
-
-import net.i2p.router.RouterContext;
-import net.i2p.stat.Rate;
-import net.i2p.stat.RateStat;
-import net.i2p.util.Log;
-
-/**
- * Simple speed calculator that just counts how many messages go through the 
- * tunnel.
- *
- */
-public class StrictSpeedCalculator extends Calculator {
-    private Log _log;
-    private RouterContext _context;
-    
-    public StrictSpeedCalculator(RouterContext context) {
-        _context = context;
-        _log = context.logManager().getLog(StrictSpeedCalculator.class);
-    }
-    
-    public double calc(PeerProfile profile) {
-        return countSuccesses(profile);
-    }
-    private double countSuccesses(PeerProfile profile) {
-        RateStat success = profile.getTunnelHistory().getProcessSuccessRate();
-        RateStat failure = profile.getTunnelHistory().getProcessFailureRate();
-        return messagesPerMinute(success, failure);
-    }
-    private double messagesPerMinute(RateStat success, RateStat failure) {
-        double rv = 0.0d;
-        if (success != null) {
-            Rate rate = null;
-            long periods[] = success.getPeriods();
-            for (int i = 0; i < periods.length; i++) {
-                rate = success.getRate(periods[i]);
-                if ( (rate != null) && (rate.getCurrentTotalValue() > 0) )
-                    break;
-            }
-            
-            double value = rate.getCurrentTotalValue();
-            value += rate.getLastTotalValue();
-            rv = value * 10.0d * 60.0d * 1000.0d / (double)rate.getPeriod();
-            
-            // if any of the messages are getting fragmented and cannot be
-            // handled, penalize like crazy
-            Rate fail = failure.getRate(rate.getPeriod());
-            if (fail.getCurrentTotalValue() > 0)
-                rv /= fail.getCurrentTotalValue();
-        }
-        return rv;
-    }
-    
-    /*
-    public double calc(PeerProfile profile) {
-        double successCount = countSuccesses(profile);
-        double failureCount = countFailures(profile);
-        
-        double rv = successCount - 5*failureCount;
-        if (rv < 0)
-            rv = 0;
-        return rv;
-    }
-    private double countSuccesses(PeerProfile profile) {
-        RateStat success = profile.getTunnelHistory().getProcessSuccessRate();
-        return messagesPerMinute(success);
-    }
-    private double countFailures(PeerProfile profile) {
-        RateStat failure = profile.getTunnelHistory().getProcessFailureRate();
-        return messagesPerMinute(failure);
-    }
-    private double messagesPerMinute(RateStat stat) {
-        double rv = 0.0d;
-        if (stat != null) {
-            Rate rate = null;
-            long periods[] = stat.getPeriods();
-            for (int i = 0; i < periods.length; i++) {
-                rate = stat.getRate(periods[i]);
-                if ( (rate != null) && (rate.getCurrentTotalValue() > 0) )
-                    break;
-            }
-            
-            double value = rate.getCurrentTotalValue();
-            value += rate.getLastTotalValue();
-            rv = value * 60.0d * 1000.0d / (double)rate.getPeriod();
-        }
-        return rv;
-    }
-     */
-}
diff --git a/router/java/src/net/i2p/router/peermanager/TunnelHistory.java b/router/java/src/net/i2p/router/peermanager/TunnelHistory.java
index 2ea23099dda5086849ede087ef9342c820736d76..d43aff6cd4d234d093aa10d4bcbe4c75d0db4cf9 100644
--- a/router/java/src/net/i2p/router/peermanager/TunnelHistory.java
+++ b/router/java/src/net/i2p/router/peermanager/TunnelHistory.java
@@ -26,8 +26,6 @@ public class TunnelHistory {
     private volatile long _lastFailed;
     private RateStat _rejectRate;
     private RateStat _failRate;
-    private RateStat _processSuccessRate;
-    private RateStat _processFailureRate;
     private String _statGroup;
     
     /** probabalistic tunnel rejection due to a flood of requests */
@@ -47,14 +45,10 @@ public class TunnelHistory {
     }
     
     private void createRates(String statGroup) {
-        _rejectRate = new RateStat("tunnelHistory.rejectRate", "How often does this peer reject a tunnel request?", statGroup, new long[] { 60*1000l, 10*60*1000l, 30*60*1000l, 60*60*1000l, 24*60*60*1000l });
-        _failRate = new RateStat("tunnelHistory.failRate", "How often do tunnels this peer accepts fail?", statGroup, new long[] { 60*1000l, 10*60*1000l, 30*60*1000l, 60*60*1000l, 24*60*60*1000l });
-        _processSuccessRate = new RateStat("tunnelHistory.processSuccessRate", "How many messages does a tunnel process?", statGroup, new long[] { 5*60*1000l, 10*60*1000l, 30*60*1000l, 60*60*1000l, 24*60*60*1000l });
-        _processFailureRate = new RateStat("tunnelHistory.processfailureRate", "How many messages does a tunnel fail?", statGroup, new long[] { 5*60*1000l, 10*60*1000l, 30*60*1000l, 60*60*1000l, 24*60*60*1000l });
+        _rejectRate = new RateStat("tunnelHistory.rejectRate", "How often does this peer reject a tunnel request?", statGroup, new long[] { 10*60*1000l, 30*60*1000l, 60*60*1000l, 24*60*60*1000l });
+        _failRate = new RateStat("tunnelHistory.failRate", "How often do tunnels this peer accepts fail?", statGroup, new long[] { 10*60*1000l, 30*60*1000l, 60*60*1000l, 24*60*60*1000l });
         _rejectRate.setStatLog(_context.statManager().getStatLog());
         _failRate.setStatLog(_context.statManager().getStatLog());
-        _processSuccessRate.setStatLog(_context.statManager().getStatLog());
-        _processFailureRate.setStatLog(_context.statManager().getStatLog());
     }
     
     /** total tunnels the peer has agreed to participate in */
@@ -77,10 +71,7 @@ public class TunnelHistory {
     public long getLastFailed() { return _lastFailed; }
     
     public void incrementProcessed(int processedSuccessfully, int failedProcessing) { 
-        if (processedSuccessfully > 0)
-            _processSuccessRate.addData(processedSuccessfully, 0);
-        if (failedProcessing > 0)
-            _processFailureRate.addData(failedProcessing, 0);
+        // old strict speed calculator
     }
     
     public void incrementAgreedTo() {
@@ -129,16 +120,12 @@ public class TunnelHistory {
     
     public RateStat getRejectionRate() { return _rejectRate; }
     public RateStat getFailedRate() { return _failRate; }
-    public RateStat getProcessSuccessRate() { return _processSuccessRate; }
-    public RateStat getProcessFailureRate() { return _processFailureRate; }
     
     public void coalesceStats() {
         if (_log.shouldLog(Log.DEBUG))
             _log.debug("Coallescing stats");
         _rejectRate.coalesceStats();
         _failRate.coalesceStats();
-        _processFailureRate.coalesceStats();
-        _processSuccessRate.coalesceStats();
     }
     
     private final static String NL = System.getProperty("line.separator");
@@ -161,8 +148,6 @@ public class TunnelHistory {
         out.write(buf.toString().getBytes());
         _rejectRate.store(out, "tunnelHistory.rejectRate");
         _failRate.store(out, "tunnelHistory.failRate");
-        _processSuccessRate.store(out, "tunnelHistory.processSuccessRate");
-        _processFailureRate.store(out, "tunnelHistory.processFailureRate");
     }
     
     private void add(StringBuffer buf, String name, long val, String description) {
@@ -187,12 +172,6 @@ public class TunnelHistory {
             _failRate.load(props, "tunnelHistory.failRate", true);
             if (_log.shouldLog(Log.DEBUG))
                 _log.debug("Loading tunnelHistory.failRate");
-            _processFailureRate.load(props, "tunnelHistory.processFailureRate", true);
-            if (_log.shouldLog(Log.DEBUG))
-                _log.debug("Loading tunnelHistory.processFailureRate");
-            _processSuccessRate.load(props, "tunnelHistory.processSuccessRate", true);
-            if (_log.shouldLog(Log.DEBUG))
-                _log.debug("Loading tunnelHistory.processSuccessRate");
         } catch (IllegalArgumentException iae) {
             _log.warn("TunnelHistory rates are corrupt, resetting", iae);
             createRates(_statGroup);