diff --git a/history.txt b/history.txt
index f95a13ef824bf304ed2c360673d9468338bae103..8dd4aedd7802e9830688751fed75e3b72ddc3080 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,20 @@
+2022-04-14 zzz
+ * Startup: Don't set our RI loaded from disk if too old
+
+2022-04-13 zzz
+ * Router:
+   - Reset uptime on soft restart
+   - Don't rekey after failure to store our RI due to clock skew
+   - Change comm system state during soft restart
+
+2022-04-12 zzz
+ * Console: Fix Sybil closest hash tabs
+ * Transport: Fix UPnP deadlock
+ * Tunnels: Don't build client tunnels less than min length
+
+2022-04-11 zzz
+ * I2CP: Fix external I2CP broken when session ID is 0
+
 2022-04-05 zzz
  * SSU2: Fragmented Session Confirmed
 
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 37a65a7631f8df6804d422c4394492f24c10a9dc..2f628a65d0a4a594c3296e2acb9af5c063fbabc2 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -18,7 +18,7 @@ public class RouterVersion {
     /** deprecated */
     public final static String ID = "Git";
     public final static String VERSION = CoreVersion.VERSION;
-    public final static long BUILD = 13;
+    public final static long BUILD = 14;
 
     /** for example "-test" */
     public final static String EXTRA = "";
diff --git a/router/java/src/net/i2p/router/startup/LoadRouterInfoJob.java b/router/java/src/net/i2p/router/startup/LoadRouterInfoJob.java
index 8ff2f889274119789788519970786f124927a5da..313531fdeb034455f7b1992cca13aff723b74599 100644
--- a/router/java/src/net/i2p/router/startup/LoadRouterInfoJob.java
+++ b/router/java/src/net/i2p/router/startup/LoadRouterInfoJob.java
@@ -131,6 +131,17 @@ class LoadRouterInfoJob extends JobImpl {
                     fis1 = null;
                     rif.delete();
                 }
+                if (_us != null) {
+                    long now = getContext().clock().now();
+                    long riTime = _us.getPublished();
+                    if (riTime > now || now - riTime > 45*60*1000) {
+                        // prevent netdb store failure and rekey
+                        _us = null;
+                        try { fis1.close(); } catch (IOException ioe2) {}
+                        fis1 = null;
+                        rif.delete();
+                    }
+                }
             }
             
             if (keys2Exist || keysExist) {