diff --git a/sps/lib/Drupal/sps/Condition/ConditionInterface.php b/sps/lib/Drupal/sps/Condition/ConditionInterface.php
new file mode 100644
index 0000000..fbf56ad
--- /dev/null
+++ b/sps/lib/Drupal/sps/Condition/ConditionInterface.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Drupal\sps\Condition;
+
+interface ConditionInterface {
+  /**
+   * Provide the config to allow this Condition to construct itself.
+   *
+   * @param $config
+   *  An associative array of configuration, generally provided by the
+   *  manager
+   * @return
+   *  null
+   */
+  public function setConfig($config);
+
+  /**
+   * Returns the consolidated Override for this Condition
+   *
+   * @return
+   *  An instance of a class which implements OverrideInterface
+   */
+  public function getOverride();
+
+  /**
+   * Returns the consolidated preview form for this Condition.
+   *
+   * @param $element
+   *  Either the full form being build, or a subform of the fullform.
+   *  Must have #parent set to designate parent keys which tree.
+   *
+   * @param $form_state
+   *  The full form_state for the form which is being built.
+   *
+   * @return
+   *  A FAPI array containing the form for this condition.
+   */
+  public function getElement(&$element, &$form_state);
+
+  /**
+   * Validates this Conditions preview form.
+   *
+   * This function should use form_set_error() to mark any fields
+   * which do not validate.
+   *
+   * @param $element
+   *  The form portion (element) which should be validated
+   * @param $form_state
+   *  The full form_state for the form which is being built. Note
+   *  that values my be treed as described by $elements #parent key
+   *
+   * @return
+   *  null
+   */
+  public function validateElement($element, &$form_state);
+
+  /**
+   * Submit this Conditions preview form.
+   *
+   * This function should take the values from the widgets and
+   * hand them off to the respective overrides.
+   *
+   * @param $element
+   *  The element (subform) which is being submitted.
+   * @param $form_state
+   *  The form state containing the submitted values. Note
+   *  that values my be treed as described by $elements #parent key
+   *
+   * @return
+   *  null
+   */
+  public function submitElement($element, &$form_state);
+}
diff --git a/sps/lib/Drupal/sps/Condition/PreviewConditionIterator.php b/sps/lib/Drupal/sps/Condition/PreviewConditionIterator.php
new file mode 100644
index 0000000..0a69425
--- /dev/null
+++ b/sps/lib/Drupal/sps/Condition/PreviewConditionIterator.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace Drupal\sps\PreviewCondition;
+
+use IteratorAggregate;
+
+class PreviewConditionIterator {//@TODO: implements  IteratorAggregate {
+
+}
diff --git a/sps/lib/Drupal/sps/Override/NodeDateOverride.php b/sps/lib/Drupal/sps/Override/NodeDateOverride.php
new file mode 100644
index 0000000..80521e0
--- /dev/null
+++ b/sps/lib/Drupal/sps/Override/NodeDateOverride.php
@@ -0,0 +1,55 @@
+<?php
+namespace Drupal\sps\Override;
+
+class NodeDateOverride extends Override {
+  private $timestamp;
+
+  /**
+   *  Create our NodeDateOverride.
+   *  Defaults timestamp to jan 1, 1970.
+   */
+  public function __construct() {
+    $this->timestamp = 0;
+  }
+
+	/**
+   * Returns a list of vid's to override the default vids to load.
+   *
+   * @return
+   *  An array of override vids.
+   */
+  public function getOverrides() {
+    //for right now just load node vids that are set to be published in the future
+    $results = db_select('node_revision', 'v')
+      ->fields('v', array('nid, vid'))
+      ->condition('status', 0)
+      ->condition('timestamp', $this->timestamp, '>')
+      ->execute();
+
+    return $results;
+  }
+
+  /**
+   * Set the data for this override.
+   *
+   * This method should be called before get overrides and provides the
+   * data which the override will use to find the available overrides.
+   *
+   * @param $timestamp
+   *    A unix timestamp.
+   */
+  public function setData($variables) {
+    $this->timestamp = $variables;
+  }
+
+  /**
+   * Overrides Override::getDataConsumerApi()
+   * Provides the data type for this override.
+   *
+   * @return
+   *   A string defining the data type
+   */
+  public function getDataConsumerApi() {
+    return 'unixtimestamp';
+  }
+}
\ No newline at end of file
diff --git a/sps/lib/Drupal/sps/Override/Override.php b/sps/lib/Drupal/sps/Override/Override.php
new file mode 100644
index 0000000..0336109
--- /dev/null
+++ b/sps/lib/Drupal/sps/Override/Override.php
@@ -0,0 +1,37 @@
+<?php
+namespace Drupal\sps\Override;
+
+use Drupal\sps\OverrideInterface;
+
+abstract class Override implements OverrideInterface{
+	/**
+   * Construct an array of override arrays.
+   *
+   * @return
+   *    An array of override arrays
+   */
+  abstract public function getOverrides();
+
+  /**
+   * Set the data for this override.
+   *
+   * This method should be called before get overrides and provides the
+   * data which the override will use to find the available overrides.
+   *
+   * @param $variables
+   *    The data in the format specified by this overrides implementation
+   *    of getDataConsumerApi().
+   */
+  abstract public function setData($variables);
+
+  /**
+   * Report which data api this Override can consume.
+   *
+   * This allows overrides and widgets to be matched based on the
+   * type of data which they consume and provide (respectively).
+   *
+   * @return
+   *    A string designating the data api this override accepts
+   */
+  abstract public function getDataConsumerApi();
+}
\ No newline at end of file
diff --git a/sps/lib/Drupal/sps/OverrideInterface.php b/sps/lib/Drupal/sps/OverrideInterface.php
index 6cbf3b0..199ccbd 100644
--- a/sps/lib/Drupal/sps/OverrideInterface.php
+++ b/sps/lib/Drupal/sps/OverrideInterface.php
@@ -1,5 +1,34 @@
 <?php
 namespace Drupal\sps;
 interface OverrideInterface {
- public function getOverrides();
-}
+  /**
+   * Construct an array of override arrays.
+   *
+   * @return
+   *    An array of override arrays
+   */
+  public function getOverrides();
+
+  /**
+   * Set the data for this override.
+   *
+   * This method should be called before get overrides and provides the
+   * data which the override will use to find the available overrides.
+   *
+   * @param $variables
+   *    The data in the format specified by this overrides implementation
+   *    of getDataConsumerApi().
+   */
+  public function setData($variables);
+
+  /**
+   * Report which data api this Override can consume.
+   *
+   * This allows overrides and widgets to be matched based on the
+   * type of data which they consume and provide (respectively).
+   *
+   * @return
+   *    A string designating the data api this override accepts
+   */
+  public function getDataConsumerApi();
+}
\ No newline at end of file
diff --git a/sps/lib/Drupal/sps/PreviewCondition/PreviewConditionInterface.php b/sps/lib/Drupal/sps/PreviewCondition/PreviewConditionInterface.php
deleted file mode 100644
index 961965e..0000000
--- a/sps/lib/Drupal/sps/PreviewCondition/PreviewConditionInterface.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Drupal\sps\PreviewCondition;
-
-interface PreviewConditionInterface {
-
-}
diff --git a/sps/lib/Drupal/sps/PreviewCondition/PreviewConditionIterator.php b/sps/lib/Drupal/sps/PreviewCondition/PreviewConditionIterator.php
deleted file mode 100644
index 0a69425..0000000
--- a/sps/lib/Drupal/sps/PreviewCondition/PreviewConditionIterator.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-namespace Drupal\sps\PreviewCondition;
-
-use IteratorAggregate;
-
-class PreviewConditionIterator {//@TODO: implements  IteratorAggregate {
-
-}
diff --git a/sps/lib/Drupal/sps/Test/Override.php b/sps/lib/Drupal/sps/Test/Override.php
index 1541f54..516ce3d 100644
--- a/sps/lib/Drupal/sps/Test/Override.php
+++ b/sps/lib/Drupal/sps/Test/Override.php
@@ -1,11 +1,17 @@
 <?php
 namespace Drupal\sps\Test;
