diff --git a/Register.c b/Register.c
index 96267cf..1de679a 100644
--- a/Register.c
+++ b/Register.c
@@ -1,118 +1,27 @@
 /*
- * Copyright 2006 The Android Open Source Project
+ * Copyright (C) 2006 The Android Open Source Project
  *
- * JNI helper functions.
+ * 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"
-#include "AndroidSystemNatives.h"
 
-#include <stdio.h>
+#include "jni.h"
+
+extern int registerCoreLibrariesJni(JNIEnv* env);
 
 /*
  * Register all methods for system classes.
- *
- * Remember to add the declarations to include/nativehelper/JavaSystemNatives.h.
  */
 int jniRegisterSystemMethods(JNIEnv* env)
 {
-    int result = -1;
-
-    (*env)->PushLocalFrame(env, 128);
-
-    if (register_org_apache_harmony_dalvik_NativeTestTarget(env) != 0)
-        goto bail;
-    
-    if (register_java_io_Console(env) != 0)
-        goto bail;
-    if (register_java_io_File(env) != 0)
-        goto bail;
-    if (register_java_io_FileDescriptor(env) != 0)
-        goto bail;
-    if (register_java_io_ObjectOutputStream(env) != 0)
-        goto bail;
-    if (register_java_io_ObjectInputStream(env) != 0)
-        goto bail;
-    if (register_java_io_ObjectStreamClass(env) != 0)
-        goto bail;
-
-    if (register_java_lang_Float(env) != 0)
-        goto bail;
-    if (register_java_lang_Double(env) != 0)
-        goto bail;
-    if (register_java_lang_Math(env) != 0)
-        goto bail;
-    if (register_java_lang_ProcessManager(env) != 0)
-        goto bail;
-    if (register_java_lang_StrictMath(env) != 0)
-        goto bail;
-    if (register_java_lang_System(env) != 0)
-        goto bail;
-
-    if (register_org_apache_harmony_luni_platform_OSFileSystem(env) != 0)
-        goto bail;
-    if (register_org_apache_harmony_luni_platform_OSMemory(env) != 0)
-        goto bail;
-    if (register_org_apache_harmony_luni_platform_OSNetworkSystem(env) != 0)
-        goto bail;
-    if (register_org_apache_harmony_luni_util_fltparse(env) != 0)
-        goto bail;
-    if (register_org_apache_harmony_luni_util_NumberConvert(env) != 0)
-        goto bail;
-    if (register_org_apache_harmony_text_BidiWrapper(env) != 0)
-        goto bail;
-
-    if (register_org_openssl_NativeBN(env) != 0)
-        goto bail;
-    if (register_org_apache_harmony_xnet_provider_jsse_NativeCrypto(env) != 0)
-        goto bail;
-
-    if (register_java_util_zip_Adler32(env) != 0)
-        goto bail;
-    if (register_java_util_zip_CRC32(env) != 0)
-        goto bail;
-    if (register_java_util_zip_Deflater(env) != 0)
-        goto bail;
-    if (register_java_util_zip_Inflater(env) != 0)
-        goto bail;
-
-    if (register_java_net_InetAddress(env) != 0)
-        goto bail;
-    if (register_java_net_NetworkInterface(env) != 0)
-        goto bail;
-
-    if (register_com_ibm_icu4jni_text_NativeNormalizer(env) != 0)
-        goto bail;
-    if (register_com_ibm_icu4jni_text_NativeBreakIterator(env) != 0)
-        goto bail;
-    if (register_com_ibm_icu4jni_text_NativeDecimalFormat(env) != 0)
-        goto bail;
-    if (register_com_ibm_icu4jni_text_NativeCollator(env) != 0)
-        goto bail;
-    if (register_com_ibm_icu4jni_text_NativeIDN(env) != 0)
-        goto bail;
-    if (register_com_ibm_icu4jni_converters_NativeConverter(env) != 0)
-        goto bail;
-    if (register_com_ibm_icu4jni_regex_NativeRegEx(env) != 0)
-        goto bail;
-    if (register_com_ibm_icu4jni_lang_UCharacter(env) != 0)
-        goto bail;
-    if (register_com_ibm_icu4jni_util_Resources(env) != 0)
-        goto bail;
-
-    /*
-     * Initialize the Android classes last, as they have dependencies
-     * on the "corer" core classes.
-     */
-
-    if (register_dalvik_system_TouchDex(env) != 0)
-        goto bail;
-
-    if (register_org_apache_harmony_xml_ExpatParser(env) != 0)
-        goto bail;
-    
-    result = 0;
-
-bail:
-    (*env)->PopLocalFrame(env, NULL);
-    return result;
+    return registerCoreLibrariesJni(env);
 }
