--- core/base/src/TROOT.cxx.orig
+++ core/base/src/TROOT.cxx
@@ -307,6 +307,8 @@ namespace ROOT {
       if (!initInterpreter) {
          initInterpreter = kTRUE;
          gROOTLocal->InitInterpreter();
+         // Load and init threads library
+         gROOTLocal->InitThreads();
       }
       return gROOTLocal;
    }
@@ -565,9 +567,6 @@ TROOT::TROOT(const char *name, const char *title, VoidFuncPtr_t *initfunc)
       i++;
    }
 
-   // Load and init threads library
-   InitThreads();
-
    // Set initial/default list of browsable objects
    fBrowsables->Add(fRootFolder, "root");
    fBrowsables->Add(fProofs, "PROOF Sessions");
@@ -1631,7 +1630,11 @@ void TROOT::InitThreads()
       char *path;
       if ((path = gSystem->DynamicPathName("libThread", kTRUE))) {
          delete [] path;
-         LoadClass("TThread", "Thread");
+         TInterpreter::EErrorCode code = TInterpreter::kNoError;
+         fInterpreter->Calc("TThread::Initialize();", &code);
+         if (code != TInterpreter::kNoError) {
+            Error("InitThreads","Thread mechanism not initialization properly.");
+         }
       }
    }
 }
