diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/client.h ircd-hybrid-6.0/include/client.h
--- ircd-hybrid-6.0.orig/include/client.h	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/include/client.h	Sun Jul  1 14:48:38 2001
@@ -418,6 +418,9 @@
 #define UMODE_SEEOPERPRIVS   47
 #define UMODE_SEEROUTING     48
 #define UMODE_EXPERIMENTAL   49
+#define UMODE_REMOTEINFO     50
+
+/* Current max umode: 63 */
 
 /* *sigh* overflow flags */
 #define FLAGS2_RESTRICTED   0x0001      /* restricted client */
@@ -547,6 +550,7 @@
 #define CanSeeRouting(x)        (TestBit((x)->umodes,UMODE_SEEROUTING))
 #define CanKill(x)              (TestBit((x)->umodes,UMODE_KILL))
 #define CanDoExperimental(x)    (TestBit((x)->umodes,UMODE_EXPERIMENTAL))
+#define CanGetRemoteInfo(x)     (TestBit((x)->umodes,UMODE_REMOTEINFO))
 
 #define SeesAllConnections(x)	(TestBit((x)->umodes,UMODE_AUSPEX))
 #define IsIdentifiedNick(x)     (TestBit((x)->umodes,UMODE_IDENTIFIED))
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/config.h ircd-hybrid-6.0/include/config.h
--- ircd-hybrid-6.0.orig/include/config.h	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/include/config.h	Sun Jul  1 17:19:15 2001
@@ -1000,8 +1000,17 @@
 
 /* JUPE_CHANNEL - jupes a channel from being joined on this server only
  * if added to Q lines e.g. Q:\#packet_channel:Tired of packets
+ *
+ * No, changed semantics completely. +p users can set +j on a channel to
+ * jupe it. This makes the channel unavailable across the network.
+ *
+ * Q:line jupes are only allowed if Q_LINE_JUPE_CHANNEL is defined
+ * until somebody goes over exactly what this does and if it really can
+ * desync. I'm not convinced about it's behaviour right now.
+ *  -- asuffield
  */
-#undef JUPE_CHANNEL
+#define JUPE_CHANNEL
+#undef Q_LINE_JUPE_CHANNEL
 
 /* 
  * ANTI_SPAMBOT
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/m_commands.h ircd-hybrid-6.0/include/m_commands.h
--- ircd-hybrid-6.0.orig/include/m_commands.h	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/include/m_commands.h	Sun Jul  1 16:01:49 2001
@@ -48,6 +48,7 @@
 extern int m_pong(struct Client *,struct Client *,int,char **);
 extern int m_wallops(struct Client *,struct Client *,int,char **);
 extern int m_kick(struct Client *,struct Client *,int,char **);
+extern int m_remove(struct Client *,struct Client *,int,char **);
 extern int m_nick(struct Client *,struct Client *,int,char **);
 extern int m_error(struct Client *,struct Client *,int,char **);
 extern int m_notice(struct Client *,struct Client *,int,char **);
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/msg.h ircd-hybrid-6.0/include/msg.h
--- ircd-hybrid-6.0.orig/include/msg.h	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/include/msg.h	Sun Jul  1 16:01:14 2001
@@ -105,6 +105,7 @@
 #define MSG_MOTD     "MOTD"     /* MOTD */
 #define MSG_MODE     "MODE"     /* MODE */
 #define MSG_KICK     "KICK"     /* KICK */
+#define MSG_REMOVE   "REMOVE"
 #define MSG_USERHOST "USERHOST" /* USER -> USRH */
 #define MSG_ISON     "ISON"     /* ISON */
 #define MSG_REHASH   "REHASH"   /* REHA */
@@ -199,6 +200,7 @@
   { MSG_TOPIC,   m_topic,    0, MAXPARA, 1, 0, 0, 0L },
   { MSG_INVITE,  m_invite,   0, MAXPARA, 1, 0, 0, 0L },
   { MSG_KICK,    m_kick,     0, MAXPARA, 1, 0, 0, 0L },
+  { MSG_REMOVE,  m_remove,   0, MAXPARA, 1, 0, 0, 0L },
   { MSG_WALLOPS, m_wallops,  0, MAXPARA, 1, 0, 0, 0L },
 			   /*  { MSG_LOCOPS,  m_locops,   0, MAXPARA, 1, 0, 0, 0L },*/
 #ifdef LWALLOPS
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/numeric.h ircd-hybrid-6.0/include/numeric.h
--- ircd-hybrid-6.0.orig/include/numeric.h	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/include/numeric.h	Sun Jul  1 15:08:48 2001
@@ -365,6 +365,8 @@
 #define ERR_CANTKILLSERVER   483
 #define ERR_DESYNC           484
 #define ERR_USERISIMMUNE     485    /* should this be something else? -dt */
+#define ERR_RESTRICTED       486
+#define ERR_NO_OP_SPLIT      487
 
 #define ERR_NOOPERHOST       491
 
@@ -385,6 +387,19 @@
 
 /* Strings */
 
+/* 001-099: Debugging stuff */
 #define STR_BUGREPORT        001
+#define STR_BLK_BIT_CLEAR    002
+#define STR_ADD_BAD_BAN_TYPE 003
+#define STR_DEL_BAD_BAN_TYPE 004
+#define STR_REMOTE_WILD_WHOIS 005
+
+/* 100-***: Other stuff */
+#define STR_TRY_JOIN_JUPE    100
+#define STR_SPLIT_MODE_ON    101
+#define STR_SPLIT_MODE_OFF   102
+#define STR_BOT_WARN         103
+#define STR_BOT_WARN_JOIN    104
+#define STR_KICK_SPY         105
 
 #endif /* INCLUDED_numeric_h */
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/patchlevel.h ircd-hybrid-6.0/include/patchlevel.h
--- ircd-hybrid-6.0.orig/include/patchlevel.h	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/include/patchlevel.h	Sun Jul  1 17:21:09 2001
@@ -17,5 +17,5 @@
  */
 
 #ifndef PATCHLEVEL
