diff -uNrd hybserv/source/client.c hybserv+ipmask/source/client.c
--- hybserv/source/client.c	Mon Jan 13 18:49:26 2003
+++ hybserv+ipmask/source/client.c	Mon Feb 16 12:59:50 2004
@@ -258,7 +258,7 @@
     strncpy(tempuser->nick, line[1], NICKLEN);
     strncpy(tempuser->username, line[5], USERLEN);
     strncpy(tempuser->hostname, line[6], HOSTLEN);
-    strncpy(tempuser->realname, line[8] + 1, REALLEN);
+    strncpy(tempuser->realname, line[9] + 1, REALLEN);
 
 #else
 
@@ -268,7 +268,7 @@
     tempuser->nick = MyStrdup(line[1]);
     tempuser->username = MyStrdup(line[5]);
     tempuser->hostname = MyStrdup(line[6]);
-    tempuser->realname = MyStrdup(line[8] + 1);
+    tempuser->realname = MyStrdup(line[9] + 1);
 
 #endif /* BLOCK_ALLOCATION */
 
diff -uNrd hybserv/source/init.c hybserv+ipmask/source/init.c
--- hybserv/source/init.c	Thu Aug 28 16:44:57 2003
+++ hybserv+ipmask/source/init.c	Mon Feb 16 13:01:06 2004
@@ -267,8 +267,8 @@
     char **av;
     struct Luser *lptr;
 
-    ircsprintf(sendstr, "NICK %s 1 %ld %s %s %s %s :%s\r\n", nick, (long)
-               CurrTime, ServiceUmodes, ident, Me.name, Me.name, info);
+    ircsprintf(sendstr, "NICK %s 1 %ld %s %s %s %s %s :%s\r\n", nick, (long)
+               CurrTime, ServiceUmodes, ident, Me.name, Me.name, Me.name, info);
     toserv("%s", sendstr);
 
     SplitBuf(sendstr, &av);
diff -uNrd hybserv/source/jupe.c hybserv+ipmask/source/jupe.c
--- hybserv/source/jupe.c	Thu Aug 28 16:44:57 2003
+++ hybserv+ipmask/source/jupe.c	Mon Feb 16 13:01:54 2004
@@ -237,14 +237,14 @@
                   tempjupe->reason : "Jupitered Nickname");
 #else
               /* collide the nickname */
-              ircsprintf(sendstr, "NICK %s 1 %ld +i %s %s %s :%s\r\n",
+              ircsprintf(sendstr, "NICK %s 1 %ld +i %s %s %s %s :%s\r\n",
                          tempjupe->name,
 #ifdef NICKSERVICES
                          (long) (lptr->nick_ts - 1),
 #else
                          (long) (lptr->since - 1),
 #endif /* NICKSERVICES */
-                         JUPED_USERNAME, JUPED_HOSTNAME, Me.name,
+                         JUPED_USERNAME, JUPED_HOSTNAME, Me.name, Me.name,
                          tempjupe->reason ? tempjupe->reason :
                          "Jupitered Nickname");
 #endif /* DANCER */
diff -uNrd hybserv/source/nickserv.c hybserv+ipmask/source/nickserv.c
--- hybserv/source/nickserv.c	Fri Dec 26 15:52:42 2003
+++ hybserv+ipmask/source/nickserv.c	Mon Feb 16 13:02:56 2004
@@ -1399,8 +1399,8 @@
   ircsprintf(sendstr, "NICK %s 1 1 +i %s %s %s %lu :%s\r\n", lptr->nick,
       "enforced", Me.name, Me.name, 0xffffffffUL, "Nickname Enforcement");
 #else
-  ircsprintf(sendstr, "NICK %s 1 %ld +i %s %s %s :%s\r\n",
-      lptr->nick, (long) (lptr->nick_ts - 1), "enforced", Me.name,
+  ircsprintf(sendstr, "NICK %s 1 %ld +i %s %s %s %s :%s\r\n",
+      lptr->nick, (long) (lptr->nick_ts - 1), "enforced", Me.name, Me.name,
       Me.name, "Nickname Enforcement");
 #endif /* DANCER */
 
diff -uNrd hybserv/source/operserv.c hybserv+ipmask/source/operserv.c
--- hybserv/source/operserv.c	Fri Dec 26 15:52:42 2003
+++ hybserv+ipmask/source/operserv.c	Mon Feb 16 13:03:28 2004
@@ -1704,8 +1704,8 @@
           (long) CurrTime, JUPED_USERNAME, JUPED_HOSTNAME, Me.name,
           0xffffffffUL, reason);
 #else
-      ircsprintf(sendstr, "NICK %s 1 %ld +i %s %s %s :%s\r\n",
-         av[1], (long) CurrTime, JUPED_USERNAME, JUPED_HOSTNAME, Me.name,
+      ircsprintf(sendstr, "NICK %s 1 %ld +i %s %s %s %s :%s\r\n",
+         av[1], (long) CurrTime, JUPED_USERNAME, JUPED_HOSTNAME, Me.name, Me.name,
          reason);
 #endif /* DANCER */
       toserv("%s", sendstr);
diff -uNrd hybserv/source/server.c hybserv+ipmask/source/server.c
--- hybserv/source/server.c	Fri Dec 26 15:52:42 2003
+++ hybserv+ipmask/source/server.c	Mon Feb 16 12:26:02 2004
@@ -80,6 +80,7 @@
 static void s_trace(int ac, char **av);
 static void s_version(int ac, char **av);
 static void s_motd(int ac, char **av);
+static void s_svshost(int ac, char **av);
 
 static void CheckServCollide(struct Server *bad_server);
 
@@ -115,6 +116,7 @@
       { "TRACE", s_trace },
       { "VERSION", s_version },
       { "MOTD", s_motd },
+	  { "SVSHOST", s_svshost },
 
 #if defined(NICKSERVICES) && defined(CHANNELSERVICES)
 
@@ -645,7 +647,8 @@
   av[5] = username
   av[6] = hostname
   av[7] = server
-  av[8] = real name
+  av[8] = real hostname
+  av[9] = real name
  
   if nick change:
   av[0] = who
@@ -1395,6 +1398,30 @@
 
   DeleteClient(lptr); /* delete user */
 } /* s_quit() */
+
+/*
+s_svshost()
+  Process a SVSHOST statement
+  av[0] = who
+  av[1] = "SVSHOST
+  av[2] = target
+  av[3] = old hostname (unused)
+  av[4] = hostname
+*/
+
+static void s_svshost (int arc, char **av)
+{
+	struct Luser *lptr;
+
+	if ((lptr = FindClient(av[2])) != NULL)
+	{
+		strcpy (lptr->hostname, av[4]);
+		return;
+	}
+
+	putlog(LOG1, "Unknown client: %s", av[2]);
+	return;
+}
 
 /*
 s_kill()
diff -uNrd hybserv/source/sock.c hybserv+ipmask/source/sock.c
--- hybserv/source/sock.c	Sat Apr  5 07:23:27 2003
+++ hybserv+ipmask/source/sock.c	Mon Feb 16 12:11:05 2004
@@ -1184,7 +1184,7 @@
 {
   /* Hybrid6 and 7 handshake -kre */
 #ifdef HYBRID_ONLY
-  toserv("PASS %s :TS\r\nCAPAB :EX"
+  toserv("PASS %s :TS\r\nCAPAB :EX SVSHOST IPMASK"
 #ifdef DANCER
       " DNCR SRV"
 #endif /* DANCER */
