         pickerMenu.close()
         presetMenu.close()
         button.close()
-
-        loading = ->
-          button.addClass M.CLS_LOADER
-          return
-        reset = ->
+        button.addClass M.CLS_LOADER
+        props.when = wen
+        (@onSchedule props).always ->
           button.removeClass M.CLS_LOADER
           return
-
-        props.when = wen
-        @onSchedule props, loading, reset
-
         return
 
       isValid = =>

      if (errorCodeAvailable and error.code is'authMissing') or
      (status is 'parsererror' and M.isAuthorisationErrorPage responseText) or
      (M.isAuthorisationErrorResponse status)
        @gettingStarted params ? {}
      else
        getMessage = ->
          if errorCodeAvailable

        throw __msg 'errorNotWithinAConversation'
      id

    onSchedule: (props) =>
      try
        messageId = @getMessageId()
      catch e
        @onScheduleError null, null, e.toString(), ''
        return

      data =
        msgId: messageId
        when:  props.when

      data.markUnread = true              if !!props.unread
      data.starIt = true                  if !!props.star
      data.onlyIfNoAnswer = true          if !!props.noanswer
      data.moveToInbox = true             if !!props.inbox
      data.archiveAfterScheduling = true  if !!props.archive

      log 'scheduling mail...', data

      url = @getServiceURL() + M.SCHEDULE_SUFFIX

      success = =>
        chrome.extension.sendMessage
          action:   'notification'
          icon:     'images/tie.svg'
          title:     __msg 'notificationScheduleSuccessTitle'
          message:   __msg 'notificationScheduleSuccess'
        @activateArchiveButton() if data.archiveAfterScheduling
        return

      error = (status, error, responseText) =>
        @onScheduleError status, data, error, responseText
        return

      ($.post url, data, null, 'json')
      .done (resp, textStatus, jqXHR) ->
        if resp.success
          success()
        else
          error textStatus, resp.error, jqXHR.responseText
        return
      .fail (jqXHR, textStatus, reason) ->
        error textStatus, reason, jqXHR.responseText
        return
      .promise()

    createDialog: (title, okButton, cancelButton) ->
      dialog = new GMailUI.ModalDialog title
