diff -r -u infobot-0.45.3/conf/infobot.config mod_infobot/conf/infobot.config
--- infobot-0.45.3/conf/infobot.config	Tue Jan  2 06:22:15 2001
+++ mod_infobot/conf/infobot.config	Sat Jul  5 20:21:48 2003
@@ -32,6 +32,9 @@
 # persistant "seen" db
 seen             $dbname-seen
 
+# persistant "alias" db
+alias		 $dbname-alias
+
 # do we have an ignore database? uncomment this if not.
 ignore           $dbname-ignore
 
diff -r -u infobot-0.45.3/extras/Extras.pl mod_infobot/extras/Extras.pl
--- infobot-0.45.3/extras/Extras.pl	Tue Jan  2 06:22:15 2001
+++ mod_infobot/extras/Extras.pl	Sat Jul  5 21:39:53 2003
@@ -466,53 +466,166 @@
 	return "$message may be sought at $result";
     }				# end websters
 
+    if ($message =~ /^alias add (\S+) (\S+)/i) {
+        my $alias = $1;
+	my $new_nick = $2;
+
+	my $current_nicks = &get(alias => lc $alias);
+
+	if ($current_nicks) {
+	    &set(alias => $alias => "$current_nicks,$new_nick");
+	} else {
+            &set(alias => $alias => "$new_nick");
+	}
+
+        if ($msgType =~ /public/) {
+	    &performSay("$new_nick added as alias for $alias");
+        } else {
+	    &msg($who, "$new_nick added as alias for $alias");
+        }
+
+        return 'NOREPLY';
+    }
+
+    if ($message =~ /^alias delete (\S+) (\S+)/i) {
+        my $alias = $1;
+	my $old_nick = $2;
+
+	my $current_nicks = &get(alias => lc $alias);
+
+	if ($current_nicks =~ /$old_nick/) {
+	    $current_nicks =~ s/$old_nick//;
+
+	    $current_nicks =~ s/,,/,/;
+
+	    &set(alias => $alias => "$current_nicks");
+
+            if ($msgType =~ /public/) {
+	        &performSay("$old_nick deleted as alias for $alias");
+            } else {
+	        &msg($who, "$old_nick deleted as alias for $alias");
+            }
+	} else {
+            if ($msgType =~ /public/) {
+	        &performSay("$old_nick not found as alias for $alias");
+            } else {
+	        &msg($who, "$old_nick not found as alias for $alias");
+            }
+	}
+	    
+        return 'NOREPLY';
+    }
+
+    if ($message =~ /^alias show (\S+)/i) {
+        my $alias = $1;
+
+	my $current_nicks = &get(alias => lc $alias);
+
+        if ($msgType =~ /public/) {
+	    &performSay("$alias is an alias for $current_nicks");
+        } else {
+	    &msg($who, "$alias is an alias for $current_nicks");
+        }
+
+        return 'NOREPLY';
+    }
+
     # -- from Question
 
 	# Now with INTENSE CASE INSENSITIVITY!  SUNDAY SUNDAY SUNDAY!
+    sub print_seen ()
+    {
+	my ($person, $seen) = @_;
+
+	my ($when,$where,$what) = split /$;/, $seen;
+	my $howlong = time() - $when;
+	$when = localtime $when;
+
+	my $tstring = ($howlong % 60). " seconds ago";
+	$howlong = int($howlong / 60);
+
+	if ($howlong % 60) {
+	    $tstring = ($howlong % 60). " minutes and $tstring";
+	}
+
+	$howlong = int($howlong / 60);
+
+	if ($howlong % 24) {
+	    $tstring = ($howlong % 24). " hours, $tstring";
+	}
+
+        $howlong = int($howlong / 24);
+
+	if ($howlong % 365) {
+	    $tstring = ($howlong % 365). " days, $tstring";
+	}
+
+        $howlong = int($howlong / 365);
+
+	if ($howlong > 0) {
+	    $tstring = "$howlong years, $tstring";
+	}
+
+	if ($msgType =~ /public/) {
+	    &performSay("$person was last seen on $where $tstring, saying: $what [$when]");
+	} else {
+	    &msg($who, "$person was last seen on $where $tstring, saying: $what [$when]");
+	}
+    }
+
     if ($message =~ /^seen (\S+)/i) {
 	my $person = $1;
 	$person =~ s/\?*\s*$//;
-	my $seen = &get(seen => lc $person);
-	if ($seen) {
-	    my ($when,$where,$what) = split /$;/, $seen;
-	    my $howlong = time() - $when;
-	    $when = localtime $when;
 
-	    my $tstring = ($howlong % 60). " seconds ago";
-	    $howlong = int($howlong / 60);
+	my $current_nicks = &get(alias => lc $person);
 
-	    if ($howlong % 60) {
-		$tstring = ($howlong % 60). " minutes and $tstring";
-	    }
-	    $howlong = int($howlong / 60);
+	if ($current_nicks)
+	{
+	    my @nicks = split (/,/, $current_nicks);
 
-	    if ($howlong % 24) {
-		$tstring = ($howlong % 24). " hours, $tstring";
-	    }
-	    $howlong = int($howlong / 24);
+	    my $seen = &get(seen => lc $person);
 
-	    if ($howlong % 365) {
-		$tstring = ($howlong % 365). " days, $tstring";
+	    if ($seen) {
+	        &print_seen($person,$seen);
+	    } else {
+	        if ($msgType =~ /public/) {
+    	            &performSay("I haven't seen '$person', $who");
+	        } else {
+	            &msg($who,"I haven't seen '$person', $who");
+		}
+            }
+
+	    foreach my $nick (@nicks) {
+	        my $seen = &get(seen => lc $nick);
+
+		if ($seen) {
+		    &print_seen($nick,$seen);
+		} else {
+	            if ($msgType =~ /public/) {
+    		        &performSay("I haven't seen '$nick', $who");
+		    } else {
+		        &msg($who,"I haven't seen '$nick', $who");
+		    }
+                }
 	    }
-	    $howlong = int($howlong / 365);
-	    if ($howlong > 0) {
-		$tstring = "$howlong years, $tstring";
+
+	    return 'NOREPLY';
+	} else {
+	    my $seen = &get(seen => lc $person);
+
+	    if ($seen) {
+	        &print_seen($person,$seen);
+	        return 'NOREPLY';
 	    }
 
 	    if ($msgType =~ /public/) {
-		&performSay("$person was last seen on $where $tstring, saying: $what [$when]");
+	        &performSay("I haven't seen '$person', $who");
 	    } else {
-		&msg($who, "$person was last seen on $where $tstring, saying: $what [$when]");
+	        &msg($who,"I haven't seen '$person', $who");
 	    }
-	    return 'NOREPLY';
-	}
 
-	if ($msgType =~ /public/) {
-	    &performSay("I haven't seen '$person', $who");
-	} else {
-	    &msg($who,"I haven't seen '$person', $who");
+	    return 'NOREPLY';
 	}
-	return 'NOREPLY';
     }
 
     if ($message =~ /^\s*heya?,? /) {

diff -r -u infobot-0.45.3/src/Setup.pl mod_infobot/src/Setup.pl
--- infobot-0.45.3/src/Setup.pl	Tue Jan  2 06:22:15 2001
+++ mod_infobot/src/Setup.pl	Sat Jul  5 20:42:37 2003
@@ -97,6 +97,10 @@
 	&openDBMx('seen');
     }
 
+    if ($param{'alias'}) {
+	&openDBMx('alias');
+    }
+
     # set up the users and ops
 	&status("Parsing User File");
     &parseUserfile();
