Index: vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java =================================================================== --- vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java (revision 600810) +++ vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java (working copy) @@ -149,10 +149,12 @@ if(clazz == null) { throw new ClassNotFoundException(name); } - if(classLoader != null && classLoader.findLoadedClass(name) == null) { - // classloader overloads loadClass method though it is not - // generally recommended - // have to register initiating loader for clazz from here + if(classLoader != null) { + // Although class loader may have had a chance to register + // itself as initiating for requested class, there may occur + // a classloader which overloads loadClass method (though it is + // not recommended by J2SE specification). + // Try to register initiating loader for clazz from here again classLoader.registerInitiatedClass(clazz); } if (initialize) { Index: vm/vmcore/src/class_support/classloader.cpp =================================================================== --- vm/vmcore/src/class_support/classloader.cpp (revision 600810) +++ vm/vmcore/src/class_support/classloader.cpp (working copy) @@ -1741,7 +1741,9 @@ void ClassLoader::InsertInitiatedClass(Class* clss) { LMAutoUnlock aulock(&m_lock); - m_initiatedClasses->Insert(clss->get_name(), clss); + if(!m_initiatedClasses->Lookup(clss->get_name()) { + m_initiatedClasses->Insert(clss->get_name(), clss); + } } void BootstrapClassLoader::ReportAndExit(const char* exnclass, std::stringstream& exnmsg)