diff --git a/src/io/appium/droiddriver/runner/MinSdkVersion.java b/src/io/appium/droiddriver/runner/MinSdkVersion.java
index e7894cb..f560ad8 100644
--- a/src/io/appium/droiddriver/runner/MinSdkVersion.java
+++ b/src/io/appium/droiddriver/runner/MinSdkVersion.java
@@ -25,12 +25,9 @@
 import java.lang.annotation.Target;
 
 /**
- * This annotation indicates that its target needs a minimum SDK version
- * specified as its value.
- * <p>
- * As any annotations, it is useful only if it is processed by tools.
- * {@link TestRunner} filters out tests with this annotation if the current
- * device has a lower SDK version.
+ * This annotation indicates that its target needs a minimum SDK version specified as its value.
+ *
+ * <p>As any annotations, it is useful only if it is processed by tools.
  *
  * @deprecated Use android.support.test.filters.SdkSuppress instead.
  */
@@ -39,8 +36,6 @@
 @Retention(RetentionPolicy.RUNTIME)
 @Deprecated
 public @interface MinSdkVersion {
-  /**
-   * The minimum required SDK version.
-   */
+  /** The minimum required SDK version. */
   int value();
 }
diff --git a/src/io/appium/droiddriver/runner/TestRunner.java b/src/io/appium/droiddriver/runner/TestRunner.java
deleted file mode 100644
index e3fbe79..0000000
--- a/src/io/appium/droiddriver/runner/TestRunner.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2013 DroidDriver committers
- *
- * 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 io.appium.droiddriver.runner;
-
-import android.app.Activity;
-import android.os.Build;
-import android.os.Bundle;
-import android.test.AndroidTestRunner;
-import android.test.InstrumentationTestRunner;
-import android.test.suitebuilder.TestMethod;
-import android.util.Log;
-
-import com.android.internal.util.Predicate;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestListener;
-
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import io.appium.droiddriver.helpers.DroidDrivers;
-import io.appium.droiddriver.util.ActivityUtils;
-import io.appium.droiddriver.util.ActivityUtils.Supplier;
-import io.appium.droiddriver.util.InstrumentationUtils;
-import io.appium.droiddriver.util.Logs;
-
-/**
- * Adds activity watcher to InstrumentationTestRunner.
- *
- * @deprecated Use android.support.test.runner.AndroidJUnitRunner instead.
- */
-@Deprecated
-public class TestRunner extends InstrumentationTestRunner {
-  private final Set<Activity> activities = new HashSet<Activity>();
-  private final AndroidTestRunner androidTestRunner = new AndroidTestRunner();
-  private volatile Activity runningActivity;
-
-  /**
-   * Returns an {@link AndroidTestRunner} that is shared by this and super, such
-   * that we can add custom {@link TestListener}s.
-   */
-  @Override
-  protected AndroidTestRunner getAndroidTestRunner() {
-    return androidTestRunner;
-  }
-
-  /**
-   * {@inheritDoc}
-   * <p>
-   * Initializes {@link InstrumentationUtils}.
-   */
-  @Override
-  public void onCreate(Bundle arguments) {
-    InstrumentationUtils.init(this, arguments);
-    super.onCreate(arguments);
-  }
-
-  /**
-   * {@inheritDoc}
-   * <p>
-   * Adds a {@link TestListener} that finishes all created activities.
-   */
-  @Override
-  public void onStart() {
-    getAndroidTestRunner().addTestListener(new TestListener() {
-      @Override
-      public void endTest(Test test) {
-        // Try to finish activity on best-effort basis - TestListener should
-        // not throw.
-        final Activity[] activitiesCopy;
-        synchronized (activities) {
-          if (activities.isEmpty()) {
-            return;
-          }
-          activitiesCopy = activities.toArray(new Activity[activities.size()]);
-        }
-
-        try {
-          InstrumentationUtils.runOnMainSyncWithTimeout(new Runnable() {
-            @Override
-            public void run() {
-              for (Activity activity : activitiesCopy) {
-                if (!activity.isFinishing()) {
-                  try {
-                    Logs.log(Log.INFO, "Stopping activity: " + activity);
-                    activity.finish();
-                  } catch (Throwable e) {
-                    Logs.log(Log.ERROR, e, "Failed to stop activity");
-                  }
-                }
-              }
-            }
-          });
-        } catch (Throwable e) {
-          Logs.log(Log.ERROR, e);
-        }
-
-        // We've done what we can. Clear activities if any are left.
-        synchronized (activities) {
-          activities.clear();
-          runningActivity = null;
-        }
-      }
-
-      @Override
-      public void addError(Test arg0, Throwable arg1) {}
-
-      @Override
-      public void addFailure(Test arg0, AssertionFailedError arg1) {}
-
-      @Override
-      public void startTest(Test arg0) {}
-    });
-
-    ActivityUtils.setRunningActivitySupplier(new Supplier<Activity>() {
-      @Override
-      public Activity get() {
-        return runningActivity;
-      }
-    });
-
-    super.onStart();
-  }
-
-  // Overrides InstrumentationTestRunner
-  List<Predicate<TestMethod>> getBuilderRequirements() {
-    List<Predicate<TestMethod>> requirements = new ArrayList<Predicate<TestMethod>>();
-    requirements.add(new Predicate<TestMethod>() {
-      @Override
-      public boolean apply(TestMethod arg0) {
-        MinSdkVersion minSdkVersion = getAnnotation(arg0, MinSdkVersion.class);
-        if (minSdkVersion != null && minSdkVersion.value() > Build.VERSION.SDK_INT) {
-          Logs.logfmt(Log.INFO, "filtered %s#%s: MinSdkVersion=%d", arg0.getEnclosingClassname(),
-              arg0.getName(), minSdkVersion.value());
-          return false;
-        }
-
-        UseUiAutomation useUiAutomation = getAnnotation(arg0, UseUiAutomation.class);
-        if (useUiAutomation != null && !DroidDrivers.hasUiAutomation()) {
-          Logs.logfmt(Log.INFO,
-              "filtered %s#%s: Has @UseUiAutomation, but ro.build.version.sdk=%d",
-              arg0.getEnclosingClassname(), arg0.getName(), Build.VERSION.SDK_INT);
-          return false;
-        }
-        return true;
-      }
-
-      private <T extends Annotation> T getAnnotation(TestMethod testMethod, Class<T> clazz) {
-        T annotation = testMethod.getAnnotation(clazz);
-        if (annotation == null) {
-          annotation = testMethod.getEnclosingClass().getAnnotation(clazz);
-        }
-        return annotation;
-      }
-    });
-    return requirements;
-  }
-
-  @Override
-  public void callActivityOnDestroy(Activity activity) {
-    super.callActivityOnDestroy(activity);
-    synchronized (activities) {
-      activities.remove(activity);
-    }
-  }
-
-  @Override
-  public void callActivityOnCreate(Activity activity, Bundle bundle) {
-    super.callActivityOnCreate(activity, bundle);
-    synchronized (activities) {
-      activities.add(activity);
-    }
-  }
-
-  @Override
-  public void callActivityOnResume(Activity activity) {
-    super.callActivityOnResume(activity);
-    runningActivity = activity;
-  }
-
-  @Override
-  public void callActivityOnPause(Activity activity) {
-    super.callActivityOnPause(activity);
-    if (activity == runningActivity) {
-      runningActivity = null;
-    }
-  }
-}
diff --git a/src/io/appium/droiddriver/runner/UseUiAutomation.java b/src/io/appium/droiddriver/runner/UseUiAutomation.java
index 5ba97ef..e710238 100644
--- a/src/io/appium/droiddriver/runner/UseUiAutomation.java
+++ b/src/io/appium/droiddriver/runner/UseUiAutomation.java
@@ -25,14 +25,11 @@
 import java.lang.annotation.Target;
 
 /**
- * This annotation indicates that its target needs
- * {@link android.app.UiAutomation}. It is effectively equivalent to
- * {@code @MinSdkVersion(Build.VERSION_CODES.JELLY_BEAN_MR2)}, just more
+ * This annotation indicates that its target needs {@link android.app.UiAutomation}. It is
+ * effectively equivalent to {@code @MinSdkVersion(Build.VERSION_CODES.JELLY_BEAN_MR2)}, just more
  * explicit.
- * <p>
- * As any annotations, it is useful only if it is processed by tools.
- * {@link TestRunner} filters out tests with this annotation if the current
- * device has SDK version below 18 (JELLY_BEAN_MR2).
+ *
+ * <p>As any annotations, it is useful only if it is processed by tools.
  *
  * @deprecated Use android.support.test.filters.SdkSuppress instead.
  */
@@ -40,5 +37,4 @@
 @Target({TYPE, METHOD})
 @Retention(RetentionPolicy.RUNTIME)
 @Deprecated
-public @interface UseUiAutomation {
-}
+public @interface UseUiAutomation {}
