diff --git a/api/current.xml b/api/current.xml
index 3c76361..4dc4ae4 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -118546,6 +118546,19 @@
  synchronized="false"
  static="false"
  final="false"
+ deprecated="deprecated"
+ visibility="public"
+>
+<parameter name="instrumentation" type="android.app.Instrumentation">
+</parameter>
+</method>
+<method name="setInstrumentation"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
  deprecated="not deprecated"
  visibility="public"
 >
@@ -118789,6 +118802,19 @@
  synchronized="false"
  static="false"
  final="false"
+ deprecated="deprecated"
+ visibility="public"
+>
+<parameter name="instrumentation" type="android.app.Instrumentation">
+</parameter>
+</method>
+<method name="injectInstrumentation"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
  deprecated="not deprecated"
  visibility="public"
 >
diff --git a/core/java/android/test/InstrumentationTestCase.java b/core/java/android/test/InstrumentationTestCase.java
index 2145d7c..22d95d1 100644
--- a/core/java/android/test/InstrumentationTestCase.java
+++ b/core/java/android/test/InstrumentationTestCase.java
@@ -43,11 +43,25 @@
      * 
      * @param instrumentation the instrumentation to use with this instance
      */
-    public void injectInsrumentation(Instrumentation instrumentation) {
+    public void injectInstrumentation(Instrumentation instrumentation) {
         mInstrumentation = instrumentation;
     }
 
     /**
+     * Injects instrumentation into this test case. This method is
+     * called by the test runner during test setup.
+     *
+     * @param instrumentation the instrumentation to use with this instance
+     *
+     * @deprecated Incorrect spelling,
+     * use {@link #injectInstrumentation(android.app.Instrumentation) instead.
+     */
+    @Deprecated
+    public void injectInsrumentation(Instrumentation instrumentation) {
+        injectInstrumentation(instrumentation);
+    }
+
+    /**
      * Inheritors can access the instrumentation using this.
      * @return instrumentation
      */
diff --git a/core/java/android/test/InstrumentationTestSuite.java b/core/java/android/test/InstrumentationTestSuite.java
index 2ab949e..7a78ffb 100644
--- a/core/java/android/test/InstrumentationTestSuite.java
+++ b/core/java/android/test/InstrumentationTestSuite.java
@@ -65,7 +65,7 @@
     public void runTest(Test test, TestResult result) {
 
         if (test instanceof InstrumentationTestCase) {
-            ((InstrumentationTestCase) test).injectInsrumentation(mInstrumentation);
+            ((InstrumentationTestCase) test).injectInstrumentation(mInstrumentation);
         }
 
         // run the test as usual
diff --git a/test-runner/android/test/AndroidTestRunner.java b/test-runner/android/test/AndroidTestRunner.java
index 0d4e1e9..358b7e9 100644
--- a/test-runner/android/test/AndroidTestRunner.java
+++ b/test-runner/android/test/AndroidTestRunner.java
@@ -180,14 +180,23 @@
     private void setInstrumentationIfInstrumentationTestCase(
             Test test, Instrumentation instrumentation) {
         if (InstrumentationTestCase.class.isAssignableFrom(test.getClass())) {
-            ((InstrumentationTestCase) test).injectInsrumentation(instrumentation);
+            ((InstrumentationTestCase) test).injectInstrumentation(instrumentation);
         }
     }
 
-    public void setInstrumentaiton(Instrumentation instrumentation) {
+    public void setInstrumentation(Instrumentation instrumentation) {
         mInstrumentation = instrumentation;
     }
 
+    /**
+     * @deprecated Incorrect spelling,
+     * use {@link #setInstrumentation(android.app.Instrumentation)} instead.
+     */
+    @Deprecated
+    public void setInstrumentaiton(Instrumentation instrumentation) {
+        setInstrumentation(instrumentation);
+    }
+
     @Override
     protected Class loadSuiteClass(String suiteClassName) throws ClassNotFoundException {
         return mContext.getClassLoader().loadClass(suiteClassName);
diff --git a/test-runner/android/test/InstrumentationTestRunner.java b/test-runner/android/test/InstrumentationTestRunner.java
index 6658fb0..23f0ed4 100644
--- a/test-runner/android/test/InstrumentationTestRunner.java
+++ b/test-runner/android/test/InstrumentationTestRunner.java
@@ -329,7 +329,7 @@
 
         mTestRunner = getAndroidTestRunner();
         mTestRunner.setContext(getTargetContext());
-        mTestRunner.setInstrumentaiton(this);
+        mTestRunner.setInstrumentation(this);
         mTestRunner.setSkipExecution(logOnly);
         mTestRunner.setTest(testSuiteBuilder.build());
         mTestCount = mTestRunner.getTestCases().size();
