diff -Bur emech-2.8.1/src/cfgfile.c epatch/src/cfgfile.c
--- emech-2.8.1/src/cfgfile.c	Sun Apr  1 12:26:12 2001
+++ epatch/src/cfgfile.c	Thu May 10 21:04:09 2001
@@ -692,47 +692,7 @@
 
 void cfg_alias(char *args)
 {
-	char	*org,*new,*pt;
-	int	i;
-
-	org = get_token(&args,TOC);
-	if ((new = get_token(&args,TOC)) == NULL)
-		return;
-
-	pt = new;
-	while(*pt)
-	{
-		*pt = toupper(*pt);
-		pt++;
-	}
-
-	for(i=0;mcmd[i].name;i++)
-	{
-		if (!Strcasecmp(mcmd[i].name,new))
-		{
-			printf("init: Alias replacing original command (ignored)\n");
-			return;
-		}
-		if (!Strcasecmp(mcmd[i].alias,new))
-		{
-			printf("init: Alias %s already exists (ignored)\n",new);
-			return;
-		}
-	}
-
-	i = 0;
-	while(mcmd[i].name)
-	{
-		if (!Strcasecmp(mcmd[i].name,org))
-		{
-			if (mcmd[i].alias)
-				MyFree(&mcmd[i].alias);
-			set_mallocdoer(cfg_alias);
-			mstrcpy(&mcmd[i].alias,new);
-			return;
-		}
-		i++;
-	}
+	add_alias(NULL, args, 0);
 }
 
 #endif /* ALIASES */
diff -Bur emech-2.8.1/src/commands.c epatch/src/commands.c
--- emech-2.8.1/src/commands.c	Sun Apr  1 12:26:12 2001
+++ epatch/src/commands.c	Thu May 10 21:04:20 2001
@@ -1901,3 +1901,10 @@
 	send_to_user(from,"No longer kicking on %s",User->parm.kicksay);
 	remove_user(User);
 }
+
+#ifdef ALIASES
+void do_alias(char *from, char *to, char *rest, int cmdlevel)
+{
+	add_alias(from, rest, 1);
+}
+#endif
diff -Bur emech-2.8.1/src/function.c epatch/src/function.c
--- emech-2.8.1/src/function.c	Sun Apr  1 12:26:12 2001
+++ epatch/src/function.c	Thu May 10 21:13:53 2001
@@ -20,6 +20,8 @@
 */
 #include "config.h"
 
+#define TOC " =\t\r\n"
+
 static	char uhbuf[NUHLEN];		/* for find_userhost() */
 static	char channelbuf[MSGLEN];	/* for get_channel() and get_channel2() */
 static	char timebuf[MSGLEN];
@@ -1206,3 +1208,58 @@
 	*pp = 0;
 	return(arg);
 }
+
+#ifdef ALIASES
+void add_alias(char *from, char *data, int type)
+{
+	char	*org,*new,*pt;
+	int	i;
+
+	org = get_token(&data,TOC);
+	if ((new = get_token(&data,TOC)) == NULL) 
+		return;
+ 
+	pt = new;
+	while(*pt)
+	{
+		*pt = toupper(*pt);
+		pt++;
+	}
+
+	for(i=0;mcmd[i].name;i++)
+	{
+		if (!Strcasecmp(mcmd[i].name,new))
+		{
+			if (type)
+				send_to_user(from,"Alias replacing original command (ignored)");
+			else
+				printf("init: Alias replacing original command (ignored)\n");
+			return;
+		}
+		if (!Strcasecmp(mcmd[i].alias,new))
+		{
+			if (type)
+				send_to_user(from,"Alias %s already exists (ignored)\n",new);
+			else
+				printf("init: Alias %s already exists (ignored)\n",new);
+			return;
+		}
+	}
+
+	i = 0;
+	while(mcmd[i].name)
+	{
+		if (!Strcasecmp(mcmd[i].name,org))
+		{       
+			if (mcmd[i].alias)
+				MyFree(&mcmd[i].alias);
+			set_mallocdoer(add_alias);
+			mstrcpy(&mcmd[i].alias,new);
+			if (type) send_to_user(from,"Alias %s added.\n",new);
+			return;
+		}
+		i++;
+	}
+	if (type) send_to_user(from,"Could not find function %s.\n",org);
+}
+#endif
diff -Bur emech-2.8.1/src/gencmd.c epatch/src/gencmd.c
--- emech-2.8.1/src/gencmd.c	Sun Apr  1 12:26:12 2001
+++ epatch/src/gencmd.c	Thu May 10 21:05:09 2001
@@ -68,6 +68,9 @@
 	{ 0, "VER",		"do_vers",		20	| CC	| PASS			},
 	{ 0, "WHOM",		"do_whom",		20	| CC	| PASS	| DCC		},
 
+#ifdef ALIASES
+	{ 0, "ALIAS",		"do_alias",		100	| CC	| PASS			},
+#endif
 	{ 0, "BAN",		"do_ban",		40	| CC	| PASS			},
 	{ 0, "BANLIST",		"do_banlist",		40	| CC	| PASS	| DCC		},
 	{ 0, "CCHAN",		"do_cchan",		40	| CC	| PASS			},
diff -Bur emech-2.8.1/src/h.h epatch/src/h.h
--- emech-2.8.1/src/h.h	Sun Apr  1 12:26:12 2001
+++ epatch/src/h.h	Thu May 10 21:06:19 2001
@@ -226,6 +226,7 @@
 int verified(char *userhost);
 int write_levelfile(void);
 int write_seenlist(aSeen **, char *);
+void add_alias(char *, char *, int);
 void *MyMalloc(int);
 void Link_addbot(aBotLink *, char *);
 void Link_needinvite(aBotLink *, char *);
@@ -269,6 +270,7 @@
 void do_access(char *, char *, char *, int);
 void do_add(char *, char *, char *, int);
 void do_addserver(char *, char *, char *, int);
+void do_alias(char *, char *, char *, int);
 void do_auth(char *, char *, char *, int);
 void do_unverify(char *, char *, char *, int);
 void do_away(char *, char *, char *, int);
