diff --git a/src/main/java/org/nrg/xnat/initialization/RootConfig.java b/src/main/java/org/nrg/xnat/initialization/RootConfig.java
index 5f3a9fffdb9f9dc297503c2b4c79ca4e2b6ccede..3a539cafb3ea77258db674618b10c66535386799 100644
--- a/src/main/java/org/nrg/xnat/initialization/RootConfig.java
+++ b/src/main/java/org/nrg/xnat/initialization/RootConfig.java
@@ -5,21 +5,22 @@ import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.PrettyPrinter;
 import com.fasterxml.jackson.core.util.DefaultIndenter;
 import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;
 import org.nrg.framework.datacache.SerializerRegistry;
 import org.nrg.framework.exceptions.NrgServiceException;
 import org.nrg.framework.services.ContextService;
 import org.nrg.framework.services.SerializerService;
-import org.nrg.framework.services.YamlObjectMapper;
 import org.nrg.prefs.beans.PreferenceBeanMixIn;
 import org.nrg.xdat.preferences.InitializerSiteConfiguration;
 import org.nrg.xdat.preferences.SiteConfigPreferences;
 import org.nrg.xnat.helpers.prearchive.PrearcConfig;
-import org.springframework.context.annotation.*;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.ImportResource;
 import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.http.converter.xml.MarshallingHttpMessageConverter;
 import org.springframework.oxm.jaxb.Jaxb2Marshaller;
 
@@ -65,6 +66,11 @@ public class RootConfig {
         }};
     }
 
