diff -urN --exclude debian bird-1.0.11.orig/proto/bgp/attrs.c bird-1.0.11/proto/bgp/attrs.c
--- bird-1.0.11.orig/proto/bgp/attrs.c	2004-06-25 10:39:54.000000000 -0600
+++ bird-1.0.11/proto/bgp/attrs.c	2007-11-20 14:35:48.000000000 -0600
@@ -576,7 +576,12 @@
   if (p->cf->next_hop_self ||
       !p->is_internal ||
       rta->dest != RTD_ROUTER)
-    *(ip_addr *)z = p->local_addr;
+    {
+      if (ipa_nonzero(p->cf->source_addr))
+        *(ip_addr *)z = p->cf->source_addr;
+      else
+        *(ip_addr *)z = p->local_addr;
+    }
   else
     *(ip_addr *)z = e->attrs->gw;
 
