diff -urN Unreal3.2.orig/doc/technical/protoctl.txt Unreal3.2/doc/technical/protoctl.txt
--- Unreal3.2.orig/doc/technical/protoctl.txt	2005-03-13 15:02:32.000000000 -0600
+++ Unreal3.2/doc/technical/protoctl.txt	2010-11-17 10:52:06.357567073 -0600
@@ -139,3 +139,7 @@
               The items in the list sent as NICKCHARS=.. must always be sorted.
               If a server sends NICKCHARS= and if the remote parameters do not match the
               charsets in use locally, then the server link is rejected.
+
+ESVID         This token indicates that the traditional services stamp value may take any
+              arbitrary value for the SVID field, such as an account name or other unique
+              identifier, including a traditional timestamp value.
diff -urN Unreal3.2.orig/doc/technical/serverprotocol.html Unreal3.2/doc/technical/serverprotocol.html
--- Unreal3.2.orig/doc/technical/serverprotocol.html	2009-04-13 06:03:57.000000000 -0500
+++ Unreal3.2/doc/technical/serverprotocol.html	2010-11-17 10:54:11.718485022 -0600
@@ -105,6 +105,7 @@
 			<li>NICKCHARS : Indicates the set of enabled nickchar options (see the regular documention for info about this).</li>
 			<li>CHANMODES : (Not required to be sent) This is the same as the CHANMODES value in the 005 for client connections. Useful for autodetecting things like what modes are valid for ChanServ MLOCK, for example.</li>
 			<li>CLK : Supports an extra field in NICK for sending the cloaked host (not vhost).</li>
+			<li>ESVID : Supports arbitrary values instead of just numeric timestamps for the services identifier field.</li>
 		</ul>
 		<p>The syntax examples here follow the conventions for TOKEN and also NS in cases of server-only messages.</p>
 		<h2><a name="S2_3"></a>2.3 SERVER - Server Negotiation</h2>
@@ -166,11 +167,11 @@
 		<h2><a name="S3_1"></a>3.1 NICK - User Introduction and Nick Change (TOKEN: &amp;)</h2>
 		<p><b>Syntax (nick change):</b> <tt>:<i>oldnick</i> &amp; <i>newnick</i> :<i>timestamp</i></tt></p>
 		<p>This format of the NICK message indicates an existing user is changing his or her nickname. If a collision occurs, see the section on Nick Collisions below. The timestamp is the new nickname's timestamp.</p>
-		<p><b>Syntax (normal):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i>	<i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> :<i>realname</i></tt></p>
-		<p><b>Syntax (NICKv2):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i>	<i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> <i>+usermodes</i> <i>virtualhost</i> :<i>realname</i></tt></p>
-		<p><b>Syntax (NICKv2+CLK):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i>	<i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> <i>+usermodes</i> <i>virtualhost</i> <i>cloakhost</i> :<i>realname</i></tt>
-		<p><b>Syntax (NICKv2+NICKIP):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i> <i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> <i>+usermodes</i> <i>virtualhost</i> <i>nickipaddr</i> :<i>realname</i></tt></p>
-		<p><b>Syntax (NICKv2+NICKIP+CLK):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i>	<i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> <i>+usermodes</i> <i>virtualhost</i> <i>cloakhost</i> <i>nickipaddr</i> :<i>realname</i></tt>
+		<p><b>Syntax (normal):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i>	<i>username</i> <i>hostname</i> <i>server</i> <i>service-identifier-token</i> :<i>realname</i></tt></p>
+		<p><b>Syntax (NICKv2):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i>	<i>username</i> <i>hostname</i> <i>server</i> <i>service-identifier-token</i> <i>+usermodes</i> <i>virtualhost</i> :<i>realname</i></tt></p>
+		<p><b>Syntax (NICKv2+CLK):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i>	<i>username</i> <i>hostname</i> <i>server</i> <i>service-identifier-token</i> <i>+usermodes</i> <i>virtualhost</i> <i>cloakhost</i> :<i>realname</i></tt>
+		<p><b>Syntax (NICKv2+NICKIP):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i> <i>username</i> <i>hostname</i> <i>server</i> <i>service-identifier-token</i> <i>+usermodes</i> <i>virtualhost</i> <i>nickipaddr</i> :<i>realname</i></tt></p>
+		<p><b>Syntax (NICKv2+NICKIP+CLK):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i>	<i>username</i> <i>hostname</i> <i>server</i> <i>service-identifier-token</i> <i>+usermodes</i> <i>virtualhost</i> <i>cloakhost</i> <i>nickipaddr</i> :<i>realname</i></tt>
 		<p><b>Note:</b> Because each server normally does its own cloak generation, Unreal does not expect to receive NICK messages with the CLK info, so do not send it. It will send this info to a server it has received a PROTOCTL CLK from however.</p>
 		<p>This format of the NICK message introduces a new user to the network. If PROTOCTL VHP is enabled, the user's cloaked host is put in the virtualhost field, otherwise it'll be * unless the user is +t. With the addition of CLK, VHP is no longer necessary for determining the cloak host.</p>
 		<h3><a name="S3_1_1"></a>3.1.1 Nick Collisions</h3>