-#define PATCHLEVEL    "dancer-ircd-0.9.3.2"
+#define PATCHLEVEL    "dancer-ircd-0.9.3.3"
 #endif
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/umodes.h ircd-hybrid-6.0/include/umodes.h
--- ircd-hybrid-6.0.orig/include/umodes.h	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/include/umodes.h	Sun Jul  1 14:48:08 2001
@@ -70,6 +70,7 @@
   {UMODE_REJ, 'r'},
   {UMODE_REMOTE, 'R'},
   {UMODE_SERVNOTICE, 's'},
+  {UMODE_REMOTEINFO, 'S'},
   {UMODE_UNKLINE, 'U'},
   {UMODE_SEEOPERPRIVS, 'v'},
   {UMODE_SEEROUTING, 'V'},
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/blalloc.c ircd-hybrid-6.0/src/blalloc.c
--- ircd-hybrid-6.0.orig/src/blalloc.c	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/src/blalloc.c	Sat Jun 30 18:29:06 2001
@@ -280,10 +280,10 @@
 #ifdef DEBUG_BLOCK_ALLOCATOR
       log(L_WARN, "blalloc.c bit already clear in map caller %s %d",
           BH_CurrentFile, BH_CurrentLine);
-      sendto_ops_flag(UMODE_DEBUG, "blalloc.c bit already clear in map elemSize %d caller %s %d",
-			     bh->elemSize,
-			     BH_CurrentFile,
-			     BH_CurrentLine);
+      sendto_ops_flag(UMODE_DEBUG, get_str(STR_BLK_BIT_CLEAR), /* "blalloc.c bit already clear in map elemSize %d caller %s %d" */
+		      bh->elemSize,
+		      BH_CurrentFile,
+		      BH_CurrentLine);
       sendto_ops_flag(UMODE_DEBUG, get_str(STR_BUGREPORT));
 #endif /* DEBUG_BLOCK_ALLOCATOR */
             }
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/channel.c ircd-hybrid-6.0/src/channel.c
--- ircd-hybrid-6.0.orig/src/channel.c	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/src/channel.c	Sun Jul  1 17:14:36 2001
@@ -50,6 +50,7 @@
 #include "send.h"
 #include "struct.h"
 #include "whowas.h"
+#include "m_commands.h"
 
 #include <assert.h>
 #include <string.h>
@@ -226,7 +227,7 @@
       list = &chptr->invexlist;
       break;
     default:
-      sendto_ops_flag(UMODE_DEBUG, "add_id() called with unknown ban type %d!", type);
+      sendto_ops_flag(UMODE_DEBUG, get_str(STR_ADD_BAD_BAN_TYPE), type);
       return -1;
     }
 
@@ -306,7 +307,7 @@
       list = &chptr->invexlist;
       break;
     default:
-      sendto_ops_flag(UMODE_DEBUG, "del_id() called with unknown ban type %d!", type);
+      sendto_ops_flag(UMODE_DEBUG, get_str(STR_DEL_BAD_BAN_TYPE), type);
       return -1;
     }
 
@@ -1214,10 +1215,9 @@
                     {
                       if(!errsent(SM_ERR_RESTRICTED, &errors_sent))
                         {
-                          sendto_one(sptr,
-            ":%s NOTICE %s :*** Notice -- You are restricted and cannot chanop others",
-                                 me.name,
-                                 sptr->name);
+                          sendto_one(sptr, form_str(ERR_RESTRICTED),
+				     me.name,
+				     sptr->name);
                         }
                       /* eat the parameter */
                       parc--;
@@ -2101,8 +2101,8 @@
                   len += 2;
 
                   sendto_ops_flag(UMODE_SERVNOTICE, "%s!%s@%s juping channel %s",
-					  sptr->name, sptr->username,
-					  sptr->host, chptr->chname);
+				  sptr->name, sptr->username,
+				  sptr->host, chptr->chname);
                 }
               else if(whatt == MODE_DEL)
                 {
@@ -2112,8 +2112,8 @@
                   len += 2;
 
                   sendto_ops_flag(UMODE_SERVNOTICE, "%s!%s@%s unjuping channel %s",
-					  sptr->name, sptr->username,
-					  sptr->host, chptr->chname);
+				  sptr->name, sptr->username,
+				  sptr->host, chptr->chname);
                 }
             }
           break;
@@ -2599,10 +2599,9 @@
 #ifdef JUPE_CHANNEL
   if( chptr->mode.mode & MODE_JUPED )
     {
-      sendto_ops_flag(UMODE_SPY,
-			     "User %s (%s@%s) is attempting to join juped channel %s",
-			     sptr->name,
-			     sptr->username, sptr->host,chptr->chname);
+      sendto_ops_flag(UMODE_SPY, get_str(STR_TRY_JOIN_JUPE), /* "User %s (%s@%s) is attempting to join juped channel %s" */
+		      sptr->name,
+		      sptr->username, sptr->host,chptr->chname);
       return (ERR_BADCHANNAME);
     }
 #endif
@@ -3126,7 +3125,7 @@
            * -Dianora
            */
           server_was_split = NO;
-          sendto_ops_flag(UMODE_SERVNOTICE, "Net rejoined, split-mode deactivated, whew");
+          sendto_ops_flag(UMODE_SERVNOTICE, get_str(STR_SPLIT_MODE_OFF));
           cold_start = NO;
 #if defined(PRESERVE_CHANNEL_ON_SPLIT) || defined(NO_JOIN_ON_SPLIT)
           remove_empty_channels();
