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 May 27 13:52:36 2001
+++ ircd-hybrid-6.0/include/client.h	Sun May 27 12:25:31 2001
@@ -336,6 +336,7 @@
 #define FLAGS_OPER         0x4000 /* Operator */
 #define FLAGS_LOCOP        0x8000 /* Local operator -- SRB */
 
+#define FLAGS_GOD          0x400000 /* greater deity */
 /* *sigh* overflow flags */
 #define FLAGS2_RESTRICTED   0x0001      /* restricted client */
 #define FLAGS2_PING_TIMEOUT 0x0002
@@ -353,7 +354,9 @@
 #define FLAGS2_OPER_K           0x0400  /* oper can kill/kline */
 #define FLAGS2_OPER_DIE         0x0800  /* oper can die */
 #define FLAGS2_OPER_REHASH      0x1000  /* oper can rehash */
+#define FLAGS2_OPER_GOD         0x4000000 /* oper can have an apotheosis */
 #define FLAGS2_OPER_FLAGS       (FLAGS2_OPER_GLOBAL_KILL | \
+                                 FLAGS2_OPER_GOD | \
                                  FLAGS2_OPER_REMOTE | \
                                  FLAGS2_OPER_UNKLINE | \
                                  FLAGS2_OPER_GLINE | \
@@ -382,7 +385,8 @@
 #define ALL_UMODES   (SEND_UMODES | FLAGS_SERVNOTICE | FLAGS_CCONN | \
                       FLAGS_REJ | FLAGS_SKILL | FLAGS_FULL | FLAGS_SPY | \
                       FLAGS_NCHANGE | FLAGS_OPERWALL | FLAGS_DEBUG | \
-                      FLAGS_BOTS | FLAGS_EXTERNAL | FLAGS_LOCOP )
+                      FLAGS_BOTS | FLAGS_EXTERNAL | FLAGS_LOCOP | \
+                      FLAGS_GOD)
 
 #ifndef OPER_UMODES
 #define OPER_UMODES  (FLAGS_OPER | FLAGS_WALLOP | FLAGS_SERVNOTICE | \
@@ -412,6 +416,11 @@
 /* oper flags */
 #define MyOper(x)               (MyConnect(x) && IsOper(x))
 #define IsOper(x)               ((x)->umodes & FLAGS_OPER)
+#ifdef GODOPERS
+#define IsGodOper(x)            ((x)->umodes & FLAGS_GOD)
+#else
+#define IsGodOper(x)            0
+#endif
 #define IsLocOp(x)              ((x)->umodes & FLAGS_LOCOP)
 #define IsAnOper(x)             ((x)->umodes & (FLAGS_OPER|FLAGS_LOCOP))
 #define SetOper(x)              ((x)->umodes |= FLAGS_OPER)
@@ -482,6 +491,10 @@
 #define IsIdlelined(x)          ((x)->flags2 & FLAGS2_IDLE_LINED)
 #endif
 
+#ifdef GODOPERS
+#define SetOperGod(x)           ((x)->flags2 |= FLAGS2_OPER_GOD)
+#define IsSetOperGod(x)         ((x)->flags2 & FLAGS2_OPER_GOD)
+#endif
 #define SetOperGlobalKill(x)    ((x)->flags2 |= FLAGS2_OPER_GLOBAL_KILL)
 #define IsOperGlobalKill(x)     ((x)->flags2 & FLAGS2_OPER_GLOBAL_KILL)
 #define SetOperRemote(x)        ((x)->flags2 |= FLAGS2_OPER_REMOTE)
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 May 27 13:52:36 2001
+++ ircd-hybrid-6.0/include/config.h	Sun May 27 12:15:11 2001
@@ -737,6 +737,14 @@
  */
 #undef NEED_TLD_FOR_MASS_NOTICE
 
