diff --git a/android/cts/master/com.drawelements.deqp.egl.xml b/android/cts/master/com.drawelements.deqp.egl.xml
index a44bebc..73784a3 100644
--- a/android/cts/master/com.drawelements.deqp.egl.xml
+++ b/android/cts/master/com.drawelements.deqp.egl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<TestPackage appPackageName="com.drawelements.deqp.egl" deqp:glesVersion="131072" name="dEQP-EGL" runtimeHint="0" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
+<TestPackage appPackageName="com.drawelements.deqp.egl" deqp:glesVersion="131072" name="dEQP-EGL" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
 	<TestSuite name="dEQP-EGL">
 		<TestCase name="info">
 			<Test name="version">
diff --git a/android/cts/master/com.drawelements.deqp.gles2.xml b/android/cts/master/com.drawelements.deqp.gles2.xml
index 2d928b7..730c3fd 100644
--- a/android/cts/master/com.drawelements.deqp.gles2.xml
+++ b/android/cts/master/com.drawelements.deqp.gles2.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<TestPackage appPackageName="com.drawelements.deqp.gles2" deqp:glesVersion="131072" name="dEQP-GLES2" runtimeHint="28" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
+<TestPackage appPackageName="com.drawelements.deqp.gles2" deqp:glesVersion="131072" name="dEQP-GLES2" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
 	<TestSuite name="dEQP-GLES2">
 		<TestCase name="info">
 			<Test name="vendor">
diff --git a/android/cts/master/com.drawelements.deqp.gles3.xml b/android/cts/master/com.drawelements.deqp.gles3.xml
index a6fe0fe..c798e82 100644
--- a/android/cts/master/com.drawelements.deqp.gles3.xml
+++ b/android/cts/master/com.drawelements.deqp.gles3.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<TestPackage appPackageName="com.drawelements.deqp.gles3" deqp:glesVersion="196608" name="dEQP-GLES3" runtimeHint="180" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
+<TestPackage appPackageName="com.drawelements.deqp.gles3" deqp:glesVersion="196608" name="dEQP-GLES3" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
 	<TestSuite name="dEQP-GLES3">
 		<TestCase name="info">
 			<Test name="vendor">
diff --git a/android/cts/master/com.drawelements.deqp.gles31.copy_image_compressed.xml b/android/cts/master/com.drawelements.deqp.gles31.copy_image_compressed.xml
index 490619b..ac7c62c 100644
--- a/android/cts/master/com.drawelements.deqp.gles31.copy_image_compressed.xml
+++ b/android/cts/master/com.drawelements.deqp.gles31.copy_image_compressed.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<TestPackage appPackageName="com.drawelements.deqp.gles31.copy_image_compressed" deqp:glesVersion="196609" name="dEQP-GLES31" runtimeHint="40" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
+<TestPackage appPackageName="com.drawelements.deqp.gles31.copy_image_compressed" deqp:glesVersion="196609" name="dEQP-GLES31" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
 	<TestSuite name="dEQP-GLES31">
 		<TestSuite name="functional">
 			<TestSuite name="copy_image">
diff --git a/android/cts/master/com.drawelements.deqp.gles31.copy_image_mixed.xml b/android/cts/master/com.drawelements.deqp.gles31.copy_image_mixed.xml
index 5f4c473..394540c 100644
--- a/android/cts/master/com.drawelements.deqp.gles31.copy_image_mixed.xml
+++ b/android/cts/master/com.drawelements.deqp.gles31.copy_image_mixed.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<TestPackage appPackageName="com.drawelements.deqp.gles31.copy_image_mixed" deqp:glesVersion="196609" name="dEQP-GLES31" runtimeHint="140" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
+<TestPackage appPackageName="com.drawelements.deqp.gles31.copy_image_mixed" deqp:glesVersion="196609" name="dEQP-GLES31" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
 	<TestSuite name="dEQP-GLES31">
 		<TestSuite name="functional">
 			<TestSuite name="copy_image">
