diff --git a/config/schema/scheduler.schema.yml b/config/schema/scheduler.schema.yml
index ee4060e..2b60bb1 100644
--- a/config/schema/scheduler.schema.yml
+++ b/config/schema/scheduler.schema.yml
@@ -30,6 +30,12 @@ node.type.*.third_party.scheduler:
   type: mapping
   label: 'Scheduler content type settings'
   mapping:
+    expand_fieldset:
+      type: string
+      label: 'Under which conditions the date input fieldset will be expanded'
+    fields_display_mode:
+      type: string
+      label: 'The way the scheduling fields will be displayed in the node form'
     publish_enable:
       type: boolean
       label: 'Enable scheduled publishing'
@@ -54,9 +60,3 @@ node.type.*.third_party.scheduler:
     unpublish_revision:
       type: boolean
       label: 'Create a new revision on unpublishing'
-    use_vertical_tabs:
-      type: boolean
-      label: 'Display the scheduling fields in vertical tabs'
-    expand_fieldset:
-      type: boolean
-      label: 'Always expand the scheduler date input fieldset'
diff --git a/scheduler.admin.inc b/scheduler.admin.inc
index a71f8ef..b20818e 100644
--- a/scheduler.admin.inc
+++ b/scheduler.admin.inc
@@ -146,20 +146,20 @@ function _scheduler_form_node_type_form_alter(array &$form, FormStateInterface $
   $form['scheduler']['node_edit_layout']['scheduler_use_vertical_tabs'] = array(
     '#type' => 'radios',
     '#title' => t('Display scheduling options as'),
-    '#default_value' => $type->getThirdPartySetting('scheduler', 'use_vertical_tabs', TRUE),
+    '#default_value' => $type->getThirdPartySetting('scheduler', 'fields_display_mode', SCHEDULER_DEFAULT_FIELDS_DISPLAY_MODE),
     '#options' => array(
-      '1' => t('Vertical tab'),
-      '0' => t('Separate fieldset'),
+      'vertical_tab' => t('Vertical tab'),
+      'fieldset' => t('Separate fieldset'),
     ),
     '#description' => t('Use this option to specify how the scheduling options will be displayed when editing a node.'),
   );
   $form['scheduler']['node_edit_layout']['scheduler_expand_fieldset'] = array(
     '#type' => 'radios',
     '#title' => t('Expand fieldset or vertical tab'),
-    '#default_value' => $type->getThirdPartySetting('scheduler', 'expand_fieldset', FALSE),
+    '#default_value' => $type->getThirdPartySetting('scheduler', 'expand_fieldset', SCHEDULER_DEFAULT_EXPAND_FIELDSET),
     '#options' => array(
-      '0' => t('Expand only when a scheduled date exists or when a date is required'),
-      '1' => t('Always open the fieldset or vertical tab'),
+      'when_required' => t('Expand only when a scheduled date exists or when a date is required'),
+      'always' => t('Always open the fieldset or vertical tab'),
     ),
   );
 
@@ -171,6 +171,7 @@ function _scheduler_form_node_type_form_alter(array &$form, FormStateInterface $
  */
 function scheduler_form_node_type_form_builder($entity_type, NodeTypeInterface $type, &$form, FormStateInterface $form_state) {
   $type->setThirdPartySetting('scheduler', 'expand_fieldset', $form_state->getValue('scheduler_expand_fieldset'));
+  $type->setThirdPartySetting('scheduler', 'fields_display_mode', $form_state->getValue('scheduler_fields_display_mode'));
   $type->setThirdPartySetting('scheduler', 'publish_enable', $form_state->getValue('scheduler_publish_enable'));
   $type->setThirdPartySetting('scheduler', 'publish_past_date', $form_state->getValue('scheduler_publish_past_date'));
   $type->setThirdPartySetting('scheduler', 'publish_required', $form_state->getValue('scheduler_publish_required'));
@@ -179,5 +180,4 @@ function scheduler_form_node_type_form_builder($entity_type, NodeTypeInterface $
   $type->setThirdPartySetting('scheduler', 'unpublish_enable', $form_state->getValue('scheduler_unpublish_enable'));
   $type->setThirdPartySetting('scheduler', 'unpublish_required', $form_state->getValue('scheduler_unpublish_required'));
   $type->setThirdPartySetting('scheduler', 'unpublish_revision', $form_state->getValue('scheduler_unpublish_revision'));
-  $type->setThirdPartySetting('scheduler', 'use_vertical_tabs', $form_state->getValue('scheduler_use_vertical_tabs'));
 }
diff --git a/scheduler.module b/scheduler.module
index c1928c0..358dbf9 100644
--- a/scheduler.module
+++ b/scheduler.module
@@ -32,6 +32,8 @@ define('SCHEDULER_TIME_LETTERS', 'hHgGisaA');
 // Specify defaults for the content-type default settings, which should be used
 // as a consistent third parameter for getThirdPartySetting() calls.
 define('SCHEDULER_DEFAULT_PUBLISH_PAST_DATE', 'error');
+define('SCHEDULER_DEFAULT_FIELDS_DISPLAY_MODE', 'vertical_tab');
+define('SCHEDULER_DEFAULT_EXPAND_FIELDSET', 'when_required');
 
 /**
  * Implements hook_menu().
@@ -105,7 +107,7 @@ function scheduler_form_node_form_alter(&$form, FormStateInterface $form_state)
   $type = $form_state->getFormObject()->getEntity()->type->entity;
   $publishing_enabled = $type->getThirdPartySetting('scheduler', 'publish_enable', FALSE);
   $unpublishing_enabled = $type->getThirdPartySetting('scheduler', 'unpublish_enable', FALSE);
-  $use_vertical_tabs = $type->getThirdPartySetting('scheduler', 'use_vertical_tabs', TRUE);
+  $use_vertical_tabs = $type->getThirdPartySetting('scheduler', 'fields_display_mode', SCHEDULER_DEFAULT_FIELDS_DISPLAY_MODE) === 'vertical_tab';
 
   $date_format = \Drupal::config('scheduler.settings')->get('date_format');
   $date_only_format = \Drupal::config('scheduler.settings')->get('date_only_format');
@@ -128,9 +130,13 @@ function scheduler_form_node_form_alter(&$form, FormStateInterface $form_state)
   // If either publishing or unpublishing is enabled, provide a field group to
   // wrap the scheduling fields.
   if ($publishing_enabled || $unpublishing_enabled) {
-    // Expand the fieldset if either publishing or unpublishing is required, or
-    // if the fieldset was configured to be expanded.
-    $expand_details = $publishing_required || $unpublishing_required || $type->getThirdPartySetting('scheduler', 'expand_fieldset', FALSE);
+    // Expand the fieldset if either publishing or unpublishing is required, if
+    // the fieldset was configured to always be expanded, or if the fields
+    // already contain data.
+    $always_expand = $type->getThirdPartySetting('scheduler', 'expand_fieldset', SCHEDULER_DEFAULT_EXPAND_FIELDSET) === 'always';
+    $has_data = !empty($node->publish_on->value) || !empty($node->unpublish_on->value);
+    $is_required = $publishing_required || $unpublishing_required;
+    $expand_details = $always_expand || $has_data || $is_required;
 
     // Create the group for the fields.
     $form['scheduler_settings'] = array(
diff --git a/src/Tests/SchedulerFunctionalTest.php b/src/Tests/SchedulerFunctionalTest.php
index 4e0ad32..30f761c 100644
--- a/src/Tests/SchedulerFunctionalTest.php
+++ b/src/Tests/SchedulerFunctionalTest.php
@@ -218,7 +218,7 @@ class SchedulerFunctionalTest extends SchedulerTestBase {
     $this->assertTrue($this->xpath('//div[contains(@class, "form-type-vertical-tabs")]//details[@id = "edit-scheduler-settings"]'), 'By default the scheduler dates are shown in a vertical tab.');
 
     // Check that the dates are shown as a fieldset when configured to do so.
-    $node_type->setThirdPartySetting('scheduler', 'use_vertical_tabs', FALSE)->save();
+    $node_type->setThirdPartySetting('scheduler', 'fields_display_mode', 'fieldset')->save();
     $this->drupalGet('node/add/page');
     $this->assertFalse($this->xpath('//div[contains(@class, "form-type-vertical-tabs")]//details[@id = "edit-scheduler-settings"]'), 'The scheduler dates are not shown in a vertical tab when they are configured to show as a fieldset.');
     $this->assertTrue($this->xpath('//details[@id = "edit-scheduler-settings" and not(@open = "open")]'), 'The scheduler dates are shown in a collapsed fieldset when they are configured to show as a fieldset.');
@@ -237,13 +237,13 @@ class SchedulerFunctionalTest extends SchedulerTestBase {
     // Check that the fieldset is expanded if that option is set.
     $node_type->setThirdPartySetting('scheduler', 'publish_required', FALSE)
               ->setThirdPartySetting('scheduler', 'unpublish_required', FALSE)
-              ->setThirdPartySetting('scheduler', 'expand_fieldset', TRUE)->save();
+              ->setThirdPartySetting('scheduler', 'expand_fieldset', 'always')->save();
     $this->drupalGet('node/add/page');
     $this->assertTrue($this->xpath('//details[@id = "edit-scheduler-settings" and @open = "open"]'), 'The scheduler dates are shown in an expanded fieldset when the option to always expand is turned on.');
 
     // Check that the fieldset is expanded if the node already has a publish-on
     // date. This requires editing an existing scheduled node.
-    $node_type->setThirdPartySetting('scheduler', 'expand_fieldset', FALSE)->save();
+    $node_type->setThirdPartySetting('scheduler', 'expand_fieldset', 'when_required')->save();
     $options = [
       'title' => 'Contains Publish-on date ' . $this->randomMachineName(10),
       'type' => 'page',
