diff --git a/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java b/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java
index d49c5d8..af4004d 100644
--- a/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java
+++ b/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java
@@ -19,19 +19,14 @@
 package org.apache.commons.weaver;
 
 import java.io.File;
-import java.net.URLClassLoader;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.ServiceLoader;
-import java.util.Set;
 import java.util.logging.Logger;
 
 import org.apache.commons.weaver.lifecycle.WeaveLifecycle; //NOPMD used in javadoc
 import org.apache.commons.weaver.model.WeaveEnvironment;
 import org.apache.commons.weaver.spi.Cleaner;
-import org.apache.commons.weaver.utils.URLArray;
-import org.apache.xbean.finder.archive.FileArchive;
 
 /**
  * Implements {@link WeaveLifecycle#CLEAN}.
@@ -69,11 +64,6 @@
         if (!target.exists()) {
             log.warning("Target directory " + target + " does not exist; nothing to do!");
         }
-        final Set<String> finderClasspath = new LinkedHashSet<String>();
-        finderClasspath.add(target.getAbsolutePath());
-        finderClasspath.addAll(classpath);
-        final ClassLoader classLoader = new URLClassLoader(URLArray.fromPaths(finderClasspath));
-        final Finder finder = new Finder(new FileArchive(classLoader, target));
         for (final Cleaner cleaner : providers) {
             final WeaveEnvironment env = new LocalWeaveEnvironment(target, classLoader, configuration,
                 Logger.getLogger(cleaner.getClass().getName()));
diff --git a/processor/src/main/java/org/apache/commons/weaver/ProcessorBase.java b/processor/src/main/java/org/apache/commons/weaver/ProcessorBase.java
index 4aeea8f..1248821 100755
--- a/processor/src/main/java/org/apache/commons/weaver/ProcessorBase.java
+++ b/processor/src/main/java/org/apache/commons/weaver/ProcessorBase.java
@@ -19,17 +19,22 @@
 package org.apache.commons.weaver;
 
 import java.io.File;
+import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.ServiceLoader;
+import java.util.Set;
 import java.util.logging.Logger;
 
 import org.apache.commons.lang3.Validate;
 import org.apache.commons.weaver.lifecycle.WeaveLifecycle;
 import org.apache.commons.weaver.spi.WeaveLifecycleProvider;
 import org.apache.commons.weaver.utils.Providers;
+import org.apache.commons.weaver.utils.URLArray;
+import org.apache.xbean.finder.archive.FileArchive;
 
 /**
  * Base implementor of a {@link WeaveLifecycle} stage.
@@ -86,6 +91,16 @@
     protected final Iterable<P> providers;
 
     /**
+     * {@link ClassLoader} representing {@link #classpath}.
+     */
+    protected final ClassLoader classLoader;
+
+    /**
+     * {@link Finder} instance using for weaving.
+     */
+    protected final Finder finder;
+
+    /**
      * Create a new {@link ProcessorBase} instance.
      *
      * @param classpath not {@code null}
@@ -100,6 +115,14 @@
         Validate.isTrue(!target.exists() || target.isDirectory(), "%s is not a directory", target);
         this.configuration = Validate.notNull(configuration, "configuration");
         this.providers = Providers.sort(providers);
+        this.classLoader = createClassLoader();
+        this.finder = new Finder(new FileArchive(classLoader, target));
     }
 
+    private ClassLoader createClassLoader() {
+        final Set<String> finderClasspath = new LinkedHashSet<String>();
+        finderClasspath.add(target.getAbsolutePath());
+        finderClasspath.addAll(classpath);
+        return new URLClassLoader(URLArray.fromPaths(finderClasspath));
+    }
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java b/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
index b118def..d77dd93 100644
--- a/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
+++ b/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
@@ -19,19 +19,14 @@
 package org.apache.commons.weaver;
 
 import java.io.File;
-import java.net.URLClassLoader;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.ServiceLoader;
-import java.util.Set;
 import java.util.logging.Logger;
 
 import org.apache.commons.weaver.lifecycle.WeaveLifecycle; //NOPMD used in javadoc
 import org.apache.commons.weaver.model.WeaveEnvironment;
 import org.apache.commons.weaver.spi.Weaver;
-import org.apache.commons.weaver.utils.URLArray;
-import org.apache.xbean.finder.archive.FileArchive;
 
 /**
  * Implements {@link WeaveLifecycle#WEAVE}.
@@ -69,11 +64,6 @@
         if (!target.exists()) {
             log.warning("Target directory " + target + " does not exist; nothing to do!");
         }
-        final Set<String> finderClasspath = new LinkedHashSet<String>();
-        finderClasspath.add(target.getAbsolutePath());
-        finderClasspath.addAll(classpath);
-        final ClassLoader classLoader = new URLClassLoader(URLArray.fromPaths(finderClasspath));
-        final Finder finder = new Finder(new FileArchive(classLoader, target));
         for (final Weaver weaver : providers) {
             final WeaveEnvironment env = new LocalWeaveEnvironment(target, classLoader, configuration,
                 Logger.getLogger(weaver.getClass().getName()));
