Index: xstream/src/java/com/thoughtworks/xstream/core/util/XStreamClassLoader.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/core/util/XStreamClassLoader.java	(revision )
+++ xstream/src/java/com/thoughtworks/xstream/core/util/XStreamClassLoader.java	(revision )
@@ -0,0 +1,21 @@
+package com.thoughtworks.xstream.core.util;
+
+/**
+ * Interface for loading classes at runtime.  Mimics some of the functionality of {@link ClassLoader}.
+ *
+ * @author Peter Abeles
+ */
+public interface XStreamClassLoader {
+
+   /**
+    * Mimics functionality of {@link ClassLoader#loadClass(String)}
+    */
+   public Class<?> loadClass(String name) throws ClassNotFoundException;
+
+   /**
+    * Returns the underlying {@link ClassLoader}.
+    *
+    * @return instance of ClassLoader
+    */
+   public ClassLoader getClassLoader();
+}
Index: xstream/src/java/com/thoughtworks/xstream/XStream.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/XStream.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/XStream.java	(revision )
@@ -110,11 +110,7 @@
 import com.thoughtworks.xstream.core.ReferenceByIdMarshallingStrategy;
 import com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy;
 import com.thoughtworks.xstream.core.TreeMarshallingStrategy;
-import com.thoughtworks.xstream.core.util.ClassLoaderReference;
-import com.thoughtworks.xstream.core.util.CompositeClassLoader;
-import com.thoughtworks.xstream.core.util.CustomObjectInputStream;
-import com.thoughtworks.xstream.core.util.CustomObjectOutputStream;
-import com.thoughtworks.xstream.core.util.SelfStreamingInstanceChecker;
+import com.thoughtworks.xstream.core.util.*;
 import com.thoughtworks.xstream.io.HierarchicalStreamDriver;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