@@ -304,7 +305,7 @@
 		<p><b>Syntax (SVSMODE):</b> <tt>:<i>source</i> n <i>target</i> +<i>usermodes</i></tt></p>
 		<p><b>Syntax (SVS2MODE):</b> <tt>:<i>source</i> v <i>target</i> +<i>usermodes</i></tt></p>
 		<p>Judging by these commands alone, you'd think they are identical. Both commands force a usermode change to occur. This is typically used by services to set +r on a user who has successfully identified. They differ in that SVS2MODE also sends the mode change to the user, while SVSMODE does not (hidden mode change).</p>
-		<p>SVSMODE and SVS2MODE also give special treatment to usermode +d. Rather than setting the deaf mode like you might expect, SVS(2)MODE +d allows services to change a user's services stamp (which is given in the NICK message). This could allow services to set the service stamp to an easily identifiable value that could then be used to say "hey, this person identified already". The syntax of this is: +d <i>newservicestamp</i> and can be combined with setting other usermodes as well. The deaf mode <b>can</b> be set by using +d without the service stamp parameter; however, in this case you <b>cannot</b> set the service stamp in the same SVS(2)MODE message.</p>
+		<p>SVSMODE and SVS2MODE also give special treatment to usermode +d. Rather than setting the deaf mode like you might expect, SVS(2)MODE +d allows services to change a user's services stamp (which is given in the NICK message). This could allow services to set the service stamp to an easily identifiable value that could then be used to say "hey, this person identified already". The syntax of this is: +d <i>newservice-identifier-token</i> and can be combined with setting other usermodes as well. The deaf mode <b>can</b> be set by using +d without the service stamp parameter; however, in this case you <b>cannot</b> set the service stamp in the same SVS(2)MODE message.</p>
 		<p><b>Note:</b> Do <b>NOT</b> use SVSMODE to remove IRCop status from a user. Use the SVSO command for that instead.</p>
 		<p>Alternatively, target can name a channel. In this case, the mode change parameter can consist of a - character, followed by any or all of: b, e, I, q, a, o, h, or v. These characters cause the corresponding lists to be cleared of all entries. For example: SVSMODE #channel -b removes ALL bans from #channel, and SVSMODE #channel -qaohv turns ALL users on #channel into normal users (removes all owner, admin, op, halfop, and voice status). In this case, the uplink will acknowledge with a MODE listing the bans, etc that were removed.</p>
 		<p>To completely clear a channel of all modes: MODE #channel -cfijklmnprstzACGMKLNOQRSTVu (plus any added by third-party module) followed by SVSMODE #channel -beIqaohv.</p>
diff -urN Unreal3.2.orig/include/h.h Unreal3.2/include/h.h
--- Unreal3.2.orig/include/h.h	2009-04-13 06:03:57.000000000 -0500
+++ Unreal3.2/include/h.h	2010-11-17 10:28:58.029481784 -0600
@@ -276,7 +276,7 @@
 extern void sendto_locfailops(char *pattern, ...) __attribute__((format(printf,1,2)));
 extern void sendto_connectnotice(char *nick, anUser *user, aClient *sptr, int disconnect, char *comment);
 extern void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr, char *nick, int hopcount,
-long lastnick, char *username, char *realhost, char *server, long servicestamp, char *info, char *umodes,
+long lastnick, char *username, char *realhost, char *server, char *svid, char *info, char *umodes,
 char *virthost);
 extern void    sendto_message_one(aClient *to, aClient *from, char *sender,
     char *cmd, char *nick, char *msg);
