diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
index 02297e2e2f8d4617ace169db56a3bf0337ee7308..ad4ee8d0bb1ba9c3dc2ba67e1fc4d28242865fe0 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
@@ -288,6 +288,7 @@ public class PeerHelper extends HelperBase {
                    " </tr>\n");
         out.write(buf.toString());
         buf.setLength(0);
+        long now = _context.clock().now();
         for (NTCPConnection con : peers) {
             buf.append("<tr><td class=\"cells\" align=\"left\" nowrap>");
             buf.append(_context.commSystem().renderPeerHTML(con.getRemotePeer().calculateHash()));
@@ -306,10 +307,10 @@ public class PeerHelper extends HelperBase {
                 buf.append("");
             buf.append("</td><td class=\"cells peeripv6\" align=\"center\">").append(con.getVersion());
             buf.append("</td><td class=\"cells\" align=\"center\"><span class=\"right\">");
-            buf.append(DataHelper.formatDuration2(con.getTimeSinceReceive()));
-            buf.append("</span>").append(THINSP).append("<span class=\"left\">").append(DataHelper.formatDuration2(con.getTimeSinceSend()));
+            buf.append(DataHelper.formatDuration2(con.getTimeSinceReceive(now)));
+            buf.append("</span>").append(THINSP).append("<span class=\"left\">").append(DataHelper.formatDuration2(con.getTimeSinceSend(now)));
             buf.append("</span></td><td class=\"cells\" align=\"center\"><span class=\"right\">");
-            if (con.getTimeSinceReceive() < 2*60*1000) {
+            if (con.getTimeSinceReceive(now) < 2*60*1000) {
                 float r = con.getRecvRate();
                 buf.append(formatRate(r / 1000));
                 bpsRecv += r;
@@ -317,7 +318,7 @@ public class PeerHelper extends HelperBase {
                 buf.append(formatRate(0));
             }
             buf.append("</span>").append(THINSP).append("<span class=\"left\">");
-            if (con.getTimeSinceSend() < 2*60*1000) {
+            if (con.getTimeSinceSend(now) < 2*60*1000) {
                 float r = con.getSendRate();
                 buf.append(formatRate(r / 1000));
                 bpsSend += r;
diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
index e64011f0d68758150d7c231e22fd804e9d2f32a4..5c208cd380086f22ddd728214ba65af850acacda 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
@@ -262,7 +262,7 @@ class EventPumper implements Runnable {
                                  */
                                 if ((!key.isValid()) &&
                                     (!((SocketChannel)key.channel()).isConnectionPending()) &&
-                                    con.getTimeSinceCreated() > 2 * NTCPTransport.ESTABLISH_TIMEOUT) {
+                                    con.getTimeSinceCreated(now) > 2 * NTCPTransport.ESTABLISH_TIMEOUT) {
                                     if (_log.shouldLog(Log.INFO))
                                         _log.info("Removing invalid key for " + con);
                                     // this will cancel the key, and it will then be removed from the keyset
@@ -293,8 +293,8 @@ class EventPumper implements Runnable {
                                     expire = _expireIdleWriteTime;
                                 }
 
-                                if ( con.getTimeSinceSend() > expire &&
-                                     con.getTimeSinceReceive() > expire) {
+                                if ( con.getTimeSinceSend(now) > expire &&
+                                     con.getTimeSinceReceive(now) > expire) {
                                     // we haven't sent or received anything in a really long time, so lets just close 'er up
                                     con.sendTerminationAndClose();
                                     if (_log.shouldInfo())
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java
index 44eaa40c7430a80aad964b17afae4afb5cf8ca42..f34ad600887a440eea29231b1d42efa25a4a9a80 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java
@@ -416,16 +416,30 @@ public class NTCPConnection implements Closeable {
     /** @return milliseconds */
     public long getTimeSinceSend() { return _context.clock().now()-_lastSendTime; }
     
+    /**
+     * @return milliseconds
+     * @since 0.9.38
+     */
     public long getTimeSinceSend(long now) { return now - _lastSendTime; }
 
     /** @return milliseconds */
     public long getTimeSinceReceive() { return _context.clock().now()-_lastReceiveTime; }
     
+    /**
+     * @return milliseconds
+     * @since 0.9.38
+     */
     public long getTimeSinceReceive(long now) { return now - _lastReceiveTime; }
 
     /** @return milliseconds */
     public long getTimeSinceCreated() { return _context.clock().now()-_created; }
 
+    /**
+     * @return milliseconds
+     * @since 0.9.38
+     */
+    public long getTimeSinceCreated(long now) { return now -_created; }
+
     /**
      *  @return when this connection was created (not established)
      *  @since 0.9.20
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
index 1ac28c64f5bd8713e5d2c140ab06873461f5baa1..e05a935a69f4e28b0aea2a89c8c34a6e4dc8a6a4 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -707,7 +707,7 @@ public class NTCPTransport extends TransportImpl {
      * As of 0.9.20, actually returns active peer count, not total.
      */
     public int countActivePeers() {
-    	final long now = _context.clock().now();
+        final long now = _context.clock().now();
         int active = 0;
         for (NTCPConnection con : _conByIdent.values()) {
             // con initializes times at construction,
@@ -724,11 +724,12 @@ public class NTCPTransport extends TransportImpl {
      * How many peers are we actively sending messages to (this minute)
      */
     public int countActiveSendPeers() {
+        final long now = _context.clock().now();
         int active = 0;
         for (NTCPConnection con : _conByIdent.values()) {
             // con initializes times at construction,
             // so check message count also
-            if (con.getMessagesSent() > 0 && con.getTimeSinceSend() <= 60*1000) {
+            if (con.getMessagesSent() > 0 && con.getTimeSinceSend(now) <= 60*1000) {
                 active++;
             }
         }
@@ -1104,12 +1105,13 @@ public class NTCPTransport extends TransportImpl {
      */
     void expireTimedOut() {
         int expired = 0;
+        final long now = _context.clock().now();
 
             for (Iterator<NTCPConnection> iter = _establishing.iterator(); iter.hasNext(); ) {
                 NTCPConnection con = iter.next();
                 if (con.isClosed() || con.isEstablished()) {
                     iter.remove();
-                } else if (con.getTimeSinceCreated() > ESTABLISH_TIMEOUT) {
+                } else if (con.getTimeSinceCreated(now) > ESTABLISH_TIMEOUT) {
                     iter.remove();
                     con.close();
                     expired++;