diff --git a/src/main/java/org/nrg/xnat/configuration/OrmConfig.java b/src/main/java/org/nrg/xnat/configuration/OrmConfig.java
index fd4aa23e9eb2c13b47bf0aa0be2c7f24294165ff..519d95074b11158c87eafa4d996ffe50849107bc 100644
--- a/src/main/java/org/nrg/xnat/configuration/OrmConfig.java
+++ b/src/main/java/org/nrg/xnat/configuration/OrmConfig.java
@@ -18,6 +18,7 @@ import org.springframework.orm.hibernate4.HibernateTransactionManager;
 import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.transaction.support.TransactionTemplate;
 
 import javax.sql.DataSource;
 import java.io.IOException;
@@ -26,9 +27,6 @@ import java.util.Properties;
 @Configuration
 @EnableTransactionManagement(proxyTargetClass = true)
 public class OrmConfig {
-
-    public static final String XNAT_ENTITIES_PACKAGES = "META-INF/xnat/entities/**/*-entity-packages.txt";
-
     @Bean
     public ImprovedNamingStrategy namingStrategy() {
         return new PrefixedTableNamingStrategy("xhbm");
@@ -80,6 +78,12 @@ public class OrmConfig {
         return new HibernateTransactionManager(sessionFactory(environment, dataSource).getObject());
     }
 
+    @Bean
+    public TransactionTemplate transactionTemplate(final PlatformTransactionManager transactionManager) {
+        return new TransactionTemplate(transactionManager);
+    }
+
+    private static final String     XNAT_ENTITIES_PACKAGES       = "META-INF/xnat/entities/**/*-entity-packages.txt";
     private static final Properties DEFAULT_HIBERNATE_PROPERTIES = new Properties() {{
         setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL9Dialect");
         setProperty("hibernate.hbm2ddl.auto", "update");
diff --git a/src/main/java/org/nrg/xnat/initialization/DatabaseConfig.java b/src/main/java/org/nrg/xnat/initialization/DatabaseConfig.java
index d4f2e81074eb65019a470b0ea81a4f75c669d0d6..4b717f6b528f5865e35ac65c0f831b7fe071bc6e 100644
--- a/src/main/java/org/nrg/xnat/initialization/DatabaseConfig.java
+++ b/src/main/java/org/nrg/xnat/initialization/DatabaseConfig.java
@@ -22,16 +22,6 @@ import java.util.Properties;
  */
 @Configuration
 public class DatabaseConfig {
-
-    public static final String DEFAULT_DATASOURCE_URL          = "jdbc:postgresql://localhost/xnat";
-    public static final String DEFAULT_DATASOURCE_USERNAME     = "xnat";
-    public static final String DEFAULT_DATASOURCE_PASSWORD     = "xnat";
-    public static final String DEFAULT_DATASOURCE_CLASS        = BasicDataSource.class.getName();
-    public static final String DEFAULT_DATASOURCE_DRIVER       = Driver.class.getName();
-    public static final String DEFAULT_DATASOURCE_INITIAL_SIZE = "20";
-    public static final String DEFAULT_DATASOURCE_MAX_TOTAL    = "40";
-    public static final String DEFAULT_DATASOURCE_MAX_IDLE     = "10";
-
     @Bean
     public DataSource dataSource(final Environment environment) throws NrgServiceException {
         final Properties properties = Beans.getNamespacedProperties(environment, "datasource", true);
@@ -117,4 +107,13 @@ public class DatabaseConfig {
     }
 
     private static final Logger _log = LoggerFactory.getLogger(DatabaseConfig.class);
+
+    private static final String DEFAULT_DATASOURCE_URL          = "jdbc:postgresql://localhost/xnat";
+    private static final String DEFAULT_DATASOURCE_USERNAME     = "xnat";
+    private static final String DEFAULT_DATASOURCE_PASSWORD     = "xnat";
+    private static final String DEFAULT_DATASOURCE_CLASS        = BasicDataSource.class.getName();
+    private static final String DEFAULT_DATASOURCE_DRIVER       = Driver.class.getName();
+    private static final String DEFAULT_DATASOURCE_INITIAL_SIZE = "20";
+    private static final String DEFAULT_DATASOURCE_MAX_TOTAL    = "40";
+    private static final String DEFAULT_DATASOURCE_MAX_IDLE     = "10";
 }
diff --git a/src/main/java/org/nrg/xnat/initialization/tasks/MigrateDatabaseTables.java b/src/main/java/org/nrg/xnat/initialization/tasks/MigrateDatabaseTables.java
index eb8d400c58293aea11f9e60d79259e3d3a27d71d..c950f6ce928b1588b8b82ce38d89241478dbe3e0 100644
--- a/src/main/java/org/nrg/xnat/initialization/tasks/MigrateDatabaseTables.java
+++ b/src/main/java/org/nrg/xnat/initialization/tasks/MigrateDatabaseTables.java
@@ -8,23 +8,21 @@
  */
 package org.nrg.xnat.initialization.tasks;
 
+import com.google.common.base.Joiner;
+import org.nrg.framework.orm.DatabaseHelper;
 import org.nrg.framework.utilities.BasicXnatResourceLocator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.PropertiesLoaderUtils;
-import org.springframework.dao.DataAccessException;
-import org.springframework.jdbc.BadSqlGrammarException;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.ResultSetExtractor;
-import org.springframework.security.authentication.encoding.ShaPasswordEncoder;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.support.TransactionTemplate;
 
 import java.io.IOException;
-import java.sql.Connection;
-import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.SQLWarning;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -32,9 +30,9 @@ import java.util.Properties;
 @Component
 public class MigrateDatabaseTables extends AbstractInitializingTask {
     @Autowired
-    public MigrateDatabaseTables(final JdbcTemplate template) {
+    public MigrateDatabaseTables(final JdbcTemplate template, final TransactionTemplate transactionTemplate) {
         super();
-        _template = template;
+        _db = new DatabaseHelper(template, transactionTemplate);
     }
 
     @Override
@@ -45,27 +43,59 @@ public class MigrateDatabaseTables extends AbstractInitializingTask {
     @Override
     public void run() {
         try {
+            final Map<String, Map<String, String>> tables = new HashMap<>();
             for (final Resource resource : BasicXnatResourceLocator.getResources("classpath*:META-INF/xnat/migration/**/*-tables.properties")) {
                 final Properties properties = PropertiesLoaderUtils.loadProperties(resource);
+                for (final String property : properties.stringPropertyNames()) {
+                    final String[] atoms = property.split("\\.", 2);
+                    if (atoms.length < 2) {
+                        _log.error("The properties file {} contains a malformed key: {}. Keys in table migration properties files should take the form: \"table.column=column_type\".", resource.getFilename(), property);
+                        continue;
+                    }
 
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        BasicXnatResourceLocator.getResources()
-    }
+                    final String table  = atoms[0];
+                    final String column = atoms[1];
 
-    private boolean tableExists(final String name) throws SQLException {
-        try (final Connection connection = _template.getDataSource().getConnection();
-             final ResultSet results = connection.getMetaData().getTables("catalog", null, name, new String[]{"TABLE"})) {
-            if (results.next()) {
-                return true;
+                    final Map<String, String> columns;
+                    if (tables.containsKey(table)) {
+                        columns = tables.get(table);
+                    } else {
+                        columns = new HashMap<>();
+                        tables.put(table, columns);
+                    }
+                    if (columns.containsKey(column)) {
+                        _log.error("The properties for table {} defines the column {} as column type {}. This column has already been defined elsewhere as type: {}.", table, column, columns.get(column));
+                        continue;
+                    }
+                    columns.put(column, properties.getProperty(property));
+                }
+            }
+            for (final String table : tables.keySet()) {
+                final Map<String, String> columns = tables.get(table);
+                for (final String column : columns.keySet()) {
+                    final String value = columns.get(column);
+                    try {
+                        _db.setColumnDatatype(table, column, value);
+                    } catch (SQLWarning e) {
+                        final String message = e.getMessage();
+                        if (message.startsWith(SQL_WARNING_TABLE)) {
+                            _log.error("The table {} was defined, but that table doesn't appear to exist in the database. The following columns were to be checked: {}", table, Joiner.on(", ").join(columns.keySet()));
+                        } else {
+                            _log.error("The column {}.{} was defined, but that column doesn't appear to exist. Note that the table migration does not create new columns. The column was defined as: {}", table, column, value);
+                        }
+                    }
+                }
             }
+            complete();
+        } catch (IOException e) {
+            _log.error("An error occurred attempting to read table migration properties files", e);
+        } catch (SQLException e) {
+            _log.error("An error occurred accessing the database", e);
         }
-        return false;
     }
 
-    private static final Logger logger = LoggerFactory.getLogger(MigrateDatabaseTables.class);
+    private static final Logger _log              = LoggerFactory.getLogger(MigrateDatabaseTables.class);
+    private static final String SQL_WARNING_TABLE = "The requested table";
 
-    private final JdbcTemplate _template;
+    private final DatabaseHelper _db;
 }
diff --git a/src/main/resources/META-INF/xnat/migration/xnat-1.6-tables.properties b/src/main/resources/META-INF/xnat/migration/xnat-1.6-tables.properties
new file mode 100644
index 0000000000000000000000000000000000000000..d7e0df9a0e3c9396d806467133b24728b38eb7c5
--- /dev/null
+++ b/src/main/resources/META-INF/xnat/migration/xnat-1.6-tables.properties
@@ -0,0 +1 @@
+xhbm_alias_token.secret=varchar(255)
\ No newline at end of file