-class Override implements \Drupal\sps\OverrideInterface{
+class Override extends Drupal\sps\Override\Override {
   public $table = array();
-  public function __construct($table) {
-    $this->table = $table;
-  }
+
   public function getOverrides() {
     return $this->table;
   }
+
+  public function setData($table) {
+    $this->table = $table;
+  }
+
+  public function getDataConsumerApi() {
+    return 'test';
+  }
 }
diff --git a/sps/lib/Drupal/sps/WidgetInterface.php b/sps/lib/Drupal/sps/WidgetInterface.php
new file mode 100644
index 0000000..9d00a8f
--- /dev/null
+++ b/sps/lib/Drupal/sps/WidgetInterface.php
@@ -0,0 +1,45 @@
+<?php
+namespace Drupal\sps;
+interface WidgetInterface {
+  /**
+   * Provide the widget's preview form to be aggregated into the
+   * full preview form.
+   *
+   * @param $form
+   *   The form array to add the widget's preview form into.  Generally
+   *   this an empty array
+   * @param $form_state
+   *   The current $form_state for the form being built
+   *
+   * @return
+   *   A FAPI array.
+   */
+  public function getPreviewForm(&$form, &$form_state);
+
+  /**
+   * Validate the form section for this widget.  Use form_set_error()
+   * to designate an error on the form.
+   *
+   * @param $form
+   *   The form section for this widget
+   * @param $form_state
+   *   The form_state from the general form, with only this widget's values
+   *
+   * @return
+   *   null
+   */
+  public function validatePreviewForm($form, &$form_state);
+
+  /**
+   * Extract values from the form_state and format them as needed.
+   *
+   * @param $form
+   *   This widget's subsection of the form
+   * @param $form_state
+   *   The subsection of the form_state related to this widget
+   *
+   * @return
+   *   A value corresponding to the data api type this widget implements
+   */
+  public function extractValues($form, $form_state);
+}
\ No newline at end of file
