diff --git a/Android.mk b/Android.mk
index dea0907..a113eb3 100644
--- a/Android.mk
+++ b/Android.mk
@@ -15,31 +15,8 @@
 
 LOCAL_PATH := $(call my-dir)
 
-#
-# Common definitions for host and device.
-#
-
-src_files := \
-    JNIHelp.cpp \
-    Register.cpp
-
-c_includes := \
-    $(JNI_H_INCLUDE)
-
-# Any shared/static libs required by libcore
-# need to be mentioned here as well.
-# TODO: fix this requirement
-
-shared_libraries := \
-    libcrypto  \
-    libicui18n \
-    libicuuc   \
-    libssl
-
-static_libraries := \
-    libjavacore \
-    libfdlibm
-
+local_src_files := \
+    JNIHelp.cpp
 
 
 #
@@ -47,14 +24,14 @@
 #
 
 include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(src_files)
-LOCAL_C_INCLUDES := $(c_includes)
-LOCAL_STATIC_LIBRARIES := $(static_libraries)
-LOCAL_SHARED_LIBRARIES := $(shared_libraries) libcutils libexpat liblog libstlport libz
+LOCAL_SRC_FILES := $(local_src_files)
+LOCAL_SHARED_LIBRARIES := liblog
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE := libnativehelper
 
+LOCAL_C_INCLUDES := external/stlport/stlport bionic/ bionic/libstdc++/include
+LOCAL_SHARED_LIBRARIES += libstlport
+
 include $(BUILD_SHARED_LIBRARY)
 
 
@@ -62,25 +39,9 @@
 # Build for the host.
 #
 
-ifeq ($(WITH_HOST_DALVIK),true)
-
-    include $(CLEAR_VARS)
-
-    LOCAL_SRC_FILES := $(src_files)
-    LOCAL_C_INCLUDES := $(c_includes)
-    LOCAL_WHOLE_STATIC_LIBRARIES := $(static_libraries:%=%-host)
-
-    ifeq ($(HOST_OS)-$(HOST_ARCH),darwin-x86)
-        # OSX has a lot of libraries built in, which we don't have to
-        # bother building; just include them on the ld line.
-        LOCAL_LDLIBS := -lexpat -lssl -lz -lcrypto -licucore
-    else
-        LOCAL_SHARED_LIBRARIES := $(shared_libraries)
-        LOCAL_STATIC_LIBRARIES := libcutils libexpat liblog libz
-    endif
-
-    LOCAL_MODULE_TAGS := optional
-    LOCAL_MODULE := libnativehelper
-    include $(BUILD_HOST_STATIC_LIBRARY)
-
-endif
+include $(CLEAR_VARS)
+LOCAL_MODULE := libnativehelper
+LOCAL_MODULE_TAGS := optional
+LOCAL_SRC_FILES := $(local_src_files)
+LOCAL_SHARED_LIBRARIES := liblog
+include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/JNIHelp.cpp b/JNIHelp.cpp
index bf50930..041776c 100644
--- a/JNIHelp.cpp
+++ b/JNIHelp.cpp
@@ -310,26 +310,32 @@
     jfieldID descriptorField;
 } gCachedFields;
 
-int registerJniHelp(JNIEnv* env) {
+jint JNI_OnLoad(JavaVM* vm, void*) {
+    JNIEnv* env;
+    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+        ALOGE("JavaVM::GetEnv() failed");
+        abort();
+    }
+
     gCachedFields.fileDescriptorClass =
             reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("java/io/FileDescriptor")));
     if (gCachedFields.fileDescriptorClass == NULL) {
-        return -1;
+        abort();
     }
 
     gCachedFields.fileDescriptorCtor =
             env->GetMethodID(gCachedFields.fileDescriptorClass, "<init>", "()V");
     if (gCachedFields.fileDescriptorCtor == NULL) {
-        return -1;
+        abort();
     }
 
     gCachedFields.descriptorField =
             env->GetFieldID(gCachedFields.fileDescriptorClass, "descriptor", "I");
     if (gCachedFields.descriptorField == NULL) {
-        return -1;
+        abort();
     }
 
-    return 0;
+    return JNI_VERSION_1_6;
 }
 
 jobject jniCreateFileDescriptor(C_JNIEnv* env, int fd) {
diff --git a/Register.cpp b/Register.cpp
deleted file mode 100644
index b6b1b1f..0000000
--- a/Register.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2006 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.
- */
-
-#include "jni.h"
-
-extern int registerCoreLibrariesJni(JNIEnv* env);
-extern int registerJniHelp(JNIEnv* env);
-
-/*
- * Register all methods for system classes.
- */
-int jniRegisterSystemMethods(JNIEnv* env) {
-    // JniHelp depends on core library classes such as java.io.FileDescriptor.
-    return registerCoreLibrariesJni(env) != -1 && registerJniHelp(env) != -1;
-}
diff --git a/include/nativehelper/JNIHelp.h b/include/nativehelper/JNIHelp.h
index f5666f2..446a710 100644
--- a/include/nativehelper/JNIHelp.h
+++ b/include/nativehelper/JNIHelp.h
@@ -37,7 +37,8 @@
 
 /*
  * Register one or more native methods with a particular class.
- * "className" looks like "java/lang/String".
+ * "className" looks like "java/lang/String". Aborts on failure.
+ * TODO: fix all callers and change the return type to void.
  */
 int jniRegisterNativeMethods(C_JNIEnv* env, const char* className, const JNINativeMethod* gMethods, int numMethods);
 
