diff --git a/src/class_linker.cc b/src/class_linker.cc
index 3e1eb06..09454d8 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -49,10 +49,12 @@
   Class* object_array_class = AllocClass(java_lang_Class);
   CHECK(object_array_class != NULL);
 
-  // string is necessary so that FindClass can assigning names to members
+  // string and char[] are necessary so that FindClass can assign names to members
   Class* java_lang_String = AllocClass(java_lang_Class);
   CHECK(java_lang_String != NULL);
   java_lang_String->object_size_ = sizeof(String);
+  Class* char_array_class = AllocClass(java_lang_Class);
+  CHECK(char_array_class != NULL);
 
   // create storage for root classes, save away our work so far
   class_roots_ = ObjectArray<Class>::Alloc(object_array_class, kClassRootsMax);
@@ -60,8 +62,12 @@
   class_roots_->Set(kJavaLangObject, java_lang_Object);
   class_roots_->Set(kObjectArrayClass, object_array_class);
   class_roots_->Set(kJavaLangString, java_lang_String);
+  class_roots_->Set(kCharArrayClass, char_array_class);
   // now that these are registered, we can use AllocClass() and AllocObjectArray
 
+  String::InitClasses(java_lang_String, char_array_class);
+  // Now AllocString* can be used
+
   // setup boot_class_path_ now that we can use AllocObjectArray to
   // DexCache instances
   for (size_t i = 0; i != boot_class_path.size(); ++i) {
@@ -127,8 +133,8 @@
   // now FindClass can be used for non-primitive array classes
 
   // run Object[] through FindClass to complete initialization
-  Class* Object_array_class = FindSystemClass("[Ljava/lang/Object;");
-  CHECK_EQ(object_array_class, Object_array_class);
+  Class* found_object_array_class = FindSystemClass("[Ljava/lang/Object;");
+  CHECK_EQ(object_array_class, found_object_array_class);
 
   // Setup the primitive type classes.
   class_roots_->Set(kPrimitiveByte, CreatePrimitiveClass("B"));
@@ -142,10 +148,9 @@
   class_roots_->Set(kPrimitiveVoid, CreatePrimitiveClass("V"));
   // now we can use FindSystemClass for anything, including for "[C"
 
-  Class* char_array = FindSystemClass("[C");
-  class_roots_->Set(kCharArrayClass, char_array);
-  String::InitClasses(java_lang_String, char_array);
-  // Now AllocString* can be used
+  // run char[] through FindClass to complete initialization
+  Class* found_char_array_class = FindSystemClass("[C");
+  CHECK_EQ(char_array_class, found_char_array_class);
 
   // ensure all class_roots_ were initialized
   for (size_t i = 0; i < kClassRootsMax; i++) {
@@ -201,14 +206,6 @@
                                               sizeof(Method)));
 }
 
-String* ClassLinker::AllocStringFromModifiedUtf8(int32_t utf16_length,
-                                                 const char* utf8_data_in) {
-  return String::AllocFromModifiedUtf8(class_roots_->Get(kJavaLangString),
-                                       class_roots_->Get(kCharArrayClass),
-                                       utf16_length,
-                                       utf8_data_in);
-}
-
 Class* ClassLinker::FindClass(const StringPiece& descriptor,
                               Object* class_loader,
                               const DexFile* dex_file) {
@@ -600,9 +597,14 @@
     // link step.
 
     Class* new_class = NULL;
-    if (!init_done_ && descriptor == "[Ljava/lang/Object;") {
+    if (!init_done_) {
+      if (descriptor == "[Ljava/lang/Object;") {
         new_class = class_roots_->Get(kObjectArrayClass);
         CHECK(new_class);
+      } else if (descriptor == "[C") {
+        new_class = class_roots_->Get(kCharArrayClass);
+        CHECK(new_class);
+      }
     }
     if (new_class == NULL) {
       new_class = AllocClass();
@@ -1546,7 +1548,7 @@
   const DexFile::StringId& string_id = dex_file->GetStringId(string_idx);
   int32_t utf16_length = dex_file->GetStringLength(string_id);
   const char* utf8_data = dex_file->GetStringData(string_id);
-  String* new_string = AllocStringFromModifiedUtf8(utf16_length, utf8_data);
+  String* new_string = String::AllocFromModifiedUtf8(utf16_length, utf8_data);
   // TODO: intern the new string
   referring->GetDexCache()->SetResolvedString(string_idx, new_string);
   return new_string;