@@ -435,30 +431,37 @@
         ReflectionProvider reflectionProvider, HierarchicalStreamDriver driver,
         ClassLoader classLoader, Mapper mapper, ConverterLookup converterLookup,
         ConverterRegistry converterRegistry) {
+        this(reflectionProvider,driver,new ConvertClassLoader(classLoader),mapper,converterLookup,converterRegistry);
+    }
+
+   public XStream(
+           ReflectionProvider reflectionProvider, HierarchicalStreamDriver driver,
+           XStreamClassLoader classLoader, Mapper mapper, ConverterLookup converterLookup,
+           ConverterRegistry converterRegistry) {
-        jvm = new JVM();
-        if (reflectionProvider == null) {
-            reflectionProvider = jvm.bestReflectionProvider();
-        }
-        this.reflectionProvider = reflectionProvider;
-        this.hierarchicalStreamDriver = driver;
-        this.classLoaderReference = classLoader instanceof ClassLoaderReference
-            ? (ClassLoaderReference)classLoader
-            : new ClassLoaderReference(classLoader);
-        this.converterLookup = converterLookup;
-        this.converterRegistry = converterRegistry != null
-            ? converterRegistry
-            : (converterLookup instanceof ConverterRegistry
-                ? (ConverterRegistry)converterLookup
-                : null);
-        this.mapper = mapper == null ? buildMapper() : mapper;
+      jvm = new JVM();
+      if (reflectionProvider == null) {
+         reflectionProvider = jvm.bestReflectionProvider();
+      }
+      this.reflectionProvider = reflectionProvider;
+      this.hierarchicalStreamDriver = driver;
+      this.classLoaderReference = classLoader instanceof ClassLoaderReference
+              ? (ClassLoaderReference)classLoader
+              : new ClassLoaderReference(classLoader);
+      this.converterLookup = converterLookup;
+      this.converterRegistry = converterRegistry != null
+              ? converterRegistry
+              : (converterLookup instanceof ConverterRegistry
+              ? (ConverterRegistry)converterLookup
+              : null);
+      this.mapper = mapper == null ? buildMapper() : mapper;
 
-        setupMappers();
-        setupAliases();
-        setupDefaultImplementations();
-        setupConverters();
-        setupImmutableTypes();
-        setMode(XPATH_RELATIVE_REFERENCES);
-    }
+      setupMappers();
+      setupAliases();
+      setupDefaultImplementations();
+      setupConverters();
+      setupImmutableTypes();
+      setMode(XPATH_RELATIVE_REFERENCES);
+   }
 
     private Mapper buildMapper() {
         Mapper mapper = new DefaultMapper(classLoaderReference);
@@ -486,7 +489,7 @@
         if (JVM.is15()) {
             mapper = buildMapperDynamically(ANNOTATION_MAPPER_TYPE, new Class[]{
                 Mapper.class, ConverterRegistry.class, ConverterLookup.class,
-                ClassLoader.class, ReflectionProvider.class, JVM.class}, new Object[]{
+                XStreamClassLoader.class, ReflectionProvider.class, JVM.class}, new Object[]{
                 mapper, converterLookup, converterLookup, classLoaderReference,
                 reflectionProvider, jvm});
         }
@@ -498,7 +501,7 @@
     private Mapper buildMapperDynamically(String className, Class[] constructorParamTypes,
         Object[] constructorParamValues) {
         try {
-            Class type = Class.forName(className, false, classLoaderReference.getReference());
+            Class type = classLoaderReference.loadClass(className);
             Constructor constructor = type.getConstructor(constructorParamTypes);
             return (Mapper)constructor.newInstance(constructorParamValues);
         } catch (Exception e) {
@@ -690,15 +693,21 @@
             registerConverter(new SqlTimeConverter(), PRIORITY_NORMAL);
             registerConverter(new SqlDateConverter(), PRIORITY_NORMAL);
         }
+       try {
+          // exception can be thrown when security policies are in place (e.g. applets)
         registerConverter(
             new DynamicProxyConverter(mapper, classLoaderReference), PRIORITY_NORMAL);
+       } catch( ExceptionInInitializerError ignored ) {}
         registerConverter(new JavaClassConverter(classLoaderReference), PRIORITY_NORMAL);
         registerConverter(new JavaMethodConverter(classLoaderReference), PRIORITY_NORMAL);
         registerConverter(new JavaFieldConverter(classLoaderReference), PRIORITY_NORMAL);
         if (jvm.supportsAWT()) {
             registerConverter(new FontConverter(), PRIORITY_NORMAL);
             registerConverter(new ColorConverter(), PRIORITY_NORMAL);
+           try {
+              // exception can be thrown when security policies are in place (e.g. applets)
             registerConverter(new TextAttributeConverter(), PRIORITY_NORMAL);
+           } catch( ExceptionInInitializerError ignored ) {}
         }
         if (jvm.supportsSwing()) {
             registerConverter(
@@ -761,7 +770,7 @@
     private void registerConverterDynamically(String className, int priority,
         Class[] constructorParamTypes, Object[] constructorParamValues) {
         try {
-            Class type = Class.forName(className, false, classLoaderReference.getReference());
+            Class type = classLoaderReference.loadClass(className);
             Constructor constructor = type.getConstructor(constructorParamTypes);
             Object instance = constructor.newInstance(constructorParamValues);
             if (instance instanceof Converter) {
@@ -1753,7 +1762,7 @@
      * 
      * @since 1.1.1
      */
-    public void setClassLoader(ClassLoader classLoader) {
+    public void setClassLoader(XStreamClassLoader classLoader) {
         classLoaderReference.setReference(classLoader);
     }
 
@@ -1762,7 +1771,7 @@
      * 
      * @since 1.1.1
      */
-    public ClassLoader getClassLoader() {
+    public XStreamClassLoader getClassLoader() {
         return classLoaderReference.getReference();
     }
 
Index: xstream/src/test/com/thoughtworks/acceptance/ClassLoaderTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/test/com/thoughtworks/acceptance/ClassLoaderTest.java	(revision 2058)
+++ xstream/src/test/com/thoughtworks/acceptance/ClassLoaderTest.java	(revision )
@@ -11,12 +11,14 @@
  */
 package com.thoughtworks.acceptance;
 
+import com.thoughtworks.xstream.core.util.ConvertClassLoader;
+
 public class ClassLoaderTest extends AbstractAcceptanceTest {
 
     private String classLoaderCall;
 
     public void testAllowsClassLoaderToBeOverriden() {
-        xstream.setClassLoader(new MockClassLoader());
+        xstream.setClassLoader(new ConvertClassLoader(new MockClassLoader()));
         assertEquals("hello", xstream.fromXML("<java.BANG.String>hello</java.BANG.String>"));
         assertEquals("java.BANG.String", classLoaderCall);
     }
Index: xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaMethodConverter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaMethodConverter.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaMethodConverter.java	(revision )
@@ -16,6 +16,7 @@
 import com.thoughtworks.xstream.converters.MarshallingContext;
 import com.thoughtworks.xstream.converters.SingleValueConverter;
 import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
 
@@ -34,7 +35,7 @@
 
     private final SingleValueConverter javaClassConverter;
 
-    public JavaMethodConverter(ClassLoader classLoader) {
+    public JavaMethodConverter(XStreamClassLoader classLoader) {
         this.javaClassConverter = new JavaClassConverter(classLoader);
     }
 
Index: xstream/src/java/com/thoughtworks/xstream/mapper/AnnotationMapper.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/mapper/AnnotationMapper.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/mapper/AnnotationMapper.java	(revision )
@@ -46,6 +46,7 @@
 import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
 import com.thoughtworks.xstream.core.JVM;
 import com.thoughtworks.xstream.core.util.DependencyInjectionFactory;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
 
 
 /**
@@ -78,7 +79,7 @@
      */
     public AnnotationMapper(
         final Mapper wrapped, final ConverterRegistry converterRegistry, final ConverterLookup converterLookup,
-        final ClassLoader classLoader, final ReflectionProvider reflectionProvider,
+        final XStreamClassLoader classLoader, final ReflectionProvider reflectionProvider,
         final JVM jvm) {
         super(wrapped);
         this.converterRegistry = converterRegistry;
Index: xstream/src/java/com/thoughtworks/xstream/core/util/ClassLoaderReference.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/core/util/ClassLoaderReference.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/core/util/ClassLoaderReference.java	(revision )
@@ -19,11 +19,11 @@
  * @author J&ouml;rg Schaible
  * @since 1.1.1
  */
-public class ClassLoaderReference extends ClassLoader {
+public class ClassLoaderReference implements XStreamClassLoader {
 
-    private transient ClassLoader reference;
+    private transient XStreamClassLoader reference;
 
-    public ClassLoaderReference(ClassLoader reference) {
+    public ClassLoaderReference(XStreamClassLoader reference) {
         this.reference = reference;
     }
 
@@ -31,11 +31,15 @@
         return reference.loadClass(name);
     }
 
-    public ClassLoader getReference() {
+   public ClassLoader getClassLoader() {
+      return reference.getClassLoader();
+   }
+
+   public XStreamClassLoader getReference() {
         return reference;
     }
 
-    public void setReference(ClassLoader reference) {
+    public void setReference(XStreamClassLoader reference) {
         this.reference = reference;
     }
     
@@ -49,5 +53,5 @@
             return new ClassLoaderReference(new CompositeClassLoader());
         }
         
-    };
+    }
 }
Index: xstream/src/java/com/thoughtworks/xstream/converters/extended/DynamicProxyConverter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/converters/extended/DynamicProxyConverter.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/converters/extended/DynamicProxyConverter.java	(revision )
@@ -15,7 +15,9 @@
 import com.thoughtworks.xstream.converters.Converter;
 import com.thoughtworks.xstream.converters.MarshallingContext;
 import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.core.util.ConvertClassLoader;
 import com.thoughtworks.xstream.core.util.Fields;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
 import com.thoughtworks.xstream.mapper.DynamicProxyMapper;
@@ -36,7 +38,7 @@
  */
 public class DynamicProxyConverter implements Converter {
 
-    private ClassLoader classLoader;
+    private XStreamClassLoader classLoader;
     private Mapper mapper;
     private static final Field HANDLER;
     private static final InvocationHandler DUMMY = new InvocationHandler() {
@@ -57,10 +59,10 @@
     }
 
     public DynamicProxyConverter(Mapper mapper) {
-        this(mapper, DynamicProxyConverter.class.getClassLoader());
+        this(mapper, new ConvertClassLoader(DynamicProxyConverter.class.getClassLoader()));
     }
 
-    public DynamicProxyConverter(Mapper mapper, ClassLoader classLoader) {
+    public DynamicProxyConverter(Mapper mapper, XStreamClassLoader classLoader) {
         this.classLoader = classLoader;
         this.mapper = mapper;
     }
@@ -114,7 +116,7 @@
         }
         Class[] interfacesAsArray = new Class[interfaces.size()];
         interfaces.toArray(interfacesAsArray);
-        Object proxy = Proxy.newProxyInstance(classLoader, interfacesAsArray, DUMMY);
+        Object proxy = Proxy.newProxyInstance(classLoader.getClassLoader(), interfacesAsArray, DUMMY);
         handler = (InvocationHandler) context.convertAnother(proxy, handlerType);
         reader.moveUp();
         Fields.write(HANDLER, proxy, handler);
Index: xstream/src/java/com/thoughtworks/xstream/converters/reflection/ExternalizableConverter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/converters/reflection/ExternalizableConverter.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/converters/reflection/ExternalizableConverter.java	(revision )
@@ -18,9 +18,10 @@
 import com.thoughtworks.xstream.core.util.CustomObjectInputStream;
 import com.thoughtworks.xstream.core.util.CustomObjectOutputStream;
 import com.thoughtworks.xstream.core.util.HierarchicalStreams;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
+import com.thoughtworks.xstream.io.ExtendedHierarchicalStreamWriterHelper;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
-import com.thoughtworks.xstream.io.ExtendedHierarchicalStreamWriterHelper;
 import com.thoughtworks.xstream.mapper.Mapper;
 
 import java.io.Externalizable;
@@ -40,15 +41,15 @@
 public class ExternalizableConverter implements Converter {
 
     private Mapper mapper;
-    private final ClassLoader classLoader;
+    private final XStreamClassLoader classLoader;
 
-    public ExternalizableConverter(Mapper mapper, ClassLoader classLoader) {
+    public ExternalizableConverter(Mapper mapper, XStreamClassLoader classLoader) {
         this.mapper = mapper;
         this.classLoader = classLoader;
     }
 
     /**
-     * @deprecated As of 1.4 use {@link #ExternalizableConverter(Mapper, ClassLoader)}
+     * @deprecated As of 1.4 use {@link #ExternalizableConverter(Mapper, XStreamClassLoader)}
      */
     public ExternalizableConverter(Mapper mapper) {
         this(mapper, null);
@@ -131,7 +132,8 @@
                     throw new UnsupportedOperationException("Objects are not allowed to call ObjectInput.close() from readExternal()");
                 }
             };
-            CustomObjectInputStream objectInput = CustomObjectInputStream.getInstance(context, callback, classLoader);
+            CustomObjectInputStream objectInput = CustomObjectInputStream.getInstance(context, callback,
+                    classLoader);
             externalizable.readExternal(objectInput);
             objectInput.popCallback();
             return externalizable;
Index: xstream/src/java/com/thoughtworks/xstream/mapper/DefaultMapper.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/mapper/DefaultMapper.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/mapper/DefaultMapper.java	(revision )
@@ -13,6 +13,7 @@
 
 import com.thoughtworks.xstream.converters.Converter;
 import com.thoughtworks.xstream.converters.SingleValueConverter;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
 
 
 /**
@@ -31,9 +32,9 @@
         XSTREAM_PACKAGE_ROOT = idx > 0 ? packageName.substring(0, idx+9) : null;
     }
     
-    private final ClassLoader classLoader;
+    private final XStreamClassLoader classLoader;
 
-    public DefaultMapper(ClassLoader classLoader) {
+    public DefaultMapper(XStreamClassLoader classLoader) {
         this.classLoader = classLoader;
     }
 
@@ -48,7 +49,7 @@
             } else if (elementName.charAt(0) != '[') {
                 return classLoader.loadClass(elementName);
             } else if (elementName.endsWith(";")) {
-                return Class.forName(elementName.toString(), false, classLoader);
+                return Class.forName(elementName.toString(), false, classLoader.getClassLoader());
             } else { 
                 return Class.forName(elementName.toString());
             }
Index: xstream/src/test/com/thoughtworks/acceptance/CustomMapperTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/test/com/thoughtworks/acceptance/CustomMapperTest.java	(revision 2058)
+++ xstream/src/test/com/thoughtworks/acceptance/CustomMapperTest.java	(revision )
@@ -20,6 +20,7 @@
 import com.thoughtworks.acceptance.someobjects.WithList;
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider;
+import com.thoughtworks.xstream.core.util.ConvertClassLoader;
 import com.thoughtworks.xstream.io.xml.DomDriver;
 import com.thoughtworks.xstream.mapper.CannotResolveClassException;
 import com.thoughtworks.xstream.mapper.DefaultMapper;
@@ -126,7 +127,7 @@
     }
     
     public void testOwnMapperChainCanBeRegistered() {
-        Mapper mapper = new DefaultMapper(getClass().getClassLoader());
+        Mapper mapper = new DefaultMapper(new ConvertClassLoader(getClass().getClassLoader()));
         xstream = new XStream(new PureJavaReflectionProvider(), new DomDriver(), getClass().getClassLoader(), mapper);
         
         String expected = "" +
Index: xstream/src/java/com/thoughtworks/xstream/core/util/ConvertClassLoader.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/core/util/ConvertClassLoader.java	(revision )
+++ xstream/src/java/com/thoughtworks/xstream/core/util/ConvertClassLoader.java	(revision )
@@ -0,0 +1,23 @@
+package com.thoughtworks.xstream.core.util;
+
+/**
+ * Wrapper around {@link ClassLoader} which allows it to be used as a {@link XStreamClassLoader}.
+ *
+ * @author Peter Abeles
+ */
+public class ConvertClassLoader implements XStreamClassLoader {
+
+   ClassLoader loader;
+
+   public ConvertClassLoader(ClassLoader loader) {
+      this.loader = loader;
+   }
+
+   public Class<?> loadClass(String name) throws ClassNotFoundException {
+      return loader.loadClass(name);
+   }
+
+   public ClassLoader getClassLoader() {
+      return loader;
+   }
+}
Index: xstream/src/java/com/thoughtworks/xstream/core/util/CompositeClassLoader.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/core/util/CompositeClassLoader.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/core/util/CompositeClassLoader.java	(revision )
@@ -48,7 +48,7 @@
  * @author J&ouml;rg Schaible
  * @since 1.0.3
  */
-public class CompositeClassLoader extends ClassLoader {
+public class CompositeClassLoader implements XStreamClassLoader {
 
     private final ReferenceQueue queue = new ReferenceQueue();
     private final List classLoaders = new ArrayList();
@@ -130,9 +130,16 @@
         } else {
             throw new ClassNotFoundException(name);
         }
+    }
+
+   public ClassLoader getClassLoader() {
+      if( classLoaders.size() > 0 )
+         return (ClassLoader)((WeakReference)classLoaders.get(0)).get();
+      else
+         throw new RuntimeException("No internal ClassLoaders!");
-    }
+   }
 
-    private void cleanup() {
+   private void cleanup() {
         WeakReference ref;
         while ((ref = (WeakReference)queue.poll()) != null)
         {
Index: xstream/src/java/com/thoughtworks/xstream/core/util/CustomObjectInputStream.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/core/util/CustomObjectInputStream.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/core/util/CustomObjectInputStream.java	(revision )
@@ -11,22 +11,16 @@
  */
 package com.thoughtworks.xstream.core.util;
 
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.NotActiveException;
-import java.io.ObjectInputStream;
-import java.io.ObjectInputValidation;
-import java.io.ObjectStreamClass;
-import java.io.StreamCorruptedException;
-import java.util.Map;
-
 import com.thoughtworks.xstream.converters.ConversionException;
 import com.thoughtworks.xstream.converters.DataHolder;
 
+import java.io.*;
+import java.util.Map;
+
 public class CustomObjectInputStream extends ObjectInputStream {
 
     private FastStack callbacks = new FastStack(1);
-    private final ClassLoader classLoader;
+    private final XStreamClassLoader classLoader;
 
     private static final String DATA_HOLDER_KEY = CustomObjectInputStream.class.getName();
 
@@ -39,13 +33,13 @@
     }
 
     /**
-     * @deprecated As of 1.4 use {@link #getInstance(DataHolder, StreamCallback, ClassLoader)}
+     * @deprecated As of 1.4 use {@link #getInstance(DataHolder, StreamCallback, XStreamClassLoader)}
      */
     public static CustomObjectInputStream getInstance(DataHolder whereFrom, CustomObjectInputStream.StreamCallback callback) {
         return getInstance(whereFrom, callback, null);
     }
 
-    public static synchronized CustomObjectInputStream getInstance(DataHolder whereFrom, CustomObjectInputStream.StreamCallback callback, ClassLoader classLoaderReference) {
+    public static synchronized CustomObjectInputStream getInstance(DataHolder whereFrom, CustomObjectInputStream.StreamCallback callback, XStreamClassLoader classLoaderReference) {
         try {
             CustomObjectInputStream result = (CustomObjectInputStream) whereFrom.get(DATA_HOLDER_KEY);
             if (result == null) {
@@ -64,9 +58,9 @@
      * Warning, this object is expensive to create (due to functionality inherited from superclass).
      * Use the static fetch() method instead, wherever possible.
      *
-     * @see #getInstance(DataHolder, StreamCallback, ClassLoader)
+     * @see #getInstance(DataHolder, StreamCallback, XStreamClassLoader)
      */
-    public CustomObjectInputStream(StreamCallback callback, ClassLoader classLoader) throws IOException, SecurityException {
+    public CustomObjectInputStream(StreamCallback callback, XStreamClassLoader classLoader) throws IOException, SecurityException {
         super();
         this.callbacks.push(callback);
         this.classLoader = classLoader;
@@ -92,7 +86,7 @@
         if (classLoader == null) {
             return super.resolveClass(desc);
         } else {
-            return Class.forName(desc.getName(), false, classLoader);
+            return classLoader.loadClass(desc.getName());
         }
     }
 
Index: xstream/src/java/com/thoughtworks/xstream/converters/reflection/CGLIBEnhancedConverter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/converters/reflection/CGLIBEnhancedConverter.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/converters/reflection/CGLIBEnhancedConverter.java	(revision )
@@ -13,6 +13,7 @@
 import com.thoughtworks.xstream.converters.ConversionException;
 import com.thoughtworks.xstream.converters.MarshallingContext;
 import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
 import com.thoughtworks.xstream.io.ExtendedHierarchicalStreamWriterHelper;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
@@ -60,13 +61,13 @@
     private static String CALLBACK_MARKER = "CGLIB$CALLBACK_";
     private transient Map fieldCache;
 
-    public CGLIBEnhancedConverter(Mapper mapper, ReflectionProvider reflectionProvider, ClassLoader classLoader) {
+    public CGLIBEnhancedConverter(Mapper mapper, ReflectionProvider reflectionProvider, XStreamClassLoader classLoader) {
         super(mapper, new CGLIBFilteringReflectionProvider(reflectionProvider), classLoader);
         this.fieldCache = new HashMap();
     }
 
     /**
-     * @deprecated As of 1.4 use {@link #CGLIBEnhancedConverter(Mapper, ReflectionProvider, ClassLoader)}
+     * @deprecated As of 1.4 use {@link #CGLIBEnhancedConverter(Mapper, ReflectionProvider, XStreamClassLoader)}
      */
     public CGLIBEnhancedConverter(Mapper mapper, ReflectionProvider reflectionProvider) {
         this(mapper, new CGLIBFilteringReflectionProvider(reflectionProvider), null);
Index: xstream/src/java/com/thoughtworks/xstream/converters/reflection/SerializableConverter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/converters/reflection/SerializableConverter.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/converters/reflection/SerializableConverter.java	(revision )
@@ -11,31 +11,22 @@
  */
 package com.thoughtworks.xstream.converters.reflection;
 
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputValidation;
-import java.io.ObjectStreamClass;
-import java.io.ObjectStreamField;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
 import com.thoughtworks.xstream.converters.ConversionException;
 import com.thoughtworks.xstream.converters.MarshallingContext;
 import com.thoughtworks.xstream.converters.UnmarshallingContext;
 import com.thoughtworks.xstream.core.util.CustomObjectInputStream;
 import com.thoughtworks.xstream.core.util.CustomObjectOutputStream;
 import com.thoughtworks.xstream.core.util.HierarchicalStreams;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
+import com.thoughtworks.xstream.io.ExtendedHierarchicalStreamWriterHelper;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
-import com.thoughtworks.xstream.io.ExtendedHierarchicalStreamWriterHelper;
 import com.thoughtworks.xstream.mapper.Mapper;
 
+import java.io.*;
+import java.lang.reflect.Field;
+import java.util.*;
+
 /**
  * Emulates the mechanism used by standard Java Serialization for classes that implement java.io.Serializable AND
  * implement or inherit a custom readObject()/writeObject() method.
@@ -68,15 +59,15 @@
     private static final String ELEMENT_FIELDS = "fields";
     private static final String ELEMENT_FIELD = "field";
     private static final String ATTRIBUTE_NAME = "name";
-    private final ClassLoader classLoader;
+    private final XStreamClassLoader classLoader;
 
-    public SerializableConverter(Mapper mapper, ReflectionProvider reflectionProvider, ClassLoader classLoader) {
+    public SerializableConverter(Mapper mapper, ReflectionProvider reflectionProvider, XStreamClassLoader classLoader) {
         super(mapper, new UnserializableParentsReflectionProvider(reflectionProvider));
         this.classLoader = classLoader;
     }
 
     /**
-     * @deprecated As of 1.4 use {@link #SerializableConverter(Mapper, ReflectionProvider, ClassLoader)}
+     * @deprecated As of 1.4 use {@link #SerializableConverter(Mapper, ReflectionProvider, XStreamClassLoader)}
      */
     public SerializableConverter(Mapper mapper, ReflectionProvider reflectionProvider) {
         this(mapper, new UnserializableParentsReflectionProvider(reflectionProvider), null);
Index: xstream/src/test/com/thoughtworks/xstream/converters/extended/ToAttributedValueConverterTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/test/com/thoughtworks/xstream/converters/extended/ToAttributedValueConverterTest.java	(revision 2058)
+++ xstream/src/test/com/thoughtworks/xstream/converters/extended/ToAttributedValueConverterTest.java	(revision )
@@ -11,9 +11,6 @@
 
 package com.thoughtworks.xstream.converters.extended;
 
-import java.io.StringReader;
-import java.io.StringWriter;
-
 import com.thoughtworks.acceptance.objects.OpenSourceSoftware;
 import com.thoughtworks.acceptance.objects.Software;
 import com.thoughtworks.acceptance.someobjects.X;
@@ -28,19 +25,18 @@
 import com.thoughtworks.xstream.core.DefaultConverterLookup;
 import com.thoughtworks.xstream.core.TreeMarshaller;
 import com.thoughtworks.xstream.core.TreeUnmarshaller;
+import com.thoughtworks.xstream.core.util.ConvertClassLoader;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.xml.CompactWriter;
 import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
 import com.thoughtworks.xstream.io.xml.XppReader;
-import com.thoughtworks.xstream.mapper.ArrayMapper;
-import com.thoughtworks.xstream.mapper.ClassAliasingMapper;
-import com.thoughtworks.xstream.mapper.DefaultImplementationsMapper;
-import com.thoughtworks.xstream.mapper.DefaultMapper;
-import com.thoughtworks.xstream.mapper.Mapper;
-
+import com.thoughtworks.xstream.mapper.*;
 import junit.framework.TestCase;
 
+import java.io.StringReader;
+import java.io.StringWriter;
 
+
 /**
  * Tests {@link ToAttributedValueConverter}.
  * 
@@ -55,7 +51,7 @@
         super.setUp();
 
         final ClassAliasingMapper classAliasingMapper = new ClassAliasingMapper(
-            new DefaultMapper(getClass().getClassLoader()));
+            new DefaultMapper(new ConvertClassLoader(getClass().getClassLoader())));
         classAliasingMapper.addClassAlias("x", X.class);
         classAliasingMapper.addClassAlias("software", Software.class);
         classAliasingMapper.addClassAlias("open-source", OpenSourceSoftware.class);
Index: xstream-benchmark/src/test/com/thoughtworks/xstream/tools/benchmark/cache/products/XStreamCache.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream-benchmark/src/test/com/thoughtworks/xstream/tools/benchmark/cache/products/XStreamCache.java	(revision 2058)
+++ xstream-benchmark/src/test/com/thoughtworks/xstream/tools/benchmark/cache/products/XStreamCache.java	(revision )
@@ -15,10 +15,7 @@
 import com.thoughtworks.xstream.converters.ConverterLookup;
 import com.thoughtworks.xstream.core.DefaultConverterLookup;
 import com.thoughtworks.xstream.core.JVM;
-import com.thoughtworks.xstream.core.util.ClassLoaderReference;
-import com.thoughtworks.xstream.core.util.CompositeClassLoader;
-import com.thoughtworks.xstream.core.util.DependencyInjectionFactory;
-import com.thoughtworks.xstream.core.util.TypedNull;
+import com.thoughtworks.xstream.core.util.*;
 import com.thoughtworks.xstream.io.xml.XppDriver;
 import com.thoughtworks.xstream.mapper.ArrayMapper;
 import com.thoughtworks.xstream.mapper.AttributeAliasingMapper;
@@ -104,7 +101,7 @@
         return mappers;
     }
 
-    private Mapper buildMapper(List mappers, JVM jvm, ClassLoader classLoader,
+    private Mapper buildMapper(List mappers, JVM jvm, XStreamClassLoader classLoader,
         ConverterLookup converterLookup) {
         final Object[] arguments = new Object[]{
             new TypedNull(Mapper.class), converterLookup, classLoader,
Index: xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaFieldConverter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaFieldConverter.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaFieldConverter.java	(revision )
@@ -15,6 +15,7 @@
 import com.thoughtworks.xstream.converters.MarshallingContext;
 import com.thoughtworks.xstream.converters.SingleValueConverter;
 import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
 
@@ -29,7 +30,7 @@
 
     private final SingleValueConverter javaClassConverter;
 
-    public JavaFieldConverter(ClassLoader classLoader) {
+    public JavaFieldConverter(XStreamClassLoader classLoader) {
         this.javaClassConverter = new JavaClassConverter(classLoader);
     }
 
Index: xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaClassConverter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaClassConverter.java	(revision 2058)
+++ xstream/src/java/com/thoughtworks/xstream/converters/extended/JavaClassConverter.java	(revision )
@@ -14,6 +14,7 @@
 import com.thoughtworks.xstream.converters.ConversionException;
 import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
 import com.thoughtworks.xstream.core.util.Primitives;
+import com.thoughtworks.xstream.core.util.XStreamClassLoader;
 
 /**
  * Converts a java.lang.Class to XML.
@@ -25,9 +26,9 @@
  */
 public class JavaClassConverter extends AbstractSingleValueConverter {
 
-    private ClassLoader classLoader;
+    private XStreamClassLoader classLoader;
 
-    public JavaClassConverter(ClassLoader classLoader) {
+    public JavaClassConverter(XStreamClassLoader classLoader) {
         this.classLoader = classLoader;
     }
 
