diff --git a/Android.mk b/Android.mk
index b4139e3..faef02f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -47,7 +47,7 @@
 # Note that this is incompatible with `make dist`.  If you want to make
 # the distribution, you must run `tapas` with the individual target names.
 .PHONY: tradefed-all
-tradefed-all: tradefed tradefed-tests tf-prod-tests
+tradefed-all: tradefed tradefed-tests tf-prod-tests tf-prod-metatests
 
 # ====================================
 include $(CLEAR_VARS)
diff --git a/prod-tests/src/com/android/continuous/SmokeTest.java b/prod-tests/src/com/android/continuous/SmokeTest.java
index 34a082e..eaa3217 100644
--- a/prod-tests/src/com/android/continuous/SmokeTest.java
+++ b/prod-tests/src/com/android/continuous/SmokeTest.java
@@ -16,6 +16,7 @@
 
 package com.android.continuous;
 
+import com.android.ddmlib.testrunner.TestIdentifier;
 import com.android.tradefed.config.Option;
 import com.android.tradefed.config.Option.Importance;
 import com.android.tradefed.config.OptionClass;
@@ -28,6 +29,7 @@
 import com.android.tradefed.result.DeviceFileReporter;
 import com.android.tradefed.result.ITestInvocationListener;
 import com.android.tradefed.result.LogDataType;
+import com.android.tradefed.result.NameMangleListener;
 import com.android.tradefed.testtype.InstrumentationTest;
 
 import java.util.LinkedHashMap;
@@ -51,15 +53,41 @@
      */
     @Override
     public void run(final ITestInvocationListener listener) throws DeviceNotAvailableException {
+        // trimListener should be the first thing to receive any results.  It will pass the results
+        // through to the bugListener, which will forward them (after collecting any necessary
+        // bugreports) to the real Listener(s).
         final BugreportCollector bugListener = new BugreportCollector(listener, getDevice());
         bugListener.addPredicate(BugreportCollector.AFTER_FAILED_TESTCASES);
+        final ITestInvocationListener trimListener = new TrimListener(bugListener);
 
-        super.run(bugListener);
+        super.run(trimListener);
 
-        final DeviceFileReporter dfr = new DeviceFileReporter(getDevice(), bugListener);
+        final DeviceFileReporter dfr = new DeviceFileReporter(getDevice(), trimListener);
         dfr.addPatterns(mUploadFilePatterns);
         dfr.run();
     }
 
+    /**
+     * A class to adjust the test identifiers from something like this:
+     * com.android.smoketest.SmokeTestRunner$3#com.android.voicedialer.VoiceDialerActivity
+     * To this:
+     * SmokeFAST#com.android.voicedialer.VoiceDialerActivity
+     */
+    static class TrimListener extends NameMangleListener {
+        public TrimListener(ITestInvocationListener listener) {
+            super(listener);
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected TestIdentifier mangleTestId(TestIdentifier test) {
+            final String method = test.getTestName();
+            final String klass = test.getClassName().replaceFirst(
+                    "com.android.smoketest.SmokeTestRunner(?:\\$\\d+)?", "SmokeFAST");
+            return new TestIdentifier(klass, method);
+        }
+    }
 }
 
diff --git a/prod-tests/tests/Android.mk b/prod-tests/tests/Android.mk
new file mode 100644
index 0000000..67d958f
--- /dev/null
+++ b/prod-tests/tests/Android.mk
@@ -0,0 +1,44 @@
+# Copyright (C) 2012 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+# Only compile source java files in this lib.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+#LOCAL_JAVA_RESOURCE_DIRS := res
+
+LOCAL_JAVACFLAGS += -g -Xlint
+
+LOCAL_MODULE := tf-prod-metatests
+LOCAL_MODULE_TAGS := optional
+LOCAL_STATIC_JAVA_LIBRARIES := easymock
+LOCAL_JAVA_LIBRARIES := tradefed tf-prod-tests ddmlib-prebuilt
+
+include $(BUILD_HOST_JAVA_LIBRARY)
+
+# makefile rules to copy jars to HOST_OUT/tradefed
+# so tradefed.sh can automatically add to classpath
+
+DEST_JAR := $(HOST_OUT)/tradefed/$(LOCAL_MODULE).jar
+$(DEST_JAR): $(LOCAL_BUILT_MODULE)
+	$(copy-file-to-new-target)
+
+# this dependency ensure the above rule will be executed if module is built
+$(LOCAL_INSTALLED_MODULE) : $(DEST_JAR)
+
+# Build all sub-directories
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/prod-tests/tests/src/com/android/continuous/SmokeTestTest.java b/prod-tests/tests/src/com/android/continuous/SmokeTestTest.java
new file mode 100644
index 0000000..62e058d
--- /dev/null
+++ b/prod-tests/tests/src/com/android/continuous/SmokeTestTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.continuous;
+
+import com.android.continuous.SmokeTest.TrimListener;
+import com.android.ddmlib.testrunner.TestIdentifier;
+import com.android.tradefed.result.ITestInvocationListener;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+
+/**
+ * Unit tests for {@link SmokeTest}.
+ */
+public class SmokeTestTest extends TestCase {
+    private ITestInvocationListener mListener = null;
+
+    @Override
+    public void setUp() {
+        mListener = EasyMock.createMock(ITestInvocationListener.class);
+    }
+
+    public void testRewrite() {
+        TrimListener trim = new TrimListener(mListener);
+        TestIdentifier in = new TestIdentifier("com.android.smoketest.SmokeTestRunner$3",
+                "com.android.voicedialer.VoiceDialerActivity");
+        TestIdentifier out = new TestIdentifier("SmokeFAST",
+                "com.android.voicedialer.VoiceDialerActivity");
+        mListener.testStarted(EasyMock.eq(out));
+
+        EasyMock.replay(mListener);
+        trim.testStarted(in);
+        EasyMock.verify(mListener);
+    }
+}
+
