diff --git a/tools/ccc/ccclib/Arguments.py b/tools/ccc/ccclib/Arguments.py
index 5b5dbfe..486af4f 100644
--- a/tools/ccc/ccclib/Arguments.py
+++ b/tools/ccc/ccclib/Arguments.py
@@ -111,7 +111,7 @@
         assert opt is not None
         self.index = index
         self.opt = opt
-
+        
     def __repr__(self):
         return '<%s index=%r opt=%r>' % (self.__class__.__name__,
                                          self.index,
@@ -239,6 +239,10 @@
     def __init__(self, argv):
         self.argv = list(argv)
         self.args = []
+        self.lastArgs = {}
+
+    def getLastArg(self, option):
+        return self.lastArgs.get(option)
 
     # Support use as a simple arg list.
 
@@ -247,6 +251,7 @@
 
     def append(self, arg):
         self.args.append(arg)
+        self.lastArgs[arg.opt] = arg
 
     # Forwarding methods.
 
@@ -268,8 +273,198 @@
         self.inputOption = InputOption()
         self.unknownOption = UnknownOption()
 
+        # Driver driver options
+        self.archOption = self.addOption(SeparateOption('-arch'))
+
+        # Misc driver options
+        self.addOption(FlagOption('-pass-exit-codes'))
+        self.addOption(FlagOption('--help'))
+        self.addOption(FlagOption('--target-help'))
+
+        self.dumpspecsOption = self.addOption(FlagOption('-dumpspecs'))
+        self.dumpversionOption = self.addOption(FlagOption('-dumpversion'))
+        self.dumpmachineOption = self.addOption(FlagOption('-dumpmachine'))
+        self.printSearchDirsOption = self.addOption(FlagOption('-print-search-dirs'))
+        self.printLibgccFilenameOption = self.addOption(FlagOption('-print-libgcc-file-name'))
+        # FIXME: Hrm, where does this come from? It isn't always true that
+        # we take both - and --. For example, gcc --S ... ends up sending
+        # -fS to cc1. Investigate.
+        #
+        # FIXME: Need to implement some form of alias support inside
+        # getLastOption to handle this.
+        self.printLibgccFileNameOption2 = self.addOption(FlagOption('--print-libgcc-file-name'))
+        self.printFileNameOption = self.addOption(JoinedOption('-print-file-name='))
+        self.printProgNameOption = self.addOption(JoinedOption('-print-prog-name='))
+        self.printProgNameOption2 = self.addOption(JoinedOption('--print-prog-name='))
+        self.printMultiDirectoryOption = self.addOption(FlagOption('-print-multi-directory'))
+        self.printMultiLibOption = self.addOption(FlagOption('-print-multi-lib'))
+        self.addOption(FlagOption('-print-multi-os-directory'))
+
+        # Hmmm, who really takes this?
+        self.addOption(FlagOption('--version'))
+
+        # Pipeline control
+        self.hashHashHashOption = self.addOption(FlagOption('-###'))
+        self.EOption = self.addOption(FlagOption('-E'))
+        self.SOption = self.addOption(FlagOption('-S'))
+        self.cOption = self.addOption(FlagOption('-c'))
+        self.combineOption = self.addOption(FlagOption('-combine'))
+        self.noIntegratedCPPOption = self.addOption(FlagOption('-no-integrated-cpp'))
+        self.pipeOption = self.addOption(FlagOption('-pipe'))
+        self.saveTempsOption = self.addOption(FlagOption('-save-temps'))
+        self.saveTempsOption2 = self.addOption(FlagOption('--save-temps'))
+        self.addOption(JoinedOption('-specs='))
+        self.addOption(FlagOption('-time'))
+        self.addOption(FlagOption('-v'))
+
+        # Input/output stuff
+        self.oOption = self.addOption(JoinedOrSeparateOption('-o'))
+        self.xOption = self.addOption(JoinedOrSeparateOption('-x'))
+
+        # FIXME: What do these actually do? The documentation is less than
+        # clear.
+        self.addOption(FlagOption('-ObjC'))
+        self.addOption(FlagOption('-ObjC++'))
+
+        # FIXME: Weird, gcc claims this here in help but I'm not sure why;
+        # perhaps interaction with preprocessor? Investigate.
+        self.addOption(JoinedOption('-std='))
+        self.addOption(JoinedOrSeparateOption('--sysroot'))
+
+        # Version control
+        self.addOption(JoinedOrSeparateOption('-B'))
+        self.addOption(JoinedOrSeparateOption('-V'))
+        self.addOption(JoinedOrSeparateOption('-b'))
+
+        # Blanket pass-through options.
+
+        self.addOption(JoinedOption('-Wa,'))
+        self.addOption(SeparateOption('-Xassembler'))
+
+        self.addOption(JoinedOption('-Wp,'))
+        self.addOption(SeparateOption('-Xpreprocessor'))
+
+        self.addOption(JoinedOption('-Wl,'))
+        self.addOption(SeparateOption('-Xlinker'))
+
+        ####
+        # Bring on the random garbage.
+
+        self.addOption(FlagOption('-MD'))
+        self.addOption(FlagOption('-MP'))
+        self.addOption(FlagOption('-MM'))
+        self.addOption(JoinedOrSeparateOption('-MF'))
+        self.addOption(JoinedOrSeparateOption('-MT'))
+        self.addOption(FlagOption('-undef'))
+
+        self.addOption(FlagOption('-w'))
+        self.addOption(JoinedOrSeparateOption('-allowable_client'))
+        self.addOption(JoinedOrSeparateOption('-client_name'))
+        self.addOption(JoinedOrSeparateOption('-compatibility_version'))
+        self.addOption(JoinedOrSeparateOption('-current_version'))
+        self.addOption(JoinedOrSeparateOption('-exported_symbols_list'))
+        self.addOption(JoinedOrSeparateOption('-idirafter'))
+        self.addOption(JoinedOrSeparateOption('-iquote'))
+        self.addOption(JoinedOrSeparateOption('-isysroot'))
+        self.addOption(JoinedOrSeparateOption('-keep_private_externs'))
+        self.addOption(JoinedOrSeparateOption('-seg1addr'))
+        self.addOption(JoinedOrSeparateOption('-segprot'))
+        self.addOption(JoinedOrSeparateOption('-sub_library'))
+        self.addOption(JoinedOrSeparateOption('-sub_umbrella'))
+        self.addOption(JoinedOrSeparateOption('-umbrella'))
+        self.addOption(JoinedOrSeparateOption('-undefined'))
+        self.addOption(JoinedOrSeparateOption('-unexported_symbols_list'))
+        self.addOption(JoinedOrSeparateOption('-weak_framework'))
+        self.addOption(JoinedOption('-headerpad_max_install_names'))
+        self.addOption(FlagOption('-twolevel_namespace'))
+        self.addOption(FlagOption('-prebind'))
+        self.addOption(FlagOption('-prebind_all_twolevel_modules'))
+        self.addOption(FlagOption('-single_module'))
+        self.addOption(FlagOption('-nomultidefs'))
+        self.addOption(FlagOption('-nostdlib'))
+        self.addOption(FlagOption('-nostdinc'))
+        self.addOption(FlagOption('-static'))
+        self.addOption(FlagOption('-shared'))
+        self.addOption(FlagOption('-C'))
+        self.addOption(FlagOption('-CC'))
+        self.addOption(FlagOption('-R'))
+        self.addOption(FlagOption('-P'))
+        self.addOption(FlagOption('-all_load'))
+        self.addOption(FlagOption('--constant-cfstrings'))
+        self.addOption(FlagOption('-traditional'))
+        self.addOption(FlagOption('--traditional'))
+        self.addOption(FlagOption('-no_dead_strip_inits_and_terms'))
+        self.addOption(MultiArgOption('-sectalign', numArgs=3))
+        self.addOption(MultiArgOption('-sectcreate', numArgs=3))
+        self.addOption(MultiArgOption('-sectorder', numArgs=3))
+
+        # I dunno why these don't end up working when joined. Maybe
+        # because of translation?
+        self.filelistOption = self.addOption(SeparateOption('-filelist'))
+        self.addOption(SeparateOption('-framework'))
+        self.addOption(SeparateOption('-install_name'))
+        self.addOption(SeparateOption('-seg_addr_table'))
+        self.addOption(SeparateOption('-seg_addr_table_filename'))
+
+        # Where are these coming from? I can't find them...
+        self.addOption(JoinedOrSeparateOption('-e')) # Gets forwarded to linker
+        self.addOption(JoinedOrSeparateOption('-r'))
+
+        # Is this actually declared anywhere? I can only find it in a
+        # spec. :(
+        self.addOption(FlagOption('-pg'))
+
+        doNotReallySupport = 1
+        if doNotReallySupport:
+            # Archaic gcc option.
+            self.addOption(FlagOption('-cpp-precomp'))
+            self.addOption(FlagOption('-no-cpp-precomp'))
+
+        # C options for testing
+
+        self.addOption(JoinedOrSeparateOption('-include'))
+        self.addOption(JoinedOrSeparateOption('-A'))
+        self.addOption(JoinedOrSeparateOption('-D'))
+        self.addOption(JoinedOrSeparateOption('-F'))
+        self.addOption(JoinedOrSeparateOption('-I'))
+        self.addOption(JoinedOrSeparateOption('-L'))
+        self.addOption(JoinedOrSeparateOption('-U'))
+        self.addOption(JoinedOrSeparateOption('-l'))
+        self.addOption(JoinedOrSeparateOption('-u'))
+
+        # FIXME: What is going on here? '-X' goes to linker, and -X ... goes nowhere?
+        self.addOption(FlagOption('-X'))
+        # Not exactly sure how to decompose this. I split out -Xarch_
+        # because we need to recognize that in the driver driver part.
+        # FIXME: Man, this is lame it needs its own option.
+        self.XarchOption = self.addOption(JoinedAndSeparateOption('-Xarch_'))
+        self.addOption(JoinedOption('-X'))
+
+        # The driver needs to know about this flag.
+        self.syntaxOnlyOption = self.addOption(FlagOption('-fsyntax-only'))
+
+        # FIXME: Wrong?
+        # FIXME: What to do about the ambiguity of options like
+        # -dumpspecs? How is this handled in gcc?
+        self.addOption(JoinedOption('-d'))
+        self.addOption(JoinedOption('-g'))
+        self.addOption(JoinedOption('-f'))
+        self.addOption(JoinedOption('-m'))
+        self.addOption(JoinedOption('-i'))
+        self.addOption(JoinedOption('-O'))
+        self.addOption(JoinedOption('-W'))
+        # FIXME: Weird. This option isn't really separate, --param=a=b
+        # works. An alias somewhere?
+        self.addOption(SeparateOption('--param'))
+
+        # FIXME: What is this? Seems to do something on Linux. I think
+        # only one is valid, but have a log that uses both.
+        self.addOption(FlagOption('-pthread'))
+        self.addOption(FlagOption('-pthreads'))
+
     def addOption(self, opt):
         self.options.append(opt)
+        return opt
 
     def parseArgs(self, argv):
         """
@@ -302,194 +497,3 @@
             if arg is not None:
                 return arg
         return PositionalArg(i, self.unknownOption)
-
-def createOptionParser():
-    op = OptionParser()
-    
-    # Driver driver options
-    op.addOption(SeparateOption('-arch'))
-
-    # Misc driver options
-    op.addOption(FlagOption('-pass-exit-codes'))
-    op.addOption(FlagOption('--help'))
-    op.addOption(FlagOption('--target-help'))
-    
-    op.addOption(FlagOption('-dumpspecs'))
-    op.addOption(FlagOption('-dumpversion'))
-    op.addOption(FlagOption('-dumpmachine'))
-    op.addOption(FlagOption('-print-search-dirs'))
-    op.addOption(FlagOption('-print-libgcc-file-name'))
-    # FIXME: Hrm, where does this come from? It isn't always true that
-    # we take both - and --. For example, gcc --S ... ends up sending
-    # -fS to cc1. Investigate.
-    op.addOption(FlagOption('--print-libgcc-file-name'))
-    op.addOption(JoinedOption('-print-file-name='))
-    op.addOption(JoinedOption('-print-prog-name='))
-    op.addOption(JoinedOption('--print-prog-name='))
-    op.addOption(FlagOption('-print-multi-directory'))
-    op.addOption(FlagOption('-print-multi-lib'))
-    op.addOption(FlagOption('-print-multi-os-directory'))
-
-    # Hmmm, who really takes this?
-    op.addOption(FlagOption('--version'))
-    
-    # Pipeline control
-    op.addOption(FlagOption('-###'))
-    op.addOption(FlagOption('-E'))
-    op.addOption(FlagOption('-S'))
-    op.addOption(FlagOption('-c'))
-    op.addOption(FlagOption('-combine'))
-    op.addOption(FlagOption('-no-integrated-cpp'))
-    op.addOption(FlagOption('-pipe'))
-    op.addOption(FlagOption('-save-temps'))
-    op.addOption(FlagOption('--save-temps'))
-    op.addOption(JoinedOption('-specs='))
-    op.addOption(FlagOption('-time'))
-    op.addOption(FlagOption('-v'))
-
-    # Input/output stuff
-    op.addOption(JoinedOrSeparateOption('-o'))
-    op.addOption(JoinedOrSeparateOption('-x'))
-
-    # FIXME: What do these actually do? The documentation is less than
-    # clear.
-    op.addOption(FlagOption('-ObjC'))
-    op.addOption(FlagOption('-ObjC++'))
-
-    # FIXME: Weird, gcc claims this here in help but I'm not sure why;
-    # perhaps interaction with preprocessor? Investigate.
-    op.addOption(JoinedOption('-std='))
-    op.addOption(JoinedOrSeparateOption('--sysroot'))
-
-    # Version control
-    op.addOption(JoinedOrSeparateOption('-B'))
-    op.addOption(JoinedOrSeparateOption('-V'))
-    op.addOption(JoinedOrSeparateOption('-b'))
-
-    # Blanket pass-through options.
-    
-    op.addOption(JoinedOption('-Wa,'))
-    op.addOption(SeparateOption('-Xassembler'))
-
-    op.addOption(JoinedOption('-Wp,'))
-    op.addOption(SeparateOption('-Xpreprocessor'))
-
-    op.addOption(JoinedOption('-Wl,'))
-    op.addOption(SeparateOption('-Xlinker'))
-
-    ####
-    # Bring on the random garbage.
-
-    op.addOption(FlagOption('-MD'))
-    op.addOption(FlagOption('-MP'))
-    op.addOption(FlagOption('-MM'))
-    op.addOption(JoinedOrSeparateOption('-MF'))
-    op.addOption(JoinedOrSeparateOption('-MT'))
-    op.addOption(FlagOption('-undef'))
-
-    op.addOption(FlagOption('-w'))
-    op.addOption(JoinedOrSeparateOption('-allowable_client'))
-    op.addOption(JoinedOrSeparateOption('-client_name'))
-    op.addOption(JoinedOrSeparateOption('-compatibility_version'))
-    op.addOption(JoinedOrSeparateOption('-current_version'))
-    op.addOption(JoinedOrSeparateOption('-exported_symbols_list'))
-    op.addOption(JoinedOrSeparateOption('-idirafter'))
-    op.addOption(JoinedOrSeparateOption('-iquote'))
-    op.addOption(JoinedOrSeparateOption('-isysroot'))
-    op.addOption(JoinedOrSeparateOption('-keep_private_externs'))
-    op.addOption(JoinedOrSeparateOption('-seg1addr'))
-    op.addOption(JoinedOrSeparateOption('-segprot'))
-    op.addOption(JoinedOrSeparateOption('-sub_library'))
-    op.addOption(JoinedOrSeparateOption('-sub_umbrella'))
-    op.addOption(JoinedOrSeparateOption('-umbrella'))
-    op.addOption(JoinedOrSeparateOption('-undefined'))
-    op.addOption(JoinedOrSeparateOption('-unexported_symbols_list'))
-    op.addOption(JoinedOrSeparateOption('-weak_framework'))
-    op.addOption(JoinedOption('-headerpad_max_install_names'))
-    op.addOption(FlagOption('-twolevel_namespace'))
-    op.addOption(FlagOption('-prebind'))
-    op.addOption(FlagOption('-prebind_all_twolevel_modules'))
-    op.addOption(FlagOption('-single_module'))
-    op.addOption(FlagOption('-nomultidefs'))
-    op.addOption(FlagOption('-nostdlib'))
-    op.addOption(FlagOption('-nostdinc'))
-    op.addOption(FlagOption('-static'))
-    op.addOption(FlagOption('-shared'))
-    op.addOption(FlagOption('-C'))
-    op.addOption(FlagOption('-CC'))
-    op.addOption(FlagOption('-R'))
-    op.addOption(FlagOption('-P'))
-    op.addOption(FlagOption('-all_load'))
-    op.addOption(FlagOption('--constant-cfstrings'))
-    op.addOption(FlagOption('-traditional'))
-    op.addOption(FlagOption('--traditional'))
-    op.addOption(FlagOption('-no_dead_strip_inits_and_terms'))
-    op.addOption(MultiArgOption('-sectalign', numArgs=3))
-    op.addOption(MultiArgOption('-sectcreate', numArgs=3))
-    op.addOption(MultiArgOption('-sectorder', numArgs=3))
-
-    # I dunno why these don't end up working when joined. Maybe
-    # because of translation?
-    op.addOption(SeparateOption('-filelist'))
-    op.addOption(SeparateOption('-framework'))
-    op.addOption(SeparateOption('-install_name'))
-    op.addOption(SeparateOption('-seg_addr_table'))
-    op.addOption(SeparateOption('-seg_addr_table_filename'))
-
-    # Where are these coming from? I can't find them...
-    op.addOption(JoinedOrSeparateOption('-e')) # Gets forwarded to linker
-    op.addOption(JoinedOrSeparateOption('-r'))
-
-    # Is this actually declared anywhere? I can only find it in a
-    # spec. :(
-    op.addOption(FlagOption('-pg'))
-
-    doNotReallySupport = 1
-    if doNotReallySupport:
-        # Archaic gcc option.
-        op.addOption(FlagOption('-cpp-precomp'))
-        op.addOption(FlagOption('-no-cpp-precomp'))
-
-    # C options for testing
-
-    op.addOption(JoinedOrSeparateOption('-include'))
-    op.addOption(JoinedOrSeparateOption('-A'))
-    op.addOption(JoinedOrSeparateOption('-D'))
-    op.addOption(JoinedOrSeparateOption('-F'))
-    op.addOption(JoinedOrSeparateOption('-I'))
-    op.addOption(JoinedOrSeparateOption('-L'))
-    op.addOption(JoinedOrSeparateOption('-U'))
-    op.addOption(JoinedOrSeparateOption('-l'))
-    op.addOption(JoinedOrSeparateOption('-u'))
-
-    # FIXME: What is going on here? '-X' goes to linker, and -X ... goes nowhere?
-    op.addOption(FlagOption('-X'))
-    # Not exactly sure how to decompose this. I split out -Xarch_
-    # because we need to recognize that in the driver driver part.
-    # FIXME: Man, this is lame it needs its own option.
-    op.addOption(JoinedAndSeparateOption('-Xarch_'))
-    op.addOption(JoinedOption('-X'))
-
-    # The driver needs to know about this flag.
-    op.addOption(FlagOption('-fsyntax-only'))
-
-    # FIXME: Wrong?
-    # FIXME: What to do about the ambiguity of options like
-    # -dumpspecs? How is this handled in gcc?
-    op.addOption(JoinedOption('-d'))
-    op.addOption(JoinedOption('-g'))
-    op.addOption(JoinedOption('-f'))
-    op.addOption(JoinedOption('-m'))
-    op.addOption(JoinedOption('-i'))
-    op.addOption(JoinedOption('-O'))
-    op.addOption(JoinedOption('-W'))
-    # FIXME: Weird. This option isn't really separate, --param=a=b
-    # works. An alias somewhere?
-    op.addOption(SeparateOption('--param'))
-
-    # FIXME: What is this? Seems to do something on Linux. I think
-    # only one is valid, but have a log that uses both.
-    op.addOption(FlagOption('-pthread'))
-    op.addOption(FlagOption('-pthreads'))
-
-    return op
diff --git a/tools/ccc/ccclib/Driver.py b/tools/ccc/ccclib/Driver.py
index 0133c34..aa617c6 100644
--- a/tools/ccc/ccclib/Driver.py
+++ b/tools/ccc/ccclib/Driver.py
@@ -25,7 +25,7 @@
 
 class Driver(object):
     def __init__(self):
-        self.parser = Arguments.createOptionParser()
+        self.parser = Arguments.OptionParser()
 
     def run(self, argv):
         # FIXME: Things to support from environment: GCC_EXEC_PREFIX,
@@ -99,11 +99,7 @@
         # can turn it off in Release-Asserts builds).
 
         # Print in -### syntax.
-        hasHashHashHash = None
-        for arg in args:
-            if arg.opt.name == '-###':
-                hasHashHashHash = arg
-
+        hasHashHashHash = args.getLastArg(self.parser.hashHashHashOption)
         if hasHashHashHash:
             self.claim(hasHashHashHash)
             for j in jobs.iterjobs():
@@ -192,45 +188,63 @@
         # FIXME: Do we want to report "argument unused" type errors in the
         # presence of things like -dumpmachine and -print-search-dirs?
         # Probably not.
-        for arg in args:
-            if arg.opt.name == '-dumpmachine':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
-            elif arg.opt.name == '-dumpspecs':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
-            elif arg.opt.name == '-dumpversion':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
-            elif arg.opt.name == '-print-file-name=':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
-            elif arg.opt.name == '-print-multi-directory':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
-            elif arg.opt.name == '-print-multi-lib':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
-            elif arg.opt.name == '-print-prog-name=':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
-            elif arg.opt.name == '-print-libgcc-file-name':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
-            elif arg.opt.name == '-print-search-dirs':
-                print 'FIXME: %s' % arg.opt.name
-                sys.exit(1)
+        arg = args.getLastArg(self.parser.dumpmachineOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
+
+        arg = args.getLastArg(self.parser.dumpspecsOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
+
+        arg = args.getLastArg(self.parser.dumpversionOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
+
+        arg = args.getLastArg(self.parser.printFileNameOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
+
+        arg = args.getLastArg(self.parser.printMultiDirectoryOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
+
+        arg = args.getLastArg(self.parser.printMultiLibOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
+
+        arg = args.getLastArg(self.parser.printProgNameOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
+
+        arg = args.getLastArg(self.parser.printLibgccFilenameOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
+
+        arg = args.getLastArg(self.parser.printSearchDirsOption)
+        if arg:
+            print 'FIXME: %s' % arg.opt.name
+            sys.exit(1)
 
     def buildNormalPipeline(self, args):
-        hasCombine = None
-        hasSyntaxOnly = None
-        hasDashC = hasDashE = hasDashS = None
+        hasCombine = args.getLastArg(self.parser.combineOption)
+        hasSyntaxOnly = args.getLastArg(self.parser.syntaxOnlyOption)
+        hasDashC = args.getLastArg(self.parser.cOption)
+        hasDashE = args.getLastArg(self.parser.EOption)
+        hasDashS = args.getLastArg(self.parser.SOption)
 
         inputType = None
         inputTypeOpt = None
         inputs = []
         for a in args:
-            if a.opt.name == '<input>':
+            if a.opt is self.parser.inputOption:
                 if inputType is None:
                     base,ext = os.path.splitext(args.getValue(a))
                     if ext and ext in Types.kTypeSuffixMap:
@@ -246,18 +260,9 @@
                     self.claim(inputTypeOpt)
                     klass = inputType
                 inputs.append((klass, a))
-            elif a.opt.name == '-E':
-                hasDashE = a
-            elif a.opt.name == '-S':
-                hasDashS = a
-            elif a.opt.name == '-c':
-                hasDashC = a
-            elif a.opt.name == '-fsyntax-only':
-                hasSyntaxOnly = a
-            elif a.opt.name == '-combine':
-                hasCombine = a
-            elif a.opt.name == '-filelist':
-                # Treat as a linker input.
+            elif a.opt is self.parser.filelistOption:
+                # Treat as a linker input. Investigate how gcc is
+                # handling this.
                 #
                 # FIXME: This might not be good enough. We may
                 # need to introduce another type for this case, so
@@ -265,7 +270,7 @@
                 # handles this properly. Best not to try and lipo
                 # this, for example.
                 inputs.append((Types.ObjectType, a))
-            elif a.opt.name == '-x':
+            elif a.opt is self.parser.xOption:
                 self.claim(a)
                 inputTypeOpt = a
                 value = args.getValue(a)
@@ -400,15 +405,14 @@
         # FIXME: We need to handle canonicalization of the specified arch.
 
         archs = []
-        hasOutput = None
-        hasDashM = hasSaveTemps = None
+        hasDashM = None
+        hasSaveTemps = (args.getLastArg(self.parser.saveTempsOption) or 
+                        args.getLastArg(self.parser.saveTempsOption2))
         for arg in args:
-            if arg.opt.name == '-arch':
+            if arg.opt is self.parser.archOption:
                 archs.append(arg)
             elif arg.opt.name.startswith('-M'):
                 hasDashM = arg
-            elif arg.opt.name in ('-save-temps','--save-temps'):
-                hasSaveTemps = arg
 
         if not archs:
             # FIXME: Need to infer arch so that we sub -Xarch
@@ -477,24 +481,22 @@
     def bindPhases(self, phases, args):
         jobs = Jobs.JobList()
 
-        finalOutput = None
-        hasSaveTemps = hasNoIntegratedCPP = hasPipe = None
+        finalOutput = args.getLastArg(self.parser.oOption)
+        hasSaveTemps = (args.getLastArg(self.parser.saveTempsOption) or
+                        args.getLastArg(self.parser.saveTempsOption2))
+        hasNoIntegratedCPP = args.getLastArg(self.parser.noIntegratedCPPOption)
+        hasPipe = args.getLastArg(self.parser.pipeOption)
         forward = []
         for a in args:
-            if a.opt.name == '<input>':
+            if a.opt is self.parser.inputOption:
                 pass
-            elif a.opt.name == '-save-temps':
-                hasSaveTemps = a
-            elif a.opt.name == '-no-integrated-cpp':
-                hasNoIntegratedCPP = a
-            elif a.opt.name == '-o':
-                finalOutput = a
-            elif a.opt.name == '-pipe':
-                hasPipe = a
+
+            # FIXME: Needs to be part of option.
             elif a.opt.name in ('-E', '-S', '-c',
                                 '-arch', '-fsyntax-only', '-combine', '-x',
                                 '-###'):
                 pass
+
             else:
                 forward.append(a)
 
@@ -538,10 +540,10 @@
                 archName = args.getValue(phase.arch)
                 filteredArgs = []
                 for arg in forwardArgs:
-                    if arg.opt.name == '-arch':
+                    if arg.opt is self.parser.archOption:
                         if arg is phase.arch:
                             filteredArgs.append(arg)
-                    elif arg.opt.name == '-Xarch_':
+                    elif arg.opt is self.parser.XarchOption:
                         # FIXME: gcc-dd has another conditional for passing
                         # through, when the arch conditional array has an empty
                         # string. Why?
@@ -617,7 +619,7 @@
                 else:
                     base,_ = os.path.splitext(inputName)
                     assert phase.type.tempSuffix is not None
-                    namedOutput = base + phase.type.tempSuffix
+                    namedOutput = base + '.' + phase.type.tempSuffix
 
                 # Output to user requested destination?
                 if atTopLevel and finalOutput:
@@ -627,7 +629,7 @@
                     output = Arguments.DerivedArg(namedOutput)
                 else:
                     # Output to temp file...
-                    fd,filename = tempfile.mkstemp(suffix=phase.type.tempSuffix)
+                    fd,filename = tempfile.mkstemp(suffix='.'+phase.type.tempSuffix)
                     output = Arguments.DerivedArg(filename)
 
             tool.constructJob(phase, arch, jobList, inputs, output, phase.type, forwardArgs)
diff --git a/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py
index ddfb029..1468fe8 100644
--- a/tools/ccc/ccclib/Tools.py
+++ b/tools/ccc/ccclib/Tools.py
@@ -3,7 +3,7 @@
 import Types
 
 class Tool(object):
-    """Tool - A concrete implementation of a phase."""
+    """Tool - A concrete implementation of an action."""
 
     eFlagsPipedInput = 1 << 0
     eFlagsPipedOutput = 1 << 1