@@ -3372,10 +3371,9 @@
             {
               if(SPAMNUM && (sptr->join_leave_count >= SPAMNUM))
                 {
-                  sendto_ops_flag(UMODE_BOTS,
-					 "User %s (%s@%s) is a possible spambot",
-					 sptr->name,
-					 sptr->username, sptr->host);
+                  sendto_ops_flag(UMODE_BOTS, get_str(STR_BOT_WARN), /* "User %s (%s@%s) is a possible spambot" */
+				  sptr->name,
+				  sptr->username, sptr->host);
                   sptr->oper_warn_count_down = OPER_SPAM_COUNTDOWN;
                 }
               else
@@ -3435,9 +3433,9 @@
               allow_op = NO;
 
               if(!IsRestricted(sptr) && (flags & CHFL_CHANOP))
-                sendto_one(sptr,":%s NOTICE %s :*** Notice -- Due to a network split, you can not obtain channel operator status in a new channel at this time.",
-                       me.name,
-                       sptr->name);
+                sendto_one(sptr, form_str(ERR_NO_OP_SPLIT),
+			   me.name,
+			   sptr->name);
             }
 #endif
 
@@ -3468,12 +3466,11 @@
  
               if(sptr->oper_warn_count_down == 0)
                 {
-                  sendto_ops_flag(UMODE_BOTS,
-					 "User %s (%s@%s) trying to join %s is a possible spambot",
-					 sptr->name,
-					 sptr->username,
-					 sptr->host,
-					 name);     
+                  sendto_ops_flag(UMODE_BOTS, get_str(STR_BOT_WARN_JOIN), /* "User %s (%s@%s) trying to join %s is a possible spambot" */
+				  sptr->name,
+				  sptr->username,
+				  sptr->host,
+				  name);     
                   sptr->oper_warn_count_down = OPER_SPAM_COUNTDOWN;
                 }
 #ifndef ANTI_SPAMBOT_WARN_ONLY
@@ -3595,7 +3592,6 @@
               sendto_match_servs(chptr, cptr,
                                  ":%s SJOIN %lu %s + :@%s", me.name,
                                  chptr->channelts, name, parv[0]);
-
             }                                
           else
             sendto_match_servs(chptr, cptr,
@@ -3696,10 +3692,9 @@
         {
           if(SPAMNUM && (sptr->join_leave_count >= SPAMNUM))
             {
-              sendto_ops_flag(UMODE_BOTS,
-				     "User %s (%s@%s) is a possible spambot",
-				     sptr->name,
-				     sptr->username, sptr->host);
+              sendto_ops_flag(UMODE_BOTS, get_str(STR_BOT_WARN), /* "User %s (%s@%s) is a possible spambot" */
+			      sptr->name,
+			      sptr->username, sptr->host);
               sptr->oper_warn_count_down = OPER_SPAM_COUNTDOWN;
             }
           else
@@ -3820,8 +3815,8 @@
       return 0;
     }
   if (IsServer(sptr))
-    sendto_ops_flag(UMODE_SPY, "KICK from %s for %s %s",
-			    parv[0], parv[1], parv[2]);
+    sendto_ops_flag(UMODE_SPY, get_str(STR_KICK_SPY), /* "KICK by %s on %s, target %s" */
+		    parv[0], parv[1], parv[2]);
   comment = (BadPtr(parv[3])) ? parv[0] : parv[3];
   if (strlen(comment) > (size_t) TOPICLEN)
     comment[TOPICLEN] = '\0';
@@ -3957,6 +3952,177 @@
   return (0);
 }
 
