diff --git a/src/class_linker.cc b/src/class_linker.cc
index d3d1a96..593b3e0 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -49,11 +49,17 @@
   Class* object_array_class = AllocClass(java_lang_Class);
   CHECK(object_array_class != NULL);
 
+  // string is necessary so that FindClass can assigning names to members
+  Class* java_lang_String = AllocClass(java_lang_Class);
+  CHECK(java_lang_String != NULL);
+  java_lang_String->object_size_ = sizeof(String);
+
   // create storage for root classes, save away our work so far
   class_roots_ = ObjectArray<Class>::Alloc(object_array_class, kClassRootsMax);
   class_roots_->Set(kJavaLangClass, java_lang_Class);
   class_roots_->Set(kJavaLangObject, java_lang_Object);
   class_roots_->Set(kObjectArrayClass, object_array_class);
+  class_roots_->Set(kJavaLangString, java_lang_String);
   // now that these are registered, we can use AllocClass() and AllocObjectArray
 
   // setup boot_class_path_ now that we can use AllocObjectArray to
@@ -88,8 +94,7 @@
   java_lang_reflect_Method->object_size_ = sizeof(Method);
   class_roots_->Set(kJavaLangReflectMethod, java_lang_reflect_Method);
 
-  Class* java_lang_String = FindSystemClass("Ljava/lang/String;");
-  CHECK(java_lang_String != NULL);
+  FindSystemClass("Ljava/lang/String;");
   CHECK_EQ(java_lang_String->object_size_, sizeof(String));
   java_lang_String->object_size_ = sizeof(String);
   class_roots_->Set(kJavaLangString, java_lang_String);
@@ -235,6 +240,8 @@
         klass = class_roots_->Get(kJavaLangObject);
       } else if (descriptor == "Ljava/lang/Class;") {
         klass = class_roots_->Get(kJavaLangClass);
+      } else if (descriptor == "Ljava/lang/String;") {
+        klass = class_roots_->Get(kJavaLangString);
       } else {
         klass = AllocClass();
       }
@@ -408,7 +415,7 @@
                             Field* dst) {
   const DexFile::FieldId& field_id = dex_file.GetFieldId(src.field_idx_);
   dst->klass_ = klass;
-  dst->name_.set(dex_file.dexStringById(field_id.name_idx_));
+  dst->java_name_ = ResolveString(klass, field_id.name_idx_);
   dst->descriptor_.set(dex_file.dexStringByTypeIdx(field_id.type_idx_));
   dst->access_flags_ = src.access_flags_;
 }
diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index cdcf8fb..b71baef 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -405,37 +405,37 @@
   UseLibCoreDex();
   Class* string = class_linker_->FindClass( "Ljava/lang/String;", NULL, java_lang_dex_file_.get());
   ASSERT_EQ(4U, string->NumInstanceFields());
-  EXPECT_EQ("value",    string->GetInstanceField(0)->GetName());
-  EXPECT_EQ("hashCode", string->GetInstanceField(1)->GetName());
-  EXPECT_EQ("offset",   string->GetInstanceField(2)->GetName());
-  EXPECT_EQ("count",    string->GetInstanceField(3)->GetName());
+  EXPECT_PRED2(String::Equals, string->GetInstanceField(0)->GetName(), "value");
+  EXPECT_PRED2(String::Equals, string->GetInstanceField(1)->GetName(), "hashCode");
+  EXPECT_PRED2(String::Equals, string->GetInstanceField(2)->GetName(), "offset");
+  EXPECT_PRED2(String::Equals, string->GetInstanceField(3)->GetName(), "count");
 
   Class* accessible_object = class_linker_->FindClass("Ljava/lang/reflect/AccessibleObject;", NULL, java_lang_dex_file_.get());
   ASSERT_EQ(1U, accessible_object->NumInstanceFields());
