diff --git a/router/java/src/net/i2p/router/message/SendMessageDirectJob.java b/router/java/src/net/i2p/router/message/SendMessageDirectJob.java
index 8027c4d441b965823fc6996407eafd7b397fc4f9..002c740f0bd6c40d83d6570fe4a6f04e63664941 100644
--- a/router/java/src/net/i2p/router/message/SendMessageDirectJob.java
+++ b/router/java/src/net/i2p/router/message/SendMessageDirectJob.java
@@ -46,12 +46,15 @@ public class SendMessageDirectJob extends JobImpl {
     }
     public SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, Job onSend, ReplyJob onSuccess, Job onFail, MessageSelector selector, int timeoutMs, int priority) {
         super(ctx);
-        if (timeoutMs <= 0) throw new IllegalArgumentException("specify a timeout (" + timeoutMs + ")");
         _log = getContext().logManager().getLog(SendMessageDirectJob.class);
         _message = message;
         _targetHash = toPeer;
         _router = null;
-        _expiration = timeoutMs + ctx.clock().now();
+        if (timeoutMs <= 30) {
+            _expiration = ctx.clock().now() + 30*1000;
+        } else {
+            _expiration = timeoutMs + ctx.clock().now();
+        }
         _priority = priority;
         _searchOn = 0;
         _alreadySearched = false;
@@ -99,14 +102,14 @@ public class SendMessageDirectJob extends JobImpl {
                     if (_log.shouldLog(Log.DEBUG))
                         _log.debug("Router not specified, so we're looking for it...");
                     getContext().netDb().lookupRouterInfo(_targetHash, this, this, 
-                                                      _expiration - getContext().clock().now());
+                                                          _expiration - getContext().clock().now());
                     _searchOn = getContext().clock().now();
                     _alreadySearched = true;
                 } else {
-                    if (_log.shouldLog(Log.ERROR))
-                        _log.error("Unable to find the router to send to: " + _targetHash 
-                                   + " after searching for " + (getContext().clock().now()-_searchOn) 
-                                   + "ms, message: " + _message, getAddedBy());
+                    if (_log.shouldLog(Log.WARN))
+                        _log.warn("Unable to find the router to send to: " + _targetHash 
+                                  + " after searching for " + (getContext().clock().now()-_searchOn) 
+                                  + "ms, message: " + _message, getAddedBy());
                     if (_onFail != null)
                         getContext().jobQueue().addJob(_onFail);
                 }
diff --git a/router/java/src/net/i2p/router/message/SendTunnelMessageJob.java b/router/java/src/net/i2p/router/message/SendTunnelMessageJob.java
index 78a2d32524bcc67446e8b16c797ac906f3403efc..866d01b6f79ee13a6354a0ac8d6114301b0197b7 100644
--- a/router/java/src/net/i2p/router/message/SendTunnelMessageJob.java
+++ b/router/java/src/net/i2p/router/message/SendTunnelMessageJob.java
@@ -85,7 +85,11 @@ public class SendTunnelMessageJob extends JobImpl {
                           new Exception("SendTunnel from"));
         }
         //_log.info("Send tunnel message " + msg.getClass().getName() + " to " + _destRouter + " over " + _tunnelId + " targetting tunnel " + _targetTunnelId, new Exception("SendTunnel from"));
-        _expiration = getContext().clock().now() + timeoutMs;
+        if (timeoutMs < 30) {
+            _expiration = getContext().clock().now() + 30*1000;
+        } else {
+            _expiration = getContext().clock().now() + timeoutMs;
+        }
     }
     
     public void runJob() {
diff --git a/router/java/src/net/i2p/router/transport/TransportImpl.java b/router/java/src/net/i2p/router/transport/TransportImpl.java
index f0debebb747769cd2b92694700623aae611edc45..438bb9ea49d0139ac0208cd6e633854efb34a46e 100644
--- a/router/java/src/net/i2p/router/transport/TransportImpl.java
+++ b/router/java/src/net/i2p/router/transport/TransportImpl.java
@@ -226,7 +226,7 @@ public abstract class TransportImpl implements Transport {
     public void messageReceived(I2NPMessage inMsg, RouterIdentity remoteIdent, Hash remoteIdentHash, long msToReceive, int bytesReceived) {
         int level = Log.INFO;
         if (msToReceive > 5000)
-            level = Log.ERROR;
+            level = Log.WARN;
         if (_log.shouldLog(level)) {
             StringBuffer buf = new StringBuffer(128);
             buf.append("Message received: ").append(inMsg.getClass().getName());