diff --git a/openjpa-examples/image-gallery/pom.xml b/openjpa-examples/image-gallery/pom.xml
index 2c2107a..4b3f159 100644
--- a/openjpa-examples/image-gallery/pom.xml
+++ b/openjpa-examples/image-gallery/pom.xml
@@ -60,6 +60,11 @@
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.sun.xml.bind</groupId>
+      <artifactId>jaxb-impl</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/openjpa-examples/openbooks/pom.xml b/openjpa-examples/openbooks/pom.xml
index 01a8836..d4ef913 100644
--- a/openjpa-examples/openbooks/pom.xml
+++ b/openjpa-examples/openbooks/pom.xml
@@ -75,6 +75,11 @@
             <artifactId>mysql-connector-java</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
index ecf0f8c..fe9baad 100644
--- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
+++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
@@ -25,11 +25,6 @@
 import static org.apache.openjpa.conf.SchemaGenerationSource.METADATA_THEN_SCRIPT;
 import static org.apache.openjpa.conf.SchemaGenerationSource.SCRIPT;
 import static org.apache.openjpa.conf.SchemaGenerationSource.SCRIPT_THEN_METADATA;
-import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_ADD;
-import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_DROP;
-import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_SCRIPT_CREATE;
-import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_SCRIPT_DROP;
-import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_SCRIPT_LOAD;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -40,6 +35,7 @@
 import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
 import org.apache.openjpa.jdbc.meta.MappingRepository;
 import org.apache.openjpa.jdbc.meta.MappingTool;
+import org.apache.openjpa.jdbc.schema.SchemaTool;
 import org.apache.openjpa.kernel.AbstractBrokerFactory;
 import org.apache.openjpa.kernel.Bootstrap;
 import org.apache.openjpa.kernel.BrokerImpl;
@@ -197,7 +193,7 @@
 
         String loadFile = conf.getLoadScriptSource();
         if (loadFile != null) {
-            actions += "," + ACTION_SCRIPT_LOAD;
+            actions += "," + MappingTool.ACTION_SCRIPT_LOAD;
         }
 
         if (actions.length() > 0) {
@@ -207,7 +203,7 @@
 
     private String generateSchemaCreation(JDBCConfiguration conf) {
         if (conf.getCreateScriptTarget() != null) {
-            return MappingTool.ACTION_ADD;
+            return SchemaTool.ACTION_BUILD;
         } else {
             int createSource = conf.getCreateSourceConstant();
             if (createSource == SchemaGenerationSource.NONE && conf.getCreateScriptSource() != null) {
@@ -215,13 +211,13 @@
             } else {
                 createSource = METADATA;
             }
-            return mapGenerationStrategyActions(createSource, ACTION_ADD, ACTION_SCRIPT_CREATE);
+            return mapGenerationStrategyActions(createSource, SchemaTool.ACTION_ADD, MappingTool.ACTION_SCRIPT_CREATE);
         }
     }
 
     private String generateSchemaDrop(JDBCConfiguration conf) {
         if (conf.getDropScriptTarget() != null) {
-            return MappingTool.ACTION_DROP;
+            return SchemaTool.ACTION_DROP;
         } else {
             int dropSource = conf.getDropSourceConstant();
             if (dropSource == SchemaGenerationSource.NONE && conf.getDropScriptSource() != null) {
@@ -229,16 +225,16 @@
             } else {
                 dropSource = METADATA;
             }
-            return mapGenerationStrategyActions(dropSource, ACTION_DROP, ACTION_SCRIPT_DROP);
+            return mapGenerationStrategyActions(dropSource, SchemaTool.ACTION_DROP, MappingTool.ACTION_SCRIPT_DROP);
         }
     }
 
     private String generateSchemaDropCreate(JDBCConfiguration conf) {
         if (conf.getCreateScriptTarget() != null && conf.getDropScriptTarget() != null) {
-            return MappingTool.ACTION_ADD + "," + MappingTool.ACTION_DROP;
+            return SchemaTool.ACTION_BUILD + "," + SchemaTool.ACTION_DROP;
         } else {
-            return mapGenerationStrategyActions(conf.getDropSourceConstant(), ACTION_DROP, ACTION_SCRIPT_DROP) + "," +
-                   mapGenerationStrategyActions(conf.getCreateSourceConstant(), ACTION_ADD, ACTION_SCRIPT_CREATE);
+            return mapGenerationStrategyActions(conf.getDropSourceConstant(), SchemaTool.ACTION_DROP, MappingTool.ACTION_SCRIPT_DROP) + "," +
+                   mapGenerationStrategyActions(conf.getCreateSourceConstant(), SchemaTool.ACTION_ADD, MappingTool.ACTION_SCRIPT_CREATE);
         }
     }
 
diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
index 246cc89..4d7561b 100644
--- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
+++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
@@ -534,14 +534,14 @@
                             tool = newSchemaTool(schemaAction);
                         }
 
-                        if (schemaAction.equals(ACTION_ADD) && _conf.getCreateScriptTarget() != null) {
+                        if (schemaAction.equals(SchemaTool.ACTION_BUILD) && _conf.getCreateScriptTarget() != null) {
                             tool.setWriter(new PrintWriter(_conf.getCreateScriptTarget()));
                             tool.setIndexes(true);
                             tool.setForeignKeys(true);
                             tool.setSequences(true);
                         }
 
-                        if (schemaAction.equals(ACTION_DROP) && _conf.getDropScriptTarget() != null) {
+                        if (schemaAction.equals(SchemaTool.ACTION_DROP) && _conf.getDropScriptTarget() != null) {
                             tool.setWriter(new PrintWriter(_conf.getDropScriptTarget()));
                         }
 
@@ -1134,12 +1134,7 @@
             return false;
         }
 
-        MappingTool tool;
-        try {
-            tool = new MappingTool(conf, flags.action, flags.meta, loader);
-        } catch (IllegalArgumentException iae) {
-            return false;
-        }
+        MappingTool tool = new MappingTool(conf, flags.action, flags.meta, loader);
 
         // setup the tool
         tool.setIgnoreErrors(flags.ignoreErrors);
diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
index 6abe8cd..d42c5ea 100644
--- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
+++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
@@ -575,9 +575,7 @@
                 seqs = value.getSequences();
                 for (Sequence seq : seqs) {
                     if (considerDatabaseState && db.findSequence(value, seq.getQualifiedPath()) != null) {
-                        if (_writer == null) {
-                            continue;
-                        }
+                        continue;
                     }
 
                     if (createSequence(seq)) {
@@ -656,9 +654,7 @@
             tabs = schema1.getTables();
             for (Table tab : tabs) {
                 if (considerDatabaseState && db.findTable(schema1, tab.getQualifiedPath()) != null) {
-                    if (_writer == null) {
-                        continue;
-                    }
+                    continue;
                 }
 
                 if (createTable(tab)) {
@@ -712,9 +708,7 @@
             for (Table tab : tabs) {
                 // create unique constraints only on new tables
                 if (!newTables.contains(tab)) {
-                    if (_writer == null) {
-                        continue;
-                    }
+                    continue;
                 }
 
                 uniques = tab.getUniques();
@@ -740,9 +734,7 @@
                 // create foreign keys on new tables even if fks
                 // have been turned off
                 if (!_fks && !newTables.contains(tab)) {
-                    if (_writer == null) {
-                        continue;
-                    }
+                    continue;
                 }
 
                 fks = tab.getForeignKeys();
