diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index 2025b71..41fa5b1 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -11,11 +11,11 @@
 class ClassLinkerTest : public RuntimeTest {
  protected:
   void AssertNonExistantClass(const StringPiece& descriptor) {
-    EXPECT_TRUE(class_linker_.get()->FindSystemClass(descriptor) == NULL);
+    EXPECT_TRUE(class_linker_->FindSystemClass(descriptor) == NULL);
   }
 
   void AssertPrimitiveClass(const StringPiece& descriptor) {
-    Class* primitive = class_linker_.get()->FindSystemClass(descriptor);
+    Class* primitive = class_linker_->FindSystemClass(descriptor);
     ASSERT_TRUE(primitive != NULL);
     ASSERT_TRUE(primitive->GetClass() != NULL);
     ASSERT_EQ(primitive->GetClass(), primitive->GetClass()->GetClass());
@@ -44,14 +44,14 @@
   void AssertArrayClass(const StringPiece& array_descriptor,
                         int32_t array_rank,
                         const StringPiece& component_type) {
-    Class* array = class_linker_.get()->FindSystemClass(array_descriptor);
+    Class* array = class_linker_->FindSystemClass(array_descriptor);
     ASSERT_TRUE(array != NULL);
     ASSERT_TRUE(array->GetClass() != NULL);
     ASSERT_EQ(array->GetClass(), array->GetClass()->GetClass());
     EXPECT_TRUE(array->GetClass()->GetSuperClass() != NULL);
     ASSERT_EQ(array_descriptor, array->GetDescriptor());
     EXPECT_TRUE(array->GetSuperClass() != NULL);
-    EXPECT_EQ(class_linker_.get()->FindSystemClass("Ljava/lang/Object;"), array->GetSuperClass());
+    EXPECT_EQ(class_linker_->FindSystemClass("Ljava/lang/Object;"), array->GetSuperClass());
     EXPECT_TRUE(array->HasSuperClass());
     ASSERT_TRUE(array->GetComponentType() != NULL);
     ASSERT_TRUE(array->GetComponentType()->GetDescriptor() != NULL);
@@ -75,29 +75,29 @@
 };
 
 TEST_F(ClassLinkerTest, FindClassNonexistent) {
-  Class* result1 = class_linker_.get()->FindSystemClass("NoSuchClass;");
+  Class* result1 = class_linker_->FindSystemClass("NoSuchClass;");
   EXPECT_TRUE(result1 == NULL);
-  Class* result2 = class_linker_.get()->FindSystemClass("LNoSuchClass;");
+  Class* result2 = class_linker_->FindSystemClass("LNoSuchClass;");
   EXPECT_TRUE(result2 == NULL);
 }
 
 TEST_F(ClassLinkerTest, FindClassNested) {
   scoped_ptr<DexFile> nested_dex(OpenDexFileBase64(kNestedDex));
-  class_linker_.get()->RegisterDexFile(nested_dex.get());
+  class_linker_->RegisterDexFile(nested_dex.get());
 
-  Class* outer = class_linker_.get()->FindClass("LNested;", NULL, nested_dex.get());
+  Class* outer = class_linker_->FindClass("LNested;", NULL, nested_dex.get());
   ASSERT_TRUE(outer != NULL);
   EXPECT_EQ(0U, outer->NumVirtualMethods());
   EXPECT_EQ(1U, outer->NumDirectMethods());
 
-  Class* inner = class_linker_.get()->FindClass("LNested$Inner;", NULL, nested_dex.get());
+  Class* inner = class_linker_->FindClass("LNested$Inner;", NULL, nested_dex.get());
   ASSERT_TRUE(inner != NULL);
   EXPECT_EQ(0U, inner->NumVirtualMethods());
   EXPECT_EQ(1U, inner->NumDirectMethods());
 }
 
 TEST_F(ClassLinkerTest, FindClass) {
-  ClassLinker* linker = class_linker_.get();
+  ClassLinker* linker = class_linker_;
 
   StringPiece expected = "BCDFIJSZV";
   for (int ch = 0; ch < 255; ch++) {
@@ -176,7 +176,7 @@
 }
 
 TEST_F(ClassLinkerTest, ProtoCompare) {
-  ClassLinker* linker = class_linker_.get();
+  ClassLinker* linker = class_linker_;
 
   scoped_ptr<DexFile> proto_dex_file(OpenDexFileBase64(kProtoCompareDex));
   linker->RegisterDexFile(proto_dex_file.get());
@@ -230,7 +230,7 @@
 }
 
 TEST_F(ClassLinkerTest, ProtoCompare2) {
-  ClassLinker* linker = class_linker_.get();
+  ClassLinker* linker = class_linker_;
 
   scoped_ptr<DexFile> proto1_dex_file(OpenDexFileBase64(kProtoCompareDex));
   linker->RegisterDexFile(proto1_dex_file.get());
diff --git a/src/common_test.h b/src/common_test.h
index e7b4f30..237939b 100644
--- a/src/common_test.h
+++ b/src/common_test.h
@@ -173,25 +173,19 @@
 class RuntimeTest : public testing::Test {
  protected:
   virtual void SetUp() {
-    ASSERT_TRUE(Thread::Init());
-    ASSERT_TRUE(Thread::Attach() != NULL);
-    ASSERT_TRUE(Heap::Init());
-
     java_lang_dex_file_.reset(OpenDexFileBase64(kJavaLangDex));
 
     std::vector<DexFile*> boot_class_path;
     boot_class_path.push_back(java_lang_dex_file_.get());
 
-    class_linker_.reset(ClassLinker::Create(boot_class_path));
-    CHECK(class_linker_ != NULL);
-  }
-
-  virtual void TearDown() {
-    Heap::Destroy();
+    runtime_.reset(Runtime::Create(boot_class_path));
+    ASSERT_TRUE(runtime_ != NULL);
+    class_linker_ = runtime_->GetClassLinker();
   }
 
   scoped_ptr<DexFile> java_lang_dex_file_;
-  scoped_ptr<ClassLinker> class_linker_;
+  scoped_ptr<Runtime> runtime_;
+  ClassLinker* class_linker_;
 };
 
 }  // namespace art
diff --git a/src/jni_compiler_test.cc b/src/jni_compiler_test.cc
index 4d5e7da..225ca5c 100644
--- a/src/jni_compiler_test.cc
+++ b/src/jni_compiler_test.cc
@@ -18,11 +18,6 @@
  protected:
   virtual void SetUp() {
     RuntimeTest::SetUp();
-    // Create runtime and attach thread
-    std::vector<DexFile*> boot_class_path;
-    boot_class_path.push_back(java_lang_dex_file_.get());
-    runtime_ = Runtime::Create(boot_class_path);
-    CHECK(runtime_->AttachCurrentThread());
     // Create thunk code that performs the native to managed transition
     thunk_code_size_ = 4096;
     thunk_ = mmap(NULL, thunk_code_size_, PROT_READ | PROT_WRITE | PROT_EXEC,
@@ -97,7 +92,6 @@
     return result;
   }
 
-  Runtime* runtime_;
   void* thunk_;
   size_t thunk_code_size_;
   jint (*thunk_entry1_)(const void*, Method*, jobject, jint, jint, jint);
@@ -185,8 +179,8 @@
 
 TEST_F(JniCompilerTest, CompileAndRunNoArgMethod) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindVirtualMethod("foo");
 
   Assembler jni_asm;
@@ -210,8 +204,8 @@
 
 TEST_F(JniCompilerTest, CompileAndRunIntMethod) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindVirtualMethod("fooI");
 
   Assembler jni_asm;
@@ -237,8 +231,8 @@
 
 TEST_F(JniCompilerTest, CompileAndRunIntIntMethod) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindVirtualMethod("fooII");
 
   Assembler jni_asm;
@@ -267,8 +261,8 @@
 
 TEST_F(JniCompilerTest, CompileAndRunDoubleDoubleMethod) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindVirtualMethod("fooDD");
 
   Assembler jni_asm;
@@ -296,8 +290,8 @@
 
 TEST_F(JniCompilerTest, CompileAndRunIntObjectObjectMethod) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindVirtualMethod("fooIOO");
 
   Assembler jni_asm;
@@ -351,8 +345,8 @@
 
 TEST_F(JniCompilerTest, CompileAndRunStaticIntObjectObjectMethod) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindDirectMethod("fooSIOO");
 
   Assembler jni_asm;
@@ -403,8 +397,8 @@
 
 TEST_F(JniCompilerTest, CompileAndRunStaticSynchronizedIntObjectObjectMethod) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindDirectMethod("fooSSIOO");
 
   Assembler jni_asm;
@@ -461,8 +455,8 @@
 }
 TEST_F(JniCompilerTest, SuspendCountAcknolewdgement) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindVirtualMethod("fooI");
 
   Assembler jni_asm;
@@ -502,8 +496,8 @@
 }
 TEST_F(JniCompilerTest, ExceptionHandling) {
   scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
-  class_linker_.get()->RegisterDexFile(dex.get());
-  Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+  class_linker_->RegisterDexFile(dex.get());
+  Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
   Method* method = klass->FindVirtualMethod("foo");
 
   Assembler jni_asm;
diff --git a/src/runtime.h b/src/runtime.h
index da773a3..b57f1cf 100644
--- a/src/runtime.h
+++ b/src/runtime.h
@@ -39,6 +39,10 @@
 
   ~Runtime();
 
+  ClassLinker* GetClassLinker() {
+    return class_linker_;
+  }
+
  private:
   static void PlatformAbort(const char*, int);
 
diff --git a/src/thread.cc b/src/thread.cc
index 56eeb7f..c2483c0 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -156,7 +156,10 @@
   // Make sure that all threads have exited and unregistered when we
   // reach this point. This means that all daemon threads had been
   // shutdown cleanly.
-  CHECK_EQ(list_.size(), 0U);
+  CHECK_EQ(list_.size(), 1U);
+  // TODO: wait for all other threads to unregister
+  CHECK_EQ(list_.front(), Thread::Current());
+  // TODO: detach the current thread
   delete lock_;
   lock_ = NULL;
 }