diff -urN Unreal3.2.orig/include/struct.h Unreal3.2/include/struct.h
--- Unreal3.2.orig/include/struct.h	2009-04-13 06:03:57.000000000 -0500
+++ Unreal3.2/include/struct.h	2010-11-17 10:27:08.455649180 -0600
@@ -756,7 +756,15 @@
 	Link *silence;		/* chain of silence pointer blocks */
 	Link *dccallow;		/* chain of dccallowed entries */
 	char *away;		/* pointer to away message */
-	u_int32_t servicestamp;	/* Services' time stamp variable */
+
+	/*
+	 * svid: a value that is assigned by services to this user record.
+	 * in previous versions of Unreal, this was strictly a timestamp value,
+	 * which is less useful in the modern world of IRC where nicks are grouped to
+	 * accounts, so it is now a string.
+	 */
+	char svid[NICKLEN + 1];
+
 	signed char refcnt;	/* Number of times this block is referenced */
 	unsigned short joined;		/* number of channels joined */
 	char username[USERLEN + 1];
diff -urN Unreal3.2.orig/src/list.c Unreal3.2/src/list.c
--- Unreal3.2.orig/src/list.c	2006-02-03 07:57:19.000000000 -0600
+++ Unreal3.2/src/list.c	2010-11-17 10:44:21.532733022 -0600
@@ -195,7 +195,7 @@
 		user->invited = NULL;
 		user->silence = NULL;
 		user->server = NULL;
-		user->servicestamp = 0;
+		strlcpy(user->svid, "*", sizeof(user->svid));
 		user->lopt = NULL;
 		user->whowas = NULL;
 		user->snomask = 0;
diff -urN Unreal3.2.orig/src/modules/m_nick.c Unreal3.2/src/modules/m_nick.c
--- Unreal3.2.orig/src/modules/m_nick.c	2009-04-13 06:04:37.000000000 -0500
+++ Unreal3.2/src/modules/m_nick.c	2010-11-17 10:29:34.142678150 -0600
@@ -1169,7 +1169,7 @@
 	/* NICKv2 Servers ! */
 	sendto_serv_butone_nickcmd(cptr, sptr, nick,
 	    sptr->hopcount + 1, sptr->lastnick, user->username, user->realhost,
-	    user->server, user->servicestamp, sptr->info,
+	    user->server, user->svid, sptr->info,
 	    (!buf || *buf == '\0' ? "+" : buf),
 	    sptr->umodes & UMODE_SETHOST ? sptr->user->virthost : NULL);
 
