diff -urN ircd-hybrid-7rc8+ratbox/contrib/spy_whois_notice.c ircd-hybrid-7rc8+ratbox+demon/contrib/spy_whois_notice.c
--- ircd-hybrid-7rc8+ratbox/contrib/spy_whois_notice.c	2002-05-25 00:48:34.000000000 +0100
+++ ircd-hybrid-7rc8+ratbox+demon/contrib/spy_whois_notice.c	2003-02-07 23:57:22.000000000 +0000
@@ -50,7 +50,7 @@
 int
 show_notice(struct hook_mfunc_data *data)
 {
-  if (MyConnect(data->source_p) && MyConnect(data->client_p) &&
+  if (MyConnect(data->client_p) &&
       IsOper(data->client_p) && (data->client_p != data->source_p) 
       && data->client_p->umodes & FLAGS_SPY) 
     {
diff -urN ircd-hybrid-7rc8+ratbox/include/client.h ircd-hybrid-7rc8+ratbox+demon/include/client.h
--- ircd-hybrid-7rc8+ratbox/include/client.h	2003-02-07 23:53:15.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/include/client.h	2003-02-07 23:57:22.000000000 +0000
@@ -441,6 +441,7 @@
 #define FLAGS2_OPER_REHASH      0x1000  /* oper can rehash */
 #define FLAGS2_OPER_ADMIN       0x2000  /* oper can set umode +a */
 #define FLAGS2_OPER_XLINE       0x4000  /* oper can xline */
+#define FLAGS2_OPER_HIDDEN_ADMIN 0x100000
 #define FLAGS2_OPER_FLAGS       (FLAGS2_OPER_GLOBAL_KILL | \
                                  FLAGS2_OPER_REMOTE | \
                                  FLAGS2_OPER_UNKLINE | \
@@ -450,6 +451,7 @@
                                  FLAGS2_OPER_DIE | \
                                  FLAGS2_OPER_REHASH| \
 				 FLAGS2_OPER_XLINE | \
+				 FLAGS2_OPER_HIDDEN_ADMIN | \
                                  FLAGS2_OPER_ADMIN)
 
 #define FLAGS2_CBURST		0x10000  /* connection burst being sent */
@@ -582,6 +584,8 @@
 #define SetOperRehash(x)        ((x)->flags2 |= FLAGS2_OPER_REHASH)
 #define IsOperAdmin(x)          ((x)->flags2 & FLAGS2_OPER_ADMIN)
 #define SetOperAdmin(x)         ((x)->flags2 |= FLAGS2_OPER_ADMIN)
+#define IsOperHiddenAdmin(x)    ((x)->flags2 & FLAGS2_OPER_HIDDEN_ADMIN)
+#define SetOperHiddenAdmin(x)   ((x)->flags2 |= FLAGS2_OPER_HIDDEN_ADMIN)
 
 #define IsFloodDone(x)          ((x)->flags2 & FLAGS2_FLOODDONE)
 #define SetFloodDone(x)         ((x)->flags2 |= FLAGS2_FLOODDONE)
diff -urN ircd-hybrid-7rc8+ratbox/include/config.h ircd-hybrid-7rc8+ratbox+demon/include/config.h
--- ircd-hybrid-7rc8+ratbox/include/config.h	2003-02-07 23:53:15.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/include/config.h	2003-02-07 23:57:22.000000000 +0000
@@ -368,7 +368,7 @@
  */
 #define INVARIANTS
 
-#define RELNAME "+ratbox5"
+#define RELNAME "+ratbox+demon"
 #define IRCDNAME PATCHLEVEL RELNAME
 
 #define CONFIG_H_LEVEL_7
diff -urN ircd-hybrid-7rc8+ratbox/include/s_conf.h ircd-hybrid-7rc8+ratbox+demon/include/s_conf.h
--- ircd-hybrid-7rc8+ratbox/include/s_conf.h	2003-02-07 23:53:15.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/include/s_conf.h	2003-02-07 23:57:22.000000000 +0000
@@ -164,6 +164,7 @@
 #define CONF_OPER_DIE           0x0080
 #define CONF_OPER_ADMIN         0x0100
 #define CONF_OPER_XLINE		0x0200
+#define CONF_OPER_HIDDEN_ADMIN  0x0400
 
 struct config_file_entry
 {
diff -urN ircd-hybrid-7rc8+ratbox/modules/core/m_sjoin.c ircd-hybrid-7rc8+ratbox+demon/modules/core/m_sjoin.c
--- ircd-hybrid-7rc8+ratbox/modules/core/m_sjoin.c	2002-07-04 17:07:23.000000000 +0100
+++ ircd-hybrid-7rc8+ratbox+demon/modules/core/m_sjoin.c	2003-02-07 23:57:53.000000000 +0000
@@ -119,6 +119,7 @@
   static         char buf[2*BUFSIZE]; /* buffer for modes and prefix */
   static         char sjbuf_nhops[BUFSIZE]; /* buffer with halfops as @ */
   char           *p; /* pointer used making sjbuf */
+  const char *server_name = ConfigServerHide.hide_servers ? me.name : source_p->name;
   int hide_or_not;
   int i;
   dlink_node *m;
@@ -372,12 +373,12 @@
       if (top_chptr != NULL)
 	sendto_channel_local(ALL_MEMBERS,
 			     chptr, ":%s MODE %s %s %s",
-			     me.name,
+			     server_name,
 			     top_chptr->chname, modebuf, parabuf);
       else
 	sendto_channel_local(ALL_MEMBERS,
 			     chptr, ":%s MODE %s %s %s",
-			     me.name,
+			     server_name,
 			     chptr->chname, modebuf, parabuf);
     }
 
@@ -610,7 +611,7 @@
 	        *mbuf = '\0';
 		sendto_channel_local(hide_or_not, chptr,
 		                     ":%s MODE %s %s %s %s %s %s",
-				     me.name, RootChan(chptr)->chname,
+				     server_name, RootChan(chptr)->chname,
 				     modebuf,
 				     para[0], para[1], para[2], para[3]);
                 mbuf = modebuf;
@@ -642,7 +643,7 @@
           *mbuf = '\0';
           sendto_channel_local(hide_or_not, chptr,
                                ":%s MODE %s %s %s %s %s %s",
-                               me.name,
+                               server_name,
                                RootChan(chptr)->chname,
                                modebuf,
                                para[0],para[1],para[2],para[3]);
@@ -678,7 +679,7 @@
     {
       sendto_channel_local(hide_or_not, chptr,
                            ":%s MODE %s %s %s %s %s %s",
-                           me.name,
+                           server_name,
                            RootChan(chptr)->chname,
                            modebuf,
                            para[0], para[1], para[2], para[3]);
diff -urN ircd-hybrid-7rc8+ratbox/modules/m_kline.c ircd-hybrid-7rc8+ratbox+demon/modules/m_kline.c
--- ircd-hybrid-7rc8+ratbox/modules/m_kline.c	2003-02-07 23:53:15.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/modules/m_kline.c	2003-02-07 23:57:22.000000000 +0000
@@ -46,9 +46,15 @@
 #include "parse.h"
 #include "modules.h"
 
+/* how long to delay klines in seconds */
+#define KLINE_DELAY 2
+
 static void mo_kline(struct Client *,struct Client *,int,char **);
 static void ms_kline(struct Client *,struct Client *,int,char **);
 static void mo_dline(struct Client *,struct Client *,int,char **);
+static void check_klines_event(void *);
+
+static int kline_queued = 0;
 
 struct Message kline_msgtab = {
   "KLINE", 0, 0, 2, 0, MFLG_SLOW, 0,
@@ -109,6 +115,13 @@
 
 #define MAX_EXT_REASON 100
 
+static void
+check_klines_event(void *unused)
+{
+  kline_queued = 0;
+  check_klines();
+  eventDelete(check_klines_event, NULL);
+}
 
 /*
  * mo_kline
@@ -370,7 +383,11 @@
   WriteKlineOrDline(KLINE_TYPE, source_p, aconf->user, aconf->host,
 		    reason, oper_reason, current_date, cur_time);
   /* Now, activate kline against current online clients */
-  check_klines();
+  if(kline_queued == 0)
+  {
+    eventAdd("check_klines", check_klines_event, NULL, KLINE_DELAY);
+    kline_queued = 1;
+  }
 }
 
 /*
@@ -397,7 +414,11 @@
   ilog(L_TRACE, "%s added temporary %d min. K-Line for [%s@%s] [%s]",
        source_p->name, tkline_time/60,
        aconf->user, aconf->host, aconf->passwd);
-  check_klines();
+  if(kline_queued == 0)
+  {
+    eventAdd("check_klines", check_klines_event, NULL, KLINE_DELAY);
+    kline_queued = 1;
+  }
 }
 
 /* apply_dline
diff -urN ircd-hybrid-7rc8+ratbox/modules/m_list.c ircd-hybrid-7rc8+ratbox+demon/modules/m_list.c
--- ircd-hybrid-7rc8+ratbox/modules/m_list.c	2003-01-17 05:11:53.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/modules/m_list.c	2003-02-07 23:57:22.000000000 +0000
@@ -40,7 +40,7 @@
 #include "msg.h"
 #include "parse.h"
 #include "modules.h"
-
+#include "linebuf.h"
 
 static void m_list(struct Client*, struct Client*, int, char**);
 static void ms_list(struct Client*, struct Client*, int, char**);
@@ -189,14 +189,27 @@
 static int list_all_channels(struct Client *source_p)
 {
   struct Channel *chptr;
+  int sendq_limit;
+
+  /* give them an output limit of 90% of their sendq. --fl */
+  sendq_limit = (int) get_sendq(source_p);
+  sendq_limit /= 10;
+  sendq_limit *= 9;
 
   sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name);
 
   for ( chptr = GlobalChannelList; chptr; chptr = chptr->nextch )
     {
-      if ( !source_p->user ||
-	   (SecretChannel(chptr) && !IsMember(source_p, chptr)))
+      if(linebuf_len(&source_p->localClient->buf_sendq) > sendq_limit)
+      {
+	sendto_one(source_p, ":%s 416 %s %s :output too large, truncated",
+	           me.name, source_p->name, "LIST");
+	break;
+      }
+
+      if(SecretChannel(chptr) && !IsMember(source_p, chptr))
 	continue;
+
       list_one_channel(source_p,chptr);
     }
 
diff -urN ircd-hybrid-7rc8+ratbox/modules/m_stats.c ircd-hybrid-7rc8+ratbox+demon/modules/m_stats.c
--- ircd-hybrid-7rc8+ratbox/modules/m_stats.c	2003-01-17 13:00:50.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/modules/m_stats.c	2003-02-07 23:57:22.000000000 +0000
@@ -663,7 +663,8 @@
 
       sendto_one(source_p, ":%s %d %s :[%c][%s] %s (%s@%s) Idle: %d",
                  me.name, RPL_STATSDEBUG, source_p->name,
-                 IsOperAdmin(target_p) ? 'A' : 'O',
+                 IsOperAdmin(target_p) ? 
+		 (IsOperHiddenAdmin(target_p) ? 'O' : 'A') : 'O',
 		 oper_privs_as_string(target_p, aconf->port),
 		 target_p->name, target_p->username, target_p->host,
 		 (int)(CurrentTime - target_p->user->last));
@@ -672,7 +673,8 @@
     {
       sendto_one(source_p, ":%s %d %s :[%c] %s (%s@%s) Idle: %d",
                  me.name, RPL_STATSDEBUG, source_p->name,
-                 IsOperAdmin(target_p) ? 'A' : 'O',
+                 IsOperAdmin(target_p) ?
+		 (IsOperHiddenAdmin(target_p) ? 'O' : 'A') : 'O',
 		 target_p->name, target_p->username, target_p->host,
 		 (int)(CurrentTime - target_p->user->last));
     }
diff -urN ircd-hybrid-7rc8+ratbox/modules/m_version.c ircd-hybrid-7rc8+ratbox+demon/modules/m_version.c
--- ircd-hybrid-7rc8+ratbox/modules/m_version.c	2002-07-18 00:09:10.000000000 +0100
+++ ircd-hybrid-7rc8+ratbox+demon/modules/m_version.c	2003-02-08 00:30:09.000000000 +0000
@@ -71,7 +71,7 @@
 {
   static time_t last_used=0L;
 
-  if((last_used + ConfigFileEntry.pace_wait) > CurrentTime)
+  if((last_used + ConfigFileEntry.pace_wait_simple) > CurrentTime)
   {
     /* safe enough to give this on a local connect only */
     sendto_one(source_p,form_str(RPL_LOAD2HI),me.name,parv[0]);
diff -urN ircd-hybrid-7rc8+ratbox/modules/m_whois.c ircd-hybrid-7rc8+ratbox+demon/modules/m_whois.c
--- ircd-hybrid-7rc8+ratbox/modules/m_whois.c	2003-01-26 21:12:22.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/modules/m_whois.c	2003-02-07 23:57:22.000000000 +0000
@@ -480,8 +480,7 @@
 /* although we should fill in parc and parv, we don't ..
  *	 be careful of this when writing whois hooks
  */
-  if(MyClient(source_p)) 
-    hook_call_event("doing_whois", &hd);
+  hook_call_event("doing_whois", &hd);
   
   return;
 }
diff -urN ircd-hybrid-7rc8+ratbox/src/ircd_lexer.l ircd-hybrid-7rc8+ratbox+demon/src/ircd_lexer.l
--- ircd-hybrid-7rc8+ratbox/src/ircd_lexer.l	2003-02-07 23:53:15.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/src/ircd_lexer.l	2003-02-07 23:57:22.000000000 +0000
@@ -182,6 +182,7 @@
 have_ident	{ return HAVE_IDENT; }
 havent_read_conf { return HAVENT_READ_CONF; }
 hidden		{ return HIDDEN; }
+hidden_admin	{ return HIDDEN_ADMIN; }
 hide_servers	{ return HIDE_SERVERS; }
 host		{ return HOST; }
 hub		{ return HUB; }
diff -urN ircd-hybrid-7rc8+ratbox/src/ircd_parser.y ircd-hybrid-7rc8+ratbox+demon/src/ircd_parser.y
--- ircd-hybrid-7rc8+ratbox/src/ircd_parser.y	2003-02-07 23:53:15.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/src/ircd_parser.y	2003-02-07 23:57:22.000000000 +0000
@@ -143,6 +143,7 @@
 %token  HAVE_IDENT
 %token	HAVENT_READ_CONF
 %token  HIDDEN
+%token	HIDDEN_ADMIN
 %token  HIDE_SERVERS
 %token  HOST
 %token  HUB
@@ -740,7 +741,7 @@
 oper_items:     oper_items oper_item |
                 oper_item;
 
-oper_item:      oper_name  | oper_user | oper_password |
+oper_item:      oper_name  | oper_user | oper_password | oper_hidden_admin |
                 oper_class | oper_global_kill | oper_remote | oper_xline |
                 oper_kline | oper_unkline | oper_gline | oper_nick_changes |
                 oper_die | oper_rehash | oper_admin | oper_rsa_public_key_file | error;
@@ -890,6 +891,10 @@
             |
             ADMIN '=' TNO ';' { yy_achead->port &= ~CONF_OPER_ADMIN;} ;
 
+oper_hidden_admin: HIDDEN_ADMIN '=' TYES ';' { yy_achead->port |= CONF_OPER_HIDDEN_ADMIN; }
+	    |
+	    HIDDEN_ADMIN '=' TNO ';' { yy_achead->port &= ~CONF_OPER_HIDDEN_ADMIN; };
+
 /***************************************************************************
  *  section class
  ***************************************************************************/
diff -urN ircd-hybrid-7rc8+ratbox/src/s_conf.c ircd-hybrid-7rc8+ratbox+demon/src/s_conf.c
--- ircd-hybrid-7rc8+ratbox/src/s_conf.c	2003-02-07 23:53:15.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/src/s_conf.c	2003-02-07 23:57:22.000000000 +0000
@@ -2040,7 +2040,10 @@
     }
   else
     *privs_ptr++ = 'a';
-  
+
+  if((client_p != NULL) && (port & CONF_OPER_HIDDEN_ADMIN))
+    SetOperHiddenAdmin(client_p);
+
   *privs_ptr = '\0';
 
   return(privs_out);
diff -urN ircd-hybrid-7rc8+ratbox/src/s_user.c ircd-hybrid-7rc8+ratbox+demon/src/s_user.c
--- ircd-hybrid-7rc8+ratbox/src/s_user.c	2003-02-07 23:53:15.000000000 +0000
+++ ircd-hybrid-7rc8+ratbox+demon/src/s_user.c	2003-02-07 23:57:22.000000000 +0000
@@ -1152,6 +1152,9 @@
             *m++ = user_modes[i].letter;
           else
             {
+	      if(IsOperHiddenAdmin(source_p) && user_modes[i].letter == 'a')
+		continue;
+
               what = MODE_ADD;
               *m++ = '+';
               *m++ = user_modes[i].letter;