diff --git a/android/cts/master/com.drawelements.deqp.gles31.copy_image_non_compressed.xml b/android/cts/master/com.drawelements.deqp.gles31.copy_image_non_compressed.xml
index 43e7c93..de0fd6d 100644
--- a/android/cts/master/com.drawelements.deqp.gles31.copy_image_non_compressed.xml
+++ b/android/cts/master/com.drawelements.deqp.gles31.copy_image_non_compressed.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<TestPackage appPackageName="com.drawelements.deqp.gles31.copy_image_non_compressed" deqp:glesVersion="196609" name="dEQP-GLES31" runtimeHint="290" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
+<TestPackage appPackageName="com.drawelements.deqp.gles31.copy_image_non_compressed" deqp:glesVersion="196609" name="dEQP-GLES31" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
 	<TestSuite name="dEQP-GLES31">
 		<TestSuite name="functional">
 			<TestSuite name="copy_image">
diff --git a/android/cts/master/com.drawelements.deqp.gles31.xml b/android/cts/master/com.drawelements.deqp.gles31.xml
index cd0612e..ebab188 100644
--- a/android/cts/master/com.drawelements.deqp.gles31.xml
+++ b/android/cts/master/com.drawelements.deqp.gles31.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<TestPackage appPackageName="com.drawelements.deqp.gles31" deqp:glesVersion="196609" name="dEQP-GLES31" runtimeHint="45" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
+<TestPackage appPackageName="com.drawelements.deqp.gles31" deqp:glesVersion="196609" name="dEQP-GLES31" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp">
 	<TestSuite name="dEQP-GLES31">
 		<TestCase name="info">
 			<Test name="vendor">
diff --git a/scripts/build_android_mustpass.py b/scripts/build_android_mustpass.py
index 635c518..902cd3a 100644
--- a/scripts/build_android_mustpass.py
+++ b/scripts/build_android_mustpass.py
@@ -41,10 +41,9 @@
 		self.filters		= filters
 
 class Package:
-	def __init__ (self, module, configurations, runtimeHint = None, splitFilters = {}):
+	def __init__ (self, module, configurations, splitFilters = {}):
 		self.module			= module
-		self.configurations	        = configurations
-		self.runtimeHint	        = runtimeHint
+		self.configurations	= configurations
 		# Map of name:[include filters]. Each will generate <api>.<name> package
 		# Test cases that didn't match any split filter will be in <api> package,
 		# i.e., the default value keeps everything in one package.
@@ -85,11 +84,6 @@
 	def encode (self):
 		return (self.major << 16) | (self.minor)
 
-class FilterHint:
-	def __init__(self, packageFilter, hint):
-		self.packageFilter = packageFilter
-		self.hint = hint
-
 def getModuleGLESVersion (module):
 	versions = {
 		'dEQP-EGL':		GLESVersion(2,0),
@@ -135,7 +129,7 @@
 	generator	= ANY_GENERATOR
 	buildCfg	= getBuildConfig(DEFAULT_BUILD_DIR, DEFAULT_TARGET, "Debug")
 
-	build(buildCfg, generator, [module.binName])
+	#build(buildCfg, generator, [module.binName])
 	genCaseList(buildCfg, generator, module, "txt")
 
 	return readCaseList(getCaseListPath(buildCfg, module, "txt"))
@@ -268,7 +262,7 @@
 	reparsed	= minidom.parseString(uglyString)
 	return reparsed.toprettyxml(indent='\t', encoding='utf-8')
 
-def genCTSPackageXML (package, root, name, runtimeHint):
+def genCTSPackageXML (package, root, name):
 	def isLeafGroup (testGroup):
 		numGroups	= 0
 		numTests	= 0
@@ -309,8 +303,6 @@
 								  appPackageName	= name,
 								  testType			= "deqpTest")
 
-	if runtimeHint:
-		pkgElem.set("runtimeHint", runtimeHint)
 	pkgElem.set("xmlns:deqp", "http://drawelements.com/deqp")
 	pkgElem.set("deqp:glesVersion", str(getModuleGLESVersion(package.module).encode()))
 
@@ -333,7 +325,7 @@
 
 	return mustpassElem
 
-def genCTSPackage (package, cases, matchingByConfig, packageName, xmlFilename, runtimeHint):
+def genCTSPackage (package, cases, matchingByConfig, packageName, xmlFilename):
 	root		= buildTestHierachy(cases)
 	testCaseMap	= buildTestCaseMap(root)
 
@@ -342,7 +334,7 @@
 			if case in testCaseMap:
 				testCaseMap[case].configurations.append(config)
 
