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	Fri May 25 23:58:40 2001
+++ ircd-hybrid-6.0/include/client.h	Fri May 25 23:56:17 2001
@@ -333,6 +333,7 @@
 #define FLAGS_INVISIBLE    0x00400 /* makes user invisible */
 #define FLAGS_BOTS         0x00800 /* shows bots */
 #define FLAGS_EXTERNAL     0x01000 /* show servers introduced */
+#define FLAGS_NINVITE      0x40000 /* Don't send or receive INVITE messages -- PMA */
 /* user information flags, only settable by remote mode or local oper */
 #define FLAGS_IMMUNE       0x02000 /* immune from kick/deop */
 #define FLAGS_OPER         0x04000 /* Operator */
@@ -340,7 +341,9 @@
 #define FLAGS_AUSPEX       0x10000 /* See the invisible. */
 #define FLAGS_IDENTIFIED   0x20000 /* Registered and identified with NickServ -- MGS */
 
 #define FLAGS_GOD          0x400000 /* greater deity */
+/* Last flag is 0x80000000 for 32-bit unsigned int */
+
 /* *sigh* overflow flags */
 #define FLAGS2_RESTRICTED   0x0001      /* restricted client */
 #define FLAGS2_PING_TIMEOUT 0x0002
@@ -388,12 +391,12 @@
 
 
 #define SEND_UMODES  (FLAGS_INVISIBLE | FLAGS_OPER | FLAGS_WALLOP | \
-                      FLAGS_IMMUNE | FLAGS_IDENTIFIED)
+                      FLAGS_IMMUNE | FLAGS_IDENTIFIED | FLAGS_NINVITE)
 /*
  * Only opers can have modes outside USER_UMODES.  If you change this
  * set, then also change the explanatory NOTICE in user_mode(). -dark
  */
-#define USER_UMODES  (FLAGS_INVISIBLE | FLAGS_WALLOP)
+#define USER_UMODES  (FLAGS_INVISIBLE | FLAGS_WALLOP | FLAGS_NINVITE)
 #define ALL_UMODES   (SEND_UMODES | FLAGS_SERVNOTICE | FLAGS_CCONN | \
                       FLAGS_REJ | FLAGS_SKILL | FLAGS_FULL | FLAGS_SPY | \
                       FLAGS_NCHANGE | FLAGS_OPERWALL | FLAGS_DEBUG | \
@@ -445,6 +448,9 @@
 #define IsInvisible(x)          ((x)->umodes & FLAGS_INVISIBLE)
 #define SetInvisible(x)         ((x)->umodes |= FLAGS_INVISIBLE)
 #define ClearInvisible(x)       ((x)->umodes &= ~FLAGS_INVISIBLE)
+#define BlocksInvites(x)        ((x)->umodes & FLAGS_NINVITE)
+#define SetNoInvites(x)         ((x)->umodes |= FLAGS_NINVITE)
+#define ClearNoInvites(x)       ((x)->umodes &= ~FLAGS_NINVITE)
 #define SendWallops(x)          (((x)->umodes & FLAGS_WALLOP) && IsAnOper(x))
 #define ClearWallops(x)         ((x)->umodes &= ~FLAGS_WALLOP)
 #define SendServNotice(x)       (((x)->umodes & FLAGS_SERVNOTICE) && IsAnOper(x))
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	Fri May 25 23:58:40 2001
+++ ircd-hybrid-6.0/include/numeric.h	Fri May 25 23:56:17 2001
@@ -322,7 +322,9 @@
 #define ERR_NOLOGIN          444
 #define ERR_SUMMONDISABLED   445
 #define ERR_USERSDISABLED    446
-
+#define ERR_TARGETNINVITE    447
+#define ERR_SOURCENINVITE    448
+  
 #define ERR_NOTREGISTERED    451
 
 #define ERR_NEEDMOREPARAMS   461
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/opers.txt ircd-hybrid-6.0/opers.txt
--- ircd-hybrid-6.0.orig/opers.txt	Thu Jan  4 03:31:08 2001
+++ ircd-hybrid-6.0/opers.txt	Fri May 25 23:56:17 2001
@@ -12,6 +12,8 @@
          +o     - Designates this client is a global IRC Operator.
                   Use the /oper command to attain this.
          +i     - Designates this client 'invisible'.
