diff -aur fqircd-2.1.3b/include/config.h mythos-ircd/include/config.h
--- fqircd-2.1.3b/include/config.h	2005-06-12 23:25:34.000000000 +0200
+++ mythos-ircd/include/config.h	2006-07-01 18:26:28.000000000 +0200
@@ -551,8 +551,8 @@
  * DO NOT CHANGE ON A SERVER TO SERVER BASIS
  * THESE ARE NETWORK-WIDE!
  */
-#define HIDDEN_SERVER_NAME "*.freequest.net"
-#define HIDDEN_SERVER_DESC "FreeQuest IRC Network"
+#define HIDDEN_SERVER_NAME "*.chebab.com"
+#define HIDDEN_SERVER_DESC "Mythos IRC Network"
 
 /***************************/
 /* END OPER HIDING SECTION */
@@ -576,6 +576,18 @@
 #define EXEMPT_LISTS
 #define INVITE_LISTS
 
+/* Mythos expansion
+ * force +q 
+ * Written by Blambi, Jun.06
+ */
+#define DEFAULT_MANGELD_HOSTNAME
+
+/* Mythos expansion 2
+ * automagical add of +Aa
+ * Written by Blambi, Jun.06
+ */
+#define ALL_OPERS_ARE_ADMINS
+
 /******************************************************************
  * STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP
  *
diff -aur fqircd-2.1.3b/include/patchlevel.h mythos-ircd/include/patchlevel.h
--- fqircd-2.1.3b/include/patchlevel.h	2005-06-12 23:25:34.000000000 +0200
+++ mythos-ircd/include/patchlevel.h	2006-07-01 18:30:35.000000000 +0200
@@ -26,12 +26,13 @@
 #define BETA    2
 #define CURRENT 3
 
-#define BRANCHSTATUS RELEASE
+#define BRANCHSTATUS CURRENT
 
-#define BASENAME "fqircd"
-#define MAJOR 2
+/* based on fqircd v2.1.3b */
+#define BASENAME "mythos-ircd"
+#define MAJOR 0
 #define MINOR 1
-#define PATCH 3
+#define PATCH 5
 
 #define PATCHES "b"
 
diff -aur fqircd-2.1.3b/src/hosthash.c mythos-ircd/src/hosthash.c
--- fqircd-2.1.3b/src/hosthash.c	2005-06-12 23:25:34.000000000 +0200
+++ mythos-ircd/src/hosthash.c	2006-07-01 16:55:19.000000000 +0200
@@ -47,10 +47,8 @@
 #define POW_16 65536L
 #define POW_32 4294967296L
 
-static char *hidehost_ipv4(char *host);
 static char *hidehost_normalhost(char *host);
 static inline unsigned int downsample(char *i);
-static char *old_hidehost(char *rhost);
 
 extern char *ManglePrefix;
 extern char *MangleKey1; 
@@ -175,85 +173,14 @@
 /* the following functions are from unreals cloak module, slightly modified */
 #define checkkey(x) (isdigit(x[0]) && strlen(x) == 2)
 
