diff --git a/vmkit/include/j3/j3object.h b/vmkit/include/j3/j3object.h
index 581d838..8c6b713 100644
--- a/vmkit/include/j3/j3object.h
+++ b/vmkit/include/j3/j3object.h
@@ -80,9 +80,9 @@
 		uint32_t      offset() { return checker.offset; }
 		bool          isPrimaryChecker() { return checker.offset < J3TypeChecker::cacheOffset; }
 
-		bool          slowIsAssignableTo(J3VirtualTable* parent) __attribute__((always_inline));
-		bool          fastIsAssignableToPrimaryChecker(J3VirtualTable* parent, uint32_t parentOffset);
-		bool          fastIsAssignableToNonPrimaryChecker(J3VirtualTable* parent);
+		bool          slowIsAssignableTo(J3VirtualTable* parent) __attribute__((noinline));
+		bool          fastIsAssignableToPrimaryChecker(J3VirtualTable* parent, uint32_t parentOffset) __attribute__((always_inline));
+		bool          fastIsAssignableToNonPrimaryChecker(J3VirtualTable* parent) __attribute__((noinline));
 		bool          isAssignableTo(J3VirtualTable* parent);
 
 		J3Type*       type() const { return _type; }
diff --git a/vmkit/include/vmkit/compiler.h b/vmkit/include/vmkit/compiler.h
index c82f782..e1d0c95 100644
--- a/vmkit/include/vmkit/compiler.h
+++ b/vmkit/include/vmkit/compiler.h
@@ -73,6 +73,7 @@
 		BumpAllocator*          allocator() { return _allocator; }
 		llvm::ExecutionEngine*  ee() { return _ee; }
 
+		void                    prepareModule(llvm::Module* module);
 		void                    compileModule(llvm::Module* module);
 	};
 }
diff --git a/vmkit/lib/j3/vm/j3codegen.cc b/vmkit/lib/j3/vm/j3codegen.cc
index b759d29..1494e84 100644
--- a/vmkit/lib/j3/vm/j3codegen.cc
+++ b/vmkit/lib/j3/vm/j3codegen.cc
@@ -118,6 +118,8 @@
 			llvmFunction->dump();
 	}
 
+	loader->prepareModule(module);
+
 	uint32_t needsCaller = withCaller() && !signature->caller(access);
 
 	if(needsCaller)
diff --git a/vmkit/lib/j3/vm/j3codegenexception.cc b/vmkit/lib/j3/vm/j3codegenexception.cc
index ad369c2..c16bdaa 100644
--- a/vmkit/lib/j3/vm/j3codegenexception.cc
+++ b/vmkit/lib/j3/vm/j3codegenexception.cc
@@ -51,9 +51,9 @@
 
 	if(curCheck) { /* = 0 if I already have a finally */
 		codeGen->builder.SetInsertPoint(curCheck);
-		curCheck = codeGen->newBB("next-exception-check");
 
 		if(entry->catchType) {
+			curCheck = codeGen->newBB("next-exception-check");
 			codeGen->stack.metaStack[0] = codeGen->vm->typeJ3ObjectPtr;
 			codeGen->stack.topStack = 1;
 			llvm::CallInst* is = codeGen->isAssignableTo(codeGen->stack.top(0), 
diff --git a/vmkit/lib/j3/vm/j3method.cc b/vmkit/lib/j3/vm/j3method.cc
index b4508db..cfc4de2 100644
--- a/vmkit/lib/j3/vm/j3method.cc
+++ b/vmkit/lib/j3/vm/j3method.cc
@@ -52,7 +52,7 @@
 }
 
 uint64_t J3Method::inlineWeight() {
-	if(1 && J3Thread::get()->vm()->options()->enableInlining)
+	if(J3Thread::get()->vm()->options()->enableInlining)
 		return vmkit::Symbol::inlineWeight();
 	else
 		return (uint64_t)-1;
diff --git a/vmkit/lib/mmtk/magic/lower-java-runtime.cc b/vmkit/lib/mmtk/magic/lower-java-runtime.cc
index 5d0ccbc..cf11e07 100644
--- a/vmkit/lib/mmtk/magic/lower-java-runtime.cc
+++ b/vmkit/lib/mmtk/magic/lower-java-runtime.cc
@@ -39,14 +39,14 @@
 		for(llvm::Module::global_iterator it = module.global_begin(); it!=module.global_end(); it++) {
 			llvm::GlobalValue* gv = it;
 			
-			fprintf(stderr, "Global: %s\n", gv->getName().data());
+			//fprintf(stderr, "Global: %s\n", gv->getName().data());
 		}
 
 		for(llvm::Module::iterator it = module.begin(); it!=module.end(); it++) {
 			llvm::Function* function = it;
 			
-			if(!strncmp(function->getName().data(), "j3_java", 7))
-				fprintf(stderr, "processing %s\n", function->getName().data());
+			//if(!strncmp(function->getName().data(), "j3_java", 7))
+			//fprintf(stderr, "processing %s\n", function->getName().data());
 		}
 
   return Changed;
diff --git a/vmkit/lib/vmkit/compiler.cc b/vmkit/lib/vmkit/compiler.cc
index bc2f843..88dd810 100644
--- a/vmkit/lib/vmkit/compiler.cc
+++ b/vmkit/lib/vmkit/compiler.cc
@@ -88,9 +88,10 @@
 
 	if(runInlinePass || onlyAlwaysInline)
 		pm->add(vmkit::createFunctionInlinerPass(this, onlyAlwaysInline));
+
+#if 0
 	pm->add(llvm::createCFGSimplificationPass());      // Clean up disgusting code
 
-#if 1
 	pm->add(llvm::createPromoteMemoryToRegisterPass());// Kill useless allocas
 	pm->add(llvm::createInstructionCombiningPass()); // Cleanup for scalarrepl.
 	pm->add(llvm::createScalarReplAggregatesPass()); // Break up aggregate allocas
@@ -170,8 +171,11 @@
 	return (uint64_t)(uintptr_t)getSymbol(System::mcjitSymbol(Name.c_str()))->getSymbolAddress();
 }
 
-void CompilationUnit::compileModule(llvm::Module* module) {
+void CompilationUnit::prepareModule(llvm::Module* module) {
 	pm->run(*module);
+}
+
+void CompilationUnit::compileModule(llvm::Module* module) {
 	ee()->addModule(module);
 	ee()->finalizeObject();
 
