diff --git a/androidtestlib/src/com/android/test/BundleTest.java b/androidtestlib/src/com/android/test/BundleTest.java
new file mode 100644
index 0000000..44728b0
--- /dev/null
+++ b/androidtestlib/src/com/android/test/BundleTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 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.test;
+
+import android.os.Bundle;
+
+import junit.framework.TestCase;
+
+/**
+ * Implement this interface to receive a {@link Bundle} containing the command line arguments
+ * passed to the test runner into your JUnit3 test.
+ * <p/>
+ * The test runner will call {@link #injectBundle(Bundle)} after
+ * object construction but before any {@link TestCase#setUp()} methods are called.
+ * Note the order in which injectBundle is called vs other inject methods is not defined.
+ * <p/>
+ * Declaring this in a JUnit4 test will have no effect. Use {@link InjectBundle} instead.
+ */
+public interface BundleTest {
+
+    /**
+     * Called by Android test runner to pass in Bundle containing command line arguments.
+     */
+    public void injectBundle(Bundle bundle);
+}
diff --git a/androidtestlib/src/com/android/test/InjectBundle.java b/androidtestlib/src/com/android/test/InjectBundle.java
index f3c2399..ee5e58e 100644
--- a/androidtestlib/src/com/android/test/InjectBundle.java
+++ b/androidtestlib/src/com/android/test/InjectBundle.java
@@ -38,6 +38,7 @@
  * object construction but before any {@link Before} methods are called.
  * <p/>
  * Declaring this in a JUnit3 test (ie a class that is a {@link Test}) will have no effect.
+ * Use {@link BundleTest} instead.
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.FIELD)
diff --git a/androidtestlib/src/com/android/test/runner/AndroidRunnerBuilder.java b/androidtestlib/src/com/android/test/runner/AndroidRunnerBuilder.java
index 328d413..e8c52a6 100644
--- a/androidtestlib/src/com/android/test/runner/AndroidRunnerBuilder.java
+++ b/androidtestlib/src/com/android/test/runner/AndroidRunnerBuilder.java
@@ -36,7 +36,7 @@
     public AndroidRunnerBuilder(boolean canUseSuiteMethod, Instrumentation instr, Bundle bundle,
             boolean skipExecution) {
         super(canUseSuiteMethod);
-        mAndroidJUnit3Builder = new AndroidJUnit3Builder(instr, skipExecution);
+        mAndroidJUnit3Builder = new AndroidJUnit3Builder(instr, bundle, skipExecution);
         mAndroidJUnit4Builder = new AndroidJUnit4Builder(instr, bundle, skipExecution);
     }
 
diff --git a/androidtestlib/src/com/android/test/runner/junit3/AndroidJUnit3Builder.java b/androidtestlib/src/com/android/test/runner/junit3/AndroidJUnit3Builder.java
index c6b4408..e20f28a 100644
--- a/androidtestlib/src/com/android/test/runner/junit3/AndroidJUnit3Builder.java
+++ b/androidtestlib/src/com/android/test/runner/junit3/AndroidJUnit3Builder.java
@@ -16,6 +16,7 @@
 package com.android.test.runner.junit3;
 
 import android.app.Instrumentation;
+import android.os.Bundle;
 
 import junit.framework.TestCase;
 
@@ -30,9 +31,11 @@
 
     private Instrumentation mInstr;
     private boolean mSkipExecution;
+    private final Bundle mBundle;
 
-    public AndroidJUnit3Builder(Instrumentation instr, boolean skipExecution) {
+    public AndroidJUnit3Builder(Instrumentation instr, Bundle bundle, boolean skipExecution) {
         mInstr = instr;
+        mBundle = bundle;
         mSkipExecution = skipExecution;
     }
 
@@ -41,9 +44,11 @@
         if (mSkipExecution && isJUnit3TestCase(testClass)) {
             return new NonExecutingJUnit3ClassRunner(testClass);
         } else if (isAndroidTestCase(testClass)) {
-            return new AndroidJUnit3ClassRunner(testClass, mInstr);
+            return new AndroidJUnit3ClassRunner(testClass, mBundle, mInstr);
         } else if (isInstrumentationTestCase(testClass)) {
-            return new AndroidJUnit3ClassRunner(testClass, mInstr);
+            return new AndroidJUnit3ClassRunner(testClass, mBundle, mInstr);
+        } else if (isBundleTest(testClass)) {
+            return new AndroidJUnit3ClassRunner(testClass, mBundle, mInstr);
         }
         return null;
     }
@@ -59,4 +64,9 @@
     boolean isInstrumentationTestCase(Class<?> testClass) {
         return android.test.InstrumentationTestCase.class.isAssignableFrom(testClass);
     }
+
+    boolean isBundleTest(Class<?> testClass) {
+       return com.android.test.BundleTest.class.isAssignableFrom(testClass);
+    }
+
 }
diff --git a/androidtestlib/src/com/android/test/runner/junit3/AndroidJUnit3ClassRunner.java b/androidtestlib/src/com/android/test/runner/junit3/AndroidJUnit3ClassRunner.java
index 91ddc62..418a80b 100644
--- a/androidtestlib/src/com/android/test/runner/junit3/AndroidJUnit3ClassRunner.java
+++ b/androidtestlib/src/com/android/test/runner/junit3/AndroidJUnit3ClassRunner.java
@@ -16,6 +16,7 @@
 package com.android.test.runner.junit3;
 
 import android.app.Instrumentation;
