diff --git a/ndk/samples/hello-jni/jni/hello-jni.c b/ndk/samples/hello-jni/jni/hello-jni.c
index 632ac17..be1e6a7 100644
--- a/ndk/samples/hello-jni/jni/hello-jni.c
+++ b/ndk/samples/hello-jni/jni/hello-jni.c
@@ -21,7 +21,7 @@
  * to return a new VM String. See the corresponding Java source
  * file located at:
  *
- *   apps/samples/hello-jni/project/src/com/example/HelloJni/HelloJni.java
+ *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
  */
 jstring
 Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
diff --git a/ndk/samples/hello-jni/src/com/example/hellojni/HelloJni.java b/ndk/samples/hello-jni/src/com/example/hellojni/HelloJni.java
index 97ab6d9..05cf67c 100644
--- a/ndk/samples/hello-jni/src/com/example/hellojni/HelloJni.java
+++ b/ndk/samples/hello-jni/src/com/example/hellojni/HelloJni.java
@@ -57,7 +57,7 @@
 
     /* this is used to load the 'hello-jni' library on application
      * startup. The library has already been unpacked into
-     * /data/data/com.example.HelloJni/lib/libhello-jni.so at
+     * /data/data/com.example.hellojni/lib/libhello-jni.so at
      * installation time by the package manager.
      */
     static {
diff --git a/ndk/samples/hello-jni/tests/AndroidManifest.xml b/ndk/samples/hello-jni/tests/AndroidManifest.xml
index d6be01e..f15450b 100644
--- a/ndk/samples/hello-jni/tests/AndroidManifest.xml
+++ b/ndk/samples/hello-jni/tests/AndroidManifest.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.example.HelloJni.tests"
+          package="com.example.hellojni.tests"
           android:versionCode="1"
           android:versionName="1.0">
     <!-- We add an application tag here just so that we can indicate that
@@ -12,10 +12,10 @@
     </application>
     <!--
     This declares that this application uses the instrumentation test runner targeting
-    the package of com.example.HelloJni.  To run the tests use the command:
-    "adb shell am instrument -w com.example.HelloJni.tests/android.test.InstrumentationTestRunner"
+    the package of com.example.hellojni.  To run the tests use the command:
+    "adb shell am instrument -w com.example.hellojni.tests/android.test.InstrumentationTestRunner"
     -->
     <instrumentation android:name="android.test.InstrumentationTestRunner"
-                     android:targetPackage="com.example.HelloJni"
+                     android:targetPackage="com.example.hellojni"
                      android:label="Tests for HelloJni"/>
 </manifest>
diff --git a/ndk/samples/hello-jni/tests/src/com/example/HelloJni/HelloJniTest.java b/ndk/samples/hello-jni/tests/src/com/example/hellojni/HelloJniTest.java
similarity index 69%
rename from ndk/samples/hello-jni/tests/src/com/example/HelloJni/HelloJniTest.java
rename to ndk/samples/hello-jni/tests/src/com/example/hellojni/HelloJniTest.java
index 519d857..8ba6117 100644
--- a/ndk/samples/hello-jni/tests/src/com/example/HelloJni/HelloJniTest.java
+++ b/ndk/samples/hello-jni/tests/src/com/example/hellojni/HelloJniTest.java
@@ -1,4 +1,4 @@
-package com.example.HelloJni;
+package com.example.hellojni;
 
 import android.test.ActivityInstrumentationTestCase;
 
@@ -9,13 +9,13 @@
  * <p/>
  * To run this test, you can type:
  * adb shell am instrument -w \
- * -e class com.example.HelloJni.HelloJniTest \
- * com.example.HelloJni.tests/android.test.InstrumentationTestRunner
+ * -e class com.example.hellojni.HelloJniTest \
+ * com.example.hellojni.tests/android.test.InstrumentationTestRunner
  */
 public class HelloJniTest extends ActivityInstrumentationTestCase<HelloJni> {
 
     public HelloJniTest() {
-        super("com.example.HelloJni", HelloJni.class);
+        super("com.example.hellojni", HelloJni.class);
     }
 
 }
diff --git a/ndk/samples/two-libs/res/values/strings.xml b/ndk/samples/two-libs/res/values/strings.xml
index ae57f1f..858cdb4 100644
--- a/ndk/samples/two-libs/res/values/strings.xml
+++ b/ndk/samples/two-libs/res/values/strings.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <string name="app_name">TwoLib</string>
+    <string name="app_name">TwoLibs</string>
 </resources>
diff --git a/ndk/samples/two-libs/tests/AndroidManifest.xml b/ndk/samples/two-libs/tests/AndroidManifest.xml
index a7dd602..a787419 100644
--- a/ndk/samples/two-libs/tests/AndroidManifest.xml
+++ b/ndk/samples/two-libs/tests/AndroidManifest.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.example.TwoLib.tests"
+          package="com.example.twolibs.tests"
           android:versionCode="1"
           android:versionName="1.0">
     <!-- We add an application tag here just so that we can indicate that
@@ -12,10 +12,10 @@
     </application>
     <!--
     This declares that this application uses the instrumentation test runner targeting
-    the package of com.example.TwoLib.  To run the tests use the command:
-    "adb shell am instrument -w com.example.TwoLib.tests/android.test.InstrumentationTestRunner"
+    the package of com.example.twolibs.  To run the tests use the command:
+    "adb shell am instrument -w com.example.twolibs.tests/android.test.InstrumentationTestRunner"
     -->
     <instrumentation android:name="android.test.InstrumentationTestRunner"
-                     android:targetPackage="com.example.TwoLib"
-                     android:label="Tests for TwoLib"/>
+                     android:targetPackage="com.example.twolibs"
+                     android:label="Tests for TwoLibs"/>
 </manifest>
diff --git a/ndk/samples/two-libs/tests/src/com/example/TwoLib/TwoLibTest.java b/ndk/samples/two-libs/tests/src/com/example/TwoLib/TwoLibTest.java
deleted file mode 100644
index 2924502..0000000
--- a/ndk/samples/two-libs/tests/src/com/example/TwoLib/TwoLibTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.example.TwoLib;
-
-import android.test.ActivityInstrumentationTestCase;
-
-/**
- * This is a simple framework for a test of an Application.  See
- * {@link android.test.ApplicationTestCase ApplicationTestCase} for more information on
- * how to write and extend Application tests.
- * <p/>
- * To run this test, you can type:
- * adb shell am instrument -w \
- * -e class com.example.TwoLib.TwoLibTest \
- * com.example.TwoLib.tests/android.test.InstrumentationTestRunner
- */
-public class TwoLibTest extends ActivityInstrumentationTestCase<TwoLib> {
-
-    public TwoLibTest() {
-        super("com.example.TwoLib", TwoLib.class);
-    }
-
-}
diff --git a/ndk/samples/two-libs/tests/src/com/example/twolibs/TwoLibsTest.java b/ndk/samples/two-libs/tests/src/com/example/twolibs/TwoLibsTest.java
new file mode 100644
index 0000000..6e910be
--- /dev/null
+++ b/ndk/samples/two-libs/tests/src/com/example/twolibs/TwoLibsTest.java
@@ -0,0 +1,21 @@
+package com.example.twolibs;
+
+import android.test.ActivityInstrumentationTestCase;
+
+/**
+ * This is a simple framework for a test of an Application.  See
+ * {@link android.test.ApplicationTestCase ApplicationTestCase} for more information on
+ * how to write and extend Application tests.
+ * <p/>
+ * To run this test, you can type:
+ * adb shell am instrument -w \
+ * -e class com.example.twolibs.TwoLibsTest \
+ * com.example.twolibs.tests/android.test.InstrumentationTestRunner
+ */
+public class TwoLibsTest extends ActivityInstrumentationTestCase<TwoLibs> {
+
+    public TwoLibsTest() {
+        super("com.example.twolibs", TwoLibs.class);
+    }
+
+}
