diff --git a/src/main/java/org/nrg/xnat/configuration/OrmConfig.java b/src/main/java/org/nrg/xnat/configuration/OrmConfig.java
index 1e6583877c6fb898331af45ccb64ff28cc8830a0..c57deedb5462a93347ff864890bb0fefa253055f 100644
--- a/src/main/java/org/nrg/xnat/configuration/OrmConfig.java
+++ b/src/main/java/org/nrg/xnat/configuration/OrmConfig.java
@@ -1,5 +1,6 @@
 package org.nrg.xnat.configuration;
 
+import com.google.common.base.Joiner;
 import org.apache.commons.io.IOUtils;
 import org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory;
 import org.hibernate.cache.spi.RegionFactory;
@@ -7,6 +8,7 @@ import org.hibernate.cfg.ImprovedNamingStrategy;
 import org.nrg.framework.exceptions.NrgServiceError;
 import org.nrg.framework.exceptions.NrgServiceException;
 import org.nrg.framework.orm.hibernate.PrefixedTableNamingStrategy;
+import org.nrg.framework.processors.XnatPluginBean;
 import org.nrg.framework.utilities.BasicXnatResourceLocator;
 import org.nrg.framework.utilities.Beans;
 import org.slf4j.Logger;
@@ -16,6 +18,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PropertiesLoaderUtils;
 import org.springframework.orm.hibernate4.HibernateTransactionManager;
 import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
 import org.springframework.transaction.PlatformTransactionManager;
@@ -25,9 +28,9 @@ import javax.inject.Inject;
 import javax.sql.DataSource;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Properties;
+import java.util.Set;
 
 @Configuration
 @EnableTransactionManagement(proxyTargetClass = true)
@@ -39,8 +42,8 @@ public class OrmConfig {
 
     @Bean
     public PropertiesFactoryBean hibernateProperties() {
-        final PropertiesFactoryBean bean = new PropertiesFactoryBean();
-        final Properties properties = Beans.getNamespacedProperties(_environment, "hibernate", false);
+        final PropertiesFactoryBean bean       = new PropertiesFactoryBean();
+        final Properties            properties = Beans.getNamespacedProperties(_environment, "hibernate", false);
         if (properties.size() == 0) {
             if (_log.isDebugEnabled()) {
                 final StringBuilder message = new StringBuilder("No Hibernate properties specified, using default properties:\n");
@@ -67,8 +70,8 @@ public class OrmConfig {
     @Bean
     public LocalSessionFactoryBean sessionFactory(final DataSource dataSource) throws NrgServiceException {
         try {
-            final LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
-            final String[] packages = getXnatEntityPackages();
+            final LocalSessionFactoryBean bean     = new LocalSessionFactoryBean();
+            final String[]                packages = getXnatEntityPackages();
             if (_log.isDebugEnabled()) {
                 final StringBuilder message = new StringBuilder("The following packages will be scanned for persistent entities:\n");
                 for (final String packageName : packages) {
@@ -93,15 +96,27 @@ public class OrmConfig {
     }
 
     private static String[] getXnatEntityPackages() throws IOException {
-        final List<String> packages = new ArrayList<>();
+        final Set<String> packages = new HashSet<>();
         for (final Resource resource : BasicXnatResourceLocator.getResources("classpath*:META-INF/xnat/entities/**/*-entity-packages.txt")) {
             if (_log.isDebugEnabled()) {
-                _log.debug("Processing entity packages from the resource: " + resource.getFilename());
+                _log.debug("Processing entity packages from the resource: {}", resource.getFilename());
             }
             try (final InputStream input = resource.getInputStream()) {
                 packages.addAll(IOUtils.readLines(input, "UTF-8"));
             }
         }
+        try {
+            for (final Resource resource : BasicXnatResourceLocator.getResources("classpath*:META-INF/xnat/**/*-plugin.properties")) {
+                final Properties     properties = PropertiesLoaderUtils.loadProperties(resource);
+                final XnatPluginBean plugin     = new XnatPluginBean(properties);
+                if (_log.isDebugEnabled()) {
+                    _log.debug("Processing entity packages from plugin {}: {}", plugin.getId(), Joiner.on(", ").join(plugin.getEntityPackages()));
+                }
+                packages.addAll(plugin.getEntityPackages());
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("An error occurred trying to locate XNAT plugin definitions.");
+        }
         return packages.toArray(new String[packages.size()]);
     }
 
diff --git a/src/main/java/org/nrg/xnat/initialization/RootConfig.java b/src/main/java/org/nrg/xnat/initialization/RootConfig.java
index 9ac4540a0f4318b3cfd13eeef944bbec57900d0a..48088809191ccbbe976059cb01c8c1e43ae4cfed 100644
--- a/src/main/java/org/nrg/xnat/initialization/RootConfig.java
+++ b/src/main/java/org/nrg/xnat/initialization/RootConfig.java
@@ -35,7 +35,7 @@ import java.util.Map;
  * Configuration for the XNAT root application context. This contains all of the basic infrastructure for initializing
  * and bootstrapping the site, including data source configuration, transaction and session management, and site
  * configuration preferences.
- *
+ * <p>
  * <b>NOTE:</b> If you are adding code to this class, please be sure you know what you're doing! Most configuration code
  * for standard XNAT components should be added in the {@link ApplicationConfig application configuration class}.
  */
diff --git a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java
index 66eac2b498d7715368d0184403ee8515fc12fe62..5079ea1e57ce74a04ebede8fb491c83b82dac287 100644
--- a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java
+++ b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java
@@ -120,7 +120,7 @@ public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherSer
             for (final Resource resource : BasicXnatResourceLocator.getResources("classpath*:META-INF/xnat/**/*-plugin.properties")) {
                 final Properties properties = PropertiesLoaderUtils.loadProperties(resource);
                 final XnatPluginBean plugin = new XnatPluginBean(properties);
-                final Class<?> config = plugin.getConfigClass();
+                final Class<?> config = Class.forName(plugin.getPluginClass());
                 configs.add(config);
             }
         } catch (IOException e) {