-	packageXml	= genCTSPackageXML(package, root, packageName, runtimeHint)
+	packageXml	= genCTSPackageXML(package, root, packageName)
 
 	print "  Writing CTS caselist: " + xmlFilename
 	writeFile(xmlFilename, prettifyXML(packageXml))
@@ -369,25 +361,19 @@
 
 		allMatchingCases		= [c for c in allCasesInPkg if c in allMatchingSet] # To preserve ordering
 		splitFilters			= package.splitFilters
-                splitNoHints                    = [f.packageFilter for f in splitFilters.values()]
 		for splitName in splitFilters.keys():
-			splitIncludeFilters	     = splitFilters[splitName]
-			runtimeHint = "0"
-			if isinstance(splitIncludeFilters, FilterHint):
-				runtimeHint	        = splitIncludeFilters.hint
-				splitIncludeFilters	= splitIncludeFilters.packageFilter
+			splitIncludeFilters	= splitFilters[splitName]
 			splitCases			= applyInclude(allMatchingCases, splitIncludeFilters)
 			packageName			= getCTSPackageName(package, splitName)
 			xmlFilename			= os.path.join(CTS_DATA_DIR, mustpass.version, packageName + ".xml")
-                        # if package.runtimeHint is None, do not set any runtime hints
-			genCTSPackage(package, splitCases, matchingByConfig, packageName, xmlFilename, runtimeHint if package.runtimeHint else None)
+			genCTSPackage(package, splitCases, matchingByConfig, packageName, xmlFilename)
 
 		# The cases not matching any of the includes
-		combinedSplitFilters	= reduce(lambda x,y: x+y, splitNoHints, [])
+		combinedSplitFilters	= reduce(lambda x,y: x+y, splitFilters.values(), [])
 		restOfCases				= applyExclude(allMatchingCases, combinedSplitFilters)
 		packageName				= getCTSPackageName(package, None)
 		xmlFilename				= os.path.join(CTS_DATA_DIR, mustpass.version, packageName + ".xml")
-		genCTSPackage(package, restOfCases, matchingByConfig, packageName, xmlFilename, package.runtimeHint)
+		genCTSPackage(package, restOfCases, matchingByConfig, packageName, xmlFilename)
 
 	specXML			= genSpecXML(mustpass)
 	specFilename	= os.path.join(CTS_DATA_DIR, mustpass.version, "mustpass.xml")
@@ -452,7 +438,7 @@
 					  rotation		= "unspecified",
 					  surfacetype	= "window",
 					  filters		= MASTER_EGL_COMMON_FILTERS),
-	], runtimeHint = "0")
+	])
 
 MASTER_GLES2_COMMON_FILTERS		= [
 		include("gles2-master.txt"),
@@ -466,7 +452,7 @@
 					  rotation		= "unspecified",
 					  surfacetype	= "window",
 					  filters		= MASTER_GLES2_COMMON_FILTERS),
-	], runtimeHint = "28")
+	])
 
 MASTER_GLES3_COMMON_FILTERS		= [
 		include("gles3-master.txt"),
@@ -519,7 +505,7 @@
 					  surfacetype	= "window",
 					  filters		= MASTER_GLES3_COMMON_FILTERS + [include("gles3-pixelformat.txt"),
 																	 exclude("gles3-pixelformat-issues.txt")]),
-	], runtimeHint = "180")
+	])
 
 MASTER_GLES31_COMMON_FILTERS	= [
 		include("gles31-master.txt"),
@@ -572,10 +558,9 @@
 					  surfacetype	= "window",
 					  filters		= MASTER_GLES31_COMMON_FILTERS + [include("gles31-pixelformat.txt")]),
 	],
-	runtimeHint = "45",
-	splitFilters = {"copy_image_compressed":			FilterHint(["dEQP-GLES31.functional.copy_image.compressed.*"], "40"),
-					"copy_image_non_compressed":		FilterHint(["dEQP-GLES31.functional.copy_image.non_compressed.*"], "290"),
-					"copy_image_mixed":					FilterHint(["dEQP-GLES31.functional.copy_image.mixed.*"], "140"),
+	splitFilters = {"copy_image_compressed":			["dEQP-GLES31.functional.copy_image.compressed.*"],
+					"copy_image_non_compressed":		["dEQP-GLES31.functional.copy_image.non_compressed.*"],
+					"copy_image_mixed":					["dEQP-GLES31.functional.copy_image.mixed.*"],
 					}
 	)
 
