diff --git a/src/org/jruby/Main.java b/src/org/jruby/Main.java
index d989a6a..5060cfd 100644
--- a/src/org/jruby/Main.java
+++ b/src/org/jruby/Main.java
@@ -162,6 +162,9 @@ public class Main {
         InputStream in   = config.getScriptSource();
         String filename  = config.displayedFileName();
         Ruby runtime     = Ruby.newInstance(config);
+        
+        // set thread context JRuby classloader here, for the main thread
+        Thread.currentThread().setContextClassLoader(runtime.getJRubyClassLoader());
 
         if (in == null) {
             // no script to run, return success below
diff --git a/src/org/jruby/internal/runtime/RubyNativeThread.java b/src/org/jruby/internal/runtime/RubyNativeThread.java
index e857634..d689855 100644
--- a/src/org/jruby/internal/runtime/RubyNativeThread.java
+++ b/src/org/jruby/internal/runtime/RubyNativeThread.java
@@ -66,6 +66,10 @@ public class RubyNativeThread extends Thread {
     
     public void run() {
         ThreadContext context = runtime.getThreadService().registerNewThread(rubyThread);
+        
+        // set thread context JRuby classloader here, for Ruby-owned thread
+        Thread.currentThread().setContextClassLoader(runtime.getJRubyClassLoader());
+        
         context.preRunThread(currentFrame);
 
         // Call the thread's code