+/* OK, this is just like KICK, but it sends out PARTs. For testing of this
+ * idea, I want to see how well clients handle it
+ *  -- asuffield
+ */
+
+int     m_remove(struct Client *cptr,
+		 struct Client *sptr,
+		 int parc,
+		 char *parv[])
+{
+  struct Client *who;
+  struct Channel *chptr;
+  int   chasing = 0;
+  char  *comment;
+  char  *name;
+  char  *p = (char *)NULL;
+  char  *user;
+
+  if (!CanDoExperimental(sptr))
+    {
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no X umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+    }
+
+  if (parc < 3 || *parv[1] == '\0')
+    {
+      sendto_one(sptr, form_str(ERR_NEEDMOREPARAMS),
+                 me.name, parv[0], "REMOVE");
+      return 0;
+    }
+  if (IsServer(sptr))
+    sendto_ops_flag(UMODE_SPY, get_str(STR_KICK_SPY), /* "KICK by %s on %s, target %s" */
+		    parv[0], parv[1], parv[2]);
+  comment = (BadPtr(parv[3])) ? parv[0] : parv[3];
+  if (strlen(comment) > (size_t) TOPICLEN)
+    comment[TOPICLEN] = '\0';
+
+  *buf = '\0';
+  p = strchr(parv[1],',');
+  if(p)
+    *p = '\0';
+  name = parv[1]; /* strtoken(&p, parv[1], ","); */
+
+  chptr = get_channel(sptr, name, !CREATE);
+  if (!chptr)
+    {
+      sendto_one(sptr, form_str(ERR_NOSUCHCHANNEL),
+                 me.name, parv[0], name);
+      return(0);
+    }
+
+  /* You either have chan op privs, or you don't -Dianora */
+  /* orabidoo and I discussed this one for a while...
+   * I hope he approves of this code, (he did) users can get quite confused...
+   *    -Dianora
+   */
+
+  if (!IsServer(sptr) && !is_chan_op(sptr, chptr) && !IsGodOper(sptr)) 
+    { 
+      /* was a user, not a server, and user isn't seen as a chanop here */
+      
+      if(MyConnect(sptr))
+        {
+          /* user on _my_ server, with no chanops.. so go away */
+          
+          sendto_one(sptr, form_str(ERR_CHANOPRIVSNEEDED),
+                     me.name, parv[0], chptr->chname);
+          return(0);
+        }
+
+      if(chptr->channelts == 0)
+        {
+          /* If its a TS 0 channel, do it the old way */
+          
+          sendto_one(sptr, form_str(ERR_CHANOPRIVSNEEDED),
+                     me.name, parv[0], chptr->chname);
+          return(0);
+        }
+
+      /* Its a user doing a kick, but is not showing as chanop locally
+       * its also not a user ON -my- server, and the channel has a TS.
+       * There are two cases we can get to this point then...
+       *
+       *     1) connect burst is happening, and for some reason a legit
+       *        op has sent a KICK, but the SJOIN hasn't happened yet or 
+       *        been seen. (who knows.. due to lag...)
+       *
+       *     2) The channel is desynced. That can STILL happen with TS
+       *        
+       *     Now, the old code roger wrote, would allow the KICK to 
+       *     go through. Thats quite legit, but lets weird things like
+       *     KICKS by users who appear not to be chanopped happen,
+       *     or even neater, they appear not to be on the channel.
+       *     This fits every definition of a desync, doesn't it? ;-)
+       *     So I will allow the KICK, otherwise, things are MUCH worse.
+       *     But I will warn it as a possible desync.
+       *
+       *     -Dianora
+       */
+
+      /*          sendto_one(sptr, form_str(ERR_DESYNC),
+       *           me.name, parv[0], chptr->chname);
+       */
+
+      /*
+       * After more discussion with orabidoo...
+       *
+       * The code was sound, however, what happens if we have +h (TS4)
+       * and some servers don't understand it yet? 
+       * we will be seeing servers with users who appear to have
+       * no chanops at all, merrily kicking users....
+       * -Dianora
+       */
+    }
+
+  p = strchr(parv[2],',');
+  if(p)
+    *p = '\0';
+  user = parv[2]; /* strtoken(&p2, parv[2], ","); */
+
+  if (!(who = find_chasing(sptr, user, &chasing)))
+    {
+      return(0);
+    }
+
+  if (IsMember(who, chptr))
+    {
+      /* Immune users */
+      if( !(IsServer(sptr) || IsSetOperGod(sptr)) && IsImmune(who) )
+        {
+          sendto_one(sptr, form_str(ERR_USERISIMMUNE),
+                     me.name, parv[0], user, name);
+          return(0);
+        }
+
+#ifdef HIDE_OPS
+      sendto_channel_chanops_butserv(chptr, sptr,
+                             ":%s PART %s :%s", who->name,
+                             name, comment);
+      sendto_channel_non_chanops_butserv(chptr, sptr,
+                             ":%s PART %s :%s", who->name,
+                             name, comment);
+
+#else
+      sendto_channel_butserv(chptr, sptr,
+                             ":%s PART %s :%s", who->name,
+                             name, comment);
+#endif
+      sendto_match_servs(chptr, cptr,
+                         ":%s PART %s :%s",
+                         who->name, name,
+                         comment);
+      remove_user_from_channel(who, chptr, 1);
+      if (MyClient(sptr))
+#ifdef GODOPERS
+        sendto_ops_flag(UMODE_BOTS,
+			"Remove from %s by %s on %s (%s@%s) [%s]",
+			name, sptr->name, who->name,
+			who->username, who->host, who->user->server);
+#endif
+    }
+  else
+    sendto_one(sptr, form_str(ERR_USERNOTINCHANNEL),
+               me.name, parv[0], user, name);
+
+  return (0);
+}
+
 int     count_channels(struct Client *sptr)
 {
   struct Channel      *chptr;
@@ -4808,10 +4974,10 @@
   if(!isnew && !newts && oldts)
     {
       sendto_channel_butserv(chptr, &me,
-             ":%s NOTICE %s :*** Notice -- TS for %s changed from %lu to 0",
-              me.name, chptr->chname, chptr->chname, oldts);
+			     ":%s NOTICE %s :*** Notice -- TS for %s changed from %lu to 0",
+			     me.name, chptr->chname, chptr->chname, oldts);
       sendto_ops_flag(UMODE_SERVNOTICE, "Server %s changing TS on %s from %lu to 0",
-			      sptr->name,parv[2],oldts);
+		      sptr->name,parv[2],oldts);
     }
 
   doesop = (parv[4+args][0] == '@' || parv[4+args][1] == '@');
@@ -5341,6 +5507,36 @@
         *t = '\0';
       sendto_match_servs(chptr, cptr, "%s", sjbuf);
     }
+
+  /* OK, let's try this here. If this channel is juped, and we have people
+   * in it, kick 'em. This prevents people from ducking network-wide jupes
+   * on split servers
+   *
+   * We do this on every server and only kick the local clients. This cuts
+   * down on network traffic during a burst.
+   *
+   *  -- asuffield
+   */
+#ifdef JUPE_CHANNEL
+  {
+    Link* lp;
+    char* aparv[] = {NULL, NULL, NULL, "Juped channel"};
+    aparv[0] = me.name;
+    aparv[1] = chptr->chname;
+
+    if (chptr->mode.mode & MODE_JUPED)
+      for (lp = chptr->members; lp; lp = lp->next)
+	{
+	  acptr = lp->value.cptr;
+	  if (MyClient(acptr) && !IsImmune(acptr))
+	    {
+	      parv[2] = acptr->name;
+	      m_kick(&me, &me, 4, parv);
+	    }
+	}
+  }
+#endif
+
   return 0;
 }
 
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/client.c ircd-hybrid-6.0/src/client.c
--- ircd-hybrid-6.0.orig/src/client.c	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/src/client.c	Sat Jun 30 18:22:02 2001
@@ -218,7 +218,7 @@
        * hybrid team wants to hear about it
        */
       sendto_ops_flag(UMODE_DEBUG, BH_FREE_ERROR_MESSAGE, cptr);
