diff -u -r -N ircu2.10-lain1.1/config/config-sh.in ircu2.10-lain/config/config-sh.in
--- ircu2.10-lain1.1/config/config-sh.in	Mon May 21 00:08:39 2001
+++ ircu2.10-lain/config/config-sh.in	Fri May 25 02:31:40 2001
@@ -166,6 +166,13 @@
   if [ -z "$DOMAINNAME" ]; then
     DOMAINNAME=none
   fi
+  NETWORKNAME_DEFAULT=`echo $DOMAINNAME | sed '{s/\..*//;}'`
+  echo "When linking to QuakeNet, use QuakeNet as network name"
+  echo "When linking to B2IRC, use B2IRC as network name"
+  string 'What is the name of your network' NETWORKNAME $NETWORKNAME_DEFAULT
+  if [ -z "$NETWORKNAME" ]; then
+    NETWORKNAME=our
+  fi
   string 'Please give a random seed of eight characters' RANDOM_SEED 45648766
   echo "When linking to B2IRC or QuakeNet, do NOT define this"
   bool 'Does your host have a reliable clock' RELIABLE_CLOCK
diff -u -r -N ircu2.10-lain1.1/doc/example.conf ircu2.10-lain/doc/example.conf
--- ircu2.10-lain1.1/doc/example.conf	Mon May 21 01:02:41 2001
+++ ircu2.10-lain/doc/example.conf	Fri May 25 01:57:26 2001
@@ -81,24 +81,25 @@
 #
 # Unless specified otherwise, you should usually leave these as defaults
 #
-# +-------------- Opers can set umode +k (Channel Service)
-# |+------------- Opers can set umode +X (Extended oper)
-# ||+------------ ..to join invite only channels
-# |||+----------- ..to join keyed channels
-# ||||+---------- ..to join channels if banned
-# |||||+--------- ..to join full channels
-# ||||||+-------- ..to kill +k clients
-# |||||||+------- ..to deop +k clients
-# ||||||||+------ ..to kick +k clients
-# |||||||||+----- Use fakehosts (F-lines) [This is not wallopped]
-# ||||||||||+---- Opers can message +n channels externally
-# |||||||||||+--- Opers can speak on moderated channels [This is not wallopped]
-# ||||||||||||+-- Opers can use servmode command
-# |||||||||||||+- Opers can change their host dynamically
-# ||||||||||||||+ Allow users to SETHOST passworded S:lines
-# |||||||||||||||
-
-E:121121211121111
+# +---------------- Opers can set umode +k (Channel Service)
+# |+--------------- Opers can set umode +X (Extended oper)
+# ||+-------------- ..to join invite only channels
+# |||+------------- ..to join keyed channels
+# ||||+------------ ..to join channels if banned
+# |||||+----------- ..to join full channels
+# ||||||+---------- ..to kill +k clients
+# |||||||+--------- ..to deop +k clients
+# ||||||||+-------- ..to kick +k clients
+# |||||||||+------- Use fakehosts (F-lines) [This is not wallopped]
+# ||||||||||+------ Opers can message +n channels externally
+# |||||||||||+----- Opers can speak on moderated channels [This is not wallopped]
+# ||||||||||||+---- Opers can use servmode command
+# |||||||||||||+--- Opers can change their host dynamically
+# ||||||||||||||+-- Allow users to SETHOST passworded S:lines
+# |||||||||||||||+- Opers will not exceed their SendQ [This is not wallopped]
+# ||||||||||||||||+ Opers have smaller penalty when flooding [This is not wallopped]
+# |||||||||||||||||
+E:12112121112111111
 
 # F-lines are used to define fakehosts for certain users
 # line is in format: F:<ident>:<original host>:<fakehost>
diff -u -r -N ircu2.10-lain1.1/include/patch.h ircu2.10-lain/include/patch.h
--- ircu2.10-lain1.1/include/patch.h	Tue May 22 15:45:30 2001
+++ ircu2.10-lain/include/patch.h	Fri May 25 01:28:49 2001
@@ -1,9 +1,7 @@
 #ifndef __HAVE_PATCH_H__
 #define __HAVE_PATCH_H__
 
-#define PATCHOPTIONS 15
-
-#define NETWORKNAME "QuakeNET"
+#define PATCHOPTIONS 17
 
 #define OPER_CANSET_K		1
 #define OPER_CANSET_X		2