diff -urN Unreal3.2.orig/src/modules/m_server.c Unreal3.2/src/modules/m_server.c
--- Unreal3.2.orig/src/modules/m_server.c	2009-04-13 06:04:37.000000000 -0500
+++ Unreal3.2/src/modules/m_server.c	2010-11-17 10:40:11.325483548 -0600
@@ -792,13 +792,13 @@
 			if (!SupportNICKv2(cptr))
 			{
 				sendto_one(cptr,
-				    "%s %s %d %ld %s %s %s %lu :%s",
+				    "%s %s %d %ld %s %s %s %s :%s",
 				    (IsToken(cptr) ? TOK_NICK : MSG_NICK),
 				    acptr->name, acptr->hopcount + 1,
 				    acptr->lastnick, acptr->user->username,
 				    acptr->user->realhost,
 				    acptr->user->server,
-				    (unsigned long)acptr->user->servicestamp, acptr->info);
+				    (unsigned long)acptr->user->svid, acptr->info);
 				send_umode(cptr, acptr, 0, SEND_UMODES, buf);
 				if (IsHidden(acptr) && acptr->user->virthost)
 					sendto_one(cptr, ":%s %s %s",
@@ -818,9 +818,9 @@
 					{
 						sendto_one(cptr,
 						    ((cptr->proto & PROTO_SJB64) ?
-						    "%s %s %d %B %s %s %b %lu %s %s %s%s%s%s:%s"
+						    "%s %s %d %B %s %s %b %s %s %s %s%s%s%s:%s"
 						    :
-						    "%s %s %d %lu %s %s %b %lu %s %s %s%s%s%s:%s"),
+						    "%s %s %d %lu %s %s %b %s %s %s %s%s%s%s:%s"),
 						    (IsToken(cptr) ? TOK_NICK : MSG_NICK),
 						    acptr->name,
 						    acptr->hopcount + 1,
@@ -828,7 +828,7 @@
 						    acptr->user->username,
 						    acptr->user->realhost,
 						    (long)(acptr->srvptr->serv->numeric),
-						    (unsigned long)acptr->user->servicestamp,
+						    acptr->user->svid,
 						    (!buf || *buf == '\0' ? "+" : buf),
 						    ((IsHidden(acptr) && (acptr->umodes & UMODE_SETHOST)) ? acptr->user->virthost : "*"),
 						    SupportCLK(cptr) ? getcloak(acptr) : "",
@@ -841,9 +841,9 @@
 					{
 						sendto_one(cptr,
 						    (cptr->proto & PROTO_SJB64 ?
-						    "%s %s %d %B %s %s %s %lu %s %s %s%s%s%s:%s"
+						    "%s %s %d %B %s %s %s %s %s %s %s%s%s%s:%s"
 						    :
-						    "%s %s %d %lu %s %s %s %lu %s %s %s%s%s%s:%s"),
+						    "%s %s %d %lu %s %s %s %s %s %s %s%s%s%s:%s"),
 						    (IsToken(cptr) ? TOK_NICK : MSG_NICK),
 						    acptr->name,
 						    acptr->hopcount + 1,
@@ -851,7 +851,7 @@
 						    acptr->user->username,
 						    acptr->user->realhost,
 						    acptr->user->server,
-						    (unsigned long)acptr->user->servicestamp,
+						    acptr->user->svid,
 						    (!buf || *buf == '\0' ? "+" : buf),
 						    ((IsHidden(acptr) && (acptr->umodes & UMODE_SETHOST)) ? acptr->user->virthost : "*"),
 						    SupportCLK(cptr) ? getcloak(acptr) : "",
@@ -863,7 +863,7 @@
 				}
 				else
 					sendto_one(cptr,
-					    "%s %s %d %ld %s %s %s %lu %s %s %s%s:%s",
+					    "%s %s %d %ld %s %s %s %s %s %s %s%s:%s",
 					    (IsToken(cptr) ? TOK_NICK :
 					    MSG_NICK), acptr->name,
 					    acptr->hopcount + 1,
@@ -875,7 +875,7 @@
 					    base64enc(acptr->srvptr->
 					    serv->numeric) : acptr->
 					    user->server) : acptr->user->
-					    server), (unsigned long)acptr->user->servicestamp,
+					    server), (unsigned long)acptr->user->svid,
 					    (!buf
 					    || *buf == '\0' ? "+" : buf),
 					    GetHost(acptr),
diff -urN Unreal3.2.orig/src/modules/m_svsmode.c Unreal3.2/src/modules/m_svsmode.c
--- Unreal3.2.orig/src/modules/m_svsmode.c	2009-04-13 06:04:37.000000000 -0500
+++ Unreal3.2/src/modules/m_svsmode.c	2010-11-17 10:55:45.188731599 -0600
@@ -501,9 +501,9 @@
 					IRCstats.operators++;
 				goto setmodex;
 			case 'd':
-				if (parv[3] && isdigit(*parv[3]))
+				if (parv[3])
 				{
-					acptr->user->servicestamp = strtoul(parv[3], NULL, 10);
+					strlcpy(acptr->user->svid, parv[3], sizeof(acptr->user->svid));
 					break;
 				}
 			case 'x':
diff -urN Unreal3.2.orig/src/modules/m_user.c Unreal3.2/src/modules/m_user.c
--- Unreal3.2.orig/src/modules/m_user.c	2009-04-13 06:04:37.000000000 -0500
+++ Unreal3.2/src/modules/m_user.c	2010-11-17 10:43:34.578649430 -0600
@@ -91,7 +91,7 @@
 #define	UFLAGS	(UMODE_INVISIBLE|UMODE_WALLOP|UMODE_SERVNOTICE)
 	char *username, *host, *server, *realname, *umodex = NULL, *virthost =
 	    NULL, *ip = NULL;
-	u_int32_t sstamp = 0;
+	char *sstamp = NULL;
 	anUser *user;
 	aClient *acptr;
 