+         +I     - Prevents this client from sending or receiving
+                  INVITE messages.
          +w     - Can see server wallops.
        * +z     - Can see oper wallops.
          +s     - Can see generic server messages and oper kills.
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	Fri May 25 23:58:40 2001
+++ ircd-hybrid-6.0/src/channel.c	Fri May 25 23:56:17 2001
@@ -3816,6 +3816,25 @@
         }
     }
 
+   if (BlocksInvites(sptr))
+     {
+	if (MyClient(sptr))
+	  sendto_one(sptr, form_str(ERR_SOURCENINVITE),
+		     me.name, parv[0]);
+	return 0;
+	
+     }
+   
+   if (BlocksInvites(acptr))
+     {
+	if (MyClient(sptr))
+	  sendto_one(sptr, form_str(ERR_TARGETNINVITE),
+		     me.name, parv[0]);
+	return 0;
+	
+     }
+   
+   
   /*
    * due to some whining I've taken out the need for the channel
    * being +i before sending an INVITE. It was intentionally done this
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/messages.tab ircd-hybrid-6.0/src/messages.tab
--- ircd-hybrid-6.0.orig/src/messages.tab	Fri May 25 23:58:40 2001
+++ ircd-hybrid-6.0/src/messages.tab	Fri May 25 23:56:17 2001
@@ -488,8 +488,8 @@
 /* 444 ERR_NOLOGIN, */          ":%s 444 %s %s :User not logged in",
 /* 445 ERR_SUMMONDISABLED, */   ":%s 445 %s :SUMMON has been removed",
 /* 446 ERR_USERSDISABLED, */    ":%s 446 %s :USERS has been removed",
-/* 447 */       (char *)NULL,
-/* 448 */       (char *)NULL,
+/* 447 ERR_TARGETNINVITE, */    ":%s 447 %s :User has opted not to receive INVITEs (umode +I)",
+/* 448 ERR_SOURCENINVITE, */    ":%s 448 %s :You may not send INVITEs with umode I set",
 /* 449 */       (char *)NULL,
 /* 450 */       (char *)NULL,
 /* 451 ERR_NOTREGISTERED, */    ":%s 451 %s :You have not registered",
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	Fri May 25 23:58:40 2001
+++ ircd-hybrid-6.0/src/messages_cust.tab	Fri May 25 23:56:17 2001
@@ -489,8 +489,8 @@
 /* 444 ERR_NOLOGIN, */          ":%s 444 %s %s :User not logged in",
 /* 445 ERR_SUMMONDISABLED, */   ":%s 445 %s :SUMMON has been removed",
 /* 446 ERR_USERSDISABLED, */    ":%s 446 %s :USERS has been removed",
-/* 447 */       (char *)NULL,
-/* 448 */       (char *)NULL,
+/* 447 ERR_TARGETNINVITE, */    ":%s 447 %s :User has opted not to receive INVITEs (umode +I)",
+/* 448 ERR_SOURCENINVITE, */    ":%s 448 %s :You may not send INVITEs with umode I set",
 /* 449 */       (char *)NULL,
 /* 450 */       (char *)NULL,
 /* 451 ERR_NOTREGISTERED, */    ":%s 451 %s :You haven't registered yet",
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/s_user.c ircd-hybrid-6.0/src/s_user.c
--- ircd-hybrid-6.0.orig/src/s_user.c	Fri May 25 23:58:40 2001
+++ ircd-hybrid-6.0/src/s_user.c	Fri May 25 23:56:17 2001
@@ -90,6 +90,7 @@
   {FLAGS_SKILL, 'k'},
   {FLAGS_IMMUNE, 'm'},
   {FLAGS_NCHANGE, 'n'},
+  {FLAGS_NINVITE, 'I'},
   {FLAGS_OPER, 'o'},
   {FLAGS_LOCOP, 'O'},
   {FLAGS_REJ, 'r'},
@@ -119,7 +120,7 @@
   0,            /* F */
   0,            /* G */
   0,            /* H */
-  0,            /* I */
+  FLAGS_NINVITE, /* I */
   0,            /* J */
   0,            /* K */
   0,            /* L */