-  EXPECT_EQ("flag", accessible_object->GetInstanceField(0)->GetName());
+  EXPECT_PRED2(String::Equals, accessible_object->GetInstanceField(0)->GetName(), "flag");
 
   Class* field = class_linker_->FindClass("Ljava/lang/reflect/Field;", NULL, java_lang_dex_file_.get());
   ASSERT_EQ(6U, field->NumInstanceFields());
-  EXPECT_EQ("declaringClass",             field->GetInstanceField(0)->GetName());
-  EXPECT_EQ("genericType",                field->GetInstanceField(1)->GetName());
-  EXPECT_EQ("type",                       field->GetInstanceField(2)->GetName());
-  EXPECT_EQ("name",                       field->GetInstanceField(3)->GetName());
-  EXPECT_EQ("slot",                       field->GetInstanceField(4)->GetName());
-  EXPECT_EQ("genericTypesAreInitialized", field->GetInstanceField(5)->GetName());
+  EXPECT_PRED2(String::Equals, field->GetInstanceField(0)->GetName(), "declaringClass");
+  EXPECT_PRED2(String::Equals, field->GetInstanceField(1)->GetName(), "genericType");
+  EXPECT_PRED2(String::Equals, field->GetInstanceField(2)->GetName(), "type");
+  EXPECT_PRED2(String::Equals, field->GetInstanceField(3)->GetName(), "name");
+  EXPECT_PRED2(String::Equals, field->GetInstanceField(4)->GetName(), "slot");
+  EXPECT_PRED2(String::Equals, field->GetInstanceField(5)->GetName(), "genericTypesAreInitialized");
 
   Class* method = class_linker_->FindClass("Ljava/lang/reflect/Method;", NULL, java_lang_dex_file_.get());
   ASSERT_EQ(11U, method->NumInstanceFields());
-  EXPECT_EQ("declaringClass",             method->GetInstanceField( 0)->GetName());
-  EXPECT_EQ("exceptionTypes",             method->GetInstanceField( 1)->GetName());
-  EXPECT_EQ("formalTypeParameters",       method->GetInstanceField( 2)->GetName());
-  EXPECT_EQ("genericExceptionTypes",      method->GetInstanceField( 3)->GetName());
-  EXPECT_EQ("genericParameterTypes",      method->GetInstanceField( 4)->GetName());
-  EXPECT_EQ("genericReturnType",          method->GetInstanceField( 5)->GetName());
-  EXPECT_EQ("returnType",                 method->GetInstanceField( 6)->GetName());
-  EXPECT_EQ("name",                       method->GetInstanceField( 7)->GetName());
-  EXPECT_EQ("parameterTypes",             method->GetInstanceField( 8)->GetName());
-  EXPECT_EQ("genericTypesAreInitialized", method->GetInstanceField( 9)->GetName());
-  EXPECT_EQ("slot",                       method->GetInstanceField(10)->GetName());
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 0)->GetName(), "declaringClass");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 1)->GetName(), "exceptionTypes");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 2)->GetName(), "formalTypeParameters");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 3)->GetName(), "genericExceptionTypes");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 4)->GetName(), "genericParameterTypes");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 5)->GetName(), "genericReturnType");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 6)->GetName(), "returnType");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 7)->GetName(), "name");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 8)->GetName(), "parameterTypes");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField( 9)->GetName(), "genericTypesAreInitialized");
+  EXPECT_PRED2(String::Equals, method->GetInstanceField(10)->GetName(), "slot");
 }
 
 }  // namespace art
diff --git a/src/object.h b/src/object.h
index a9bf40f..0f89411 100644
--- a/src/object.h
+++ b/src/object.h
@@ -257,8 +257,8 @@
     return declaring_class_;
   }
 
-  const StringPiece& GetName() const {
-    return name_;
+  const String* GetName() const {
+    return java_name_;
   }
 
   char GetType() const {  // TODO: return type
@@ -986,6 +986,7 @@
 std::ostream& operator<<(std::ostream& os, const Class::Status& rhs);
 
 inline Object* Object::Alloc(Class* klass) {
+  DCHECK(klass != NULL);
   return Heap::AllocObject(klass, klass->object_size_);
 }
 