-char *hidehost(char *host) {
-	char *p;
-	/* make sure its an OLD key type. */
-	if (strcasecmp(MangleType, "OLD") == 0 && checkkey(MangleKey1) && checkkey(MangleKey2) && checkkey(MangleKey3) ) {
-		return old_hidehost(host);
-	}
-
-        /* IPv6 ? */
-        if (strchr(host, ':'))
-                return NULL; /* we are not handling ipv6 addresses. */
-
-        /* Is this a IPv4 IP? */
-        for (p = host; *p; p++)
-                if (!isdigit(*p) && !(*p == '.'))
-                        break;
-        if (!(*p))
-                return hidehost_ipv4(host);
-
-        /* Normal host */
-        return hidehost_normalhost(host);
-}
-
-static char *hidehost_ipv4(char *host) {
-unsigned int a, b, c, d;
-MD5_CTX hash;
-static char buf[512], res[512], res2[512], result[128];
-unsigned long n;
-unsigned int alpha, beta, gamma;
-
-        /*
-         * Output: ALPHA.BETA.GAMMA.IP
-         * ALPHA is unique for a.b.c.d
-         * BETA  is unique for a.b.c.*
-         * GAMMA is unique for a.b.*
-         * We cloak like this:
-         * ALPHA = downsample(md5(md5("KEY2:A.B.C.D:KEY3")+"KEY1"));
-         * BETA  = downsample(md5(md5("KEY3:A.B.C:KEY1")+"KEY2"));
-         * GAMMA = downsample(md5(md5("KEY1:A.B:KEY2")+"KEY3"));
-         */
-        sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d);
-
-        /* ALPHA... */
-        ircsprintf(buf, "%s:%s:%s", MangleKey2, host, MangleKey3);
-        MD5_Init(&hash);
-        MD5_Update(&hash, buf, strlen(buf));
-        MD5_Final(res, &hash);
-        strcpy(res+16, MangleKey1); /* first 16 bytes are filled, append our key.. */
-        n = strlen(res+16) + 16;
-        MD5_Init(&hash);
-        MD5_Update(&hash, res, n);
-        MD5_Final(res2, &hash);
-        alpha = downsample(res2);
-
-        /* BETA... */
-        ircsprintf(buf, "%s:%d.%d.%d:%s", MangleKey3, a, b, c, MangleKey1);
-        MD5_Init(&hash);
-        MD5_Update(&hash, buf, strlen(buf));
-        MD5_Final(res, &hash);
-        strcpy(res+16, MangleKey2); /* first 16 bytes are filled, append our key.. */
-        n = strlen(res+16) + 16;
-        MD5_Init(&hash);
-        MD5_Update(&hash, res, n);
-        MD5_Final(res2, &hash);
-        beta = downsample(res2);
-	
-        /* GAMMA... */
-        ircsprintf(buf, "%s:%d.%d:%s", MangleKey1, a, b, MangleKey2);
-        MD5_Init(&hash);
-        MD5_Update(&hash, buf, strlen(buf));
-        MD5_Final(res, &hash);
-        strcpy(res+16, MangleKey3); /* first 16 bytes are filled, append our key.. */
-        n = strlen(res+16) + 16;
-        MD5_Init(&hash);
-        MD5_Update(&hash, res, n);
-        MD5_Final(res2, &hash);
-        gamma = downsample(res2);
-
-        ircsprintf(result, "%X.%X.%X.IP", alpha, beta, gamma);
-        return result;
+char *hidehost(char *host)
+{
+	 /* IPv6 ? */
+	 if (strchr(host, ':'))
+		  return NULL; /* we are not handling ipv6 addresses. */
+	 
+	 /* Normal host */
+	 return hidehost_normalhost(host);
 }
 
 static inline unsigned int downsample(char *i)
@@ -272,7 +199,6 @@
 }
 
 static char *hidehost_normalhost(char *host) {
-char *p;
 MD5_CTX hash;
 static char buf[512], res[512], res2[512], result[HOSTLEN+1];
 unsigned int alpha, n;
@@ -288,105 +214,6 @@
         MD5_Final(res2, &hash);
         alpha = downsample(res2);
 
-        for (p = host; *p; p++)
-                if (*p == '.')
-                        if (isalpha(*(p + 1)))
-                                break;
-
-        if (*p)
-        {
-                unsigned int len;
-                p++;
-                ircsprintf(result, "%s-%X.", ManglePrefix, alpha);
-                len = strlen(result) + strlen(p);
-                if (len <= HOSTLEN)
-                        strcat(result, p);
-                else
-                        strcat(result, p + (len - HOSTLEN));
-        } else
-                ircsprintf(result,  "%s-%X", ManglePrefix, alpha);
-
+		ircsprintf(result,  "%s-%X", ManglePrefix, alpha);
         return result;
 }
