diff -rN -u old-babel_0/message.c new-babel_0/message.c
--- old-babel_0/message.c	2009-04-12 18:01:04.599262483 +0200
+++ new-babel_0/message.c	2009-04-12 18:01:04.603262266 +0200
@@ -715,15 +715,25 @@
     int add_metric, v4, real_plen, omit = 0;
     const unsigned char *real_prefix;
     unsigned short flags = 0;
+    struct route *route;
 
     if(!net_up(net))
         return;
 
     add_metric = output_filter(id, prefix, plen, net->ifindex);
+
     if(add_metric >= INFINITY)
         return;
 
     metric = MIN(metric + add_metric, INFINITY);
+
+    if(metric < INFINITY) {
+        route = find_installed_route(prefix, plen);
+        if(route && net != route->neigh->network) {
+            metric = MAX(1, metric - 128);
+        }
+    }
+
     /* Worst case */
     ensure_space(net, 20 + 12 + 28);
 