+    @Bean
+    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(final Jackson2ObjectMapperBuilder builder) {
+        return new MappingJackson2HttpMessageConverter(builder.build());
+    }
+
     @Bean
     public Jackson2ObjectMapperBuilder objectMapperBuilder() {
         return new Jackson2ObjectMapperBuilder()
@@ -83,11 +89,6 @@ public class RootConfig {
         return mixIns;
     }
 
-    @Bean
-    public YamlObjectMapper yamlObjectMapper() {
-        return new YamlObjectMapper();
-    }
-
     @Bean
     public MarshallingHttpMessageConverter marshallingMessageConverter() {
         return new MarshallingHttpMessageConverter(
diff --git a/src/main/java/org/nrg/xnat/restlet/resources/PARList.java b/src/main/java/org/nrg/xnat/restlet/resources/PARList.java
index 87a479efd62bc5d64519e37a7dfdd651f5ae1f38..75c27470940d3e10a86c953be5117486a66eeeff 100644
--- a/src/main/java/org/nrg/xnat/restlet/resources/PARList.java
+++ b/src/main/java/org/nrg/xnat/restlet/resources/PARList.java
@@ -10,15 +10,15 @@
  */
 package org.nrg.xnat.restlet.resources;
 
-import org.nrg.xdat.security.helpers.Roles;
 import org.nrg.xft.XFTTable;
 import org.restlet.Context;
-import org.restlet.data.MediaType;
 import org.restlet.data.Request;
 import org.restlet.data.Response;
 import org.restlet.data.Status;
 import org.restlet.resource.Representation;
 import org.restlet.resource.Variant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Hashtable;
 
@@ -30,31 +30,27 @@ public class PARList extends SecureResource {
 	public PARList(Context context, Request request, Response response) {
 		super(context, request, response);
 		getVariants().addAll(STANDARD_VARIANTS);
-        if (!Roles.isSiteAdmin(user)) {
-            response.setStatus(Status.CLIENT_ERROR_FORBIDDEN, "Only administrators can access the list of project access requests.");
-        }
 	}
 
 	@Override
 	public Representation represent(Variant variant) {
-		XFTTable table = new XFTTable();
-		Hashtable<String, Object> params = new Hashtable<String, Object>();
+		Hashtable<String, Object> params = new Hashtable<>();
 		try {
-			table = XFTTable
-					.Execute(
-							"SELECT par.par_id,par.proj_id,par.level,par.create_date,u.login, u.firstname, u.lastname,p.secondary_id,p.name,p.id,SUBSTRING(p.description,0,300) as description,pi.firstname || ' ' || pi.lastname FROM xs_par_table par LEFT JOIN xnat_projectData p ON par.proj_id=p.id LEFT JOIN xnat_investigatordata pi ON p.pi_xnat_investigatordata_id=pi.xnat_investigatordata_id LEFT JOIN xdat_user u ON par.approver_id=u.xdat_user_id WHERE LOWER(par.email)='"
-									+ user.getEmail().toLowerCase()
-									+ "' AND approval_date IS NULL", user
-									.getDBName(), user.getLogin());
+			final XFTTable table = XFTTable.Execute(String.format(PAR_QUERY, user.getEmail().toLowerCase()), user.getDBName(), user.getLogin());
+
+			if (table != null) {
+				params.put("totalRecords", table.size());
+			}
+
+			return representTable(table, overrideVariant(variant), params);
 
 		} catch (Exception e) {
-			e.printStackTrace();
+			getResponse().setStatus(Status.SERVER_ERROR_INTERNAL, "An error occurred attempting to access the project invitations.");
+			_log.error("An error occurred attempting to access the project invitations for user " + user.getLogin(), e);
 		}
 
-		MediaType mt = overrideVariant(variant);
-
-		if (table != null)
-			params.put("totalRecords", table.size());
-		return representTable(table, mt, params);
+		return null;
 	}
-}
+	private static final Logger _log = LoggerFactory.getLogger(PARList.class);
+	private static final String PAR_QUERY = "SELECT par.par_id,par.proj_id,par.level,par.create_date,u.login, u.firstname, u.lastname,p.secondary_id,p.name,p.id,SUBSTRING(p.description,0,300) as description,pi.firstname || ' ' || pi.lastname FROM xs_par_table par LEFT JOIN xnat_projectData p ON par.proj_id=p.id LEFT JOIN xnat_investigatordata pi ON p.pi_xnat_investigatordata_id=pi.xnat_investigatordata_id LEFT JOIN xdat_user u ON par.approver_id=u.xdat_user_id WHERE LOWER(par.email)='%s' AND approval_date IS NULL";
+}
\ No newline at end of file
diff --git a/src/main/java/org/nrg/xnat/restlet/services/SettingsRestlet.java b/src/main/java/org/nrg/xnat/restlet/services/SettingsRestlet.java
index 8b3470945c12998dbe9b4745022e937643a282fd..75477a76ee1e473a1b9e55537474b645637d44d9 100644
--- a/src/main/java/org/nrg/xnat/restlet/services/SettingsRestlet.java
+++ b/src/main/java/org/nrg/xnat/restlet/services/SettingsRestlet.java
@@ -12,6 +12,7 @@ package org.nrg.xnat.restlet.services;
 
 import org.apache.commons.lang3.StringUtils;
 import org.hibernate.PropertyNotFoundException;
+import org.json.JSONObject;
 import org.nrg.config.entities.Configuration;
 import org.nrg.config.exceptions.ConfigServiceException;
 import org.nrg.dicomtools.filters.*;
@@ -108,7 +109,7 @@ public class SettingsRestlet extends SecureResource {
             if (StringUtils.isBlank(_property)) {
                 return mediaType == MediaType.TEXT_XML ?
                         new ItemXMLRepresentation(_arcSpec.getItem(), mediaType) :
-                        new StringRepresentation("{\"ResultSet\":{\"Result\":" + toJson(getArcSpecAsMap()) + ", \"title\": \"Settings\"}}");
+                        new StringRepresentation("{\"ResultSet\":{\"Result\":" + new JSONObject(getArcSpecAsMap()) + ", \"title\": \"Settings\"}}");
             } else {
                 if (!getArcSpecAsMap().containsKey(_property)) {
                     throw new PropertyNotFoundException(String.format("Setting '%s' was not found in the system.", _property));
diff --git a/src/main/java/org/nrg/xnat/security/provider/XnatDatabaseAuthenticationProvider.java b/src/main/java/org/nrg/xnat/security/provider/XnatDatabaseAuthenticationProvider.java
index ed43dced4e736e214850a880b8cf955ab34e94e4..085bd95ec7b211d353d970e14718a4bc54c5f811 100644
--- a/src/main/java/org/nrg/xnat/security/provider/XnatDatabaseAuthenticationProvider.java
+++ b/src/main/java/org/nrg/xnat/security/provider/XnatDatabaseAuthenticationProvider.java
@@ -10,6 +10,7 @@
  */
 package org.nrg.xnat.security.provider;
 
+import org.nrg.xdat.XDAT;
 import org.nrg.xdat.services.XdatUserAuthService;
 import org.nrg.xft.db.PoolDBUtils;
 import org.nrg.xft.security.UserI;
@@ -79,7 +80,7 @@ public class XnatDatabaseAuthenticationProvider extends DaoAuthenticationProvide
             throw new AuthenticationServiceException("User details class is not of a type I know how to handle: " + userDetails.getClass());
         }
         final UserI xdatUserDetails = (UserI) userDetails;
-        if ((_requireEmailVerification && !xdatUserDetails.isVerified() && xdatUserDetails.isEnabled()) || !xdatUserDetails.isAccountNonLocked()) {
+        if ((XDAT.verificationOn() && !xdatUserDetails.isVerified() && xdatUserDetails.isEnabled()) || !xdatUserDetails.isAccountNonLocked()) {
             throw new CredentialsExpiredException("Attempted login to unverified or locked account: " + xdatUserDetails.getUsername());
         }
         super.additionalAuthenticationChecks(userDetails, authentication);
diff --git a/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml b/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml
index 3c139c300c4fd78d085bc1c31813713cebde1648..d9ae46d056acf18288a3bdd9b9ce3e46c41fd8d0 100644
--- a/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml
+++ b/src/main/resources/META-INF/xnat/spawner/site-admin-elements.yaml
@@ -52,6 +52,7 @@ siteUrl:
     description: ""
 adminEmail:
     kind: panel.input.email
+    id: adminEmail
     name: adminEmail
     label: Site Administrator Email Address
     url: /xapi/siteConfig/adminEmail
@@ -121,7 +122,8 @@ siteInfo:
     method: POST
     action: /xapi/siteConfig/batch
     load:
-        data: XNAT.data.siteConfig
+        lookup: XNAT.data.siteConfig
+    contentType: json
     contents:
         ${siteId}
         ${siteUrl}
@@ -232,37 +234,49 @@ passwords:
     kind: panel.form
     name: passwords
     label: Passwords
+    method: POST
+    action: /xapi/siteConfig/batch
+    load:
+        lookup: XNAT.data.siteConfig
+    contentType: json
     contents:
         passwordComplexity:
             kind: panel.input.text
             id: passwordComplexity
-            name: security.password_complexity
+            name: passwordComplexity
             label: Password Complexity
             value: "^.*$"
             description: Must be a valid regular expression.
         passwordComplexityMessage:
             kind: panel.input.text
             id: passwordComplexityMessage
-            name: security.password_complexity_message
+            name: passwordComplexityMessage
             label: Password Complexity Message
             value: "Your password must contain..."
+        passwordHistoryDuration:
+            kind: panel.input.number
+            id: passwordHistoryDuration
+            name: passwordHistoryDuration
+            label: Password History (Duration)
+            value: -1
+            description: "-1 to disable"
         passwordExpirationInterval:
             kind: panel.input.number
             id: passwordExpirationInterval
-            name: security.password_expiration_interval
+            name: passwordExpirationInterval
             label: Password Expiration (Interval)
             value: -1
             description: "-1 to disable"
         passwordExpirationDate:
             kind: panel.input.text
             id: passwordExpirationDate
-            name: security.password_expiration_date
+            name: passwordExpirationDate
             label: Password Expiration (Date)
             description: Dates must be formatted MM/DD/YYYY
         passwordReuseRestriction:
             kind: panel.select.single
             id: passwordReuseRestriction
-            name: security.password_history
+            name: passwordReuseRestriction
             label: Password Reuse Restriction
         requireSaltedPasswords:
             kind: panel.input.checkbox
@@ -325,7 +339,8 @@ emailServerSettings:
         url: /xapi/siteConfig
 #        method: GET      # defaults to GET if not set
         prop: smtpServer # which root property? gets the root object if not set
-#        data: XNAT.data.siteConfig.smtpServer
+#        lookup: XNAT.data.siteConfig.smtpServer
+    contentType: json
     name: emailServerSettings
     label: Mail Server Settings
     contents:
@@ -465,7 +480,7 @@ notifications:
             kind: panel.input.email
             id: emailRecipientUpdate
             name: "Notifications:Update"
-            label: "Email Recipient: Update"
+            label: "Email Recipient: Updates"
             description: "What email address should receive update emails"
         notifyAdminSessionTransfer:
             kind: panel.input.checkbox
@@ -730,6 +745,11 @@ fileSystem:
     kind: panel.form
     name: fileSystem
     label: File System
+    method: POST
+    action: /xapi/siteConfig/batch
+    load:
+        lookup: XNAT.data.siteConfig
+    contentType: json
     contents:
         ${archiveRootPath}
         ${cachePath}
@@ -844,21 +864,22 @@ siteAdmin:
             group: advanced
             contents:
                 ${fileSystem}
+                ${siteIdMain}
 
 
 ###########################################
 ####  Initial Site Setup Admin Panels  ####
 ###########################################
 siteIdMain:
-    kind: panel
+    kind: panel.form
     name: siteIdMain
     label: Site Identification
     contents:
-#        ${siteId}
-#        ${siteUrl}
+        ${siteId}
+        ${siteUrl}
         ${adminEmail}
 sitePaths:
-    kind: panel
+    kind: panel.form
     name: sitePaths
     label: Site Paths
     contents:
diff --git a/src/main/webapp/scripts/xmodal-v1/xmodal.css b/src/main/webapp/scripts/xmodal-v1/xmodal.css
index 32057f9b94e74485b849234e367127c0b756b8ec..9ad44b973e18834927d72bf9e1f824832e3208fa 100644
--- a/src/main/webapp/scripts/xmodal-v1/xmodal.css
+++ b/src/main/webapp/scripts/xmodal-v1/xmodal.css
@@ -4,55 +4,54 @@
 
 /*html.noscroll { position: relative ; overflow-y: scroll ; width: 100% ; }*/
 
-body.xmodal-v1 { display: block !important ; overflow-y: scroll ; } /* the body will not disappear! */
+body.xmodal-v1, body.xmodal { display: block !important ; overflow-y: scroll ; } /* the body will not disappear! */
 /*body.xmodal-v1.open { position: fixed !important ; overflow: hidden ; } *//* hold the page still while the xModal is open */
 
-div.xmodal-mask.v1 { display: none ; margin: auto ; position: fixed ; left: 0 ; top: 0 ; width: 100% ; height: 100% ; background: rgba(0,0,0,0.3) ; }
-div.xmodal-mask.v1 { background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiZGBg8GVAAkwMaICwAECAAQAUlABVw7mtDgAAAABJRU5ErkJggg==); }
-/*div.xmodal-mask.v1.open { display: block ; z-index: 100 ; }*/
+div.xmodal-mask { display: none ; margin: auto ; position: fixed ; left: 0 ; top: 0 ; width: 100% ; height: 100% ; background: rgba(0,0,0,0.3) ; }
+div.xmodal-mask { background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiZGBg8GVAAkwMaICwAECAAQAUlABVw7mtDgAAAABJRU5ErkJggg==); }
+/*div.xmodal-mask.open { display: block ; z-index: 100 ; }*/
 
-div.xmodal.v1 {
+div.xmodal {
     display: none ; min-width: 200px ; min-height: 128px ; max-width: 98% ; max-height: 98% ;
     position: fixed ; top: 0 ; right: 0 ; bottom: 0 ; left: 0 ; margin: auto ; overflow: hidden ;
     background: #fff ; border: 1px solid #a0a0a0 ; box-shadow: 0 10px 30px rgba(0,0,0,0.5) ;
     font-family: Arial, Helvetica, sans-serif ; }
 
-div.xmodal.v1.open { display: block; }
+div.xmodal.open { display: block; }
 
-div.xmodal.v1:focus { outline: 1px solid #808080; }
+div.xmodal:focus { outline: 1px solid #808080; }
 
-div.xmodal.v1.dialog { width: 600px ; height: 400px ; }
+div.xmodal.dialog { width: 600px ; height: 400px ; }
 
-div.xmodal.v1.loading { min-height: 80px; }
+div.xmodal.loading { min-height: 80px; }
 
-div.xmodal.v1.maxxed {
+div.xmodal.maxxed {
     width: 98% !important; height: 98% !important;
     max-width: 98% !important; max-height: 98% !important;
     top: 0 !important; right: 0 !important;
     bottom: 0 !important; left: 0 !important; }
 
-div.xmodal.v1 .button:hover,
-div.xmodal.v1 .close:hover { cursor: pointer ; }
+div.xmodal .button:hover,
+div.xmodal .close:hover { cursor: pointer ; }
 
-div.xmodal.v1 .buttons :focus { box-shadow: 0 0 5px rgba(0, 100, 200, 0.8); }
+div.xmodal .buttons :focus { box-shadow: 0 0 5px rgba(0, 100, 200, 0.8); }
 
-div.xmodal.v1 .title {
-    height: 25px ; padding: 0 ; overflow: hidden ; line-height: inherit ;
-    color: #303030 ; background: #f0f0f0 center center repeat-x ; border-bottom: 1px solid #c0c0c0 ; }
-div.xmodal.v1 .title { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAkCAIAAAAhPwwfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUeNpi/PPnDwMMMDEgAYo5LP///yeZ8+/fP2JkyFFGDodiF5ARBhQHPECAAQDfTksARZ3oFgAAAABJRU5ErkJggg==); }
-div.xmodal.v1 .title .inner {
+div.xmodal .title {
+    height: 40px; padding: 0 ; overflow: hidden ;
+    color: #303030 ; background: #f0f0f0 ; border-bottom: 1px solid #e0e0e0 ; }
+div.xmodal .title .inner {
     display: inline-block; padding-left: 10px ; overflow: hidden; white-space: nowrap;
-    font-size: 12px ; font-weight: bold ; line-height: 28px ; vertical-align: middle ; }
-div.xmodal.v1 .title .inner > i { color: #505050; font-weight: normal; font-style: normal; }
-div.xmodal.v1 .title .close,
-div.xmodal.v1 .title .maximize {
+    font-size: 15px ; font-weight: normal ; line-height: 42px ; vertical-align: middle ; }
+div.xmodal .title .inner > i { color: #505050; font-weight: normal; font-style: normal; }
+div.xmodal .title .close,
+div.xmodal .title .maximize {
     width: 24px; height: 16px; margin: 0; padding: 0;
     position: absolute ; top: 4px ; right: 4px ;
     font-size: 16px ; font-weight: bold ; text-align: center; line-height: 17px;
     color: #606060 ; background: #f8f8f8 ;
     border: 1px solid #b0b0b0 ; border-radius: 2px; }
-div.xmodal.v1 .title .maximize { right: 34px; line-height: 10px; }
-div.xmodal.v1 .title .maximize:hover { cursor: pointer; }
+div.xmodal .title .maximize { right: 34px; line-height: 10px; }
+div.xmodal .title .maximize:hover { cursor: pointer; }
 
 /* base64 close-yui.gif */
 /*div.xmodal .title .close {*/
@@ -60,49 +59,47 @@ div.xmodal.v1 .title .maximize:hover { cursor: pointer; }
     /*background-image: url(data:image/gif;base64,R0lGODlhGQAPALMJALGxsZ2dnezs7HNzc21tbYWFhfX19cHBwf///////wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAZAA8AAAROMJ1Jq71Tos27/9sEjqMIAgZnAOVxEkVqFAT7md4MC3QM4jnaAJb6uUaC4UBAAnZ0Q58RpCvwiNNPAKsLZHOBIsIQ/pLOCCf6J8G4MYkIADs=);*/
 /*}*/
 
-div.xmodal.v1 .body { width: 100% ; height: 100% ; position: absolute ; overflow: hidden ; }
-div.xmodal.v1 .body.scroll { overflow-y: auto ; }
-div.xmodal.v1 .body .inner { display: none ; padding: 20px ; font-size: 13px ; line-height: 17px ; }
-div.xmodal.v1.nopad .body .inner { padding: 0 ; }
-div.xmodal.v1.open .body .inner { display: block ; }
-div.xmodal.v1 .body h1,
-div.xmodal.v1 .body h2,
-div.xmodal.v1 .body h3,
-div.xmodal.v1 .body h4 { margin-bottom: 1em !important; }
-div.xmodal.v1 .body p { margin: 0 0 1em ; }
-
-div.xmodal.v1 .footer {
-    display: block ; width: 100% ; /*height: 52px ;*/ margin-top: -1px ; padding: 0 ;
+div.xmodal .body { width: 100% ; height: 100% ; position: absolute ; overflow: hidden ; }
+div.xmodal .body.scroll { overflow-y: auto ; }
+div.xmodal .body .inner { display: none ; padding: 20px ; font-size: 13px ; line-height: 17px ; }
+div.xmodal.nopad .body .inner { padding: 0 ; }
+div.xmodal.open .body .inner { display: block ; }
+div.xmodal .body h1,
+div.xmodal .body h2,
+div.xmodal .body h3,
+div.xmodal .body h4 { margin-bottom: 1em !important; }
+div.xmodal .body p { margin: 0 0 1em ; }
+
+div.xmodal .footer {
+    display: block ; width: 100% ; height: 60px ; margin-top: -1px ; padding: 0 ;
     position: absolute ; bottom: 0 ;
     background: #f0f0f0; border-top: 1px solid #e0e0e0 ; overflow: hidden ; }
-div.xmodal.v1 .footer.white { background: #fff ; border-top-color: #fff ; }
-div.xmodal.v1 .footer .inner { display: table ; width: 100% ; height: 100% ; position: relative ; }
-div.xmodal.v1 .footer .content { display: table-cell ; padding-left: 15px ; vertical-align: middle ; text-align: left ; }
-div.xmodal.v1 .footer .buttons { display: table-cell ; padding-right: 15px ; vertical-align: middle ; text-align: right ; }
-div.xmodal.v1 .footer .buttons .link { display: inline-block; padding: 10px; font-size: 13px; text-decoration: underline; }
-div.xmodal.v1 .footer .button {
+div.xmodal .footer.white { background: #fff ; border-top-color: #fff ; }
+div.xmodal .footer .inner { display: table ; width: 100% ; height: 100% ; position: relative ; }
+div.xmodal .footer .content { display: table-cell ; padding-left: 15px ; vertical-align: middle ; text-align: left ; }
+div.xmodal .footer .buttons { display: table-cell ; padding-right: 15px ; vertical-align: middle ; text-align: right ; }
+div.xmodal .footer .buttons .link { display: inline-block; padding: 10px; font-size: 13px; text-decoration: underline; }
+div.xmodal .footer .button {
     display: inline-block ; margin-left: 10px ; padding: 1px 15px !important ; float: right ;
     line-height: 23px ; vertical-align: middle ; font-size: 13px ; font-weight: bold ; text-decoration: none !important ; }
-div.xmodal.v1 .footer a.button { height: 24px ; line-height: 24px; } /* set height only for <a> buttons */
-div.xmodal.v1 .footer .button,
-div.xmodal.v1 .footer .button.cancel.default {
-    color: #303030 ; background: #e0e0e0 center center repeat-x ; border: 1px solid #a0a0a0 ; border-radius: 3px ;
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAeCAIAAACE3ijUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADlJREFUeNpi/P//PwMMMDEgAYo5LP/+/SOG8+fPHxwyf//+xcFB0YNbGW49uO3B7VAUZVQNN4AAAwDARzjNaWlUCgAAAABJRU5ErkJggg==); }
-div.xmodal.v1 .footer .button:active,
-div.xmodal.v1 .footer .button.cancel.default:active { color: inherit ; background: #d0d0d0 }
-div.xmodal.v1 .footer .button.default { font-weight: bold ; color: #fff ; background: #07428d center top repeat-x ; border-color: #293d66 ;
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAeCAIAAACE3ijUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFJJREFUeNqMzsENwDAIA0BH6nrdKbt1rGLTfiqcRyr4nWwB45wXvjmUKND0QoWgJeG14Lb2kxjuXm3ZtvxG7r6WaPAFqXCwA2QTdgdITwqPAAMAHoRQTInXYu8AAAAASUVORK5CYII=); }
-div.xmodal.v1 .footer .button.default:active { background: #084FAB ; border-color: #243356 ; }
-div.xmodal.v1 .footer .button.hidden,
-div.xmodal.v1 .footer .button.disabled { /*display: inline-block ;*/ color: #f0f0f0 ; background: #d0d0d0 ; border-color: #c0c0c0 ; }
-div.xmodal.v1 .footer .button.hidden:hover,
-div.xmodal.v1 .footer .button.disabled:hover { cursor: not-allowed !important ; background: #d0d0d0 ; }
-
-div.xmodal.v1.loading .title .close { display: none ; }
-div.xmodal.v1.loading .body .inner { text-align: center ; }
-
-.ie8 body div.xmodal.v1 .footer .button { /* margin: 10px ; */ padding: 3px 6px ; }
-.ie9 body div.xmodal.v1 .footer .button { /* margin: 12px ; */ padding: 4px 6px 3px ; }
+div.xmodal .footer a.button { height: 24px ; line-height: 24px; } /* set height only for <a> buttons */
+div.xmodal .footer .button,
+div.xmodal .footer .button.cancel.default {
+    color: #303030 ; background: #e0e0e0 center center repeat-x ; border: 1px solid #a0a0a0 ; border-radius: 3px ; }
+div.xmodal .footer .button:active,
+div.xmodal .footer .button.cancel.default:active { color: inherit ; background: #d0d0d0 }
+div.xmodal .footer .button.default { font-weight: bold ; color: #fff ; background: #07428d center top repeat-x ; border-color: #293d66 ; }
+div.xmodal .footer .button.default:active { background: #084FAB ; border-color: #243356 ; }
+div.xmodal .footer .button.hidden,
+div.xmodal .footer .button.disabled { /*display: inline-block ;*/ color: #f0f0f0 ; background: #d0d0d0 ; border-color: #c0c0c0 ; }
+div.xmodal .footer .button.hidden:hover,
+div.xmodal .footer .button.disabled:hover { cursor: not-allowed !important ; background: #d0d0d0 ; }
+
+div.xmodal.loading .title .close { display: none ; }
+div.xmodal.loading .body .inner { text-align: center ; }
+
+.ie8 body div.xmodal .footer .button { /* margin: 10px ; */ padding: 3px 6px ; }
+.ie9 body div.xmodal .footer .button { /* margin: 12px ; */ padding: 4px 6px 3px ; }
 
 .modal_content, .modal_template { display: none ; }
 
@@ -115,4 +112,4 @@ for db.humanconnectome.org
 /* custom form styles from HCP didn't work for core XNAT */
 
 
-div.xmodal.v1.embedded { top: 0; left: 0; border: none; box-shadow: none; display: block; z-index: auto;  }
+div.xmodal.embedded { top: 0; left: 0; border: none; box-shadow: none; display: block; z-index: auto;  }
diff --git a/src/main/webapp/scripts/xnat/ui/panel.js b/src/main/webapp/scripts/xnat/ui/panel.js
index 4f5a6b92d164f9aee5c3a825615f583247adce97..561bb6e5ac91bb333f43cc60c1c75151bbc37828 100644
--- a/src/main/webapp/scripts/xnat/ui/panel.js
+++ b/src/main/webapp/scripts/xnat/ui/panel.js
@@ -91,7 +91,7 @@ var XNAT = getObject(XNAT || {});
 
             _formPanel = spawn('form.xnat-form-panel.panel.panel-default', {
                 method: opts.method || 'POST',
-                action: opts.action || '#'
+                action: XNAT.url.rootUrl(opts.action || '') || '#'
             }, [
                 ['div.panel-heading', [
                     ['h3.panel-title', opts.title || opts.label]
diff --git a/src/main/webapp/scripts/xnat/url.js b/src/main/webapp/scripts/xnat/url.js
index 091237f86566542e1305404e4e58cc21d14c3d9f..54bb44f7946e964915fdd76bd376551df800e0c1 100644
--- a/src/main/webapp/scripts/xnat/url.js
+++ b/src/main/webapp/scripts/xnat/url.js
@@ -46,7 +46,7 @@ var XNAT = getObject(XNAT||{});
     // make sure the serverRoot string (and only ONE serverRoot string)
     // is at the beginning of a url
     function rootUrl(url){
-        return fixRoot((window.serverRoot || XNAT.serverRoot || ''), url || '');
+        return fixRoot((window.serverRoot || XNAT.serverRoot || ''), url)
     }
     url.rootUrl = rootUrl;