     ## we also don't need to do anything, because at the end of running the
     ## notifier will check for any new notifications to schedule.
     if username of notifiers
-      if notifiers[username].running or notifiers[username].time.getTime() <= time.getTime()
-        return
-      else
+      return if notifiers[username].running
+      return if notifiers[username].base.getTime() <= base.getTime()
+    else
+      notifiers[username] =
+        base: base
+    notificationReschedule user
+
+  notificationReschedule = (user) ->
+    ## Call this once notifiers[username].base has been set,
+    ## and either the timeout hasn't been scheduled yet (notifiactionSchedule)
+    ## or the user's notification parameters have changed so the timeout
+    ## might need to be rescheduled.
+    username = user.username ? user
+    if username of notifiers
+      return if notifiers[username].running
+      time = notificationTime notifiers[username].base, user
+      return if time.getTime() == notifiers[username].time?.getTime()
+      if notifiers[username].timeout?
         Meteor.clearTimeout notifiers[username].timeout
-    now = new Date()
-    #console.log notification, '@', time.getTime() - now.getTime()
-    notifiers[username] =
-      time: time
-      timeout:
+      notifiers[username].time = time
+      now = new Date()
+      #console.log username, '@', time.getTime() - now.getTime()
+      notifiers[username].timeout =
         Meteor.setTimeout ->
           notificationDo username
         , Math.max(minSchedule, time.getTime() - now.getTime())

      text: text
      headers: autoHeaders

  ## Reschedule any leftover notifications from last server run.
  Meteor.startup ->
    Notifications.find
      seen: false
    .forEach (notification) ->
      try
        notificationSchedule notification
      catch e
        console.warn 'Could not schedule', notification, ':', e

  ## Watch for change in notification frequency.
  

  minSchedule = 1000

  notificationSchedule = (notification, user = notification.to) ->
    base = dateMin(notification.dates...)
    username = user.username ? user
    ## If a batch notification is already scheduled earlier than this one
    ## would be, then that will cover this notification, so we don't need to
