diff --git a/scapy/route.py b/scapy/route.py
index a6595d08b98fa9f578a9182e3392064c1893a00a..14e24473e04696bfd43feafe3abf5b8fc24db609 100644
--- a/scapy/route.py
+++ b/scapy/route.py
@@ -12,6 +12,7 @@ from scapy.consts import LOOPBACK_NAME
 from scapy.utils import atol,ltoa,itom
 from scapy.config import conf
 from scapy.error import Scapy_Exception,warning
+from scapy.arch import WINDOWS
 
 ##############################
 ## Routing/Interfaces stuff ##
@@ -89,7 +90,10 @@ class Route:
         
         for i, route in enumerate(self.routes):
             net, msk, gw, iface, addr = route
-            if iface != iff:
+            if WINDOWS:
+                if iff.guid != iface.guid:
+                    continue
+            elif iff != iface:
                 continue
             if gw == '0.0.0.0':
                 self.routes[i] = (the_net,the_msk,gw,iface,the_addr)
@@ -103,8 +107,12 @@ class Route:
         self.invalidate_cache()
         new_routes=[]
         for rt in self.routes:
-            if rt[3] != iff:
-                new_routes.append(rt)
+            if WINDOWS:
+                if iff.guid == rt[3].guid:
+                    continue
+            elif iff == rt[3]:
+                continue
+            new_routes.append(rt)
         self.routes=new_routes
         
     def ifadd(self, iff, addr):
@@ -157,9 +165,15 @@ class Route:
             
     def get_if_bcast(self, iff):
         for net, msk, gw, iface, addr in self.routes:
-            if (iff == iface and net != 0L):
-                bcast = atol(addr)|(~msk&0xffffffffL); # FIXME: check error in atol()
-                return ltoa(bcast);
+            if net == 0:
+                continue
+            if WINDOWS:
+                if iff.guid != iface.guid:
+                    continue
+            elif iff != iface:
+                continue
+            bcast = atol(addr)|(~msk&0xffffffffL); # FIXME: check error in atol()
+            return ltoa(bcast)
         warning("No broadcast address found for iface %s\n" % iff);
 
 conf.route=Route()
diff --git a/test/regression.uts b/test/regression.uts
index d5fdaf3bdd0b2418474e66b93ec9a4c356e680e1..11052b8440ed4008ba7ee7ad42744a223570d540 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -51,6 +51,8 @@ get_if_raw_addr(get_dummy_interface())
 
 get_if_list()
 
+get_if_raw_addr6(conf.iface6)
+
 = Test read_routes6() - default output
 
 routes6 = read_routes6()
@@ -7368,16 +7370,19 @@ in6_getscope("::1") == IPV6_ADDR_LOOPBACK
 = make_route()
 
 r4 = Route()
-len_r4 = len(r4.routes)
-r4.make_route(host="10.12.13.14") == (168561934, 4294967295L, '0.0.0.0', LOOPBACK_NAME, '0.0.0.0')
-r4.make_route(net="10.12.13.0/24") == (168561920, 4294967040L, '0.0.0.0', LOOPBACK_NAME, '0.0.0.0')
-r4.make_route(net="10.12.0.0/16", dev=get_dummy_interface()) == (168558592, 4294901760L, '0.0.0.0', get_dummy_interface(), '0.0.0.0')
+tmp_route = r4.make_route(host="10.12.13.14")
+(tmp_route[0], tmp_route[1], tmp_route[2]) == (168561934, 4294967295L, '0.0.0.0')
+
+tmp_route = r4.make_route(net="10.12.13.0/24")
+(tmp_route[0], tmp_route[1], tmp_route[2]) == (168561920, 4294967040L, '0.0.0.0')
 
 = add() & delt()
 
-r4.add(net="192.168.1.0/24", gw="1.2.3.4", dev=get_dummy_interface())
+r4 = Route()
+len_r4 = len(r4.routes)
+r4.add(net="192.168.1.0/24", gw="1.2.3.4")
 len(r4.routes) == len_r4 + 1
-r4.delt(net="192.168.1.0/24", gw="1.2.3.4", dev=get_dummy_interface())
+r4.delt(net="192.168.1.0/24", gw="1.2.3.4")
 len(r4.routes) == len_r4
 
 = ifchange()
@@ -7393,10 +7398,16 @@ len(r4.routes) == len_r4
 
 = ifadd() & get_if_bcast()
 
+r4 = Route()
+len_r4 = len(r4.routes)
+
 r4.ifadd(get_dummy_interface(), "1.2.3.4/24")
+len(r4.routes) == len_r4 +1 
+
 r4.get_if_bcast(get_dummy_interface()) == "1.2.3.255"
 
 r4.ifdel(get_dummy_interface())
+print len(r4.routes), len_r4
 len(r4.routes) == len_r4