void send_full_mudlist(string mud){
    int interval = 0;
    mixed *package = ({});
    mixed *names = ({});
    if(!connected_muds[mud]) return;
    foreach(string mudname in keys(mudinfo)){
	int mudstat;
	if(!connected_muds[mudname] && mudinfo[mudname]){
	    if(!mudinfo[mudname]["disconnect_time"]) mudstat = -1;
	    else mudstat = 0;
	}
	else {
	    mudstat = -1;
	}

	package += ({ ({ "mudlist", 5, router_name, 0, 0, 0, mudinfo_update_counter,([
	      mudname:({
		mudstat,
		// -1=up, 0=down, n=down for n secs
		mudinfo[mudname]["ip"], // ip_addr
		mudinfo[mudname]["player_port"], // player_port
		mudinfo[mudname]["imud_tcp_port"], // imud_tcp_port
		mudinfo[mudname]["imud_udp_port"], // imud_udp_port
		mudinfo[mudname]["mudlib"], // mudlib
		mudinfo[mudname]["base_mudlib"], // base_mudlib
		mudinfo[mudname]["driver"], // driver
		mudinfo[mudname]["mud_type"], // mud_type
		mudinfo[mudname]["open_status"], // open_status
		mudinfo[mudname]["admin_email"], // admin_email
		mudinfo[mudname]["services"], // services
		mudinfo[mudname]["other_data"], // other_data
	      })
	    ]) }) });
    }
    while(sizeof(package)){
	//trr("package: "+sizeof(package),"white");
	interval++;
	foreach(mixed element in package[0..9]){
	    string name = identify(keys(element[7]));
	    names += ({ name });
	    //trr("element: "+identify(element));
	    call_out( (: write_data :), interval, connected_muds[mud], element);
	    //trr("sending info on "+name+" to "+mud+", interval: "+interval,"cyan");
	}
	package -= package[0..9];
    }
    //trr("number of muds: "+sizeof(mudinfo),"red");
    //trr("number of muds sent: "+sizeof(names),"red");
    //trr("muds: "+identify(names),"red");
}