+import android.os.Bundle;
 
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -27,18 +28,15 @@
  */
 class AndroidJUnit3ClassRunner extends JUnit38ClassRunner {
 
-    /**
-     * @param klass
-     */
-    public AndroidJUnit3ClassRunner(Class<?> klass, Instrumentation instr) {
-        super(new AndroidTestSuite(klass.asSubclass(TestCase.class), instr));
+    public AndroidJUnit3ClassRunner(Class<?> klass, Bundle bundle, Instrumentation instr) {
+        super(new AndroidTestSuite(klass.asSubclass(TestCase.class), bundle, instr));
     }
 
     @Override
     protected TestSuite createCopyOfSuite(TestSuite s) {
         if (s instanceof AndroidTestSuite) {
             AndroidTestSuite a = (AndroidTestSuite)s;
-            return new AndroidTestSuite(a.getName(), a.getInstrumentation());
+            return new AndroidTestSuite(a.getName(), a.getBundle(), a.getInstrumentation());
         } else {
             return super.createCopyOfSuite(s);
         }
diff --git a/androidtestlib/src/com/android/test/runner/junit3/AndroidTestSuite.java b/androidtestlib/src/com/android/test/runner/junit3/AndroidTestSuite.java
index 01d8103..e1a90c3 100644
--- a/androidtestlib/src/com/android/test/runner/junit3/AndroidTestSuite.java
+++ b/androidtestlib/src/com/android/test/runner/junit3/AndroidTestSuite.java
@@ -15,17 +15,20 @@
  */
 package com.android.test.runner.junit3;
 
-import android.app.Instrumentation;
-import android.content.Context;
-import android.test.AndroidTestCase;
-import android.test.InstrumentationTestCase;
-
 import junit.framework.Test;
 import junit.framework.TestResult;
 import junit.framework.TestSuite;
 
 import org.junit.Ignore;
 
+import android.app.Instrumentation;
+import android.content.Context;
+import android.os.Bundle;
+import android.test.AndroidTestCase;
+import android.test.InstrumentationTestCase;
+
+import com.android.test.BundleTest;
+
 /**
  * A {@link TestSuite} used to pass {@link Context} and {@link Instrumentation} references to child
  * tests.
@@ -34,14 +37,17 @@
 class AndroidTestSuite extends TestSuite {
 
     private final Instrumentation mInstr;
+    private final Bundle mBundle;
 
-    AndroidTestSuite(Class<?> clazz, Instrumentation instrumentation) {
+    AndroidTestSuite(Class<?> clazz, Bundle bundle, Instrumentation instrumentation) {
         super(clazz);
+        mBundle = bundle;
         mInstr = instrumentation;
     }
 
-    AndroidTestSuite(String name, Instrumentation instrumentation) {
+    AndroidTestSuite(String name, Bundle bundle, Instrumentation instrumentation) {
         super(name);
+        mBundle = bundle;
         mInstr = instrumentation;
     }
 
@@ -53,10 +59,17 @@
         if (test instanceof InstrumentationTestCase) {
             ((InstrumentationTestCase)test).injectInstrumentation(mInstr);
         }
+        if (test instanceof BundleTest) {
+            ((BundleTest)test).injectBundle(mBundle);
+        }
         super.runTest(test, result);
     }
 
     Instrumentation getInstrumentation() {
         return mInstr;
     }
+
+    Bundle getBundle() {
+        return mBundle;
+    }
 }
diff --git a/androidtestlib/src/com/android/test/runner/junit4/AndroidJUnit4ClassRunner.java b/androidtestlib/src/com/android/test/runner/junit4/AndroidJUnit4ClassRunner.java
index 4b6e00c..92bac8a 100644
--- a/androidtestlib/src/com/android/test/runner/junit4/AndroidJUnit4ClassRunner.java
+++ b/androidtestlib/src/com/android/test/runner/junit4/AndroidJUnit4ClassRunner.java
@@ -83,7 +83,7 @@
         List<FrameworkField> bundleFields = getTestClass().getAnnotatedFields(
                 InjectBundle.class);
         for (FrameworkField bundleField : bundleFields) {
-            validateInjectField(errors, bundleField, Context.class);
+            validateInjectField(errors, bundleField, Bundle.class);
         }
     }
 
diff --git a/androidtestlib/tests/src/com/android/test/MyBundleTestCase.java b/androidtestlib/tests/src/com/android/test/MyBundleTestCase.java
new file mode 100644
index 0000000..7ed0fd4
--- /dev/null
+++ b/androidtestlib/tests/src/com/android/test/MyBundleTestCase.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2013 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.test;
+
+import junit.framework.TestCase;
+import android.os.Bundle;
+import android.util.Log;
+
+/**
+ * Placeholder test to verify {@link Bundle} gets injected to {@link BundleTest}.
+ */
+public class MyBundleTestCase extends TestCase implements BundleTest {
+
+    private Bundle mBundle = null;
+
+    public MyBundleTestCase() {
+        Log.i("MyBundleTestCase", "I'm created");
+    }
+
+    @Override
+    public void injectBundle(Bundle bundle) {
+        mBundle = bundle;
+    }
+
+    public void testInjectBundleCalled() {
+        assertNotNull(mBundle);
+    }
+}
