diff --git a/Lib/distutils/fancy_getopt.py b/Lib/distutils/fancy_getopt.py
index cfebab4..629da29 100644
--- a/Lib/distutils/fancy_getopt.py
+++ b/Lib/distutils/fancy_getopt.py
@@ -66,6 +66,10 @@
         if self.option_table:
             self._build_index()
 
+        # 'alias' records (duh) alias options; {'foo': 'bar'} means
+        # --foo is an alias for --bar
+        self.alias = {}
+
         # 'negative_alias' keeps track of options that are the boolean
         # opposite of some other option
         self.negative_alias = {}
@@ -118,23 +122,29 @@
         return string.translate (long_option, longopt_xlate)
 
 
+    def _check_alias_dict (self, aliases, what):
+        assert type(aliases) is DictionaryType
+        for (alias, opt) in aliases.items():
+            if not self.option_index.has_key(alias):
+                raise DistutilsGetoptError, \
+                      ("invalid %s '%s': "
+                       "option '%s' not defined") % (what, alias, alias)
+            if not self.option_index.has_key(opt):
+                raise DistutilsGetoptError, \
+                      ("invalid %s '%s': "
+                       "aliased option '%s' not defined") % (what, alias, opt)
+        
+    def set_aliases (self, alias):
+        """Set the aliases for this option parser."""
+        self._check_alias_dict (alias, "alias")
+        self.alias = alias
+
     def set_negative_aliases (self, negative_alias):
         """Set the negative aliases for this option parser.
         'negative_alias' should be a dictionary mapping option names to
         option names, both the key and value must already be defined
         in the option table."""
-
-        assert type(negative_alias) is DictionaryType
-        for (negopt, opt) in negative_alias.items():
-            if not self.option_index.has_key(negopt):
-                raise DistutilsGetoptError, \
-                      ("invalid negative alias '%s': "
-                       "option '%s' not defined") % (negopt, negopt)
-            if not self.option_index.has_key(opt):
-                raise DistutilsGetoptError, \
-                      ("invalid negative alias '%s': "
-                       "aliased option '%s' not defined") % (negopt, opt)
-
+        self._check_alias_dict (negative_alias, "negative alias")
         self.negative_alias = negative_alias
 
 
@@ -186,6 +196,16 @@
                 else:
                     self.takes_arg[long] = 0
 
+            # If this is an alias option, make sure its "takes arg" flag is
+            # the same as the option it's aliased to.
+            alias_to = self.alias.get(long)
+            if alias_to is not None:
+                if self.takes_arg[long] != self.takes_arg[alias_to]:
+                    raise DistutilsGetoptError, \
+                          ("invalid alias '%s': inconsistent with "
+                           "aliased option '%s' (one of them takes a value, "
+                           "the other doesn't") % (long, alias_to)
+
 
             # Now enforce some bondage on the long option name, so we can
             # later translate it to an attribute name on some object.  Have
@@ -243,6 +263,10 @@
                 raise DistutilsInternalError, \
                       "this can't happen: bad option string '%s'" % opt
 
+            alias = self.alias.get(opt)
+            if alias:
+                opt = alias
+
             if not self.takes_arg[opt]:     # boolean option?
                 if val != '':               # shouldn't have a value!
                     raise DistutilsInternalError, \
