diff --git a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
index bab832ad5abc3ef093cb22fb9a445368f231ce0d..2fc83765fbc0e30732d8bf75ce38a6d5d59c2f2f 100644
--- a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
+++ b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java
@@ -52,10 +52,10 @@ public class SchedulerConfig implements SchedulingConfigurer {
 //        }
 //    }
 
-    @Bean
-    public TriggerTask resetFailedLogins() throws SiteConfigurationException {
-        return new TriggerTask(new ResetFailedLogins(_template, _preferences.getMaxFailedLoginsLockoutDuration()), new PeriodicTrigger(900000));
-    }
+//    @Bean
+//    public TriggerTask resetFailedLogins() throws SiteConfigurationException {
+//        return new TriggerTask(new ResetFailedLogins(_template, _preferences.getMaxFailedLoginsLockoutDuration()), new PeriodicTrigger(900000));
+//    }
 
     @Bean
     public TriggerTask resetEmailRequests() {
@@ -106,6 +106,7 @@ public class SchedulerConfig implements SchedulingConfigurer {
 //        taskRegistrar.addTriggerTask(rebuildSessionXmls());
         XDAT.getContextService().getBean(NrgEventService.class).triggerEvent(new SiteConfigPreferenceEvent("aliasTokenTimeout", String.valueOf(XDAT.getSiteConfigPreferences().getAliasTokenTimeout())));
         XDAT.getContextService().getBean(NrgEventService.class).triggerEvent(new SiteConfigPreferenceEvent("inactivityBeforeLockout", String.valueOf(XDAT.getSiteConfigPreferences().getInactivityBeforeLockout())));
+        XDAT.getContextService().getBean(NrgEventService.class).triggerEvent(new SiteConfigPreferenceEvent("maxFailedLoginsLockoutDuration", String.valueOf(XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration())));
         for (final TriggerTask triggerTask : _triggerTasks) {
             taskRegistrar.addTriggerTask(triggerTask);
         }
diff --git a/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java b/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java
index 82b939c3d2d92a4fd26f016bd6d4999203367ab9..9bfb37682226014efbcb899e875cb6a3bf0c1514 100644
--- a/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java
+++ b/src/main/java/org/nrg/xnat/event/listeners/SiteConfigPreferenceHandler.java
@@ -8,6 +8,7 @@ import org.nrg.xdat.XDAT;
 import org.nrg.xdat.preferences.SiteConfigPreferenceEvent;
 import org.nrg.xdat.preferences.SiteConfigPreferences;
 import org.nrg.xnat.security.DisableInactiveUsers;
+import org.nrg.xnat.security.ResetFailedLogins;
 import org.nrg.xnat.security.alias.ClearExpiredAliasTokens;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -56,6 +57,12 @@ public class SiteConfigPreferenceHandler implements Consumer<Event<SiteConfigPre
 				else if (StringUtils.equals(field.getFieldName(), "inactivityBeforeLockoutSchedule")) {
 					updateInactivityBeforeLockout(e);
 				}
+				else if (StringUtils.equals(field.getFieldName(), "maxFailedLoginsLockoutDuration")) {
+					updateResetFailedLogins(e);
+				}
+				else if (StringUtils.equals(field.getFieldName(), "resetFailedLoginsSchedule")) {
+					updateResetFailedLogins(e);
+				}
 			}
 		}
     }
@@ -85,7 +92,23 @@ public class SiteConfigPreferenceHandler implements Consumer<Event<SiteConfigPre
 				temp.cancel(false);
 			}
 
-			scheduledInactivityBeforeLockout.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new DisableInactiveUsers(XDAT.getSiteConfigPreferences().getInactivityBeforeLockout(),(int) SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration())),new CronTrigger(XDAT.getSiteConfigPreferences().getInactivityBeforeLockoutSchedule())));
+			scheduledInactivityBeforeLockout.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new DisableInactiveUsers((new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getInactivityBeforeLockout()))).intValue(),(new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()))).intValue()),new CronTrigger(XDAT.getSiteConfigPreferences().getInactivityBeforeLockoutSchedule())));
+
+		} catch (Exception e1) {
+			_log.error("", e1);
+		}
+	}
+
+	private void updateResetFailedLogins(SiteConfigPreferenceEvent e){
+		try {
+			XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true);
+			Iterator<Runnable> iter = XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").getScheduledThreadPoolExecutor().getQueue().iterator();
+
+			for(ScheduledFuture temp: scheduledResetFailedLogins){
+				temp.cancel(false);
+			}
+
+			scheduledResetFailedLogins.add(XDAT.getContextService().getBeansOfType(ThreadPoolTaskScheduler.class).get("taskScheduler").schedule(new ResetFailedLogins(_template,XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()),new CronTrigger(XDAT.getSiteConfigPreferences().getResetFailedLoginsSchedule())));
 
 		} catch (Exception e1) {
 			_log.error("", e1);
@@ -100,4 +123,5 @@ public class SiteConfigPreferenceHandler implements Consumer<Event<SiteConfigPre
 
 	private ArrayList<ScheduledFuture> scheduledAliasTokenTimeouts = new ArrayList<ScheduledFuture>();
 	private ArrayList<ScheduledFuture> scheduledInactivityBeforeLockout = new ArrayList<ScheduledFuture>();
+	private ArrayList<ScheduledFuture> scheduledResetFailedLogins = new ArrayList<ScheduledFuture>();
 }
