diff --git a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
index 9e9b0dd..fbe12e3 100644
--- a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
+++ b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/AbstractXSDToJavaMojo.java
@@ -214,12 +214,14 @@
                             //ignore
                         }
                     }
-                    if (xsdOptions[x].getBindingFile() != null) { 
-                        URI bindingURI = mapLocation(xsdOptions[x].getBindingFile());
-                        if ("file".equals(bindingURI.getScheme())) {
-                            long bts = new File(bindingURI).lastModified();
-                            if (bts > srctimestamp) {
-                                srctimestamp = bts;
+                    if (xsdOptions[x].getBindingFiles() != null) {
+                        for (String bf : xsdOptions[x].getBindingFiles()) {
+                            URI bindingURI = mapLocation(bf);
+                            if ("file".equals(bindingURI.getScheme())) {
+                                long bts = new File(bindingURI).lastModified();
+                                if (bts > srctimestamp) {
+                                    srctimestamp = bts;
+                                }
                             }
                         }
                     }
@@ -251,7 +253,11 @@
                                 }
                             }
                             removeMessages(xsdFile);
-                            removeMessages(xsdOptions[x].getBindingFile());
+                            if (xsdOptions[x].getBindingFiles() != null) {
+                                for (String bf : xsdOptions[x].getBindingFiles()) {
+                                    removeMessages(bf);
+                                }
+                            }
                             int i = run(xsdOptions[x], xsdFile, outputDir);
                             if (i == 0) {
                                 doneFile.delete();
@@ -410,9 +416,11 @@
             list.add("-p");
             list.add(option.getPackagename());
         }
-        if (option.getBindingFile() != null) {
-            list.add("-b");
-            list.add(mapLocation(option.getBindingFile()).toString());
+        if (option.getBindingFiles() != null) {
+            for (String bf : option.getBindingFiles()) {
+                list.add("-b");
+                list.add(mapLocation(bf).toString());
+            }
         }
         if (option.getCatalog() != null) {
             list.add("-catalog");
diff --git a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XsdOption.java b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XsdOption.java
index 4329b39..8fc2a13 100644
--- a/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XsdOption.java
+++ b/cxf-xjc-plugin/src/main/java/org/apache/cxf/maven_plugin/XsdOption.java
@@ -20,17 +20,18 @@
 package org.apache.cxf.maven_plugin;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
 public class XsdOption {
     String xsd;
     String xsdDir;
     String packagename;
-    String bindingFile;
     File dependencies[];
     File redundantDirs[];
     boolean extension;    
     List<String> extensionArgs;
+    List<String> bindingFiles;
     String catalog;
     
     public String getPackagename() {
@@ -52,10 +53,25 @@
         this.xsdDir = x;
     }
     public String getBindingFile() {
-        return bindingFile;
+        if (bindingFiles != null && !bindingFiles.isEmpty()) {
+            return bindingFiles.get(0);
+        }
+        return null;
     }
     public void setBindingFile(String bf) {
-        this.bindingFile = bf;
+        if (bindingFiles == null) {
+            bindingFiles = new ArrayList<>();
+            bindingFiles.add(bf);
+        } else {
+            bindingFiles.clear();
+            bindingFiles.add(bf);
+        }
+    }
+    public List<String> getBindingFiles() {
+        return bindingFiles;
+    }
+    public void setBindingFiles(List<String> bindingFiles) {
+        this.bindingFiles = bindingFiles;
     }    
     public void setDependencies(File files[]) {
         dependencies = files;
