diff --git a/scheduler.rules.inc b/scheduler.rules.inc
index 883e0fd..0accbb1 100644
--- a/scheduler.rules.inc
+++ b/scheduler.rules.inc
@@ -12,7 +12,7 @@ use Drupal\node\Entity\Node;
  * Implements hook_rules_event_info().
  */
 function scheduler_rules_event_info() {
-  // This hook function defines four Scheduler events which can be used by Rules
+  // This hook function defines six Scheduler events which can be used by Rules
   // to trigger other actions.
 
   // Create an array of variables, as these are the same for each of the events.
@@ -207,86 +207,3 @@ function scheduler_remove_unpublish_date_action(Node $node) {
     \Drupal::logger('scheduler')->warning('Scheduled unpublishing is not enabled for %type content. To prevent this message add the condition "Scheduled unpublishing is enabled" to your Rule, or enable the Scheduler options via the %type content type settings.', array('%type' => $type_name, 'link' => $settings_link));
   }
 }
-
-/**
- * Implements hook_rules_condition_info().
- */
-function scheduler_rules_condition_info() {
-  // Create a default, as most of the values are identical for all conditions.
-  $default = array(
-    'group' => t('Scheduler'),
-    'parameter' => array(
-      'node' => array(
-        'type' => 'node',
-        'label' => t('The node to test for scheduling properties'),
-        'description' => t('This can be a node object or node id'),
-      ),
-    ),
-  );
-
-  // 1. Condition to check if publishing is enabled for the content type.
-  $conditions['scheduler_condition_publishing_is_enabled'] = array(
-    'label' => t('Scheduled publishing is enabled for this content type')) + $default;
-
-  // 2. Condition to check if unpublishing is enabled for the content type.
-  $conditions['scheduler_condition_unpublishing_is_enabled'] = array(
-    'label' => t('Scheduled unpublishing is enabled for this content type')) + $default;
-
-  // 3. Condition to check if the node is scheduled for publishing.
-  $conditions['scheduler_condition_node_is_scheduled_for_publishing'] = array(
-    'label' => t('The node is scheduled for publishing')) + $default;
-
-  // 4. Condition to check if the node is scheduled for unpublishing.
-  $conditions['scheduler_condition_node_is_scheduled_for_unpublishing'] = array(
-    'label' => t('The node is scheduled for unpublishing')) + $default;
-
-  return $conditions;
-}
-
-/**
- * Determines whether scheduled publishing is enabled for this node type.
- *
- * @param \Drupal\node\Entity\Node $node
- *   A node object.
- * @return
- *   TRUE if scheduled publishing is enabled for the node type, FALSE if not.
- */
-function scheduler_condition_publishing_is_enabled(Node $node) {
-  return ($node->type->entity->getThirdPartySetting('scheduler', 'publish_enable', SCHEDULER_DEFAULT_PUBLISH_ENABLE));
-}
-
-/**
- * Determines whether scheduled unpublishing is enabled for this node type.
- *
- * @param \Drupal\node\Entity\Node $node
- *   A node object.
- * @return
- *   TRUE if scheduled unpublishing is enabled for the node type, FALSE if not.
- */
-function scheduler_condition_unpublishing_is_enabled(Node $node) {
-  return ($node->type->entity->getThirdPartySetting('scheduler', 'unpublish_enable', SCHEDULER_DEFAULT_UNPUBLISH_ENABLE));
-}
-
-/**
- * Determines whether a node is scheduled for publishing.
- *
- * @param \Drupal\node\Entity\Node $node
- *   A node object.
- * @return
- *   TRUE if the node is scheduled for publishing, FALSE if not.
- */
-function scheduler_condition_node_is_scheduled_for_publishing(Node $node) {
-  return !empty($node->publish_on->value);
-}
-
-/**
- * Determines whether a node is scheduled for unpublishing.
- *
- * @param \Drupal\node\Entity\Node $node
- *   A node object.
- * @return
- *   TRUE if the node is scheduled for unpublishing, FALSE if not.
- */
-function scheduler_condition_node_is_scheduled_for_unpublishing(Node $node) {
-  return !empty($node->unpublish_on->value);
-}
diff --git a/src/Plugin/Condition/PublishingIsEnabled.php b/src/Plugin/Condition/PublishingIsEnabled.php
new file mode 100644
index 0000000..5757efc
--- /dev/null
+++ b/src/Plugin/Condition/PublishingIsEnabled.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+* @file
+* Contains \Drupal\scheduler\Plugin\Condition\PublishingIsEnabled.
+*/
+
+namespace Drupal\scheduler\Plugin\Condition;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\rules\Core\RulesConditionBase;
+
+/**
+ * Provides a 'Publishing is enabled' condition.
+ *
+ * @Condition(
+ *   id = "scheduler_condition_publishing_is_enabled",
+ *   label = @Translation("Node type is enabled for scheduled publishing"),
+ *   category = @Translation("Scheduler"),
+ *   context = {
+ *     "node" = @ContextDefinition("entity:node",
+ *       label = @Translation("The node to test for scheduling properties")
+ *     )
+ *   }
+ * )
+ */
+class PublishingIsEnabled extends RulesConditionBase {
+
+  /**
+   * Determines whether scheduled publishing is enabled for this node type.
+   *
+   * @return
+   *   TRUE if scheduled publishing is enabled for the node type, FALSE if not.
+   */
+  public function evaluate() {
+    $node = $this->getContextValue('node');
+    return ($node->type->entity->getThirdPartySetting('scheduler', 'publish_enable', SCHEDULER_DEFAULT_PUBLISH_ENABLE));
+  }
+
+}
diff --git a/src/Plugin/Condition/UnpublishingIsEnabled.php b/src/Plugin/Condition/UnpublishingIsEnabled.php
new file mode 100644
index 0000000..bba7251
--- /dev/null
+++ b/src/Plugin/Condition/UnpublishingIsEnabled.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+* @file
+* Contains \Drupal\scheduler\Plugin\Condition\UnpublishingIsEnabled.
+*/
+
+namespace Drupal\scheduler\Plugin\Condition;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\rules\Core\RulesConditionBase;
+
+/**
+ * Provides 'Unpublishing is enabled' condition.
+ *
+ * @Condition(
+ *   id = "scheduler_condition_unpublishing_is_enabled",
+ *   label = @Translation("Node type is enabled for scheduled unpublishing"),
+ *   category = @Translation("Scheduler"),
+ *   context = {
+ *     "node" = @ContextDefinition("entity:node",
+ *       label = @Translation("The node to test for scheduling properties")
+ *     )
+ *   }
+ * )
+ */
+class UnpublishingIsEnabled extends RulesConditionBase {
+
+  /**
+   * Determines whether scheduled unpublishing is enabled for this node type.
+   *
+   * @return
+   *   TRUE if scheduled unpublishing is enabled for the node type, FALSE if not.
+   */
+  public function evaluate() {
+    $node = $this->getContextValue('node');
+    return ($node->type->entity->getThirdPartySetting('scheduler', 'unpublish_enable', SCHEDULER_DEFAULT_UNPUBLISH_ENABLE));
+  }
+
+}
diff --git a/src/Plugin/Condition/NodeIsScheduledForPublishing.php b/src/Plugin/Condition/NodeIsScheduledForPublishing.php
new file mode 100644
index 0000000..eeb9aa2
--- /dev/null
+++ b/src/Plugin/Condition/NodeIsScheduledForPublishing.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+* @file
+* Contains \Drupal\scheduler\Plugin\Condition\NodeIsScheduledForPublishing.
+*/
+
+namespace Drupal\scheduler\Plugin\Condition;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\rules\Core\RulesConditionBase;
+
+/**
+ * Provides 'Node is scheduled for publishing' condition.
+ *
+ * @Condition(
+ *   id = "scheduler_condition_node_scheduled_for_publishing",
+ *   label = @Translation("Node is scheduled for publishing"),
+ *   category = @Translation("Scheduler"),
+ *   context = {
+ *     "node" = @ContextDefinition("entity:node",
+ *       label = @Translation("The node to test for scheduling properties")
+ *     )
+ *   }
+ * )
+ */
+class NodeIsScheduledForPublishing extends RulesConditionBase {
+
+  /**
+   * Determines whether a node is scheduled for publishing.
+   *
+   * @param \Drupal\node\Entity\Node $node
+   *   A node object.
+   * @return
+   *   TRUE if the node is scheduled for publishing, FALSE if not.
+   */
+  public function evaluate() {
+    $node = $this->getContextValue('node');
+    return !empty($node->publish_on->value);
+  }
+}
diff --git a/src/Plugin/Condition/NodeIsScheduledForUnpublishing.php b/src/Plugin/Condition/NodeIsScheduledForUnpublishing.php
new file mode 100644
index 0000000..65bbd70
--- /dev/null
+++ b/src/Plugin/Condition/NodeIsScheduledForUnpublishing.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+* @file
+* Contains \Drupal\scheduler\Plugin\Condition\NodeIsScheduledForUnpublishing.
+*/
+
+namespace Drupal\scheduler\Plugin\Condition;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\rules\Core\RulesConditionBase;
+
+/**
+ * Provides 'Node is scheduled for unpublishing' condition.
+ *
+ * @Condition(
+ *   id = "scheduler_condition_node_scheduled_for_unpublishing",
+ *   label = @Translation("Node is scheduled for unpublishing"),
+ *   category = @Translation("Scheduler"),
+ *   context = {
+ *     "node" = @ContextDefinition("entity:node",
+ *       label = @Translation("The node to test for scheduling properties")
+ *     )
+ *   }
+ * )
+ */
+class NodeIsScheduledForUnpublishing extends RulesConditionBase {
+
+  /**
+   * Determines whether a node is scheduled for unpublishing.
+   *
+   * @param \Drupal\node\Entity\Node $node
+   *   A node object.
+   * @return
+   *   TRUE if the node is scheduled for unpublishing, FALSE if not.
+   */
+  public function evaluate() {
+    $node = $this->getContextValue('node');
+    return !empty($node->unpublish_on->value);
+  }
+}