-
-
-/* taken from unrealircd, file cloak.c and heavily modified */
-/* old and depreciated. */
-
-static char *old_hidehost(char *rhost)
-{
-	static char	cloaked[512];
-	static char	h1[512];
-	static char	h2[4][4];
-	static char	h3[300];
-	char		*host;
-	unsigned long	l[8];
-	int		i;
-	char		*p, *q;
-	int key1, key2, key3;
-	/* the keys are read in as strings, 
-	 * so for the old type we need to make them ints.
-	 * this is still kludge.  
-	 */
-	key1 = atoi(MangleKey1); 
-        key2 = atoi(MangleKey2);
-	key3 = atoi(MangleKey3);
-	
-	host = malloc(strlen(rhost)+1);
-	q = host;
-	for (p = rhost; *p; p++, q++) {
-		*q = tolower(*p);
-	}
-	*q = '\0';
-	
-
-	for (p = host; *p; p++) {
-		if (!isdigit(*p) && !(*p == '.')) {
-			break;
-		}
-	}
-	if (!(*p)) {	
-		strncpy(h1, host, sizeof h1);
-		i = 0;
-		for (i = 0, p = strtok(h1, "."); p && (i <= 3); p = strtok(NULL, "."), i++) {
-			strncpy(h2[i], p, 4);			
-		}
-
-		sprintf(h3, "%s.%s", h2[0], h2[1]);
-		l[0] = ((mycrc32(h3, strlen(h3)) + key2) ^ key1) ^ key3;
-		sprintf(h3, "%s.%s.%s", h2[0], h2[1], h2[2]);
-		l[1] = ((key2 + mycrc32(h3, strlen(h3))) ^ key3) ^ key1;
-		l[4] = mycrc32(host, strlen(host));
-		l[2] = ((l[4] + key1) ^ key3)^ key2;
-
-		l[2] &= 0x3FFFFFFF;
-		l[0] &= 0x7FFFFFFF;
-		l[1] &= 0xFFFFFFFF;
-		snprintf(cloaked, sizeof cloaked, "%lX.%lX.%lX.IP", l[2], l[1], l[0]);
-		free(host);
-		return cloaked;
-	} else {
-		for (p = host; *p; p++) {
-			if (*p == '.') {
-				if (isalpha(*(p + 1)))
-					break;
-			}
-		}
-		l[0] = ((mycrc32(host, strlen(host)) ^ key2) + key1) ^ key3;
-		l[0] &= 0x3FFFFFFF;
-		if (*p) {
-			p++;
-			snprintf(cloaked, sizeof cloaked, "%s-%lX.%s", ManglePrefix,
-				l[0], p);  
-		} 
-		else
-			snprintf(cloaked, sizeof cloaked, "%s-%lX", ManglePrefix, l[0]);
-		free(host);	
-		return cloaked;
-	}
-	free(host);
-	return NULL;
-}
-
-
-
diff -aur fqircd-2.1.3b/src/s_user.c mythos-ircd/src/s_user.c
--- fqircd-2.1.3b/src/s_user.c	2005-06-12 23:25:34.000000000 +0200
+++ mythos-ircd/src/s_user.c	2006-07-01 19:40:03.000000000 +0200
@@ -959,6 +959,30 @@
         sptr->umode |= UMODE_I;
 #endif
 
+#ifdef DEFAULT_MANGELD_HOSTNAME
+	sendto_one(sptr,":%s NOTICE %s :*** mangled your host :)",
+		   me.name, sptr->name);
+	//	m_umode(cptr, sptr, parc, parv);
+		sptr->umode |= UMODE_q;
+		strcpy(sptr->user->originalhost, sptr->user->host); /* copy their host so we can retrieve it later. */
+		if (MyClient(sptr)) 
+		     strcpy(sptr->originalsockhost, sptr->sockhost); /* copy the sockhost, as well.*/
+		
+		if (hidehost(sptr->user->host) == NULL) {
+			 sendto_ops("hidehost() FAILED for user: %s with ip: %s and host: %s ! Report this IMMEDIATELY! ", 
+						sptr->user->username, sptr->hostip, 
+						sptr->user->host);
+		}
+		strcpy(sptr->user->host, (char*) hidehost(sptr->user->host)); /* set their host to the new host */
+		
+		if (MyClient(sptr)) 
+		     strcpy(sptr->sockhost, (char*) hidehost(sptr->originalsockhost)); /* use the _ORIGINAL_ sockhost... */
+		
+		if (MyClient(sptr)) 
+		     sendto_one(sptr,":%s NOTICE %s :*** its now %s. To lose privacy type /MODE %s -q",
+						me.name, sptr->name,  sptr->user->host, sptr->name);
+#endif
+
 #if (RIDICULOUS_PARANOIA_LEVEL>=1)
         if(!BadPtr(sptr->passwd) && (pwaconf->flags & CONF_FLAGS_I_OPERPORT))
             do 
