diff --git a/src/junit/runner/BaseTestRunner.java b/src/junit/runner/BaseTestRunner.java
index 6a4b090..e7e0431 100644
--- a/src/junit/runner/BaseTestRunner.java
+++ b/src/junit/runner/BaseTestRunner.java
@@ -62,7 +62,8 @@
 		}
 	}
 
-	public static void setPreference(String key, String value) {
+	// android-changed remove 'static' qualifier for API compatibility
+	public void setPreference(String key, String value) {
 		getPreferences().put(key, value);
 	}
 
@@ -200,6 +201,17 @@
 	 */
 	protected abstract void runFailed(String message);
 
+	// BEGIN android-changed - add back getLoader() for API compatibility
+	/**
+	 * Returns the loader to be used.
+	 *
+	 * @deprecated not present in JUnit4.10
+	 */
+	public TestSuiteLoader getLoader() {
+		return new StandardTestSuiteLoader();
+	}
+	// END android-changed
+
 	/**
 	 * Returns the loaded Class for a suite name.
 	 */
@@ -265,6 +277,13 @@
 		return BaseTestRunner.getFilteredTrace(trace);
 	}
 
+	// BEGIN android-changed - add back this method for API compatibility
+	/** @deprecated not present in JUnit4.10 */
+	public static boolean inVAJava() {
+		return false;
+	}
+	// END android-changed
+
 	/**
 	 * Filters stack frames from internal JUnit classes
 	 */
@@ -275,7 +294,10 @@
 		StringWriter sw= new StringWriter();
 		PrintWriter pw= new PrintWriter(sw);
 		StringReader sr= new StringReader(stack);
-		BufferedReader br= new BufferedReader(sr);
+		// BEGIN android-changed
+		// Use a sensible default buffer size
+		BufferedReader br= new BufferedReader(sr, 1000);
+		// END android-changed
 
 		String line;
 		try {
diff --git a/src/junit/runner/StandardTestSuiteLoader.java b/src/junit/runner/StandardTestSuiteLoader.java
new file mode 100644
index 0000000..808963a
--- /dev/null
+++ b/src/junit/runner/StandardTestSuiteLoader.java
@@ -0,0 +1,23 @@
+package junit.runner;
+
+// android-changed - class not present in upstream JUnit 4.10
+// added here to retain BaseTestRunner.getLoader API
+
+/**
+ * The standard test suite loader. It can only load the same class once.
+ * {@hide}
+ */
+public class StandardTestSuiteLoader implements TestSuiteLoader {
+    /**
+     * Uses the system class loader to load the test class
+     */
+    public Class load(String suiteClassName) throws ClassNotFoundException {
+        return Class.forName(suiteClassName);
+    }
+    /**
+     * Uses the system class loader to load the test class
+     */
+    public Class reload(Class aClass) throws ClassNotFoundException {
+        return aClass;
+    }
+}
diff --git a/src/junit/runner/TestRunListener.java b/src/junit/runner/TestRunListener.java
index b11ef07..0e95819 100644
--- a/src/junit/runner/TestRunListener.java
+++ b/src/junit/runner/TestRunListener.java
@@ -4,6 +4,7 @@
  * execution of a test run. Unlike TestListener,
  * this interface using only primitive objects,
  * making it suitable for remote test execution.
+ * {@hide} - Not needed for 1.0 SDK
  */
  public interface TestRunListener {
      /* test status constants*/
diff --git a/src/junit/runner/TestSuiteLoader.java b/src/junit/runner/TestSuiteLoader.java
new file mode 100644
index 0000000..75a96fe
--- /dev/null
+++ b/src/junit/runner/TestSuiteLoader.java
@@ -0,0 +1,12 @@
+package junit.runner;
+
+/**
+ * An interface to define how a test suite should be loaded.
+ *
+ * // android-changed
+ * @deprecated unused and not present in current upstream JUnit
+ */
+public interface TestSuiteLoader {
+    abstract public Class load(String suiteClassName) throws ClassNotFoundException;
+    abstract public Class reload(Class aClass) throws ClassNotFoundException;
+}
diff --git a/src/junit/runner/Version.java b/src/junit/runner/Version.java
index eb4794b..dd88c03 100644
--- a/src/junit/runner/Version.java
+++ b/src/junit/runner/Version.java
@@ -11,7 +11,9 @@
 	public static String id() {
 		return "4.10";
 	}
-	
+
+	// android-changed
+	/** @hide - not needed for public API */
 	public static void main(String[] args) {
 		System.out.println(id());
 	}
diff --git a/src/junit/textui/ResultPrinter.java b/src/junit/textui/ResultPrinter.java
index f2f01f5..b491452 100644
--- a/src/junit/textui/ResultPrinter.java
+++ b/src/junit/textui/ResultPrinter.java
@@ -2,7 +2,9 @@
 package junit.textui;
 
 import java.io.PrintStream;
-import java.text.NumberFormat;
+// android-changed
+// The following line was removed for compatibility with Android libraries.
+// import java.text.NumberFormat;
 import java.util.Enumeration;
 
 import junit.framework.AssertionFailedError;
@@ -99,7 +101,10 @@
 	 * Duplicated from BaseTestRunner. Fix it.
 	 */
 	protected String elapsedTimeAsString(long runTime) {
-		return NumberFormat.getInstance().format((double)runTime/1000);
+		// android-changed
+		// The following line was altered for compatibility with
+		// Android libraries.
+		return Double.toString((double)runTime/1000);
 	}
 
 	public PrintStream getWriter() {
