Index: twisted/trial/runner.py
===================================================================
--- twisted/trial/runner.py	(revision 27942)
+++ twisted/trial/runner.py	(working copy)
@@ -648,11 +648,13 @@
         errors = []
         for name in names:
             try:
-                things.append(self.findByName(name))
+                fn = self.findByName(name)
+                if fn not in things:
+                    things.append(fn)
             except:
                 errors.append(ErrorHolder(name, failure.Failure()))
         suites = [self.loadAnything(thing, recurse)
-                  for thing in set(things)]
+                  for thing in things]
         suites.extend(errors)
         return self.suiteFactory(suites)
 
Index: twisted/scripts/trial.py
===================================================================
--- twisted/scripts/trial.py	(revision 27942)
+++ twisted/scripts/trial.py	(working copy)
@@ -136,7 +136,7 @@
     tracer = None
 
     def __init__(self):
-        self['tests'] = set()
+        self['tests'] = list()
         usage.Options.__init__(self)
 
     def opt_coverage(self):
@@ -196,9 +196,9 @@
             return
         filename = os.path.abspath(filename)
         if isTestFile(filename):
-            self['tests'].add(filename)
+            self['tests'].append(filename)
         else:
-            self['tests'].update(getTestModules(filename))
+            self['tests'].extend(getTestModules(filename))
 
     def opt_spew(self):
         """Print an insanely verbose log of everything that happens.  Useful
@@ -273,9 +273,9 @@
             sys.modules[module] = None
 
     def parseArgs(self, *args):
-        self['tests'].update(args)
+        self['tests'].extend(args)
         if self.extra is not None:
-            self['tests'].update(self.extra)
+            self['tests'].extend(self.extra)
 
     def _loadReporterByName(self, name):
         for p in plugin.getPlugins(itrial.IReporter):
