diff -NurpP linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/Makefile linux-2.6.11-rc1-vs1.9.4-rc2-ng8.9/Makefile
--- linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/Makefile	2005-01-19 14:32:35 +0100
+++ linux-2.6.11-rc1-vs1.9.4-rc2-ng8.9/Makefile	2005-01-20 01:07:23 +0100
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 11
-EXTRAVERSION = -rc1-vs1.9.4-rc2-ng8.8
+EXTRAVERSION = -rc1-vs1.9.4-rc2-ng8.9
 NAME=Woozy Numbat
 
 # *DOCUMENTATION*
diff -NurpP linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/drivers/net/8390.c linux-2.6.11-rc1-vs1.9.4-rc2-ng8.9/drivers/net/8390.c
--- linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/drivers/net/8390.c	2005-01-19 14:32:19 +0100
+++ linux-2.6.11-rc1-vs1.9.4-rc2-ng8.9/drivers/net/8390.c	2005-01-19 16:54:47 +0100
@@ -276,8 +276,10 @@ static int ei_start_xmit(struct sk_buff 
 	int send_length = skb->len, output_page;
 	unsigned long flags;
 
+#if 0
 	printk("ei_start_xmit(%p[%d,#%d],%p{%s})\n",
 		skb, skb->nfvnet, skb->nfxid, dev, dev->name);
+#endif
 
 	if (skb->len < ETH_ZLEN) {
 		skb = skb_padto(skb, ETH_ZLEN);
diff -NurpP linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/include/linux/vs_ngnet.h linux-2.6.11-rc1-vs1.9.4-rc2-ng8.9/include/linux/vs_ngnet.h
--- linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/include/linux/vs_ngnet.h	2005-01-19 14:32:19 +0100
+++ linux-2.6.11-rc1-vs1.9.4-rc2-ng8.9/include/linux/vs_ngnet.h	2005-01-20 00:33:13 +0100
@@ -7,11 +7,40 @@
 #include "vserver/debug.h"
 
 
+#if 0
 #define	__vx_loopback_dev_ptr(v)	((v) ? \
 	(v)->vx_info->ngnet.loopback : &loopback_dev)
 
 #define	__vx_loopback_dev(v)	(*__vx_loopback_dev_ptr(v))
+#endif
+
+extern struct net_device loopback_dev;
+
+static inline
+struct net_device *__vx_loopback_dev(nfxid_t nfxid)
+{
+	struct net_device *loopback;
+	struct vx_info *vxi;
+
+	/* FIXME obsolete when optimization in locate? */
+	if (nfxid == vx_current_xid())
+		vxi = current->vx_info;
+	else
+		vxi = locate_vx_info(nfxid);
 
+	if (vxi) {
+		loopback = vxi->ngnet.loopback;
+		/* FIXME check for general? */
+		if (vxi != current->vx_info)
+			put_vx_info(vxi);
+	} else {
+		loopback = &loopback_dev;
+	}
+
+	vxdprintk(VXD_CBIT(ngnet, 1),
+		"__vx_loopback_dev(#%d) = %p", nfxid, loopback);
+	return loopback;
+}
 
 extern struct fib_table *ip_fib_local_table;
 extern struct fib_table *ip_fib_main_table;
diff -NurpP linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/net/ipv4/route.c linux-2.6.11-rc1-vs1.9.4-rc2-ng8.9/net/ipv4/route.c
--- linux-2.6.11-rc1-vs1.9.4-rc2-ng8.8/net/ipv4/route.c	2005-01-17 18:33:57 +0100
+++ linux-2.6.11-rc1-vs1.9.4-rc2-ng8.9/net/ipv4/route.c	2005-01-20 00:57:20 +0100
@@ -1620,8 +1620,10 @@ static int ip_route_input_slow(struct sk
 
 	if (res.type == RTN_LOCAL) {
 		int result;
+		struct net_device *loopback = __vx_loopback_dev(dev->nfxid);
+
 		result = fib_validate_source(saddr, daddr, tos,
-					     loopback_dev.ifindex,
+					     loopback->ifindex,
 					     dev, &spec_dst, &itag);
 		vxdprintk(VXD_CBIT(ngnet, 0),
 			"ip_route_input_slow() -3-");
@@ -1904,6 +1906,7 @@ int ip_route_input(struct sk_buff *skb, 
 static int ip_route_output_slow(struct rtable **rp, const struct flowi *oldflp)
 {
 	u32 tos	= oldflp->fl4_tos & (IPTOS_RT_MASK | RTO_ONLINK);
+	struct net_device *loopback = __vx_loopback_dev(oldflp->nfxid);
 	struct flowi fl = { .nl_u = { .ip4_u =
 				      { .daddr = oldflp->fl4_dst,
 					.saddr = oldflp->fl4_src,
@@ -1915,7 +1918,7 @@ static int ip_route_output_slow(struct r
 					.fwmark = oldflp->fl4_fwmark,
 #endif
 				      } },
-			    .iif = loopback_dev.ifindex,
+			    .iif = loopback->ifindex,
 			    .oif = oldflp->oif,
 			    .nfxid = oldflp->nfxid, };
 	struct fib_result res;
@@ -2012,9 +2015,9 @@ static int ip_route_output_slow(struct r
 		/* FIXME probably needs the vservers lo here */
 		if (dev_out)
 			dev_put(dev_out);
-		dev_out = &loopback_dev;
+		dev_out = loopback;
 		dev_hold(dev_out);
-		fl.oif = loopback_dev.ifindex;
+		fl.oif = loopback->ifindex;
 		res.type = RTN_LOCAL;
 		flags |= RTCF_LOCAL;
 		goto make_route;
@@ -2062,7 +2065,7 @@ static int ip_route_output_slow(struct r
 		/* FIXME probably needs the vservers lo */
 		if (dev_out)
 			dev_put(dev_out);
-		dev_out = &loopback_dev;
+		dev_out = loopback;
 		dev_hold(dev_out);
 		fl.oif = dev_out->ifindex;
 		if (res.fi)
@@ -2090,9 +2093,11 @@ static int ip_route_output_slow(struct r
 	fl.oif = dev_out->ifindex;
 
 make_route:
+	vxdprintk(VXD_CBIT(ngnet, 0), "ip_route_output_slow() -4.0-");
 	if (LOOPBACK(fl.fl4_src) && !(dev_out->flags&IFF_LOOPBACK))
 		goto e_inval;
 
+	vxdprintk(VXD_CBIT(ngnet, 0), "ip_route_output_slow() -4.1-");
 	if (fl.fl4_dst == 0xFFFFFFFF)
 		res.type = RTN_BROADCAST;
 	else if (MULTICAST(fl.fl4_dst))
@@ -2100,13 +2105,17 @@ make_route:
 	else if (BADCLASS(fl.fl4_dst) || ZERONET(fl.fl4_dst))
 		goto e_inval;
 
+	vxdprintk(VXD_CBIT(ngnet, 0), "ip_route_output_slow() -4.2-");
 	if (dev_out->flags & IFF_LOOPBACK)
 		flags |= RTCF_LOCAL;
 
 	in_dev = in_dev_get(dev_out);
+	/* printk("dev_out = %p[%s,#%d], in_dev = %p\n",
+		dev_out, dev_out->name, dev_out->nfxid, in_dev); */
 	if (!in_dev)
 		goto e_inval;
 
+	vxdprintk(VXD_CBIT(ngnet, 0), "ip_route_output_slow() -4.3-");
 	if (res.type == RTN_BROADCAST) {
 		flags |= RTCF_BROADCAST | RTCF_LOCAL;
 		if (res.fi) {
@@ -2131,6 +2140,7 @@ make_route:
 	if (!rth)
 		goto e_nobufs;
 
+	vxdprintk(VXD_CBIT(ngnet, 0), "ip_route_output_slow() -4.4-");
 	atomic_set(&rth->u.dst.__refcnt, 1);
 	rth->u.dst.flags= DST_HOST;
 	if (in_dev->cnf.no_xfrm)
