diff --git a/loader.cc b/loader.cc
index c57fd65b6f5c0f830c76578628e96a455f037f42..36f4f464d24dbe8cce45ceebe425694801221b3c 100644
--- a/loader.cc
+++ b/loader.cc
@@ -127,9 +127,6 @@ int main(int ac, char **av)
 
     bootfs fs;
     rootfs = &fs;
-    fileref f = fs.open("/usr/lib/jre/lib/server/libjvm.so");
-    char buf[100];
-    f->read(buf, 0, 100);
 
     disable_pic();
     processor::sti();
@@ -154,17 +151,23 @@ int main(int ac, char **av)
     //	;
 #endif
 
-    debug(fmt("jvm: %1% bytes, contents %2% ") % f->size() % buf);
     elf::program prog(fs);
     sched::init(prog);
     void main_thread(elf::program& prog);
     new thread([&] { main_thread(prog); }, true);
 }
 
-void main_thread(elf::program& prog)
+#define JVM_PATH	"/usr/lib/jre/lib/server/libjvm.so"
+
+void start_jvm(elf::program& prog)
 {
-    test_threads();
-    prog.add("/usr/lib/jre/lib/server/libjvm.so");
+    fileref f = rootfs->open(JVM_PATH);
+    char buf[100];
+    f->read(buf, 0, 100);
+    debug(fmt("jvm: %1% bytes, contents %2% ") % f->size() % buf);
+
+    prog.add(JVM_PATH);
+ 
     auto JNI_GetDefaultJavaVMInitArgs
         = prog.lookup_function<void (void*)>("JNI_GetDefaultJavaVMInitArgs");
     JavaVMInitArgs vm_args;
@@ -174,6 +177,14 @@ void main_thread(elf::program& prog)
         = prog.lookup_function<jint (JavaVM**, void**, void*)>("JNI_CreateJavaVM");
     JavaVM* jvm = nullptr;
 
+    auto ret = JNI_CreateJavaVM(&jvm, nullptr, &vm_args);
+    debug(fmt("JNI_CreateJavaVM() returned %1%") % ret);
+}
+
+void main_thread(elf::program& prog)
+{
+    test_threads();
+
     pci::pci_devices_print();
     pci::pci_device_enumeration();
     DeviceFactory::Instance()->DumpDevices();
@@ -188,8 +199,7 @@ void main_thread(elf::program& prog)
     debug(fmt("clock@t1 %1%") % t1);
     debug(fmt("clock@t2 %1%") % t2);
 
-    auto ret = JNI_CreateJavaVM(&jvm, nullptr, &vm_args);
-    debug(fmt("JNI_CreateJavaVM() returned %1%") % ret);
+    start_jvm(prog);
 
     while (true)
 	;