--- a/src/EntitySettings/WebformEntitySettingsFormForm.php	2019-07-19 18:27:46.000000000 -0400
+++ b/src/EntitySettings/WebformEntitySettingsFormForm.php	2019-08-14 23:00:46.264347189 -0400
@@ -700,6 +700,12 @@
         'all_description' => $this->t('Unsaved warning is enabled for all forms.'),
         'form_description' => $this->t('If checked, users will be displayed a warning message when they navigate away from a form with unsaved changes.'),
       ],
+      'form_submit_save_destination' => [
+        'group' => $this->t('Navigation'),
+        'title' => $this->t('Enable ?destination= with Save button'),
+        'all_description' => $this->t('The ?destination= argument is enabled for all forms.'),
+        'form_description' => $this->t('If checked, clicking the Save button will process the ?destination= argument if it exists in the URL.'),
+      ],
 
       // Validation.
       'form_novalidate' => [
--- a/src/Form/AdminConfig/WebformAdminConfigFormsForm.php	2019-07-19 18:27:46.000000000 -0400
+++ b/src/Form/AdminConfig/WebformAdminConfigFormsForm.php	2019-08-14 23:03:44.931000423 -0400
@@ -233,6 +233,12 @@
         'title' => $this->t('Warn users about unsaved changes for all webforms'),
         'description' => $this->t('If checked, users will be displayed a warning message when they navigate away from a webform with unsaved changes.'),
       ],
+      'default_form_submit_save_destination' => [
+        'group' => $this->t('Navigation'),
+        'title' => $this->t('Enable ?destination= with Save button for all webforms'),
+        'description' => $this->t('If checked, clicking the Save button will process the ?destination= argument if it exists in the URL.'),
+      ],
+
       // Validation.
       'default_form_novalidate' => [
         'group' => $this->t('Validation'),
--- a/src/Entity/Webform.php	2019-07-19 18:27:46.000000000 -0400
+++ b/src/Entity/Webform.php	2019-08-14 23:20:28.989461189 -0400
@@ -952,6 +952,7 @@
       'form_disable_inline_errors' => FALSE,
       'form_required' => FALSE,
       'form_unsaved' => FALSE,
+      'form_submit_save_destination' => FALSE,
       'form_disable_back' => FALSE,
       'form_submit_back' => FALSE,
       'form_autofocus' => FALSE,
--- a/config/install/webform.settings.yml	2019-07-19 18:27:46.000000000 -0400
+++ b/config/install/webform.settings.yml	2019-08-15 09:02:55.164311499 -0400
@@ -15,6 +15,7 @@
   default_form_disable_back: false
   default_form_submit_back: false
   default_form_unsaved: false
+  default_form_submit_save_destination: false
   default_form_novalidate: false
   default_form_disable_inline_errors: false
   default_form_required: false
--- a/config/schema/webform.settings.schema.yml	2019-07-19 18:27:46.000000000 -0400
+++ b/config/schema/webform.settings.schema.yml	2019-08-14 23:17:44.757522024 -0400
@@ -60,6 +60,9 @@
         default_form_unsaved:
           type: boolean
           label: 'Warn users about unsaved changes'
+        default_form_submit_save_destination:
+          type: boolean
+          label: 'Enable ?destination= with Save button'
         default_form_disable_back:
           type: boolean
           label: 'Disable back button'
--- a/config/schema/webform.entity.webform.schema.yml	2019-07-19 18:27:46.000000000 -0400
+++ b/config/schema/webform.entity.webform.schema.yml	2019-08-14 23:18:32.940623802 -0400
@@ -120,6 +120,9 @@
         form_unsaved:
           type: boolean
           label: 'Warn users about unsaved changes'
+        form_submit_save_destination:
+          type: boolean
+          label: 'Enable ?destination= with Save button'
         form_disable_back:
           type: boolean
           label: 'Disable back button'
--- a/src/WebformSubmissionForm.php	2019-07-19 18:27:46.000000000 -0400
+++ b/src/WebformSubmissionForm.php	2019-08-14 23:38:42.167281544 -0400
@@ -1531,6 +1531,20 @@
    *   The current state of the form.
    */
   public function rebuild(array &$form, FormStateInterface $form_state) {
+    // If ?destination is set, don't rebuild the form instead allow the form
+    // to be redirected to the ?destination.
+    $webform = $this->entity->getWebform();
+    if ( $webform->getSetting('form_submit_save_destination') &&
+         $this->getRequest()->get('destination') &&
+         in_array('::save',$form_state->getTriggeringElement()['#submit'])) {
+      // Display draft saved message.
+      if ($form_state->get('draft_saved')) {
+        $this->getMessageManager()->display(WebformMessageManagerInterface::SUBMISSION_DRAFT_SAVED_MESSAGE);
+        $form_state->set('draft_saved', FALSE);
+      }
+      return;
+    }
+
     $form_state->setRebuild();
   }
 
@@ -1648,11 +1662,12 @@
 
     // Rebuild or reset the form if reloading the current form via AJAX.
     if ($this->isAjax()) {
-      // On update, rebuild and display message unless ?destination= is set.
+      // On update, rebuild and display message.
       // @see \Drupal\webform\WebformSubmissionForm::setConfirmation
       $state = $webform_submission->getState();
       if ($state === WebformSubmissionInterface::STATE_UPDATED) {
-        if (!$this->getRequest()->get('destination')) {
+        $webform = $this->entity->getWebform();
+        if ($webform->getSetting('form_submit_save_destination') || !$this->getRequest()->get('destination')) {
           static::rebuild($form, $form_state);
         }
       }
