--- ircd.c.dist	Wed Feb 11 09:10:58 2004
+++ ircd.c	Wed Feb 11 11:44:43 2004
@@ -1828,6 +1828,9 @@
 #ifdef IRCD_2_10
 
   char *modes;
+  char *chanv[40];
+  int chanc;
+  int i;
 #endif
 
   int modifiers = 0;
@@ -1852,37 +1855,50 @@
       return 0;
     }
 #ifdef IRCD_2_10
-    /* Look for ^G */
-    modes = strchr(parv[0], '\007');
-    if (modes != NULL)
+    chanc = generictoken(',', 40, parv[0], chanv);
+    for (i = 0; i < chanc; i++)
     {
-      *modes = '\0';
-      modes++;
-      while (*modes != '\0')
+      modifiers = 0;
+
+      /* Look for ^G */
+      modes = strchr(chanv[i], '\007');
+      if (modes != NULL)
       {
-        if (*modes == 'o')
-          modifiers |= CMODE_OP;
-        else if (*modes == 'v')
-          modifiers |= CMODE_VOICE;
-        else if (*modes == 'O')
-          modifiers |= (CMODE_CHANOWNER | CMODE_OP);
-        /* Both */
+        *modes = '\0';
         modes++;
+        while (*modes != '\0')
+        {
+          if (*modes == 'o')
+            modifiers |= CMODE_OP;
+          else if (*modes == 'v')
+            modifiers |= CMODE_VOICE;
+          else if (*modes == 'O')
+            modifiers |= (CMODE_CHANOWNER | CMODE_OP);
+          /* Both */
+          modes++;
+        }
       }
-    }
 #endif
-    c = findchannel(parv[0]);
-    if (c == NULL)
+#ifdef IRCD_2_10
+      c = findchannel(chanv[i]);
+#else
+      c = findchannel(parv[0]);
+#endif
+      if (c == NULL)
 #ifdef IRCD_2_10
 
-      c = AddChannel(parv[0]);
+        c = AddChannel(chanv[i]);
 #else
 
-      c = AddChannel(parv[0], 0); /* TS0 channel */
+        c = AddChannel(parv[0], 0); /* TS0 channel */
 #endif
 
-    AddUserFlagToChannel(c, finduser(origin), modifiers);
-    return 0;
+      AddUserFlagToChannel(c, finduser(origin), modifiers);
+#ifdef IRCD_2_10
+    }
+#else
+      return 0;
+#endif
   }
 
   strcpy(errstr, "JOIN without an origin");
