diff --git a/scheduler.cron.inc b/scheduler.cron.inc
index 570bbdb..5625007 100644
--- a/scheduler.cron.inc
+++ b/scheduler.cron.inc
@@ -139,7 +139,7 @@ function _scheduler_unpublish() {
     $unpublish_on = $node->unpublish_on;
     $node->set('changed', $unpublish_on);
 
-    $create_unpublishing_revision = variable_get('scheduler_unpublish_revision_' . $node->getType(), 0) == 1;
+    $create_unpublishing_revision = $node->type->entity->getThirdPartySetting('scheduler', 'unpublish_revision', FALSE);
     if ($create_unpublishing_revision) {
       $node->setNewRevision();
       // Use a core date format to guarantee a time is included.
diff --git a/scheduler.module b/scheduler.module
index 03fb2a4..2a44dd1 100644
--- a/scheduler.module
+++ b/scheduler.module
@@ -336,13 +336,14 @@ function scheduler_node_validate($node, array $form, FormStateInterface $form_st
   // already converted. This is needed because Drupal 6 removed 'submit' and
   // added 'presave' and all this happens at different times.
   $date_format = \Drupal::config('scheduler.settings')->get('date_format');
+  $type = $node->type->entity;
 
   if (!empty($node->publish_on->value) && !is_numeric($node->publish_on->value)) {
     $publishtime = $node->publish_on->value;
     if ($publishtime === FALSE) {
       $form_state->setErrorByName('publish_on', t("The 'publish on' value does not match the expected format of %time", array('%time' => format_date(REQUEST_TIME, 'custom', $date_format))));
     }
-    elseif ($publishtime && variable_get('scheduler_publish_past_date_' . $node->getType(), 'error') == 'error' && $publishtime < REQUEST_TIME) {
+    elseif ($publishtime && $type->getThirdPartySetting('scheduler', 'scheduler_publish_past_date', 'error') == 'error' && $publishtime < REQUEST_TIME) {
       $form_state->setErrorByName('publish_on', t("The 'publish on' date must be in the future"));
     }
   }
@@ -363,7 +364,7 @@ function scheduler_node_validate($node, array $form, FormStateInterface $form_st
 
   // The unpublish-on 'required' form attribute may not be set in some cases,
   // but a value must be entered if also setting a publish-on date.
-  if (variable_get('scheduler_unpublish_required_' . $node->getType()) && !empty($node->publish_on->value) && empty($node->unpublish_on->value)) {
+  if ($type->getThirdPartySetting('scheduler', 'scheduler_unpublish_required') && !empty($node->publish_on->value) && empty($node->unpublish_on->value)) {
     $form_state->setErrorByName('unpublish_on', t("If you set a 'publish-on' date then you must also set an 'unpublish-on' date."));
   }
 }
@@ -536,9 +537,9 @@ function scheduler_field_extra_fields() {
   $fields = array();
 
   foreach (node_type_get_types() as $type) {
-    $publishing_enabled = variable_get('scheduler_publish_enable_' . $type->type, 0);
-    $unpublishing_enabled = variable_get('scheduler_unpublish_enable_' . $type->type, 0);
-    $use_vertical_tabs = variable_get('scheduler_use_vertical_tabs_' . $type->type, 1);
+    $publishing_enabled = $type->type->entity->getThirdPartySetting('scheduler', 'scheduler_publish_enable', 0);
+    $unpublishing_enabled = $type->type->entity->getThirdPartySetting('scheduler', 'scheduler_unpublish_enable', 0);
+    $use_vertical_tabs = $type->type->entity->getThirdPartySetting('scheduler', 'scheduler_use_vertical_tabs', 1);
 
     if (($publishing_enabled || $unpublishing_enabled) && !$use_vertical_tabs) {
       $fields['node'][$type->type]['form']['scheduler_settings'] = array(
@@ -579,17 +580,14 @@ function scheduler_preprocess_node(&$variables) {
 function scheduler_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_name) {
   // Scheduler module only works on nodes.
   if ($entity_type == 'node') {
-    $publishing_enabled = variable_get('scheduler_publish_enable_' . $bundle_name, 0);
-    $unpublishing_enabled = variable_get('scheduler_unpublish_enable_' . $bundle_name, 0);
-
-    if ($publishing_enabled) {
+    if ($entity_type->getThirdPartySetting('scheduler', 'scheduler_publish_enable')) {
       $targets['publish_on'] = array(
         'name' => t('Scheduler: publish on'),
         'description' => t('The date when the Scheduler module will publish the node.'),
         'callback' => 'scheduler_feeds_set_target',
       );
     }
-    if ($unpublishing_enabled) {
+    if ($entity_type->getThirdPartySetting('scheduler', 'scheduler_unpublish_enable')) {
       $targets['unpublish_on'] = array(
         'name' => t('Scheduler: unpublish on'),
         'description' => t('The date when the Scheduler module will unpublish the node.'),
@@ -651,13 +649,13 @@ function scheduler_i18n_sync_options($entity_type, $bundle_name) {
   if ($entity_type == 'node') {
     $options = array();
     // $bundle_name holds the content_type.
-    if (variable_get('scheduler_publish_enable_' . $bundle_name, 0)) {
+    if ($entity_type->getThirdPartySetting('scheduler', 'scheduler_publish_enable')) {
       $options['publish_on'] = array(
         'title' => t('Publish on'),
         'description' => t('Scheduler Publish date and time'),
       );
     }
-    if (variable_get('scheduler_unpublish_enable_' . $bundle_name, 0)) {
+    if ($entity_type->getThirdPartySetting('scheduler', 'scheduler_unpublish_enable')) {
       $options['unpublish_on'] = array(
         'title' => t('Unpublish on'),
         'description' => t('Scheduler Unpublish date and time'),
diff --git a/scheduler.rules.inc b/scheduler.rules.inc
index 1ee8675..092a2cb 100644
--- a/scheduler.rules.inc
+++ b/scheduler.rules.inc
@@ -131,7 +131,7 @@ function scheduler_set_publish_date_action(Node $node, $date) {
   // hook_node_presave() and hook_node_update() will be executed anyway. But if
   // this action is being used to schedule a different node then we need to call
   // the functions directly here.
-  if (variable_get('scheduler_publish_enable_' . $node->getType(), 0)) {
+  if ($node->type->entity->getThirdPartySetting('scheduler', 'scheduler_publish_enable')) {
     $node->publish_on->value = $date;
     scheduler_node_presave($node);
     scheduler_node_update($node);
@@ -152,7 +152,7 @@ function scheduler_set_publish_date_action(Node $node, $date) {
  *   The date for unpublishing, a unix timestamp integer.
  */
 function scheduler_set_unpublish_date_action(Node $node, $date) {
-  if (variable_get('scheduler_unpublish_enable_' . $node->getType(), 0)) {
+  if ($node->type->entity->getThirdPartySetting('scheduler', 'scheduler_unpublish_enable')) {
     $node->unpublish_on->value = $date;
     scheduler_node_presave($node);
     scheduler_node_update($node);
@@ -173,7 +173,7 @@ function scheduler_set_unpublish_date_action(Node $node, $date) {
  *   The node object from which to remove the publish_on date.
  */
 function scheduler_remove_publish_date_action(Node $node) {
-  if (variable_get('scheduler_publish_enable_' . $node->getType(), 0)) {
+  if ($node->type->entity->getThirdPartySetting('scheduler', 'scheduler_publish_enable')) {
     $node->publish_on->value = 0;
     scheduler_node_presave($node);
     scheduler_node_update($node);
@@ -194,7 +194,7 @@ function scheduler_remove_publish_date_action(Node $node) {
  *   The node object from which to remove the unpublish_on date.
  */
 function scheduler_remove_unpublish_date_action(Node $node) {
-  if (variable_get('scheduler_unpublish_enable_' . $node->getType(), 0)) {
+  if ($node->type->entity->getThirdPartySetting('scheduler', 'scheduler_unpublish_enable')) {
     $node->unpublish_on->value = 0;
     scheduler_node_presave($node);
     scheduler_node_update($node);
@@ -252,7 +252,7 @@ function scheduler_rules_condition_info() {
  *   TRUE if scheduled publishing is enabled for the node type, FALSE if not.
  */
 function scheduler_condition_publishing_is_enabled(Node $node) {
-  return (variable_get('scheduler_publish_enable_' . $node->getType(), 0) == 1);
+  return ($node->type->entity->getThirdPartySetting('scheduler', 'scheduler_publish_enable', 0) == 1);
 }
 
 /**
@@ -264,7 +264,7 @@ function scheduler_condition_publishing_is_enabled(Node $node) {
  *   TRUE if scheduled unpublishing is enabled for the node type, FALSE if not.
  */
 function scheduler_condition_unpublishing_is_enabled(Node $node) {
-  return (variable_get('scheduler_unpublish_enable_' . $node->getType(), 0) == 1);
+  return ($node->type->entity->getThirdPartySetting('scheduler', 'scheduler_unpublish_enable', 0) == 1);
 }
 
 /**
diff --git a/scheduler.test b/scheduler.test
index 87f601b..6db0c9c 100644
--- a/scheduler.test
+++ b/scheduler.test
@@ -176,6 +176,7 @@ class SchedulerFunctionalTest extends SchedulerTestBase {
    */
   public function setUp() {
     parent::setUp('scheduler');
+    $config = \Drupal::config('scheduler.settings');
 
     // Create a 'Basic Page' content type.
     $this->drupalCreateContentType(array('type' => 'page', 'name' => t('Basic page')));
@@ -193,8 +194,9 @@ class SchedulerFunctionalTest extends SchedulerTestBase {
     ));
 
     // Add scheduler functionality to the page node type.
-    variable_set('scheduler_publish_enable_page', 1);
-    variable_set('scheduler_unpublish_enable_page', 1);
+    $config->set('scheduler_publish_enable_page', 1);
+    $config->set('scheduler_unpublish_enable_page', 1);
+    $config->save();
   }
 
   /**