@@ -20,6 +18,8 @@
 #define OPER_SERVMODE		13
 #define OPER_DYNHOST		14
 #define USER_SETHOST		15
+#define OPER_CANFLOOD           16
+#define OPER_NOLAG              17
 
 #define DESC_OPER_CANSET_K	" Opers can set umode +k (Channel Service)"
 #define DESC_OPER_CANSET_X	"   Opers can set umode +X (Extended oper)"
@@ -36,7 +36,8 @@
 #define DESC_OPER_SERVMODE	"           Opers can use servmode command"
 #define DESC_OPER_DYNHOST	"  Opers can change their host dynamically"
 #define DESC_USER_SETHOST	"Allow users to SETHOST passworded S:lines"
-
+#define DESC_OPER_CANFLOOD      "        Opers will not exceed their SendQ"
+#define DESC_OPER_NOLAG         " Opers have smaller penalty when flooding"
 
 #define HEADERLINE "--------------------------------------------------------------------"
 #define DGPHFILE                "demogrph_countries.txt"
diff -u -r -N ircu2.10-lain1.1/include/patchlevel.h ircu2.10-lain/include/patchlevel.h
--- ircu2.10-lain1.1/include/patchlevel.h	Sun May 20 22:09:43 2001
+++ ircu2.10-lain/include/patchlevel.h	Thu May 24 23:12:32 2001
@@ -19,9 +19,9 @@
  *
  */
 
-#define PATCHLEVEL "lain(1.1)"
+#define PATCHLEVEL "+lain(1.1.1)"
 
