diff --git a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XSDToJavaRunner.java b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XSDToJavaRunner.java
index 69fab41..f0c8838 100644
--- a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XSDToJavaRunner.java
+++ b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XSDToJavaRunner.java
@@ -104,6 +104,17 @@
                 urls.add(file.toURI().toURL());
             }
         }
+        for (int x = 0; x < args.length; x++) {
+            if ("-classpath".equals(args[x])) {
+                File file = getFile(args[x + 1], listener);
+                if (file != null && file.exists()) {
+                    cpList.add(file.getAbsolutePath());
+                    urls.add(file.getAbsoluteFile().toURI().toURL());
+                }
+                x++;
+            }
+        }
+
         final ClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]), 
                                                       this.getClass().getClassLoader());
         
@@ -147,6 +158,9 @@
                 catResolver.getCatalog().parseCatalog(catalogFile.getPath());
             }
         };
+        for (URL url : urls) {
+            opt.classpaths.add(url);
+        }
         if (checkXmlElementRef()) {
             opt.target = SpecVersion.V2_1;
         }
@@ -345,17 +359,6 @@
         XJCErrorListener listener = new XJCErrorListener(context);
 
         List<String> cplist = new ArrayList<String>();
-        for (int x = 0; x < args.length; x++) {
-            if ("-classpath".equals(args[x])) {
-                cplist.add(args[x + 1]);
-                File file = getFile(args[x + 1], listener);
-                if (file != null && file.exists()) {
-                    args[x + 1] = file.getAbsolutePath();
-                }
-                x++;
-            }
-        }
-
         
         File outputFile = getFile(args[args.length - 1], listener);
         if (outputFile == null) {