@@ -129,23 +129,20 @@
 
 	if (parc == 6 && IsServer(cptr))
 	{
-		if (isdigit(*parv[4]))
-			sstamp = strtoul(parv[4], NULL, 10);
+		sstamp = (BadPtr(parv[4])) ? "*" : parv[4];
 		realname = (BadPtr(parv[5])) ? "<bad-realname>" : parv[5];
 		umodex = NULL;
 	}
 	else if (parc == 8 && IsServer(cptr))
 	{
-		if (isdigit(*parv[4]))
-			sstamp = strtoul(parv[4], NULL, 10);
+		sstamp = (BadPtr(parv[4])) ? "*" : parv[4];
 		realname = (BadPtr(parv[7])) ? "<bad-realname>" : parv[7];
 		umodex = parv[5];
 		virthost = parv[6];
 	}
 	else if (parc == 9 && IsServer(cptr))
 	{
-		if (isdigit(*parv[4]))
-			sstamp = strtoul(parv[4], NULL, 10);
+		sstamp = (BadPtr(parv[4])) ? "*" : parv[4];
 		realname = (BadPtr(parv[8])) ? "<bad-realname>" : parv[8];
 		umodex = parv[5];
 		virthost = parv[6];
@@ -202,7 +199,7 @@
 		user->ip_str = strdup(Inet_ia2p(&sptr->ip));
 	user->server = me_hash;
       user_finish:
-	user->servicestamp = sstamp;
+	strlcpy(user->svid, sstamp, sizeof(user->svid));
 	strlcpy(sptr->info, realname, sizeof(sptr->info));
 	if (sptr->name[0] && (IsServer(cptr) ? 1 : IsNotSpoof(sptr)))
 		/* NICK and no-spoof already received, now we have USER... */
diff -urN Unreal3.2.orig/src/send.c Unreal3.2/src/send.c
--- Unreal3.2.orig/src/send.c	2006-06-16 13:29:16.000000000 -0500
+++ Unreal3.2/src/send.c	2010-11-17 10:50:18.524498363 -0600
@@ -1937,7 +1937,7 @@
 void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr,
 			char *nick, int hopcount,
     long lastnick, char *username, char *realhost, char *server,
-    long servicestamp, char *info, char *umodes, char *virthost)
+    char *svid, char *info, char *umodes, char *virthost)
 {
 	int  i;
 	aClient *cptr;
@@ -1979,14 +1979,14 @@
 					sendto_one(cptr,
 						(cptr->proto & PROTO_SJB64) ?
 					    /* Ugly double %s to prevent excessive spaces */
-					    "%s %s %d %B %s %s %b %lu %s %s %s%s%s%s:%s"
+					    "%s %s %d %B %s %s %b %s %s %s %s%s%s%s:%s"
 					    :
-					    "%s %s %d %lu %s %s %b %lu %s %s %s%s%s%s:%s"
+					    "%s %s %d %lu %s %s %b %s %s %s %s%s%s%s:%s"
 					    ,
 					    (IsToken(cptr) ? TOK_NICK : MSG_NICK), nick,
 					    hopcount, (long)lastnick, username, realhost,
 					    (long)(sptr->srvptr->serv->numeric),
-					    servicestamp, umodes, vhost,
+					    svid, umodes, vhost,
 					    SupportCLK(cptr) ? getcloak(sptr) : "",
 					    SupportCLK(cptr) ? " " : "",
 					    SupportNICKIP(cptr) ? encode_ip(sptr->user->ip_str) : "",
@@ -1994,11 +1994,11 @@
 					    info);
 				else
 					sendto_one(cptr,
-					    "%s %s %d %d %s %s %s %lu %s %s %s%s%s%s:%s",
+					    "%s %s %d %d %s %s %s %s %s %s %s%s%s%s:%s",
 					    (IsToken(cptr) ? TOK_NICK : MSG_NICK), nick,
 					    hopcount, lastnick, username, realhost,
 					    SupportNS(cptr) && sptr->srvptr->serv->numeric ? base64enc(sptr->srvptr->serv->numeric) : server,
-					    servicestamp, umodes, vhost,
+					    svid, umodes, vhost,
 					    SupportCLK(cptr) ? getcloak(sptr) : "",
 					    SupportCLK(cptr) ? " " : "",
 					    SupportNICKIP(cptr) ? encode_ip(sptr->user->ip_str) : "",
@@ -2008,11 +2008,11 @@
 			}
 			else
 			{
-				sendto_one(cptr, "%s %s %d %d %s %s %s %lu :%s",
+				sendto_one(cptr, "%s %s %d %d %s %s %s %s :%s",
 				    (IsToken(cptr) ? TOK_NICK : MSG_NICK),
 				    nick, hopcount, lastnick, username,
 				    realhost,
-				    server, servicestamp, info);
+				    server, svid, info);
 				if (strcmp(umodes, "+"))
 				{
 					sendto_one(cptr, ":%s %s %s :%s",
@@ -2068,14 +2068,14 @@
 			sendto_one(cptr,
 				(cptr->proto & PROTO_SJB64) ?
 			    /* Ugly double %s to prevent excessive spaces */
-			    "%s %s %d %B %s %s %b %lu %s %s %s%s:%s"
+			    "%s %s %d %B %s %s %b %s %s %s %s%s:%s"
 			    :
-			    "%s %s %d %lu %s %s %b %lu %s %s %s%s:%s"
+			    "%s %s %d %lu %s %s %b %s %s %s %s%s:%s"
 			    ,
 			    (IsToken(cptr) ? TOK_NICK : MSG_NICK), sptr->name,
 			    sptr->hopcount+1, (long)sptr->lastnick, sptr->user->username, 
 			    sptr->user->realhost, (long)(sptr->srvptr->serv->numeric),
-			    sptr->user->servicestamp, umodes, vhost,
+			    sptr->user->svid, umodes, vhost,
 			    SupportNICKIP(cptr) ? encode_ip(sptr->user->ip_str) : "",
 			    SupportNICKIP(cptr) ? " " : "", sptr->info);
 		else
@@ -2085,16 +2085,16 @@
 			    sptr->hopcount+1, sptr->lastnick, sptr->user->username, 
 			    sptr->user->realhost, SupportNS(cptr) && 
 			    sptr->srvptr->serv->numeric ? base64enc(sptr->srvptr->serv->numeric)
-			    : sptr->user->server, sptr->user->servicestamp, umodes, vhost,
+			    : sptr->user->server, sptr->user->svid, umodes, vhost,
 			    SupportNICKIP(cptr) ? encode_ip(sptr->user->ip_str) : "",
 			    SupportNICKIP(cptr) ? " " : "", sptr->info);
 	}
 	else
 	{
-		sendto_one(cptr, "%s %s %d %d %s %s %s %lu :%s",
+		sendto_one(cptr, "%s %s %d %d %s %s %s %s :%s",
 		    (IsToken(cptr) ? TOK_NICK : MSG_NICK),
 		    sptr->name, sptr->hopcount+1, sptr->lastnick, sptr->user->username,
-		    sptr->user->realhost, sptr->user->server, sptr->user->servicestamp, 
+		    sptr->user->realhost, sptr->user->server, sptr->user->svid, 
 		    sptr->info);
 		if (strcmp(umodes, "+"))
 		{
diff -urN Unreal3.2.orig/src/s_serv.c Unreal3.2/src/s_serv.c
--- Unreal3.2.orig/src/s_serv.c	2009-03-01 12:37:58.000000000 -0600
+++ Unreal3.2/src/s_serv.c	2010-11-17 10:32:09.006482497 -0600
@@ -221,12 +221,14 @@
  * send_proto:
  * sends PROTOCTL message to server, taking care of whether ZIP
  * should be enabled or not.
+ *
+ * ESVID added to denote support of extended SVID values. --nenolod
  */
 void send_proto(aClient *cptr, ConfigItem_link *aconf)
 {
 char buf[1024];
 
-	sprintf(buf, "CHANMODES=%s%s,%s%s,%s%s,%s%s NICKCHARS=%s",
+	sprintf(buf, "CHANMODES=%s%s,%s%s,%s%s,%s%s NICKCHARS=%s ESVID",
 		CHPAR1, EXPAR1, CHPAR2, EXPAR2, CHPAR3, EXPAR3, CHPAR4, EXPAR4, langsinuse);
 #ifdef ZIP_LINKS
 	if (aconf->options & CONNECT_ZIP)