-      sendto_ops_flag(UMODE_DEBUG, "Please report to the dancer-hybrid team! opn-coders@vc.bc.ca");
+      sendto_ops_flag(UMODE_DEBUG, get_str(STR_BUGREPORT));
 
       log(L_WARN, BH_FREE_ERROR_MESSAGE, cptr);
     }
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/list.c ircd-hybrid-6.0/src/list.c
--- ircd-hybrid-6.0.orig/src/list.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/list.c	Sat Jun 30 18:23:29 2001
@@ -196,7 +196,7 @@
       if(BlockHeapFree(free_anUsers,user))
         {
           sendto_ops_flag(UMODE_DEBUG, "list.c couldn't BlockHeapFree(free_anUsers,user) user = %lX", user );
-          sendto_ops_flag(UMODE_DEBUG, "Please report to the dancer-hybrid team! opn-coders@vc.bc.ca");
+          sendto_ops_flag(UMODE_DEBUG, get_str(STR_BUGREPORT));
 #ifdef SYSLOG_BLOCK_ALLOCATOR 
           log(L_DEBUG,"list.c couldn't BlockHeapFree(free_anUsers,user) user = %lX", (long unsigned int) user);
 #endif
@@ -248,7 +248,7 @@
   if(BlockHeapFree(free_Links,lp))
     {
       sendto_ops_flag(UMODE_DEBUG, "list.c couldn't BlockHeapFree(free_Links,lp) lp = %lX", lp );
-      sendto_ops_flag(UMODE_DEBUG, "Please report to the hybrid team!");
+      sendto_ops_flag(UMODE_DEBUG, get_str(STR_BUGREPORT));
     }
 }
 
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_admin.c ircd-hybrid-6.0/src/m_admin.c
--- ircd-hybrid-6.0.orig/src/m_admin.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/m_admin.c	Sun Jul  1 14:53:44 2001
@@ -110,7 +110,16 @@
         last_used = CurrentTime;
     }
 
-  if (IsRegisteredUser(sptr) && (hunt_server(cptr,sptr,":%s ADMIN :%s",1,parc,parv) != HUNTED_ISME))
+  if (MyClient(sptr) && !CanGetRemoteInfo(sptr) && parc > 1)
+    {
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+    }
+
+  if (hunt_server(cptr,sptr,":%s ADMIN :%s",1,parc,parv) != HUNTED_ISME)
     return 0;
 
   if (IsPerson(sptr))
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_connect.c ircd-hybrid-6.0/src/m_connect.c
--- ircd-hybrid-6.0.orig/src/m_connect.c	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/src/m_connect.c	Sun Jul  1 14:51:31 2001
@@ -121,9 +121,13 @@
       return -1;
     }
 
+  /* Right now this is the same. Not sure whether it's worth keeping or not. */
   if (MyConnect(sptr) && !IsSetOperRemote(sptr) && parc > 3)
     {
-      sendto_one(sptr,":%s NOTICE %s :You have no R umode", me.name, parv[0]);
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no R umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
       return 0;
     }
 
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_info.c ircd-hybrid-6.0/src/m_info.c
--- ircd-hybrid-6.0.orig/src/m_info.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/m_info.c	Sun Jul  1 14:54:01 2001
@@ -34,6 +34,15 @@
   static time_t last_used=0L;
   Info *infoptr;
 