-#define RELEASE ".10."
+#define RELEASE ".10"
 
 /*
  * Deliberate empty lines
diff -u -r -N ircu2.10-lain1.1/ircd/channel.c ircu2.10-lain/ircd/channel.c
--- ircu2.10-lain1.1/ircd/channel.c	Wed May 16 09:24:23 2001
+++ ircu2.10-lain/ircd/channel.c	Fri May 25 01:41:16 2001
@@ -489,17 +489,11 @@
   if (!IsUser(cptr))
     return 0;
 
-  Debug(( DEBUG_DEBUG, "is_banned() called.\n"));
-
   if (member && IsBanValid(member))
     return IsBanned(member);
 
-  Debug(( DEBUG_DEBUG, "IsBanValid() False.\n"));
-
   s = make_nick_user_host(cptr->name, cptr->user->username, cptr->user->host);
 
-  Debug(( DEBUG_DEBUG, "make_nick_user_host(%s, %s, %s) == %s.\n", cptr->name, cptr->user->username, cptr->user->host, s));
-
   for (tmp = chptr->banlist; tmp; tmp = tmp->next) {
     if ((tmp->flags & CHFL_BAN_IPMASK)) {
       if (!ip_s)
@@ -1175,7 +1169,6 @@
 
   if(hackmode == 1 && !IsOption(OPER_SERVMODE))
     return 0;
-  Debug((DEBUG_DEBUG,"Mode accepted: if(hackmode == 1 && !IsOption(OPER_SERVMODE))\n"));
   /*
    * Mode is accepted when sptr is a channel operator
    * but also when the mode is received from a server.
@@ -1188,7 +1181,6 @@
     if (!(IsServer(cptr) || member_y))
       return 0;
   }
-  Debug((DEBUG_DEBUG,"Mode accepted:IsServer and member_y\n"));
   mode = &(chptr->mode);
   memcpy(&oldm, mode, sizeof(struct Mode));
 
diff -u -r -N ircu2.10-lain1.1/ircd/gline.c ircu2.10-lain/ircd/gline.c
--- ircu2.10-lain1.1/ircd/gline.c	Sun Mar 19 07:24:26 2000
+++ ircu2.10-lain/ircd/gline.c	Thu May 24 23:35:03 2001
@@ -201,9 +201,9 @@
 
   /* Inform ops */
   sendto_op_mask(SNO_GLINE,
-      "%s adding %s%s for %s@%s, expiring at " TIME_T_FMT ": %s", sptr->name,
-      local ? "local " : "",
-      gtype ? "BADCHAN" : "GLINE", user, host, expire, comment);
+      "%s%s[+] for %s@%s, from %s, expires " TIME_T_FMT ", reason: %s",
+      local ? "LOCAL ":"", gtype ? "BADCHAN" : "GLINE",
+      user, host, sptr->name, expire, comment);
 
 #ifdef GPATH
   write_log(GPATH,
diff -u -r -N ircu2.10-lain1.1/ircd/m_gline.c ircu2.10-lain/ircd/m_gline.c
--- ircu2.10-lain1.1/ircd/m_gline.c	Sat Mar 18 07:20:29 2000
+++ ircu2.10-lain/ircd/m_gline.c	Thu May 24 23:37:34 2001
@@ -230,8 +230,8 @@
         /*
          * removing the gline, notify opers
          */
-        sendto_op_mask(SNO_GLINE, "%s removing %s for %s@%s", parv[0],
-            gtype ? "BADCHAN" : "GLINE", gline->name, gline->host);
+	sendto_op_mask(SNO_GLINE, "%s[-] for %s@%s by %s",
+            gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, parv[0]);
 
 #ifdef GPATH
        write_log(GPATH, "# " TIME_T_FMT " %s removing %s for %s@%s\n",
@@ -248,9 +248,8 @@
         {                       /* new expire time? */
           /* yes, notify the opers */
           sendto_op_mask(SNO_GLINE,
-             "%s resetting expiration time on %s for %s@%s to " TIME_T_FMT,
-             parv[0], gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, 
-             expire);
+             "%s[r] for %s@%s to " TIME_T_FMT " by %s",
+             gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, expire, parv[0]);
 #ifdef GPATH
           write_log(GPATH, "# " TIME_T_FMT " %s resetting expiration time "
               "on %s for %s@%s to " TIME_T_FMT "\n",
@@ -389,8 +388,9 @@
       else if (GlineIsLocal(gline))
       {
         /* Remove local G-line */
-        sendto_op_mask(SNO_GLINE, "%s removed local %s for %s@%s",
-            parv[0], gtype ? "BADCHAN" : "GLINE", gline->name, gline->host);
+          sendto_op_mask(SNO_GLINE,
+             "LOCAL %s[-] for %s@%s by %s",
+             gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, parv[0]);
 #ifdef GPATH
         write_log(GPATH, "# " TIME_T_FMT
             " %s!%s@%s removed local %s for %s@%s\n",
@@ -431,10 +431,9 @@
     }
     else if (expire)
     {                           /* changing only the expiration */
-      sendto_op_mask(SNO_GLINE,
-          "%s resetting expiration time on %s for %s@%s to " TIME_T_FMT,
-          parv[0], gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, 
-          gline->expire);
+          sendto_op_mask(SNO_GLINE,
+             "%s[r] for %s@%s to " TIME_T_FMT " by %s",
+             gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, expire, parv[0]);
 #ifdef GPATH
       write_log(GPATH, "# " TIME_T_FMT " %s!%s@%s resetting expiration "
           "time on %s for %s@%s to " TIME_T_FMT "\n", TStime(), parv[0],
@@ -570,8 +569,8 @@
         /*
          * removing the gline, notify opers
          */
-        sendto_op_mask(SNO_GLINE, "%s removing %s for %s@%s", parv[0],
-            gtype ? "BADCHAN" : "GLINE", gline->name, gline->host);
+	sendto_op_mask(SNO_GLINE, "%s[-] for %s@%s by %s",
+            gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, parv[0]);
 
 #ifdef GPATH
        write_log(GPATH, "# " TIME_T_FMT " %s removing %s for %s@%s\n",
@@ -588,9 +587,9 @@
         {                       /* new expire time? */
           /* yes, notify the opers */
           sendto_op_mask(SNO_GLINE,
-             "%s resetting expiration time on %s for %s@%s to " TIME_T_FMT,
-             parv[0], gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, 
-             expire);
+             "%s[r] for %s@%s to " TIME_T_FMT " by %s",
+             gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, expire, parv[0]);
+
 #ifdef GPATH
           write_log(GPATH, "# " TIME_T_FMT " %s resetting expiration time "
               "on %s for %s@%s to " TIME_T_FMT "\n",
@@ -771,10 +770,10 @@
     }
     else if (expire)
     {                           /* changing only the expiration */
-      sendto_op_mask(SNO_GLINE,
-          "%s resetting expiration time on %s for %s@%s to " TIME_T_FMT,
-          parv[0], gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, 
-          gline->expire);
+          sendto_op_mask(SNO_GLINE,
+             "%s[r] for %s@%s to " TIME_T_FMT " by %s",
+             gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, expire, parv[0]);
+
 #ifdef GPATH
       write_log(GPATH, "# " TIME_T_FMT " %s!%s@%s resetting expiration "
           "time on %s for %s@%s to " TIME_T_FMT "\n", TStime(), parv[0],
@@ -912,8 +911,8 @@
         /*
          * removing the gline, notify opers
          */
-        sendto_op_mask(SNO_GLINE, "%s removing %s for %s@%s", parv[0],
-            gtype ? "BADCHAN" : "GLINE", gline->name, gline->host);
+	sendto_op_mask(SNO_GLINE, "%s[-] for %s@%s by %s",
+            gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, parv[0]);
 
 #ifdef GPATH
        write_log(GPATH, "# " TIME_T_FMT " %s removing %s for %s@%s\n",
@@ -930,9 +929,9 @@
         {                       /* new expire time? */
           /* yes, notify the opers */
           sendto_op_mask(SNO_GLINE,
-             "%s resetting expiration time on %s for %s@%s to " TIME_T_FMT,
-             parv[0], gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, 
-             expire);
+             "%s[r] for %s@%s to " TIME_T_FMT " by %s",
+             gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, expire, parv[0]);
+
 #ifdef GPATH
           write_log(GPATH, "# " TIME_T_FMT " %s resetting expiration time "
               "on %s for %s@%s to " TIME_T_FMT "\n",
@@ -1071,8 +1070,10 @@
       else if (GlineIsLocal(gline))
       {
         /* Remove local G-line */
-        sendto_op_mask(SNO_GLINE, "%s removed local %s for %s@%s",
-            parv[0], gtype ? "BADCHAN" : "GLINE", gline->name, gline->host);
+          sendto_op_mask(SNO_GLINE,
+             "LOCAL %s[-] for %s@%s by %s",
+             gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, parv[0]);
+
 #ifdef GPATH
         write_log(GPATH, "# " TIME_T_FMT
             " %s!%s@%s removed local %s for %s@%s\n",
@@ -1113,10 +1114,9 @@
     }
     else if (expire)
     {                           /* changing only the expiration */
-      sendto_op_mask(SNO_GLINE,
-          "%s resetting expiration time on %s for %s@%s to " TIME_T_FMT,
-          parv[0], gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, 
-          gline->expire);
+          sendto_op_mask(SNO_GLINE,
+             "%s[r] for %s@%s to " TIME_T_FMT " by %s",
+             gtype ? "BADCHAN" : "GLINE", gline->name, gline->host, expire, parv[0]);
 #ifdef GPATH
       write_log(GPATH, "# " TIME_T_FMT " %s!%s@%s resetting expiration "
           "time on %s for %s@%s to " TIME_T_FMT "\n", TStime(), parv[0],
diff -u -r -N ircu2.10-lain1.1/ircd/m_kick.c ircu2.10-lain/ircd/m_kick.c
--- ircu2.10-lain1.1/ircd/m_kick.c	Fri May 18 00:02:30 2001
+++ ircu2.10-lain/ircd/m_kick.c	Thu May 24 23:33:36 2001
@@ -156,7 +156,7 @@
    */
   if(IsOption(X_CANKICK_K))
   {
-    if(IsService(who))
+    if(IsService(who) && MyUser(sptr))
     {
       sendto_one(sptr, err_str(ERR_ISREALSERVICE), me.name, parv[0], parv[2], chptr->chname);
       return 0;
@@ -182,16 +182,6 @@
       return 0;
     }
   }
-#ifdef NO_OPER_DEOP_LCHAN
-  /*
-   * Prevent kicking opers from local channels -DM-
-   */
-  if (IsOperOnLocalChannel(who, chptr->chname)) {
-    sendto_one(sptr, err_str(ERR_ISOPERLCHAN), me.name,
-               parv[0], who->name, chptr->chname);
-    return 0;
-  }
-#endif
 
   /* 
    * Servers can now send kicks without hacks during a netburst - they
diff -u -r -N ircu2.10-lain1.1/ircd/m_stats.c ircu2.10-lain/ircd/m_stats.c
--- ircu2.10-lain1.1/ircd/m_stats.c	Wed Apr 25 22:37:53 2001
+++ ircu2.10-lain/ircd/m_stats.c	Tue May 22 23:11:57 2001
@@ -1564,9 +1564,9 @@
       break;
     case 'G':
     case 'g': /* send glines */
+      gline_remove_expired(TStime());
       if(IsAnOper(sptr))
       {
-        gline_remove_expired(TStime());
         for (gline = GlobalGlineList; gline; gline = gline->next) {
           sendto_one(sptr, rpl_str(RPL_STATSGLINE), me.name,
                      sptr->name, 'G', gline->name, gline->host,
diff -u -r -N ircu2.10-lain1.1/ircd/parse.c ircu2.10-lain/ircd/parse.c
--- ircu2.10-lain1.1/ircd/parse.c	Fri May 18 02:30:31 2001
+++ ircu2.10-lain/ircd/parse.c	Fri May 25 01:43:57 2001
@@ -824,7 +824,12 @@
   i = bufend - ((s) ? s : ch);
   mptr->bytes += i;
   if ((mptr->flags & MFLG_SLOW))
-    cptr->since += (2 + i / 120);
+  {
+    if(IsOption(OPER_NOLAG) && IsAnOper(cptr))
+      cptr->since += 1;
+    else
+      cptr->since += (2 + i / 120);
+  }
   /*
    * Allow only 1 msg per 2 seconds
    * (on average) to prevent dumping.
diff -u -r -N ircu2.10-lain1.1/ircd/patch.c ircu2.10-lain/ircd/patch.c
--- ircu2.10-lain1.1/ircd/patch.c	Fri May 18 02:53:52 2001
+++ ircu2.10-lain/ircd/patch.c	Fri May 25 01:08:28 2001
@@ -121,7 +121,6 @@
   {
     return;
   }
-//  sendto_one(cptr, rpl_str(RPL_PATCHHEAD), me.name, cptr->name, me.name, aconf->host);
   sprintf(buftext, "Patch configuration for %s:", me.name);
   sendto_one(cptr, rpl_str(RPL_DATASTR), me.name, cptr->name, buftext);
   sprintf(buftext, "(E:%s) [*=Usage is wallopped]:", aconf->host);
@@ -141,11 +140,18 @@
   sendto_one(cptr, rpl_str(RPL_PATCHCONF), me.name, cptr->name, DESC_OPER_SERVMODE, LogOption(OPER_SERVMODE)?'*':' ', IsOption(OPER_SERVMODE)?"YES":"NO");
   sendto_one(cptr, rpl_str(RPL_PATCHCONF), me.name, cptr->name, DESC_OPER_DYNHOST, LogOption(OPER_DYNHOST)?'*':' ', IsOption(OPER_DYNHOST)?"YES":"NO");
   sendto_one(cptr, rpl_str(RPL_PATCHCONF), me.name, cptr->name, DESC_USER_SETHOST, LogOption(USER_SETHOST)?'*':' ', IsOption(USER_SETHOST)?"YES":"NO");
+  sendto_one(cptr, rpl_str(RPL_PATCHCONF), me.name, cptr->name, DESC_OPER_CANFLOOD, LogOption(OPER_CANFLOOD)?'*':' ', IsOption(OPER_CANFLOOD)?"YES":"NO");
+  sendto_one(cptr, rpl_str(RPL_PATCHCONF), me.name, cptr->name, DESC_OPER_NOLAG, LogOption(OPER_NOLAG)?'*':' ', IsOption(OPER_NOLAG)?"YES":"NO");
   }
 
 int IsService(struct Client *cptr)
 {
   struct ConfItem *aconf;
+/* Sanity checks */
+  if(!IsUser(cptr)) return 0;
+/* Check if the nick is juped in U:lines, if not, 
+  user shouldn't be protected in any case */
+  if(!isNickJuped(cptr->name)) return 0;
   for(aconf = GlobalConfList ; aconf ; aconf = aconf->next)
     if((aconf->status & CONF_UWORLD) && (strCasediff(aconf->host, cptr->user->server->name)==0) && (strCasediff(aconf->host, cptr->user->host)==0))
       return 1;
diff -u -r -N ircu2.10-lain1.1/ircd/s_bsd.c ircu2.10-lain/ircd/s_bsd.c
--- ircu2.10-lain1.1/ircd/s_bsd.c	Tue Mar 28 09:04:24 2000
+++ ircu2.10-lain/ircd/s_bsd.c	Fri May 25 01:40:39 2001
@@ -49,6 +49,7 @@
 #include "sys.h"
 #include "uping.h"
 #include "version.h"
+#include "patch.h"
 
 #include <arpa/inet.h>
 #include <arpa/nameser.h>
@@ -686,13 +687,22 @@
     if (length > 0 && 0 == dbuf_put(&cptr->recvQ, readbuf, length)) {
       return exit_client(cptr, cptr, &me, "dbuf_put fail");
     }
-#ifndef NOFLOODCONTROL
     /*
      * XXX - cptr will always be a user or unregistered
      */
-    if (IsUser(cptr) && DBufLength(&cptr->recvQ) > CLIENT_FLOOD)
-      return exit_client(cptr, cptr, &me, "Excess Flood");
-
+#ifndef NOFLOODCONTROL
+    if(IsOption(OPER_CANFLOOD))
+    {
+      if (IsUser(cptr) && !IsAnOper(cptr) && DBufLength(&cptr->recvQ) > CLIENT_FLOOD)
+        return exit_client(cptr, cptr, &me, "Excess Flood");
+      else if(IsUser(cptr) && MyUser(cptr) && DBufLength(&cptr->recvQ) > CLIENT_FLOOD)
+        DBufClear(&cptr->recvQ);   
+    } 
+    else
+    {
+      if (IsUser(cptr) && DBufLength(&cptr->recvQ) > CLIENT_FLOOD)
+        return exit_client(cptr, cptr, &me, "Excess Flood");
+    }
     while (DBufLength(&cptr->recvQ) && !NoNewLine(cptr) && 
            (IsTrusted(cptr) || cptr->since - CurrentTime < 10))
 #else
diff -u -r -N ircu2.10-lain1.1/ircd/s_conf.c ircu2.10-lain/ircd/s_conf.c
--- ircu2.10-lain1.1/ircd/s_conf.c	Mon May 21 00:48:24 2001
+++ ircu2.10-lain/ircd/s_conf.c	Fri May 25 01:43:22 2001
@@ -661,19 +661,8 @@
   struct ConfItem *aconf;
   for(aconf = GlobalConfList; aconf; aconf = aconf->next)
   {
-    if((aconf->status & CONF_FAKEHOST))
-    {
-      Debug((DEBUG_DEBUG, "Fakehost for: %s@%s -> %s", aconf->host, aconf->passwd, aconf->name));
-      if(!strCasediff(aconf->host, ident))
-      {
-        Debug((DEBUG_DEBUG, "Ident matches... (%s==%s)", aconf->host, ident));
-        if(!strCasediff(aconf->passwd, hostname))
-        {
-          Debug((DEBUG_DEBUG, "Hostname matches... (%s==%s)", aconf->passwd, hostname));
+    if((aconf->status & CONF_FAKEHOST) && !strCasediff(aconf->host, ident) && !strCasediff(aconf->passwd, hostname))
           break;
-        }
-      }
-    }
   }
   return (aconf);
 }
diff -u -r -N ircu2.10-lain1.1/ircd/send.c ircu2.10-lain/ircd/send.c
--- ircu2.10-lain1.1/ircd/send.c	Sun Apr 22 22:31:38 2001
+++ ircu2.10-lain/ircd/send.c	Fri May 25 00:02:56 2001
@@ -36,6 +36,7 @@
 #include "sprintf_irc.h"
 #include "struct.h"
 #include "sys.h"
+#include "patch.h"
 
 #include <assert.h>
 #include <stdio.h>
@@ -231,8 +232,13 @@
     if (IsServer(to))
       sendto_ops("Max SendQ limit exceeded for %s: " SIZE_T_FMT " > " SIZE_T_FMT,
                  to->name, DBufLength(&to->sendQ), get_sendq(to));
-    dead_link(to, "Max sendQ exceeded");
-    return;
+    if(IsOption(OPER_CANFLOOD) && IsAnOper(to))
+       DBufClear(&to->recvQ);
+    else
+    {
+      dead_link(to, "Max sendQ exceeded");
+      return;
+    }
   }
 
   Debug((DEBUG_SEND, "Sending [%s] to %s", buf, to->name));