+/*
+ * Godopers makes opers gods. They are able to do anything a chanop 
+ * normally could. Also they can always send and join, overriding all 
+ * other restrictions.
+ * Additionally, enabling this allows servers to send +-ovh cmodes
+ */
+#define GODOPERS
+
 /*   STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP  */
 
 /* You shouldn't change anything below this line, unless absolutely needed. */
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/include/s_conf.h ircd-hybrid-6.0/include/s_conf.h
--- ircd-hybrid-6.0.orig/include/s_conf.h	Fri Dec  1 06:28:47 2000
+++ ircd-hybrid-6.0/include/s_conf.h	Sun May 27 12:28:56 2001
@@ -327,6 +327,7 @@
 #define CONF_OPER_K          32
 #define CONF_OPER_REHASH     64
 #define CONF_OPER_DIE       128
+#define CONF_OPER_GOD      2048
 
 typedef struct
 {
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 May 27 13:52:36 2001
+++ ircd-hybrid-6.0/src/channel.c	Sun May 27 12:15:11 2001
@@ -773,7 +773,7 @@
 int     can_send(struct Client *cptr, struct Channel *chptr)
 {
   Link  *lp;
-
+  if (IsGodOper(cptr)) return 0;
 #ifdef JUPE_CHANNEL
   if (MyClient(cptr) && (chptr->mode.mode & MODE_JUPED))
     {
@@ -1184,7 +1184,7 @@
   self_lose_ops = 0;
 
   user_mode = user_channel_mode(sptr, chptr);
-  chan_op = (user_mode & CHFL_CHANOP);
+  chan_op = (user_mode & CHFL_CHANOP) || IsGodOper(sptr);
 
   /* has ops or is a server */
   ischop = IsServer(sptr) || chan_op;
@@ -1249,7 +1249,7 @@
         case 'v' :
           if (MyClient(sptr))
             {
-              if(!IsMember(sptr, chptr))
+              if(!IsMember(sptr, chptr) && !IsGodOper(sptr))
                 {
                   if(!errsent(SM_ERR_NOTONCHANNEL, &errors_sent))
                     sendto_one(sptr, form_str(ERR_NOTONCHANNEL),
@@ -1309,13 +1309,13 @@
 
           if ((who == sptr) && (c == 'o'))
             {
-              if(whatt == MODE_ADD)
+              if(whatt == MODE_ADD && !IsGodOper(sptr))
                 break;
               
               if(whatt == MODE_DEL)
                 self_lose_ops = 1;
               }
-
+#ifndef GODOPERS
           /* ignore server-generated MODE +-ovh */
           if (IsServer(sptr))
             {
@@ -1324,7 +1324,7 @@
                        who->name,sptr->name);
               break;
             }
-
+#endif
           if (c == 'o')
             the_mode = MODE_CHANOP;
           else if (c == 'v')
@@ -1361,7 +1361,7 @@
 
           change_chan_flag(chptr, who, the_mode|whatt);
 
-          if (self_lose_ops)
+          if (self_lose_ops && !IsGodOper(sptr))
             isok = 0;
 
           break;
@@ -2323,6 +2323,7 @@
   Link  *lp;
   int ban_or_exception;
 
+  if (IsGodOper(sptr)) return 0;
 #ifdef JUPE_CHANNEL
   if( chptr->mode.mode & MODE_JUPED )
     {
@@ -3521,7 +3522,7 @@
    *    -Dianora
    */
 
-  if (!IsServer(sptr) && !is_chan_op(sptr, chptr) ) 
+  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 */
       
@@ -3609,6 +3610,13 @@
                          parv[0], name,
                          who->name, comment);
       remove_user_from_channel(who, chptr, 1);
+      if (MyClient(sptr))
+#ifdef GODOPERS
+        sendto_ops_flags_butone(NULL, FLAGS_BOTS,
+                                "Kick 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),
@@ -3813,7 +3821,7 @@
           return 0;
         }
 
-      if (!IsMember(sptr, chptr))
+      if (!IsMember(sptr, chptr) && !IsGodOper(sptr))
         {
           sendto_one(sptr, form_str(ERR_NOTONCHANNEL), me.name, parv[0],
               name);
@@ -3826,7 +3834,7 @@
       if(topic) /* a little extra paranoia never hurt */
         {
           if ((chptr->mode.mode & MODE_TOPICLIMIT) == 0 ||
-               is_chan_op(sptr, chptr))
+               is_chan_op(sptr, chptr) || IsGodOper(sptr))
             {
               /* setting a topic */
               /*
@@ -3946,7 +3954,7 @@
 
   /* By this point, chptr is non NULL */  
 
-  if (!IsMember(sptr, chptr))
+  if (!IsMember(sptr, chptr) && !IsGodOper(sptr))
     {
       if (MyClient(sptr))
         sendto_one(sptr, form_str(ERR_NOTONCHANNEL),
@@ -3966,7 +3974,7 @@
     {
       need_invite = YES;
 
-      if (!is_chan_op(sptr, chptr))
+      if (!is_chan_op(sptr, chptr) && !IsGodOper(sptr))
         {
           if (MyClient(sptr))
             sendto_one(sptr, form_str(ERR_CHANOPRIVSNEEDED),
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/m_oper.c ircd-hybrid-6.0/src/m_oper.c
--- ircd-hybrid-6.0.orig/src/m_oper.c	Sun May 27 13:52:36 2001
+++ ircd-hybrid-6.0/src/m_oper.c	Sun May 27 12:30:10 2001
@@ -200,6 +200,8 @@
               sptr->umodes |= ((int)aconf->hold & ALL_UMODES); 
               if( !IsSetOperN(sptr) )
                 sptr->umodes &= ~FLAGS_NCHANGE;
+              if( !IsSetOperGod(sptr) )
+                sptr->umodes &= ~FLAGS_GOD;
               
               sendto_one(sptr, ":%s NOTICE %s :*** Oper flags set from conf",
                          me.name,parv[0]);
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	Fri Dec  1 06:28:50 2000
+++ ircd-hybrid-6.0/src/s_conf.c	Sun May 27 13:23:04 2001
@@ -2963,6 +2963,12 @@
       else if(*privs == 'g')                /* disallow gline */
         int_privs &= ~CONF_OPER_GLINE;
 #endif
+#ifdef GODOPERS
+      else if(*privs == 'P')                /* allow apotheosis */
+        int_privs |= CONF_OPER_GOD;
+      else if(*privs == 'p')                /* disallow apotheosis */
+        int_privs &= ~CONF_OPER_GOD;
+#endif
       else if(*privs == 'H')                /* allow rehash */
         int_privs |= CONF_OPER_REHASH;
       else if(*privs == 'h')                /* disallow rehash */
@@ -3046,4 +3052,14 @@
 
+#ifdef GODOPERS
+  if(port & CONF_OPER_GOD)
+    {
+      if(cptr)
+        SetOperGod(cptr);
+      *privs_ptr++ = 'P';
+    }
+  else
+    *privs_ptr++ = 'p';
+#endif
   if(port & CONF_OPER_DIE)
     {
       if(cptr)
@@ -3100,6 +3116,10 @@
         int_flags |= FLAGS_FULL;
       else if(*flags == 'y')
         int_flags |= FLAGS_SPY;
+#ifdef GODOPERS
+      else if(*flags == 'p')
+        int_flags |= FLAGS_GOD;
+#endif
       else if(*flags == 'd')
         int_flags |= FLAGS_DEBUG;
       else if(*flags == 'n')
@@ -3143,6 +3163,10 @@
     *flags_ptr++ = 'f';
   if(flags & FLAGS_SPY)
     *flags_ptr++ = 'y';
+#ifdef GODOPERS
+  if(flags & FLAGS_GOD)
+    *flags_ptr++ = 'p';
+#endif
   if(flags & FLAGS_DEBUG)
     *flags_ptr++ = 'd';
   if(flags & FLAGS_NCHANGE)
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	Sun May 27 13:52:36 2001
+++ ircd-hybrid-6.0/src/s_user.c	Sun May 27 13:38:40 2001
@@ -73,6 +73,8 @@
 static int valid_username(const char* username);
 static void report_and_set_user_flags( aClient *, aConfItem * );
 static int tell_user_off(aClient *,char **);
+static void send_umode_out_oper (struct Client*, struct Client*, int,
+                                 struct Client*);
 
 /* table of ascii char letters to corresponding bitmask */
 
@@ -87,6 +89,9 @@
   {FLAGS_NCHANGE, 'n'},
   {FLAGS_OPER, 'o'},
   {FLAGS_LOCOP, 'O'},
+#ifdef GODOPERS
+  {FLAGS_GOD,   'p'},
+#endif
   {FLAGS_REJ, 'r'},
   {FLAGS_SERVNOTICE, 's'},
   {FLAGS_WALLOP, 'w'},
@@ -148,7 +153,11 @@
   0,            /* m */
   FLAGS_NCHANGE, /* n */
   FLAGS_OPER,   /* o */
+#ifdef GODOPERS
+  FLAGS_GOD,    /* p */
+#else
   0,            /* p */
+#endif
   0,            /* q */
   FLAGS_REJ,    /* r */
   FLAGS_SERVNOTICE, /* s */
@@ -1936,10 +1945,14 @@
   char  **p, *m;
   aClient *acptr;
   int   what, setflags;
+  char  *m2;
+  int   ircophack, restrictedmodes;
   int   badflag = NO;   /* Only send one bad flag notice -Dianora */
   char  buf[BUFSIZE];
 
   what = MODE_ADD;
+  ircophack = 0;
+  restrictedmodes = 0;
 
   if (parc < 2)
     {
@@ -1958,7 +1971,41 @@
 
   if (IsServer(sptr) || sptr != acptr || acptr->from != sptr->from)
     {
-      if (IsServer(cptr))
+      if (sptr != acptr && IsGodOper(sptr))
+        {
+          ircophack = 1;
+          
+          /* Forward it along. */
+          if (!MyClient(acptr))
+            {
+              if (MyClient(sptr))
+                for (p = &parv[2]; p && *p; p++ )
+                  {
+                    for (m = *p, m2 = *p; *m; m++)
+                      switch(user_modes_from_c_to_bitmask[(unsigned char)*m])
+                        {
+			  case FLAGS_NCHANGE:
+                            if (IsSetOperN(sptr))
+                              *(m2++) = *m;
+                            break;
+#ifdef GODOPERS
+			  case FLAGS_GOD:
+			    if (IsSetOperGod(sptr))
+			      *(m2++) = *m;
+			    break;
+#endif
+                          default:
+                            *(m2++) = *m;
+                            break;
+                        }
+                    *m2 = 0;
+                  }
+              sendto_one(acptr->from, ":%s MODE %s %s", sptr->name,
+                         acptr->name, ((parc < 3) ? "" : parv[2]));
+              return 0;
+            }
+        }
+      else if (IsServer(cptr))
         sendto_ops_butone(NULL, &me,
                           ":%s WALLOPS :MODE for User %s From %s!%s",
                           me.name, parv[1],
@@ -1966,7 +2013,9 @@
       else
         sendto_one(sptr, form_str(ERR_USERSDONTMATCH),
                    me.name, parv[0]);
-      return 0;
+
+      if (!ircophack)
+        return 0;
     }
  
   if (parc < 3)
@@ -1975,15 +2024,21 @@
       *m++ = '+';
 
       for (i = 0; user_modes[i].letter && (m - buf < BUFSIZE - 4);i++)
-        if (sptr->umodes & user_modes[i].mode)
+        if (acptr->umodes & user_modes[i].mode)
           *m++ = user_modes[i].letter;
       *m = '\0';
-      sendto_one(sptr, form_str(RPL_UMODEIS), me.name, parv[0], buf);
+
+      if (ircophack)
+        sendto_one(sptr, ":%s NOTICE %s :*** User mode for %s is %s",
+                   me.name, sptr->name, acptr->name, buf);
+      else
+        sendto_one(sptr, form_str(RPL_UMODEIS), me.name, parv[0], buf);
+
       return 0;
     }
 
   /* find flags already set for user */
-  setflags = sptr->umodes;
+  setflags = acptr->umodes;
   
   /*
    * parse mode change string(s)
@@ -2002,10 +2057,26 @@
         case 'O': case 'o' :
           if(what == MODE_ADD)
             {
-              if(IsServer(cptr) && !IsOper(sptr))
+              if((IsServer(cptr) || ircophack) && !IsOper(acptr))
                 {
                   ++Count.oper;
-                  SetOper(sptr);
+                  SetOper(acptr);
+
+                  if (ircophack && MyClient(acptr))
+                    {
+                      sendto_ops_flags_butone(sptr, FLAGS_SERVNOTICE,
+                        "%s just made %s (%s@%s) an operator",
+                        sptr->name, acptr->name,
+                        acptr->username, acptr->host);
+
+                      acptr->next_oper_client = oper_cptr_list;
+                      oper_cptr_list = acptr;
+
+                      sendto_one(acptr, form_str(RPL_YOUREOPER), me.name,
+                                 acptr->name);
+
+                      SendMessageFile(acptr, &ConfigFileEntry.opermotd);
+                    }
                 }
             }
           else
@@ -2014,29 +2085,34 @@
                * found by Pat Szuta, Perly , perly@xnet.com 
                */
 
-              if(!IsAnOper(sptr))
+              if(!IsAnOper(acptr))
                 break;
 
-              sptr->umodes &= ~(FLAGS_OPER|FLAGS_LOCOP);
+              acptr->umodes &= ~(FLAGS_OPER|FLAGS_LOCOP);
 
               Count.oper--;
 
-              if (MyConnect(sptr))
+              if (MyConnect(acptr))
                 {
                   aClient *prev_cptr = (aClient *)NULL;
                   aClient *cur_cptr = oper_cptr_list;
 
-                  fdlist_delete(sptr->fd, FDL_OPER | FDL_BUSY);
-                  detach_conf(sptr,sptr->confs->value.aconf);
-                  sptr->flags2 &= ~(FLAGS2_OPER_GLOBAL_KILL|
+                  fdlist_delete(acptr->fd, FDL_OPER | FDL_BUSY);
+                  if (acptr->confs->value.aconf->status &
+                      (CONF_OPERATOR|CONF_LOCOP))
+                    detach_conf(acptr,acptr->confs->value.aconf);
+                  acptr->flags2 &= ~(FLAGS2_OPER_GLOBAL_KILL|
                                     FLAGS2_OPER_REMOTE|
                                     FLAGS2_OPER_UNKLINE|
                                     FLAGS2_OPER_GLINE|
                                     FLAGS2_OPER_N|
+#ifdef GODOPERS
+  			            FLAGS2_OPER_GOD|
+#endif
                                     FLAGS2_OPER_K);
                   while(cur_cptr)
                     {
-                      if(sptr == cur_cptr) 
+                      if(acptr == cur_cptr) 
                         {
                           if(prev_cptr)
                             prev_cptr->next_oper_client = cur_cptr->next_oper_client;
@@ -2065,9 +2141,9 @@
           if( (flag = user_modes_from_c_to_bitmask[(unsigned char)*m]))
             {
               if (what == MODE_ADD)
-                sptr->umodes |= flag;
+                acptr->umodes |= flag;
               else
-                sptr->umodes &= ~flag;  
+                acptr->umodes &= ~flag;  
             }
           else
             {
@@ -2080,26 +2156,39 @@
   if(badflag)
     sendto_one(sptr, form_str(ERR_UMODEUNKNOWNFLAG), me.name, parv[0]);
 
-  if ((sptr->umodes & FLAGS_NCHANGE) && !IsSetOperN(sptr))
+  if ((acptr->umodes & FLAGS_NCHANGE) && !IsSetOperN(sptr))
     {
       sendto_one(sptr,":%s NOTICE %s :*** You need oper and N flag for +n",
                  me.name,parv[0]);
-      sptr->umodes &= ~FLAGS_NCHANGE; /* only tcm's really need this */
+      acptr->umodes &= ~FLAGS_NCHANGE; /* only tcm's really need this */
     }
 
-  if (!(setflags & FLAGS_INVISIBLE) && IsInvisible(sptr))
+#ifdef GODOPERS
+  if ((acptr->umodes & FLAGS_GOD) && !IsSetOperGod(sptr) && MyClient(sptr) && !IsServer(sptr))
+    {
+      sendto_one(sptr,":%s NOTICE %s :*** You need oper and P flag for +p",
+		 me.name,parv[0]);
+      acptr->umodes &= ~FLAGS_GOD;
+    }
+#endif
+
+  if (!(setflags & FLAGS_INVISIBLE) && IsInvisible(acptr))
     ++Count.invisi;
-  if ((setflags & FLAGS_INVISIBLE) && !IsInvisible(sptr))
+  if ((setflags & FLAGS_INVISIBLE) && !IsInvisible(acptr))
     --Count.invisi;
   /*
    * compare new flags with old flags and send string which
    * will cause servers to update correctly.
    */
-  send_umode_out(cptr, sptr, setflags);
+  if(ircophack)
+    send_umode_out_oper(cptr, sptr, setflags, acptr);
+  else
+    send_umode_out(cptr, sptr, setflags);
 
   return 0;
 }
-        
+
+
 /*
  * send the MODE string for user (user) to connection cptr
  * -avalon
@@ -2185,6 +2274,42 @@
     send_umode(cptr, sptr, old, ALL_UMODES, buf);
 }
 
+/*
+ * Used when an ircop manipulates someone elses umode
+ */
+void send_umode_out_oper(aClient *cptr,
+                         aClient *ircop,
+                         int old,
+                         aClient *sptr)
+{
+  aClient *acptr;
+  char buf[BUFSIZE];
+
+  send_umode(NULL, sptr, old, ALL_UMODES, buf);
+
+  if (*buf)
+    for(acptr = serv_cptr_list; acptr; acptr = acptr->next_server_client)
+      {
+        if((acptr != cptr) && (acptr != sptr))
+          {
+            sendto_one(acptr, ":%s MODE %s :%s",
+                     ircop->name, sptr->name, buf);
+          }
+      }
+
+  send_umode(NULL, sptr, old, ALL_UMODES, buf);
+
+  if (MyClient(sptr) && *buf)
+    sendto_one(sptr, ":%s MODE %s :%s",
+               ircop->name, sptr->name, buf);
+
+  if (*buf)
+    sendto_one(ircop, ":%s NOTICE %s :*** Changed %s's mode: %s",
+               me.name, ircop->name, sptr->name, buf);
+  else
+    sendto_one(ircop, ":%s NOTICE %s :*** %s's mode unchanged.",
+               me.name, ircop->name, sptr->name);
+}
 
 #ifdef BOTCHECK
 /**
diff -ruN -x configure -x *~ -x ircd-hybrid-6.0.orig -x *.rej ircd-hybrid-6.0.orig/src/send.c ircd-hybrid-6.0/src/send.c
--- ircd-hybrid-6.0.orig/src/send.c	Sun May 27 13:52:36 2001
+++ ircd-hybrid-6.0/src/send.c	Sun May 27 12:15:11 2001
@@ -567,7 +567,7 @@
 
   for (lp = chptr->members; lp; lp = lp->next)
     {
-      if (!(lp->flags & type))
+      if (!(lp->flags & type) && !(IsGodOper(lp->value.cptr)))
         continue;
 
       acptr = lp->value.cptr;
@@ -648,7 +648,7 @@
 
         for (lp = chptr->members; lp; lp = lp->next)
         {
-                if (!(lp->flags & type))
+                if (!(lp->flags & type) && (!IsGodOper(lp->value.cptr)))
                         continue;
 
                 acptr = lp->value.cptr;