+  if (MyClient(sptr) && !CanGetRemoteInfo(sptr) && parc > 1)
+    {
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+    }
+
   if (hunt_server(cptr,sptr,":%s INFO :%s",1,parc,parv) == HUNTED_ISME)
   {
     sendto_ops_flag(UMODE_SPY, "info requested by %s (%s@%s) [%s]",
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_links.c ircd-hybrid-6.0/src/m_links.c
--- ircd-hybrid-6.0.orig/src/m_links.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/m_links.c	Sun Jul  1 14:55:19 2001
@@ -110,6 +110,15 @@
 
   if (parc > 2)
     {
+      if (MyClient(sptr) && !CanGetRemoteInfo(sptr))
+	{
+	  if (SeesOperMessages(sptr))
+	    sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+	  else
+	    sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+	  return 0;
+	}
+
       if (hunt_server(cptr, sptr, ":%s LINKS %s :%s", 1, parc, parv)
           != HUNTED_ISME)
         return 0;
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_ltrace.c ircd-hybrid-6.0/src/m_ltrace.c
--- ircd-hybrid-6.0.orig/src/m_ltrace.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/m_ltrace.c	Sun Jul  1 14:56:13 2001
@@ -128,9 +128,20 @@
 #endif
 
   if (parc > 2)
-    if (hunt_server(cptr, sptr, ":%s LTRACE %s :%s",
-                    2, parc, parv))
-      return 0;
+    {
+      if (MyClient(sptr) && !CanGetRemoteInfo(sptr))
+	{
+	  if (SeesOperMessages(sptr))
+	    sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+	  else
+	    sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+	  return 0;
+	}
+
+      if (hunt_server(cptr, sptr, ":%s LTRACE %s :%s",
+		      2, parc, parv))
+	return 0;
+    }
   
   if (parc > 1)
     tname = parv[1];
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_stats.c ircd-hybrid-6.0/src/m_stats.c
--- ircd-hybrid-6.0.orig/src/m_stats.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/m_stats.c	Sun Jul  1 14:57:11 2001
@@ -154,6 +154,15 @@
   */
 #endif
 
+  if (MyClient(sptr) && !CanGetRemoteInfo(sptr) && parc > 2)
+    {
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+    }
+
   if (hunt_server(cptr,sptr,":%s STATS %s :%s",2,parc,parv)!=HUNTED_ISME)
     return 0;
 
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_time.c ircd-hybrid-6.0/src/m_time.c
--- ircd-hybrid-6.0.orig/src/m_time.c	Fri Jul 30 07:40:16 1999
+++ ircd-hybrid-6.0/src/m_time.c	Sun Jul  1 14:57:46 2001
@@ -95,6 +95,15 @@
  */
 int m_time(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
 {
+  if (MyClient(sptr) && !CanGetRemoteInfo(sptr) && parc > 1)
+    {
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+    }
+
   if (hunt_server(cptr,sptr,":%s TIME :%s",1,parc,parv) == HUNTED_ISME)
     sendto_one(sptr, form_str(RPL_TIME), me.name,
                parv[0], me.name, date(0));
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_trace.c ircd-hybrid-6.0/src/m_trace.c
--- ircd-hybrid-6.0.orig/src/m_trace.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/m_trace.c	Sun Jul  1 14:59:01 2001
@@ -121,8 +121,19 @@
 
   now = time(NULL);  
   if (parc > 2)
-    if (hunt_server(cptr, sptr, ":%s TRACE %s :%s", 2, parc, parv))
-      return 0;
+    {
+      if (MyClient(sptr) && !CanGetRemoteInfo(sptr))
+	{
+	  if (SeesOperMessages(sptr))
+	    sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+	  else
+	    sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+	  return 0;
+	}
+
+      if (hunt_server(cptr, sptr, ":%s TRACE %s :%s", 2, parc, parv))
+	return 0;
+    }
   
   if (parc > 1)
     tname = parv[1];
@@ -172,7 +183,7 @@
   if (!IsSetOperAuspex(sptr))
     {
       if (parv[1] && !strchr(parv[1],'.') && (strchr(parv[1], '*')
-          || strchr(parv[1], '?'))) /* bzzzt, no wildcard nicks for non(auspex)opers */
+					      || strchr(parv[1], '?'))) /* bzzzt, no wildcard nicks for non(auspex)opers */
         {
           sendto_one(sptr, form_str(RPL_ENDOFTRACE),me.name,
                      parv[0], parv[1]);
@@ -182,8 +193,8 @@
 
   if(MyClient(sptr))
     sendto_ops_flag(UMODE_SPY, "trace requested by %s (%s@%s) [%s]",
-			   sptr->name, sptr->username, sptr->host,
-			   sptr->user->server);
+		    sptr->name, sptr->username, sptr->host,
+		    sptr->user->server);
 
 
   doall = (parv[1] && (parc > 1)) ? match(tname, me.name): TRUE;
@@ -255,30 +266,30 @@
    * Count up all the servers and clients in a downlink.
    */
   if (doall)
-   {
-    for (acptr = GlobalClientList; acptr; acptr = acptr->next)
-     {
+    {
+      for (acptr = GlobalClientList; acptr; acptr = acptr->next)
+	{
 #ifdef  SHOW_INVISIBLE_LUSERS
-      if (IsPerson(acptr))
-        {
-          link_u[acptr->from->fd]++;
-        }
+	  if (IsPerson(acptr))
+	    {
+	      link_u[acptr->from->fd]++;
+	    }
 #else
-      if (IsPerson(acptr) &&
-        (!IsInvisible(acptr) || SeesAllConnections(sptr)))
-        {
-          link_u[acptr->from->fd]++;
-        }
+	  if (IsPerson(acptr) &&
+	      (!IsInvisible(acptr) || SeesAllConnections(sptr)))
+	    {
+	      link_u[acptr->from->fd]++;
+	    }
 #endif
-      else
-        {
-          if (IsServer(acptr))
-            {
-              link_s[acptr->from->fd]++;
-            }
-        }
-     }
-   }
+	  else
+	    {
+	      if (IsServer(acptr))
+		{
+		  link_s[acptr->from->fd]++;
+		}
+	    }
+	}
+    }
   /* report all direct connections */
   for (i = 0; i <= highest_fd; i++)
     {
@@ -316,7 +327,7 @@
         case STAT_ME:
           break;
         case STAT_UNKNOWN:
-/* added time -Taner */
+	  /* added time -Taner */
           sendto_one(sptr, form_str(RPL_TRACEUNKNOWN),
                      me.name, parv[0], c_class, name, ip,
                      acptr->firsttime ? CurrentTime - acptr->firsttime : -1);
@@ -329,7 +340,7 @@
 	   * Or at least, those who SeesOpers() -- asuffield
            */
           if ((IsSetOperAuspex(sptr) &&
-              (MyClient(sptr) || !(dow && IsInvisible(acptr))))
+	       (MyClient(sptr) || !(dow && IsInvisible(acptr))))
               || !dow || (IsAnOper(acptr) && SeesOpers(sptr)))
             {
               if (IsAnOper(acptr))
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_users.c ircd-hybrid-6.0/src/m_users.c
--- ircd-hybrid-6.0.orig/src/m_users.c	Thu Jul 29 08:11:49 1999
+++ ircd-hybrid-6.0/src/m_users.c	Sun Jul  1 14:59:31 2001
@@ -94,6 +94,15 @@
  */
 int m_users(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
 {
+  if (MyClient(sptr) && !CanGetRemoteInfo(sptr) && parc > 1)
+    {
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+    }
+
   if (hunt_server(cptr,sptr,":%s USERS :%s",1,parc,parv) == HUNTED_ISME)
     {
       /* No one uses this any more... so lets remap it..   -Taner */
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_version.c ircd-hybrid-6.0/src/m_version.c
--- ircd-hybrid-6.0.orig/src/m_version.c	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/src/m_version.c	Sun Jul  1 14:59:53 2001
@@ -95,7 +95,7 @@
  */
 int m_version(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
-  if (IsSetOperRemote(sptr))
+  if (CanGetRemoteInfo(sptr))
      {
        if ((parc > 1) && (strcmp(parv[1], "*") == 0))
 	 {
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_whois.c ircd-hybrid-6.0/src/m_whois.c
--- ircd-hybrid-6.0.orig/src/m_whois.c	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/src/m_whois.c	Sun Jul  1 15:10:09 2001
@@ -140,9 +140,12 @@
 
   if(parc > 2)
     {
-      if (hunt_server(cptr,sptr,":%s WHOIS %s :%s", 1,parc,parv) !=
-          HUNTED_ISME)
-        return 0;
+      /* Let's remove remote WHOIS entirely. It no longer has any use
+       *  -- asuffield
+       */
+/*       if (hunt_server(cptr,sptr,":%s WHOIS %s :%s", 1,parc,parv) != */
+/*           HUNTED_ISME) */
+/*         return 0; */
       parv[1] = parv[2];
     }
 
@@ -184,6 +187,9 @@
       ** We're no longer allowing remote users to generate
       ** requests with wildcards.
       */
+      /* Not that it should ever be able to happen anyway
+       *  -- asuffield
+       */
 #ifdef NO_WHOIS_WILDCARDS
       if (wilds)
 #else
@@ -192,6 +198,8 @@
         {
           sendto_one(sptr, form_str(ERR_NOSUCHNICK),
                      me.name, parv[0], nick);
+	  sendto_ops_flag(UMODE_DEBUG, get_str(STR_REMOTE_WILD_WHOIS), /* "WTF: Remote WHOIS %s %s from %s" */
+			  parv[1], (parc > 2) ? parv[2] : "", sptr->name);
           return 0;
         }
       /*        continue; */
@@ -375,8 +383,8 @@
            *   the target user(s) are on;
            */
 
-/* If its an unregistered client, ignore it, it can
-   be "seen" on a /trace anyway  -Dianora */
+	  /* If its an unregistered client, ignore it, it can
+	     be "seen" on a /trace anyway  -Dianora */
 
           if(!IsRegistered(acptr))
             continue;
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/messages_cust.tab ircd-hybrid-6.0/src/messages_cust.tab
--- ircd-hybrid-6.0.orig/src/messages_cust.tab	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/src/messages_cust.tab	Sun Jul  1 15:08:29 2001
@@ -507,7 +507,7 @@
 /* 462 ERR_ALREADYREGISTRED, */ ":%s 462 %s :Please register only once per session",
 /* 463 ERR_NOPERMFORHOST, */    ":%s 463 %s :Your host isn't among the privileged",
 /* 464 ERR_PASSWDMISMATCH, */   ":%s 464 %s :Hmmm, that wasn't the right password",
-/* 465 ERR_YOUREBANNEDCREEP, */ ":%s 465 %s :You may not connect to this server- %s",
+/* 465 ERR_YOUREBANNEDCREEP, */ ":%s 465 %s :You may not connect to this server: %s",
 /* 466 ERR_YOUWILLBEBANNED, */  (char *)NULL,
 /* 467 ERR_KEYSET, */           ":%s 467 %s %s :Channel key is already set",
 /* 468 */       (char *)NULL,
@@ -526,11 +526,11 @@
 /* 481 ERR_NOPRIVILEGES, */
                 ":%s 481 %s :You can't do that, you're no deity",
 /* 482 ERR_CHANOPRIVSNEEDED, */ ":%s 482 %s %s :You need to be a channel operator to do that",
-/* 483 ERR_CANTKILLSERVER, */    ":%s 483 %s :You can't actually kill an IRC server that way.",
+/* 483 ERR_CANTKILLSERVER, */   ":%s 483 %s :You can't actually kill an IRC server that way.",
 /* 484 */       (char *)NULL,
 /* 485 ERR_USERISIMMUNE, */     ":%s 485 %s %s %s :User is immune from kick/deop",
-/* 486 */       (char *)NULL,
-/* 487 */       (char *)NULL,
+/* 486 ERR_RESTRICTED */        ":%s 486 %s :You are restricted and cannot chanop others",
+/* 487 ERR_NO_OP_STPLIT */      ":%s 487 %s :Due to a network split, you can not obtain channel operator status in a new channel at this time.",
 /* 488 */       (char *)NULL,
 /* 489 */       (char *)NULL,
 /* 490 */       (char *)NULL,
@@ -555,21 +555,21 @@
 /* 508 */       (char *)NULL,
 /* 509 */       (char *)NULL,
 /* 510 */       (char *)NULL,
-/* 511 ERR_SILELISTFULL, */ ":%s 511 %s :Your silence list is full" ,
-/* 512 ERR_MAXMAPNODES */  ":%s 512 %s :Maximum nodes for /MAP" ,
-/* 513 ERR_MAXFORWARDING */ ":%s 513 %s :Maximum forwarding reached",
-/* 514 ERR_NOFORWARDING */ ":%s 514 %s :Forwarding has not been enabled on this channel",
+/* 511 ERR_SILELISTFULL, */     ":%s 511 %s :Your silence list is full" ,
+/* 512 ERR_MAXMAPNODES */       ":%s 512 %s :Maximum nodes for /MAP" ,
+/* 513 ERR_MAXFORWARDING */     ":%s 513 %s :Maximum forwarding reached",
+/* 514 ERR_NOFORWARDING */      ":%s 514 %s :Forwarding has not been enabled on this channel",
 
 };
 
 
 static char* strings[] = {
 /* 000 */       (char *)NULL,
-/* 001 STR_BUGREPORT*/       "Please report to the dancer-hybrid team! opn-coders@vc.bc.ca",
-/* 002 */       (char *)NULL,
-/* 003 */       (char *)NULL,
-/* 004 */       (char *)NULL,
-/* 005 */       (char *)NULL,
+/* 001 STR_BUGREPORT */         "Please report to the dancer-hybrid team! opn-coders@vc.bc.ca",
+/* 002 STR_BLK_BIT_CLEAR */     "blalloc.c bit already clear in map elemSize %d caller %s %d",
+/* 003 STR_ADD_BAD_BAN_TYPE */  "add_id() called with unknown ban type %d!",
+/* 004 STR_DEL_BAD_BAN_TYPE */  "del_id() called with unknown ban type %d!",
+/* 005 STR_REMOTE_WILD_WHOIS */ "WTF: Remote wild WHOIS %s %s from %s",
 /* 006 */       (char *)NULL,
 /* 007 */       (char *)NULL,
 /* 008 */       (char *)NULL,
@@ -664,12 +664,12 @@
 /* 097 */       (char *)NULL,
 /* 098 */       (char *)NULL,
 /* 099 */       (char *)NULL,
-/* 100 */       (char *)NULL,
+/* 100 STR_TRY_JOIN_JUPE */     "User %s (%s@%s) is attempting to join juped channel %s",
 /* 101 */       (char *)NULL,
-/* 102 */       (char *)NULL,
-/* 103 */       (char *)NULL,
-/* 104 */       (char *)NULL,
-/* 105 */       (char *)NULL,
+/* 102 STR_SPLIT_MODE_OFF */    "Net rejoined, split-mode deactivated, whew",
+/* 103 STR_BOT_WARN */          "User %s (%s@%s) is a possible spambot",
+/* 104 STR_BOT_WARN_JOIN */     "User %s (%s@%s) trying to join %s is a possible spambot",
+/* 105 STR_KICK_SPY */          "KICK by %s on %s, target %s",
 /* 106 */       (char *)NULL,
 /* 107 */       (char *)NULL,
 /* 108 */       (char *)NULL,
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/motd.c ircd-hybrid-6.0/src/motd.c
--- ircd-hybrid-6.0.orig/src/motd.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/motd.c	Sun Jul  1 15:10:29 2001
@@ -64,6 +64,15 @@
         last_used = CurrentTime;
     }
 
+  if (MyClient(sptr) && !CanGetRemoteInfo(sptr) && parc > 1)
+    {
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+    }
+
   if (hunt_server(cptr, sptr, ":%s MOTD :%s", 1,parc,parv)!=HUNTED_ISME)
     return 0;
 
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/res.c ircd-hybrid-6.0/src/res.c
--- ircd-hybrid-6.0.orig/src/res.c	Sun Jul  1 17:21:35 2001
+++ ircd-hybrid-6.0/src/res.c	Sun Jul  1 16:16:30 2001
@@ -449,7 +449,7 @@
   memset(request, 0, sizeof(ResRQ));
 
   request->sentat  = CurrentTime;
-  request->retries = 2;
+  request->retries = 1;
   request->resend  = 1;
   request->timeout = 2;    /* start at 2 and exponential inc. */
   request->addr.s_addr      = INADDR_NONE;
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/s_conf.c ircd-hybrid-6.0/src/s_conf.c
--- ircd-hybrid-6.0.orig/src/s_conf.c	Sun Jul  1 17:21:36 2001
+++ ircd-hybrid-6.0/src/s_conf.c	Sun Jul  1 17:18:45 2001
@@ -650,7 +650,7 @@
       if( free_ip_entries == (IP_ENTRY *)NULL)
         {
           sendto_ops_flag(UMODE_DEBUG,"s_conf.c free_ip_entries was found NULL in find_or_add");
-          sendto_ops_flag(UMODE_DEBUG,"Please report to the dancer-hybrid team! opn-coders@vc.bc.ca");
+          sendto_ops_flag(UMODE_DEBUG, get_str(STR_BUGREPORT));
           outofmemory();
         }
 
@@ -674,7 +674,7 @@
       if( free_ip_entries == (IP_ENTRY *)NULL)
         {
           sendto_ops_flag(UMODE_DEBUG,"s_conf.c free_ip_entries was found NULL in find_or_add");
-          sendto_ops_flag(UMODE_DEBUG,"Please report to the dancer-hybrid team! opn-coders@vc.bc.ca");
+          sendto_ops_flag(UMODE_DEBUG, get_str(STR_BUGREPORT));
           outofmemory();
         }
 
@@ -808,7 +808,7 @@
         }
     }
   sendto_ops_flag(UMODE_DEBUG,"s_conf.c couldn't find ip# in hash table in remove_one_ip()");
-  sendto_ops_flag(UMODE_DEBUG,"Please report to the dancer-hybrid team! opn-coders@vc.bc.ca");
+  sendto_ops_flag(UMODE_DEBUG, get_str(STR_BUGREPORT));
   return;
 }
 
@@ -2454,7 +2454,7 @@
           aconf->name = aconf->host;
           DupString(aconf->host, "*");
 
-#ifdef JUPE_CHANNEL
+#ifdef Q_LINE_JUPE_CHANNEL
           if(aconf->name[0] == '#')
             {
               aChannel *chptr;
@@ -2554,9 +2554,13 @@
 			/* prev_aconf is the config item which should be previous to me, were I not looking at the other set
 			 * of config items at the same time */
 			/* Now, skip over any other lines in that last group of C/N lines, or else I break them up horribly */
+			char* prev_name = prev_aconf->name;
 			aconf2 = prev_aconf->next;
-			while(aconf2 && !strcmp(prev_aconf->name, aconf2->name))
+			while(aconf2)
 			  {
+			    if (aconf2->status & (CONF_CONNECT_SERVER | CONF_NOCONNECT_SERVER))
+			      if (strcmp(prev_name, aconf2->name) != 0)
+				break;
 			    prev_aconf = aconf2;
 			    aconf2 = aconf2->next;
 			  }
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/whowas.c ircd-hybrid-6.0/src/whowas.c
--- ircd-hybrid-6.0.orig/src/whowas.c	Sun Jul  1 17:21:34 2001
+++ ircd-hybrid-6.0/src/whowas.c	Sun Jul  1 15:11:39 2001
@@ -184,6 +184,16 @@
     }
   if (parc > 2)
     max = atoi(parv[2]);
+
+  if (MyClient(sptr) && !CanGetRemoteInfo(sptr) && parc > 3)
+    {
+      if (SeesOperMessages(sptr))
+	sendto_one(sptr,":%s NOTICE %s :You have no S umode", me.name, parv[0]);
+      else
+	sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+    }
+
   if (parc > 3)
     if (hunt_server(cptr,sptr,":%s WHOWAS %s %s :%s", 3,parc,parv))
       return 0;
