diff --git a/twisted/trial/runner.py b/twisted/trial/runner.py
index 68663b5..a9a72ec 100644
--- a/twisted/trial/runner.py
+++ b/twisted/trial/runner.py
@@ -657,13 +657,16 @@ class TestLoader(object):
         to same value and collapse to one test unexpectedly if using simpler
         means: e.g. set().
         """
-        entries = []
+        seen = set()
         for thing in things:
             if isinstance(thing, types.MethodType):
-                entries.append((thing, thing.im_class))
+                thing = (thing, thing.im_class)
             else:
-                entries.append((thing,))
-        return [entry[0] for entry in set(entries)]
+                thing = (thing,)
+
+            if thing not in seen:
+                yield thing[0]
+                seen.add(thing)
 
 
 
diff --git a/twisted/trial/test/test_loader.py b/twisted/trial/test/test_loader.py
index f08588e..5150517 100644
--- a/twisted/trial/test/test_loader.py
+++ b/twisted/trial/test/test_loader.py
@@ -477,6 +477,22 @@ class LoaderTest(packages.SysPathManglingTest):
         self.assertSuitesEqual(suite1, suite2)
 
 
+    def test_loadByNamesPreservesOrder(self):
+        """
+        L{TestLoader.loadByNames} preserves the order of tests provided to it.
+        """
+        modules = [
+            "inheritancepackage.test_x.A.test_foo",
+            "twisted.trial.test.sample",
+            "goodpackage",
+            "twisted.trial.test.test_test_visitor",
+            "twisted.trial.test.sample.FooTest",
+            "package.test_module"]
+        suite1 = self.loader.loadByNames(modules)
+        suite2 = runner.TestSuite(map(self.loader.loadByName, modules))
+        self.assertEqual(testNames(suite1), testNames(suite2))
+
+
     def test_loadDifferentNames(self):
         """
         Check that loadByNames loads all the names that it is given
diff --git a/twisted/trial/test/test_script.py b/twisted/trial/test/test_script.py
index 3a45bac..5acf343 100644
--- a/twisted/trial/test/test_script.py
+++ b/twisted/trial/test/test_script.py
@@ -454,7 +454,12 @@ class TestArgumentOrderTests(unittest.TestCase):
 
         """
 
-        tests = ["foo", "bar", "quux", "baz"]
+        tests = [
+            "twisted.manhole.test.test_explorer",
+            "twisted.conch.test.test_conch",
+            "twisted.internet.test.test_default",
+            "twisted.test.test_abstract",
+        ]
         self.config.parseOptions(tests)
 
         suite = trial._getSuite(self.config)
