diff --git a/productMods/WEB-INF/resources/startup_listeners.txt b/productMods/WEB-INF/resources/startup_listeners.txt
new file mode 100644
index 00000000..50e83787
--- /dev/null
+++ b/productMods/WEB-INF/resources/startup_listeners.txt
@@ -0,0 +1,66 @@
+#
+# ServletContextListeners for Vitro, to be instantiated and run by the StartupManager.
+#
+
+edu.cornell.mannlib.vitro.webapp.config.ConfigurationPropertiesSetup
+
+edu.cornell.mannlib.vitro.webapp.config.RevisionInfoSetup
+
+edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory$Setup
+
+# DefaultThemeSetup needs to run before the JenaDataSourceSetup to allow creation of default portal and tab
+edu.cornell.mannlib.vitro.webapp.servlet.setup.DefaultThemeSetup
+
+# Comment out this listener to run Vitro without a database
+# If used, this listener must be run before JenaDataSourceSetup
+edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaPersistentDataSourceSetup
+
+# This listener is required in order to use a Jena triple store (currently the only option)
+edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetup
+
+edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup
+
+# Invokes a process to move any uploaded files into the new file storage system.
+# Needs to run after FileStorageSetup and JenaDataSourceSetup.
+# Should run before Pellet is set up.
+edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateUploadedFiles
+
+# Update to the new UserAccounts model (1.3). Needs to run after JenaDataSourceSetup.
+edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateUserAccounts
+
+# Invokes process to perform updates to align with ontology changes if needed -->
+# Needs to run before submodels are attached and Pellet is set up -->
+edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateKnowledgeBase
+
+# The following listener remains temporarily until SDB becomes the default triple store
+edu.cornell.mannlib.vitro.webapp.servlet.setup.AttachSubmodels
+
+# This listener sets up SimpleReasoner also in SDB mode. In SDB mode, Pellet is used for
+# TBox reasoning and SimpleReasoner is used for ABox reasoning. In RDF mode, Pellet was
+# used for both.
+edu.cornell.mannlib.vitro.webapp.servlet.setup.PelletReasonerSetup
+
+edu.cornell.mannlib.vitro.webapp.auth.permissions.PermissionSetsLoader
+
+edu.cornell.mannlib.vitro.webapp.auth.policy.bean.PropertyRestrictionPolicyHelper$Setup
+
+# vivo specific, must appear before other policies
+edu.cornell.mannlib.vivo.auth.policy.VivoPolicy$Setup
+
+edu.cornell.mannlib.vitro.webapp.auth.policy.setup.CommonPolicyFamilySetup
+
+edu.cornell.mannlib.vitro.webapp.auth.policy.RootUserPolicy$Setup
+
+edu.cornell.mannlib.vivo.auth.policy.SelfEditorRelationshipPolicy$Setup
+
+edu.cornell.mannlib.vitro.webapp.auth.policy.RestrictHomeMenuItemEditingPolicy$Setup
+
+# The Solr index uses a "public" filter, so the PropertyRestrictionPolicyHelper must already be set up.
+edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup
+
+edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerSetup
+
+# On shutdown, this will kill the background thread started by Apache Commons File Upload
+org.apache.commons.fileupload.servlet.FileCleanerCleanup
+
+edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache$Setup
diff --git a/productMods/WEB-INF/web.xml b/productMods/WEB-INF/web.xml
index 77b602ee..7b328ec4 100644
--- a/productMods/WEB-INF/web.xml
+++ b/productMods/WEB-INF/web.xml
@@ -41,166 +41,11 @@
-
+
- edu.cornell.mannlib.vitro.webapp.config.ConfigurationPropertiesSetup
-
-
-
- edu.cornell.mannlib.vitro.webapp.config.RevisionInfoSetup
-
-
-
- edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory$Setup
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.DefaultThemeSetup
-
-
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaPersistentDataSourceSetup
-
-
-
-
-
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetup
+ edu.cornell.mannlib.vitro.webapp.startup.StartupManager
-
-
- edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup
-
-
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateUploadedFiles
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateUserAccounts
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateKnowledgeBase
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.AttachSubmodels
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.PelletReasonerSetup
-
-
-
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.permissions.PermissionSetsLoader
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.policy.bean.PropertyRestrictionPolicyHelper$Setup
-
-
-
-
-
- edu.cornell.mannlib.vivo.auth.policy.VivoPolicy$Setup
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.policy.setup.CommonPolicyFamilySetup
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.policy.RootUserPolicy$Setup
-
-
-
- edu.cornell.mannlib.vivo.auth.policy.SelfEditorRelationshipPolicy$Setup
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.policy.RestrictHomeMenuItemEditingPolicy$Setup
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerSetup
-
-
-
-
-
-
- org.apache.commons.fileupload.servlet.FileCleanerCleanup
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache$Setup
-
-
-
-
-
-