diff --git a/src/main/java/org/nrg/xnat/security/XnatSessionEventPublisher.java b/src/main/java/org/nrg/xnat/security/XnatSessionEventPublisher.java
index 437c17d7a9d91ea4d370f246514e258231d3acbb..5fec5247ff826c996dd060ee30cd9168bf66855b 100644
--- a/src/main/java/org/nrg/xnat/security/XnatSessionEventPublisher.java
+++ b/src/main/java/org/nrg/xnat/security/XnatSessionEventPublisher.java
@@ -11,6 +11,7 @@
 package org.nrg.xnat.security;
 
 import org.nrg.xdat.XDAT;
+import org.nrg.xdat.preferences.SiteConfigPreferences;
 import org.nrg.xft.security.UserI;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,6 +32,7 @@ import javax.servlet.ServletContextListener;
 import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
+import java.sql.SQLException;
 import java.sql.Timestamp;
 import java.util.Calendar;
 import java.util.Date;
@@ -53,7 +55,11 @@ public class XnatSessionEventPublisher implements HttpSessionListener, ServletCo
         }
 
         session.setAttribute("XNAT_CSRF", UUID.randomUUID().toString());
-        session.setMaxInactiveInterval(XDAT.getSiteConfigPreferences().getSessionTimeout()*60);//Preference is in minutes and setMaxInactiveInterval wants seconds.
+        try {
+            session.setMaxInactiveInterval((new Long(SiteConfigPreferences.convertPGIntervalToSeconds(XDAT.getSiteConfigPreferences().getSessionTimeout()))).intValue());//Preference is in PG Interval and setMaxInactiveInterval wants seconds.
+        } catch (SQLException e1) {
+            _log.error("" + e);
+        }
         getContext(session.getServletContext()).publishEvent(e);
     }
 
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 f76a2c023cc2405eb53909f23e2343877b606d3c..35d6213dc108fe0c3d29a61ff02bcae54ae32ef6 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
@@ -219,24 +219,28 @@ userLoginsSessionControls:
     contentType: json
     contents:
         sessionTimeout:
-            kind: panel.input.number
+            kind: panel.input.text
             id: sessionTimeout
             name: sessionTimeout
             label: Session Timeout
-            description: "Interval for timing out alias tokens"
+            description: >
+              Interval for timing out user sessions. Uses
+              <a target="_blank" href="http://www.postgresql.org/docs/9.0/static/functions-datetime.html">PostgreSQL interval notation</a>
         aliasTokenTimeout:
             kind: panel.input.text
             id: aliasTokenTimeout
             name: aliasTokenTimeout
             label: Alias Token Timeout
-            description: Interval for timing out alias tokens. Uses
+            description: >
+              Interval for timing out alias tokens. Uses
               <a target="_blank" href="http://www.postgresql.org/docs/9.0/static/functions-datetime.html">PostgreSQL interval notation</a>
         aliasTokenTimeoutSchedule:
             kind: panel.input.text
             id: aliasTokenTimeoutSchedule
             name: aliasTokenTimeoutSchedule
             label: Alias Token Timeout Schedule
-            description: How often to check alias tokens for timeout (0 0 * * * * means it runs every hour). Uses
+            description: >
+              How often to check alias tokens for timeout (0 0 * * * * means it runs every hour). Uses
               <a target="_blank" href="http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html">Cron notation</a>
         sessionTimeoutMessage:
             kind: panel.textarea
@@ -269,23 +273,36 @@ userLoginsSessionControls:
             label: Maximum Failed Logins
             description: Number of failed login attempts before accounts are temporarily locked. (-1 disables feature)
         failedLoginLockoutDuration:
-            kind: panel.input.number
+            kind: panel.input.text
             id: failedLoginLockoutDuration
             name: maxFailedLoginsLockoutDuration
             label: Failed Logins Lockout Duration
-            description: Number of milliseconds to lock user accounts that have exceeded the max_failed_logins count. Select (3600000 for 1 hour, 86400000 for 24 hours)
+            description: >
+              Interval of time to lock user accounts that have exceeded the max_failed_logins count. Uses
+              <a target="_blank" href="http://www.postgresql.org/docs/9.0/static/functions-datetime.html">PostgreSQL interval notation</a>
+        resetFailedLoginsSchedule:
+            kind: panel.input.text
+            id: resetFailedLoginsSchedule
+            name: resetFailedLoginsSchedule
+            label: Reset Failed Logins Schedule
+            description: >
+              How often to check if the Failed Logins Lockout Duration time has expired so locked out users can be allowed to log in again (0 0 * * * * means it runs every hour). Uses
+              <a target="_blank" href="http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html">Cron notation</a>
         userInactivityLockout:
-            kind: panel.input.number
+            kind: panel.input.text
             id: userInactivityLockout
             name: inactivityBeforeLockout
             label: User Inactivity Lockout
-            description: Number of seconds of inactivity before an account is disabled (31556926 for 1 year)
+            description: >
+              Interval of inactivity before a user account is disabled. Uses
+              <a target="_blank" href="http://www.postgresql.org/docs/9.0/static/functions-datetime.html">PostgreSQL interval notation</a>
         inactivityBeforeLockoutSchedule:
             kind: panel.input.text
             id: inactivityBeforeLockoutSchedule
             name: inactivityBeforeLockoutSchedule
             label: Inactivity Lockout Schedule
-            description: How often to check user accounts for inactivity (0 0 1 * * * means it runs at 1AM every day). Uses
+            description: >
+              How often to check user accounts for inactivity (0 0 1 * * * means it runs at 1AM every day). Uses
               <a target="_blank" href="http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html">Cron notation</a>