diff --git a/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/Test.java b/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/Test.java
index a9dd5e0..93b838b 100644
--- a/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/Test.java
+++ b/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/Test.java
@@ -16,7 +16,7 @@
 
 package com.android.cts.xmlgenerator;
 
-public class Test {
+public class Test implements Comparable<Test> {
     private String mName;
     private int mTimeout;
 
@@ -32,4 +32,9 @@
     public int getTimeout() {
         return mTimeout;
     }
+
+    @Override
+    public int compareTo(Test another) {
+        return getName().compareTo(another.getName());
+    }
 }
diff --git a/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/TestCase.java b/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/TestCase.java
index a9ea6e1..ed09b8e 100644
--- a/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/TestCase.java
+++ b/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/TestCase.java
@@ -20,7 +20,7 @@
 import java.util.Collections;
 import java.util.List;
 
-class TestCase {
+class TestCase implements Comparable<TestCase> {
 
     private final String mName;
 
@@ -41,4 +41,9 @@
     public Collection<Test> getTests() {
         return Collections.unmodifiableCollection(mTests);
     }
+
+    @Override
+    public int compareTo(TestCase another) {
+        return getName().compareTo(another.getName());
+    }
 }
diff --git a/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/TestSuite.java b/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/TestSuite.java
index 3c29603..466f8d7 100644
--- a/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/TestSuite.java
+++ b/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/TestSuite.java
@@ -22,7 +22,7 @@
 import java.util.List;
 import java.util.Map;
 
-class TestSuite {
+class TestSuite implements Comparable<TestSuite> {
 
     private final String mName;
 
@@ -61,4 +61,9 @@
     public Collection<TestCase> getCases() {
         return Collections.unmodifiableCollection(mCases);
     }
+
+    @Override
+    public int compareTo(TestSuite another) {
+        return getName().compareTo(another.getName());
+    }
 }
diff --git a/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/XmlGenerator.java b/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/XmlGenerator.java
index 8a49cf3..7b1996d 100644
--- a/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/XmlGenerator.java
+++ b/tools/cts-xml-generator/src/com/android/cts/xmlgenerator/XmlGenerator.java
@@ -24,7 +24,10 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * Generator of TestPackage XML files for native tests.
@@ -141,7 +144,8 @@
 
     private void writeTestSuites(PrintWriter writer, Collection<TestSuite> suites,
             StringBuilder nameCollector) {
-        for (TestSuite suite : suites) {
+        Collection<TestSuite> sorted = sortCollection(suites);
+        for (TestSuite suite : sorted) {
             writer.append("<TestSuite name=\"").append(suite.getName()).println("\">");
 
             String namePart = suite.getName();
@@ -161,7 +165,8 @@
 
     private void writeTestCases(PrintWriter writer, Collection<TestCase> cases,
             StringBuilder nameCollector) {
-        for (TestCase testCase : cases) {
+        Collection<TestCase> sorted = sortCollection(cases);
+        for (TestCase testCase : sorted) {
             String name = testCase.getName();
             writer.append("<TestCase name=\"").append(name).println("\">");
             nameCollector.append('.').append(name);
@@ -176,7 +181,8 @@
 
     private void writeTests(PrintWriter writer, Collection<Test> tests,
             StringBuilder nameCollector) {
-        for (Test test : tests) {
+        Collection<Test> sorted = sortCollection(tests);
+        for (Test test : sorted) {
             nameCollector.append('#').append(test.getName());
             writer.append("<Test name=\"").append(test.getName()).append("\"");
             if (isKnownFailure(mExpectations, nameCollector.toString())) {
@@ -192,6 +198,12 @@
         }
     }
 
+    private <E extends Comparable<E>> Collection<E> sortCollection(Collection<E> col) {
+        List<E> list = new ArrayList<E>(col);
+        Collections.sort(list);
+        return list;
+    }
+
     public static boolean isKnownFailure(ExpectationStore expectationStore, String testName) {
         return expectationStore != null && expectationStore.get(testName) != Expectation.SUCCESS;
     }
diff --git a/tools/utils/buildCts.py b/tools/utils/buildCts.py
index 6dc1c70e..2eda363 100755
--- a/tools/utils/buildCts.py
+++ b/tools/utils/buildCts.py
@@ -98,6 +98,8 @@
     for description in descriptions:
       doc = tools.XmlFile(description)
       packages.append(doc.GetAttr('TestPackage', 'appPackageName'))
+    # sort the list to give the same sequence based on name
+    packages.sort()
 
     ptsPattern = r'com\.android\.pts\..*'
     plan = tools.TestPlan(packages)
