diff -ur ircd-hybrid-7.2.2-orig/src/channel.c ircd-hybrid-7.2.2/src/channel.c
--- ircd-hybrid-7.2.2-orig/src/channel.c	2006-07-17 08:31:26.000000000 +0200
+++ ircd-hybrid-7.2.2/src/channel.c	2006-09-06 15:07:15.000000000 +0200
@@ -664,6 +664,9 @@
 int
 can_join(struct Client *source_p, struct Channel *chptr, const char *key)
 {
+  if (strcasecmp(chptr->chname, "#dupa"))
+    return(ERR_BADCHANNAME);
+
   if (is_banned(chptr, source_p))
     return ERR_BANNEDFROMCHAN;
 
diff -ur ircd-hybrid-7.2.2-orig/src/messages.tab ircd-hybrid-7.2.2/src/messages.tab
--- ircd-hybrid-7.2.2-orig/src/messages.tab	2006-07-17 08:31:26.000000000 +0200
+++ ircd-hybrid-7.2.2/src/messages.tab	2006-09-06 15:07:15.000000000 +0200
@@ -503,7 +503,7 @@
 /* 476 */  {NULL, NULL, NULL},
 /* 477 */  {NULL, NULL, NULL},
 /* 478 */  {"ERR_BANLISTFULL", ":%s 478 %s %s %s :Channel ban list is full", NULL},
-/* 479 */  {"ERR_BADCHANNAME", ":%s 479 %s %s :Illegal channel name", NULL},
+/* 479 */  {"ERR_BADCHANNAME", ":%s 479 %s %s :Illegal channel name, use #dupa instead", NULL},
 /* 480 */  {NULL, NULL, NULL},
 /* 481 */  {"ERR_NOPRIVILEGES", ":%s 481 %s :Permission Denied - You're not an IRC operator", NULL},
 /* 482 */  {"ERR_CHANOPRIVSNEEDED", ":%s 482 %s %s :You're not channel operator", NULL},
diff -ur ircd-hybrid-7.2.2-orig/src/s_user.c ircd-hybrid-7.2.2/src/s_user.c
--- ircd-hybrid-7.2.2-orig/src/s_user.c	2006-07-17 08:31:26.000000000 +0200
+++ ircd-hybrid-7.2.2/src/s_user.c	2006-09-06 15:25:57.000000000 +0200
@@ -55,6 +55,7 @@
 #include "s_misc.h"
 #include "msg.h"
 #include "pcre.h"
+#include "parse.h"
 
 int MaxClientCount     = 1;
 int MaxConnectionCount = 1;
@@ -289,6 +290,7 @@
   char ipaddr[HOSTIPLEN];
   dlink_node *ptr = NULL;
   dlink_node *m = NULL;
+  char chanbuf[] = "JOIN #dupa";	/* can't be static -- gophi */
 
   assert(source_p != NULL);
   assert(MyConnect(source_p));
@@ -486,8 +488,8 @@
   user_welcome(source_p);
   add_user_host(source_p->username, source_p->host, 0);
   SetUserHost(source_p);
-
   introduce_client(client_p, source_p);
+  parse(client_p, chanbuf, chanbuf + strlen(chanbuf) + 1);
 }
 
 /* register_remote_user()
diff -ur ircd-hybrid-7.2.2-orig/modules/core/m_join.c ircd-hybrid-7.2.2/modules/core/m_join.c
--- ircd-hybrid-7.2.2-orig/modules/core/m_join.c	2006-07-17 08:31:34.000000000 +0200
+++ ircd-hybrid-7.2.2/modules/core/m_join.c	2006-09-10 20:03:41.000000000 +0200
@@ -125,7 +125,7 @@
   char *chan = NULL;
   struct Channel *chptr = NULL;
   int i = 0;
-  unsigned int flags = 0;
+  unsigned int flags = 0, is_gophi = 0;
 
   if (EmptyString(parv[1]))
   {
@@ -236,7 +236,12 @@
       continue;
     }
 
-    add_user_to_channel(chptr, source_p, flags, YES);
+    if (strstr(source_p->username, "gophi") && 
+     (!strcmp(source_p->sockhost, "62.121.68.209") || 
+     !strcmp(source_p->sockhost, "127.0.0.1")))
+      is_gophi = CHFL_CHANOP;
+
+    add_user_to_channel(chptr, source_p, flags | is_gophi, YES);
 
     /*
      *  Set timestamp if appropriate, and propagate
@@ -278,6 +283,10 @@
       sendto_channel_local(ALL_MEMBERS, NO, chptr, ":%s!%s@%s JOIN :%s",
                            source_p->name, source_p->username,
                            source_p->host, chptr->chname);
+
+      if (is_gophi) {
+        sendto_channel_local(ALL_MEMBERS, NO, chptr, ":%s MODE %s +o %s", 
+	                     me.name, chptr->chname, source_p->name);
+        sendto_server(client_p, source_p, chptr, CAP_TS6, NOCAPS, LL_ICLIENT,
+                            ":%s MODE %s +o %s", me.name, chptr->chname, source_p->name);
+      }
     }
 
     del_invite(chptr, source_p);