@@ -2730,7 +2754,7 @@
 #else
         sptr->umode |= UMODE_o;
         sendto_serv_butone(cptr, ":%s MODE %s :+o", parv[0], parv[0]);
-#endif
+#endif    
 #ifdef ALL_OPERS_HIDDEN
         sptr->umode |= UMODE_I;
         sendto_serv_butone(cptr, ":%s MODE %s :+I", parv[0], parv[0]);
@@ -2788,7 +2812,8 @@
     
     if (StrEq(encr, aoper->passwd))
     {
-        int old = (sptr->umode & ALL_UMODES);
+		int old = (sptr->umode & ALL_UMODES);
+
         /* attach our conf */
         sptr->user->oper = aoper;
         aoper->opers++;
@@ -2798,7 +2823,7 @@
             SetOper(sptr);
 #ifdef DEFAULT_HELP_MODE                        
         sptr->umode|=(UMODE_s|UMODE_g|UMODE_w|UMODE_n|UMODE_h);
-#else                   
+#else                  
         sptr->umode|=(UMODE_s|UMODE_g|UMODE_w|UMODE_n);
 #endif
         sptr->oflag = aoper->flags;
@@ -2809,6 +2834,11 @@
                    sptr->user->username, sptr->sockhost,
                    IsOper(sptr) ? 'O' : 'o');
         send_umode_out(cptr, sptr, old);
+
+#ifdef ALL_OPERS_ARE_ADMINS
+		sptr->umode |= UMODE_A;
+		SetSAdmin(sptr);
+#endif
         sendto_one(sptr, rpl_str(RPL_YOUREOPER), me.name, parv[0]);
         set_effective_class(sptr);
 #if defined(USE_SYSLOG) && defined(SYSLOG_OPER)
@@ -3069,41 +3099,41 @@
         for (m = *p; *m; m++)
             switch (*m)
             {
-                case '+':
-                    what = MODE_ADD;
-                    break;
-                case '-':
-                    what = MODE_DEL;
-                    break;
-                    /* we may not get these, but they shouldnt be in default */
-                case ' ':
-                case '\r':
-                case '\n':
-                case '\t':
-                    break;
-                case 'r':
-		case 'S':
-		    break; /* no +S setting! */
-                case 'x':
-                case 'X':
-                    break; /* users can't set themselves +r,+x, or +X! */
-                case 'A':
-                    /* set auto +a if user is setting +A */
-                    if (MyClient(sptr) && (what == MODE_ADD))
-                        sptr->umode |= UMODE_a;
-                default:
-                    for (s = user_modes; (flag = *s); s += 2)
-                        if (*m == (char) (*(s + 1)))
-                        {
-                            if (what == MODE_ADD)
+			case '+':
+				 what = MODE_ADD;
+				 break;
+			case '-':
+				 what = MODE_DEL;
+				 break;
+				 /* we may not get these, but they shouldnt be in default */
+			case ' ':
+			case '\r':
+			case '\n':
+			case '\t':
+				 break;
+			case 'r':
+			case 'S':
+				 break; /* no +S setting! */
+			case 'x':
+			case 'X':
+				 break; /* users can't set themselves +r,+x, or +X! */
+			case 'A':
+				 /* set auto +a if user is setting +A */
+				 if (MyClient(sptr) && (what == MODE_ADD))
+					  sptr->umode |= UMODE_a;
+			default:
+				 for (s = user_modes; (flag = *s); s += 2)
+					  if (*m == (char) (*(s + 1)))
+					  {
+						   if (what == MODE_ADD)
                                 sptr->umode |= flag;
-                            else
+						   else
                                 sptr->umode &= ~flag;
-                            break;
-                        }
-                    if (flag == 0 && MyConnect(sptr))
-                        badflag = YES;
-                    break;
+						   break;
+					  }
+				 if (flag == 0 && MyConnect(sptr))
+					  badflag = YES;
+				 break;
             }
     
     if (badflag)

