diff --git a/CRM/Dataprocessor/BAO/DataProcessor.php b/CRM/Dataprocessor/BAO/DataProcessor.php
index c25dfef8001abb413464f340955ce3f906691412..923f5e18b8843c8d980258b8acad35efe944e1b9 100644
--- a/CRM/Dataprocessor/BAO/DataProcessor.php
+++ b/CRM/Dataprocessor/BAO/DataProcessor.php
@@ -115,8 +115,8 @@ class CRM_Dataprocessor_BAO_DataProcessor extends CRM_Dataprocessor_DAO_DataProc
     CRM_Utils_Hook::pre('delete', 'DataProcessor', $id, CRM_Core_DAO::$_nullArray);
 
     CRM_Dataprocessor_BAO_Output::deleteWithDataProcessorId($id);
-    CRM_Dataprocessor_BAO_Filter::deleteWithDataProcessorId($id);
-    CRM_Dataprocessor_BAO_Field::deleteWithDataProcessorId($id);
+    CRM_Dataprocessor_BAO_DataProcessorFilter::deleteWithDataProcessorId($id);
+    CRM_Dataprocessor_BAO_DataProcessorField::deleteWithDataProcessorId($id);
     CRM_Dataprocessor_BAO_Source::deleteWithDataProcessorId($id);
 
     $dataProcessor = new CRM_Dataprocessor_DAO_DataProcessor();
@@ -274,8 +274,8 @@ class CRM_Dataprocessor_BAO_DataProcessor extends CRM_Dataprocessor_DAO_DataProc
       }
     }
 
-    $filters = CRM_Dataprocessor_BAO_Filter::getValues(array('data_processor_id' => $this->id));
-    foreach($filters as $filter) {
+    $filters = civicrm_api3('DataProcessorFilter', 'get', array('data_processor_id' => $this->id, 'options' => array('limit' => 0)));
+    foreach($filters['values'] as $filter) {
       $filterHandler = $factory->getFilterByName($filter['type']);
       if ($filterHandler) {
         $filterHandler->setDataProcessor($dataProcessor);
@@ -284,9 +284,9 @@ class CRM_Dataprocessor_BAO_DataProcessor extends CRM_Dataprocessor_DAO_DataProc
       }
     }
 
-    $fields = CRM_Dataprocessor_BAO_Field::getValues(array('data_processor_id' => $this->id));
+    $fields = civicrm_api3('DataProcessorField', 'get', array('data_processor_id' => $this->id, 'options' => array('limit' => 0)));
     $outputHandlers = $dataProcessor->getAvailableOutputHandlers();
-    foreach($fields as $field) {
+    foreach($fields['values'] as $field) {
       if (isset($outputHandlers[$field['type']])) {
         $outputHandler = $outputHandlers[$field['type']];
         $outputHandler->initialize($field['name'], $field['title'], $field['configuration']);
@@ -451,16 +451,16 @@ class CRM_Dataprocessor_BAO_DataProcessor extends CRM_Dataprocessor_DAO_DataProc
       unset($datasource['data_processor_id']);
       $dataProcessor['data_sources'][] = $datasource;
     }
-    $filters = CRM_Dataprocessor_BAO_Filter::getValues(array('data_processor_id' => $id));
+    $filters = civicrm_api3('DataProcessorFilter', 'get', array('data_processor_id' => $id, 'options' => array('limit' => 0)));
     $dataProcessor['filters']  = array();
-    foreach($filters as $i => $filter) {
+    foreach($filters['values'] as $i => $filter) {
       unset($filter['id']);
       unset($filter['data_processor_id']);
       $dataProcessor['filters'][] = $filter;
     }
-    $fields = CRM_Dataprocessor_BAO_Field::getValues(array('data_processor_id' => $id));
+    $fields = civicrm_api3('DataProcessorField', 'get', array('data_processor_id' => $id, 'options' => array('limit' => 0)));
     $dataProcessor['fields'] = array();
-    foreach($fields as $i => $field) {
+    foreach($fields['values'] as $i => $field) {
       unset($field['id']);
       unset($field['data_processor_id']);
       $dataProcessor['fields'][] = $field;
diff --git a/CRM/Dataprocessor/BAO/DataProcessorField.php b/CRM/Dataprocessor/BAO/DataProcessorField.php
index 872479069c4276c50143897d0c48a01c0bb2270a..f6a45fd2f5db66a1474b6d497a385b90e2802ab5 100644
--- a/CRM/Dataprocessor/BAO/DataProcessorField.php
+++ b/CRM/Dataprocessor/BAO/DataProcessorField.php
@@ -28,4 +28,25 @@ class CRM_Dataprocessor_BAO_DataProcessorField extends CRM_Dataprocessor_DAO_Dat
     return $name;
   }
 
+  /**
+   * Function to delete a Data Processor Filter with id
+   *
+   * @param int $id
+   * @throws Exception when $id is empty
+   * @access public
+   * @static
+   */
+  public static function deleteWithDataProcessorId($id) {
+    if (empty($id)) {
+      throw new Exception('id can not be empty when attempting to delete a data processor filter');
+    }
+
+    $field = new CRM_Dataprocessor_DAO_DataProcessorField();
+    $field->data_processor_id = $id;
+    $field->find(FALSE);
+    while ($field->fetch()) {
+      civicrm_api3('DataProcessorField', 'delete', array('id' => $field->id));
+    }
+  }
+
 }
diff --git a/CRM/Dataprocessor/BAO/DataProcessorFilter.php b/CRM/Dataprocessor/BAO/DataProcessorFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..12aefe4cd743f88cef5e0b03a64a0a4802dc9936
--- /dev/null
+++ b/CRM/Dataprocessor/BAO/DataProcessorFilter.php
@@ -0,0 +1,52 @@
+<?php
+use CRM_Dataprocessor_ExtensionUtil as E;
+
+class CRM_Dataprocessor_BAO_DataProcessorFilter extends CRM_Dataprocessor_DAO_DataProcessorFilter {
+
+  public static function checkName($title, $data_processor_id, $id=null,$name=null) {
+    if (!$name) {
+      $name = preg_replace('@[^a-z0-9_]+@','_',strtolower($title));
+    }
+
+    $name = preg_replace('@[^a-z0-9_]+@','_',strtolower($name));
+    $name_part = $name;
+
+    $sql = "SELECT COUNT(*) FROM `civicrm_data_processor_filter` WHERE `name` = %1 AND `data_processor_id` = %2";
+    $sqlParams[1] = array($name, 'String');
+    $sqlParams[2] = array($data_processor_id, 'String');
+    if (isset($id)) {
+      $sql .= " AND `id` != %3";
+      $sqlParams[3] = array($id, 'Integer');
+    }
+
+    $i = 1;
+    while(CRM_Core_DAO::singleValueQuery($sql, $sqlParams) > 0) {
+      $i++;
+      $name = $name_part .'_'.$i;
+      $sqlParams[1] = array($name, 'String');
+    }
+    return $name;
+  }
+
+  /**
+   * Function to delete a Data Processor Filter with id
+   *
+   * @param int $id
+   * @throws Exception when $id is empty
+   * @access public
+   * @static
+   */
+  public static function deleteWithDataProcessorId($id) {
+    if (empty($id)) {
+      throw new Exception('id can not be empty when attempting to delete a data processor filter');
+    }
+
+    $field = new CRM_Dataprocessor_DAO_DataProcessorFilter();
+    $field->data_processor_id = $id;
+    $field->find(FALSE);
+    while ($field->fetch()) {
+      civicrm_api3('DataProcessorFilter', 'delete', array('id' => $field->id));
+    }
+  }
+
+}
diff --git a/CRM/Dataprocessor/BAO/Filter.php b/CRM/Dataprocessor/BAO/Filter.php
deleted file mode 100644
index 3f034800f2af7d570c6cddd7f7c5568376a86c9c..0000000000000000000000000000000000000000
--- a/CRM/Dataprocessor/BAO/Filter.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/**
- * @author Jaap Jansma <jaap.jansma@civicoop.org>
- * @license AGPL-3.0
- */
-
-class CRM_Dataprocessor_BAO_Filter extends CRM_Dataprocessor_DAO_Filter {
-
-  /**
-   * Function to get values
-   *
-   * @return array $result found rows with data
-   * @access public
-   * @static
-   */
-  public static function getValues($params) {
-    $factory = dataprocessor_get_factory();
-    $types = $factory->getDataSources();
-
-    $result = array();
-    $filter = new CRM_Dataprocessor_DAO_Filter();
-    if (!empty($params)) {
-      $filters = self::fields();
-      foreach ($params as $key => $value) {
-        if (isset($filters[$key])) {
-          $filter->$key = $value;
-        }
-      }
-    }
-    $filter->find();
-    while ($filter->fetch()) {
-      $row = array();
-      self::storeValues($filter, $row);
-
-      if (isset($types[$row['type']])) {
-        $row['type_name'] = $types[$row['type']];
-      } else {
-        $row['type_name'] = '';
-      }
-      if (!empty($row['configuration'])) {
-        $row['configuration'] = json_decode($row['configuration'], true);
-      } else {
-        $row['configuration'] = array();
-      }
-
-      $result[$row['id']] = $row;
-    }
-    return $result;
-  }
-
-  /**
-   * Function to add or update a DataProcessor
-   *
-   * @param array $params
-   * @return array $result
-   * @access public
-   * @throws Exception when params is empty
-   * @static
-   */
-  public static function add($params) {
-    $result = array();
-    if (empty($params)) {
-      throw new Exception('Params can not be empty when adding or updating a data processor filter');
-    }
-
-    if (!empty($params['id'])) {
-      CRM_Utils_Hook::pre('edit', 'DataProcessorFilter', $params['id'], $params);
-    }
-    else {
-      CRM_Utils_Hook::pre('create', 'DataProcessorFilter', NULL, $params);
-    }
-
-    $filter = new CRM_Dataprocessor_DAO_Filter();
-    $filters = self::fields();
-    foreach ($params as $key => $value) {
-      if (isset($filters[$key])) {
-        $filter->$key = $value;
-      }
-    }
-    if (isset($filter->configuration) && is_array($filter->configuration)) {
-      $filter->configuration = json_encode($filter->configuration);
-    }
-
-    $filter->save();
-    $id = $filter->id;
-    $filter = new CRM_Dataprocessor_BAO_Filter();
-    $filter->id = $id;
-    $filter->find(true);
-    CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($filter->data_processor_id);
-    self::storeValues($filter, $result);
-
-    if (!empty($params['id'])) {
-      CRM_Utils_Hook::post('edit', 'DataProcessorFilter', $filter->id, $filter);
-    }
-    else {
-      CRM_Utils_Hook::post('create', 'DataProcessorFilter', $filter->id, $filter);
-    }
-
-    return $result;
-  }
-
-  /**
-   * Public function to generate name from title
-   *
-   * @param $label
-   * @return string
-   * @access public
-   * @static
-   */
-  public static function buildNameFromTitle($title) {
-    return preg_replace('@[^a-z0-9_]+@','_', strtolower($title));
-  }
-
-  /**
-   * Returns whether the name is valid or not
-   *
-   * @param string $name
-   * @param int $data_procssor_id,
-   * @param int $id optional
-   * @return bool
-   * @static
-   */
-  public static function isNameValid($name, $data_procssor_id, $id=null) {
-    $sql = "SELECT COUNT(*) FROM `civicrm_data_processor_filter` WHERE `name` = %1 AND `data_processor_id` = %2";
-    $params[1] = array($name, 'String');
-    $params[2] = array($data_procssor_id, 'Integer');
-    if ($id) {
-      $sql .= " AND `id` != %3";
-      $params[3] = array($id, 'Integer');
-    }
-    $count = CRM_Core_DAO::singleValueQuery($sql, $params);
-    return ($count > 0) ? false : true;
-  }
-
-  /**
-   * Function to delete a Data Processor Filter with id
-   *
-   * @param int $id
-   * @throws Exception when $id is empty
-   * @access public
-   * @static
-   */
-  public static function deleteWithId($id) {
-    if (empty($id)) {
-      throw new Exception('id can not be empty when attempting to delete a data processor filter');
-    }
-
-    CRM_Utils_Hook::pre('delete', 'DataProcessorFilter', $id, CRM_Core_DAO::$_nullArray);
-
-    $filter = new CRM_Dataprocessor_DAO_Filter();
-    $filter->id = $id;
-    $filter->delete();
-
-    CRM_Utils_Hook::post('delete', 'DataProcessorFilter', $id, CRM_Core_DAO::$_nullArray);
-
-    return;
-  }
-
-  /**
-   * Function to delete a Data Processor Filter with id
-   *
-   * @param int $id
-   * @throws Exception when $id is empty
-   * @access public
-   * @static
-   */
-  public static function deleteWithDataProcessorId($id) {
-    if (empty($id)) {
-      throw new Exception('id can not be empty when attempting to delete a data processor filter');
-    }
-
-    $filter = new CRM_Dataprocessor_DAO_Filter();
-    $filter->data_processor_id = $id;
-    $filter->find(FALSE);
-    while ($filter->fetch()) {
-      self::deleteWithId($filter->id);
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/CRM/Dataprocessor/DAO/DataProcessorFilter.php b/CRM/Dataprocessor/DAO/DataProcessorFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..3a34a33c3f28bc751642f9aa0bd3cd733606d8b5
--- /dev/null
+++ b/CRM/Dataprocessor/DAO/DataProcessorFilter.php
@@ -0,0 +1,267 @@
+<?php
+
+/**
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ *
+ * Generated from /buildkit/build/search/sites/default/files/civicrm/ext/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorFilter.xml
+ * DO NOT EDIT.  Generated by CRM_Core_CodeGen
+ * (GenCodeChecksum:a0b00b49eb3a0197adf06272fc6e31f7)
+ */
+
+/**
+ * Database access object for the DataProcessorFilter entity.
+ */
+class CRM_Dataprocessor_DAO_DataProcessorFilter extends CRM_Core_DAO {
+
+  /**
+   * Static instance to hold the table name.
+   *
+   * @var string
+   */
+  static $_tableName = 'civicrm_data_processor_filter';
+
+  /**
+   * Should CiviCRM log any modifications to this table in the civicrm_log table.
+   *
+   * @var bool
+   */
+  static $_log = FALSE;
+
+  /**
+   * Unique DataProcessorFilter ID
+   *
+   * @var int unsigned
+   */
+  public $id;
+
+  /**
+   * FK to Data Processor
+   *
+   * @var int unsigned
+   */
+  public $data_processor_id;
+
+  /**
+   * @var int
+   */
+  public $weight;
+
+  /**
+   * @var string
+   */
+  public $name;
+
+  /**
+   * @var string
+   */
+  public $title;
+
+  /**
+   * @var string
+   */
+  public $type;
+
+  /**
+   * @var boolean
+   */
+  public $is_required;
+
+  /**
+   * @var text
+   */
+  public $configuration;
+
+  /**
+   * Class constructor.
+   */
+  public function __construct() {
+    $this->__table = 'civicrm_data_processor_filter';
+    parent::__construct();
+  }
+
+  /**
+   * Returns foreign keys and entity references.
+   *
+   * @return array
+   *   [CRM_Core_Reference_Interface]
+   */
+  public static function getReferenceColumns() {
+    if (!isset(Civi::$statics[__CLASS__]['links'])) {
+      Civi::$statics[__CLASS__]['links'] = static ::createReferenceColumns(__CLASS__);
+      Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'data_processor_id', 'civicrm_data_processor', 'id');
+      CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']);
+    }
+    return Civi::$statics[__CLASS__]['links'];
+  }
+
+  /**
+   * Returns all the column names of this table
+   *
+   * @return array
+   */
+  public static function &fields() {
+    if (!isset(Civi::$statics[__CLASS__]['fields'])) {
+      Civi::$statics[__CLASS__]['fields'] = [
+        'id' => [
+          'name' => 'id',
+          'type' => CRM_Utils_Type::T_INT,
+          'description' => CRM_Dataprocessor_ExtensionUtil::ts('Unique DataProcessorFilter ID'),
+          'required' => TRUE,
+          'table_name' => 'civicrm_data_processor_filter',
+          'entity' => 'DataProcessorFilter',
+          'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+          'localizable' => 0,
+        ],
+        'data_processor_id' => [
+          'name' => 'data_processor_id',
+          'type' => CRM_Utils_Type::T_INT,
+          'title' => CRM_Dataprocessor_ExtensionUtil::ts('Data Processor ID'),
+          'description' => CRM_Dataprocessor_ExtensionUtil::ts('FK to Data Processor'),
+          'required' => TRUE,
+          'table_name' => 'civicrm_data_processor_filter',
+          'entity' => 'DataProcessorFilter',
+          'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+          'localizable' => 0,
+        ],
+        'weight' => [
+          'name' => 'weight',
+          'type' => CRM_Utils_Type::T_INT,
+          'title' => CRM_Dataprocessor_ExtensionUtil::ts('Weight'),
+          'required' => FALSE,
+          'table_name' => 'civicrm_data_processor_filter',
+          'entity' => 'DataProcessorFilter',
+          'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+          'localizable' => 0,
+        ],
+        'name' => [
+          'name' => 'name',
+          'type' => CRM_Utils_Type::T_STRING,
+          'title' => CRM_Dataprocessor_ExtensionUtil::ts('Name'),
+          'required' => FALSE,
+          'maxlength' => 255,
+          'size' => CRM_Utils_Type::HUGE,
+          'table_name' => 'civicrm_data_processor_filter',
+          'entity' => 'DataProcessorFilter',
+          'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+          'localizable' => 0,
+        ],
+        'title' => [
+          'name' => 'title',
+          'type' => CRM_Utils_Type::T_STRING,
+          'title' => CRM_Dataprocessor_ExtensionUtil::ts('Title'),
+          'required' => TRUE,
+          'maxlength' => 255,
+          'size' => CRM_Utils_Type::HUGE,
+          'table_name' => 'civicrm_data_processor_filter',
+          'entity' => 'DataProcessorFilter',
+          'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+          'localizable' => 0,
+        ],
+        'type' => [
+          'name' => 'type',
+          'type' => CRM_Utils_Type::T_STRING,
+          'title' => CRM_Dataprocessor_ExtensionUtil::ts('Type'),
+          'required' => TRUE,
+          'maxlength' => 255,
+          'size' => CRM_Utils_Type::HUGE,
+          'table_name' => 'civicrm_data_processor_filter',
+          'entity' => 'DataProcessorFilter',
+          'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+          'localizable' => 0,
+        ],
+        'is_required' => [
+          'name' => 'is_required',
+          'type' => CRM_Utils_Type::T_BOOLEAN,
+          'title' => CRM_Dataprocessor_ExtensionUtil::ts('Is required'),
+          'required' => FALSE,
+          'table_name' => 'civicrm_data_processor_filter',
+          'entity' => 'DataProcessorFilter',
+          'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+          'localizable' => 0,
+        ],
+        'configuration' => [
+          'name' => 'configuration',
+          'type' => CRM_Utils_Type::T_TEXT,
+          'title' => CRM_Dataprocessor_ExtensionUtil::ts('Configuration'),
+          'required' => FALSE,
+          'table_name' => 'civicrm_data_processor_filter',
+          'entity' => 'DataProcessorFilter',
+          'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+          'localizable' => 0,
+          'serialize' => self::SERIALIZE_JSON,
+        ],
+      ];
+      CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']);
+    }
+    return Civi::$statics[__CLASS__]['fields'];
+  }
+
+  /**
+   * Return a mapping from field-name to the corresponding key (as used in fields()).
+   *
+   * @return array
+   *   Array(string $name => string $uniqueName).
+   */
+  public static function &fieldKeys() {
+    if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) {
+      Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields()));
+    }
+    return Civi::$statics[__CLASS__]['fieldKeys'];
+  }
+
+  /**
+   * Returns the names of this table
+   *
+   * @return string
+   */
+  public static function getTableName() {
+    return self::$_tableName;
+  }
+
+  /**
+   * Returns if this table needs to be logged
+   *
+   * @return bool
+   */
+  public function getLog() {
+    return self::$_log;
+  }
+
+  /**
+   * Returns the list of fields that can be imported
+   *
+   * @param bool $prefix
+   *
+   * @return array
+   */
+  public static function &import($prefix = FALSE) {
+    $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'data_processor_filter', $prefix, []);
+    return $r;
+  }
+
+  /**
+   * Returns the list of fields that can be exported
+   *
+   * @param bool $prefix
+   *
+   * @return array
+   */
+  public static function &export($prefix = FALSE) {
+    $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'data_processor_filter', $prefix, []);
+    return $r;
+  }
+
+  /**
+   * Returns the list of indices
+   *
+   * @param bool $localize
+   *
+   * @return array
+   */
+  public static function indices($localize = TRUE) {
+    $indices = [];
+    return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices;
+  }
+
+}
diff --git a/CRM/Dataprocessor/DAO/Filter.php b/CRM/Dataprocessor/DAO/Filter.php
deleted file mode 100644
index 6be51fceaff8de35076466a95625863e8c83cf82..0000000000000000000000000000000000000000
--- a/CRM/Dataprocessor/DAO/Filter.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-use CRM_Dataprocessor_ExtensionUtil as E;
-
-/**
- * @author Jaap Jansma (CiviCooP) <jaap.jansma@civicoop.org>
- * @license http://www.gnu.org/licenses/agpl-3.0.html
- */
-class CRM_Dataprocessor_DAO_Filter extends CRM_Core_DAO {
-  /**
-   * static instance to hold the field values
-   *
-   * @var array
-   * @static
-   */
-  static $_fields = null;
-  static $_export = null;
-  /**
-   * empty definition for virtual function
-   */
-  static function getTableName() {
-    return 'civicrm_data_processor_filter';
-  }
-  /**
-   * returns all the column names of this table
-   *
-   * @access public
-   * @return array
-   */
-  public static function &fields() {
-    if (!(self::$_fields)) {
-      self::$_fields = array(
-        'id' => array(
-          'name' => 'id',
-          'title' => E::ts('ID'),
-          'type' => CRM_Utils_Type::T_INT,
-          'required' => true
-        ) ,
-        'data_processor_id' => array(
-          'name' => 'data_processor_id',
-          'title' => E::ts('Data Processor ID'),
-          'type' => CRM_Utils_Type::T_INT,
-          'required' => true,
-          'FKApiName' => 'DataProcessor',
-        ),
-        'is_required' => array(
-          'name' => 'is_required',
-          'title' => E::ts('Is required'),
-          'type' => CRM_Utils_Type::T_INT,
-        ),
-        'type' => array(
-          'name' => 'type',
-          'title' => E::ts('Type'),
-          'type' => CRM_Utils_Type::T_STRING,
-          'maxlength' => 80,
-          'required' => true,
-        ),
-        'name' => array(
-          'name' => 'name',
-          'title' => E::ts('Name'),
-          'type' => CRM_Utils_Type::T_STRING,
-          'maxlength' => 128,
-          'required' => true
-        ),
-        'title' => array(
-          'name' => 'title',
-          'title' => E::ts('Title'),
-          'type' => CRM_Utils_Type::T_STRING,
-          'maxlength' => 128,
-          'required' => true
-        ),
-        'configuration' => array(
-          'name' => 'configuration',
-          'title' => E::ts('Configuration'),
-          'type' => CRM_Utils_Type::T_TEXT,
-        ),
-      );
-    }
-    return self::$_fields;
-  }
-  /**
-   * Returns an array containing, for each field, the array key used for that
-   * field in self::$_fields.
-   *
-   * @access public
-   * @return array
-   */
-  public static function &fieldKeys() {
-    if (!(self::$_fieldKeys)) {
-      self::$_fieldKeys = array(
-        'id' => 'id',
-        'data_processor_id' => 'data_processor_id',
-        'is_required' => 'is_required',
-        'type' => 'type',
-        'name' => 'name',
-        'title' => 'title',
-        'configuration' => 'configuration',
-      );
-    }
-    return self::$_fieldKeys;
-  }
-}
\ No newline at end of file
diff --git a/CRM/Dataprocessor/Form/DataProcessor.php b/CRM/Dataprocessor/Form/DataProcessor.php
index a9dcc6d5492bf67e07e9866d7ef8dc72e87afdf3..d949892682e37a37c8f430083ac0cad477d5b280 100644
--- a/CRM/Dataprocessor/Form/DataProcessor.php
+++ b/CRM/Dataprocessor/Form/DataProcessor.php
@@ -93,11 +93,12 @@ class CRM_Dataprocessor_Form_DataProcessor extends CRM_Core_Form {
   }
 
   protected function addFilters() {
-    $filters = CRM_Dataprocessor_BAO_Filter::getValues(array('data_processor_id' => $this->dataProcessorId));
+    $filters = civicrm_api3('DataProcessorFilter', 'get', array('data_processor_id' => $this->dataProcessorId, 'options' => array('limit' => 0)));
+    $filters = $filters['values'];
     foreach($filters as $idx => $filter) {
-      $filters[$idx]['is_required'] = $filter['is_required'] ? E::ts('Yes') : E::ts('No');
       $filters[$idx]['configuration_link'] = '';
     }
+    CRM_Utils_Weight::addOrder($filters, 'CRM_Dataprocessor_DAO_DataProcessorFilter', 'id', $this->currentUrl, 'data_processor_id='.$this->dataProcessorId);
     $this->assign('filters', $filters);
   }
 
diff --git a/CRM/Dataprocessor/Form/Filter.php b/CRM/Dataprocessor/Form/Filter.php
index 04b249274fe261ba9bc3874a2ac00218dd581b5e..085d589afadc9f43d4a49d8eb32302be8c277def 100644
--- a/CRM/Dataprocessor/Form/Filter.php
+++ b/CRM/Dataprocessor/Form/Filter.php
@@ -13,12 +13,28 @@ class CRM_Dataprocessor_Form_Filter extends CRM_Core_Form {
 
   private $id;
 
+  private $filter;
+
+  /**
+   * @var Civi\DataProcessor\FilterHandler\AbstractFilterHandler
+   */
+  private $filterTypeClass;
+
+  private $snippet;
+
   /**
    * Function to perform processing before displaying form (overrides parent function)
    *
    * @access public
    */
   function preProcess() {
+    $this->snippet = CRM_Utils_Request::retrieve('snippet', 'String');
+    if ($this->snippet) {
+      $this->assign('suppressForm', TRUE);
+      $this->controller->_generateQFKey = FALSE;
+    }
+
+    $factory = dataprocessor_get_factory();
     $session = CRM_Core_Session::singleton();
     $this->dataProcessorId = CRM_Utils_Request::retrieve('data_processor_id', 'Integer');
     $this->assign('data_processor_id', $this->dataProcessorId);
@@ -26,9 +42,22 @@ class CRM_Dataprocessor_Form_Filter extends CRM_Core_Form {
     $this->id = CRM_Utils_Request::retrieve('id', 'Integer');
     $this->assign('id', $this->id);
 
+    $this->assign('has_configuration', false);
     if ($this->id) {
-      $filter = CRM_Dataprocessor_BAO_Filter::getValues(array('id' => $this->id));
-      $this->assign('filter', $filter[$this->id]);
+      $this->filter = civicrm_api3('DataProcessorFilter', 'getsingle', array('id' => $this->id));
+      $this->assign('filter', $this->filter);
+      $this->filterTypeClass = $factory->getFilterByName($this->filter['type']);
+      $this->assign('has_configuration', $this->filterTypeClass->hasConfiguration());
+    }
+
+    $type = CRM_Utils_Request::retrieve('type', 'String');
+    if ($type) {
+      $this->filterTypeClass = $factory->getFilterByName($type);
+      $this->assign('has_configuration', $this->filterTypeClass->hasConfiguration());
+    }
+
+    if (!$this->filter) {
+      $this->filter['data_processor_id'] = $this->dataProcessorId;
     }
 
     $title = E::ts('Data Processor Filter');
@@ -41,24 +70,25 @@ class CRM_Dataprocessor_Form_Filter extends CRM_Core_Form {
   public function buildQuickForm() {
     $this->add('hidden', 'data_processor_id');
     $this->add('hidden', 'id');
-    if ($this->_action != CRM_Core_Action::DELETE) {
+    if ($this->_action == CRM_Core_Action::DELETE) {
+      $this->addButtons(array(
+        array('type' => 'next', 'name' => E::ts('Delete'), 'isDefault' => TRUE,),
+        array('type' => 'cancel', 'name' => E::ts('Cancel'))));
+    } else {
       $this->add('text', 'name', E::ts('Name'), array('size' => CRM_Utils_Type::HUGE), FALSE);
       $this->add('text', 'title', E::ts('Title'), array('size' => CRM_Utils_Type::HUGE), TRUE);
 
       $factory = dataprocessor_get_factory();
-      $filters = array(E::ts(' - select - '))  + $factory->getFilters();
-      $this->add('select', 'type', E::ts('Select Filter'), $filters, true, array('class' => 'crm-select2 crm-huge40'));
+      $this->add('select', 'type', E::ts('Select Filter'), $factory->getFilters(), true, array('style' => 'min-width:250px',
+        'class' => 'crm-select2 huge',
+        'placeholder' => E::ts('- select -'),));
       $this->add('checkbox', 'is_required', E::ts('Is required'));
-    }
-    if ($this->_action == CRM_Core_Action::ADD) {
-      $this->addButtons(array(
-        array('type' => 'next', 'name' => E::ts('Next'), 'isDefault' => TRUE,),
-        array('type' => 'cancel', 'name' => E::ts('Cancel'))));
-    } elseif ($this->_action == CRM_Core_Action::DELETE) {
-      $this->addButtons(array(
-        array('type' => 'next', 'name' => E::ts('Delete'), 'isDefault' => TRUE,),
-        array('type' => 'cancel', 'name' => E::ts('Cancel'))));
-    } else {
+
+      if ($this->filterTypeClass && $this->filterTypeClass->hasConfiguration()) {
+        $this->filterTypeClass->buildConfigurationForm($this, $this->filter);
+        $this->assign('configuration_template', $this->filterTypeClass->getConfigurationTemplateFileName());
+      }
+
       $this->addButtons(array(
         array('type' => 'next', 'name' => E::ts('Save'), 'isDefault' => TRUE,),
         array('type' => 'cancel', 'name' => E::ts('Cancel'))));
@@ -71,18 +101,21 @@ class CRM_Dataprocessor_Form_Filter extends CRM_Core_Form {
     $defaults['data_processor_id'] = $this->dataProcessorId;
     $defaults['id'] = $this->id;
 
-    $filter = CRM_Dataprocessor_BAO_Filter::getValues(array('id' => $this->id));
-    if (isset($filter[$this->id]['type'])) {
-      $defaults['type'] = $filter[$this->id]['type'];
+    if (isset($this->filter['type'])) {
+      $defaults['type'] = $this->filter['type'];
+    } else {
+      $factory = dataprocessor_get_factory();
+      $filter_types = array_keys($factory->getFilters());
+      $defaults['type'] = reset($filter_types);
     }
-    if (isset($filter[$this->id]['is_required'])) {
-      $defaults['is_required'] = $filter[$this->id]['is_required'];
+    if (isset($this->filter['is_required'])) {
+      $defaults['is_required'] = $this->filter['is_required'];
     }
-    if (isset($filter[$this->id]['title'])) {
-      $defaults['title'] = $filter[$this->id]['title'];
+    if (isset($this->filter['title'])) {
+      $defaults['title'] = $this->filter['title'];
     }
-    if (isset($filter[$this->id]['name'])) {
-      $defaults['name'] = $filter[$this->id]['name'];
+    if (isset($this->filter['name'])) {
+      $defaults['name'] = $this->filter['name'];
     }
     return $defaults;
   }
@@ -91,7 +124,7 @@ class CRM_Dataprocessor_Form_Filter extends CRM_Core_Form {
     $session = CRM_Core_Session::singleton();
     $redirectUrl = $session->readUserContext();
     if ($this->_action == CRM_Core_Action::DELETE) {
-      CRM_Dataprocessor_BAO_Filter::deleteWithId($this->id);
+      civicrm_api3('DataProcessorFilter', 'delete', array('id' => $this->id));
       $session->setStatus(E::ts('Filter removed'), E::ts('Removed'), 'success');
       CRM_Utils_System::redirect($redirectUrl);
     }
@@ -99,8 +132,6 @@ class CRM_Dataprocessor_Form_Filter extends CRM_Core_Form {
     $values = $this->exportValues();
     if (!empty($values['name'])) {
       $params['name'] = $values['name'];
-    } else {
-      $params['name'] = CRM_Dataprocessor_BAO_Filter::buildNameFromTitle($values['title']);
     }
     $params['title'] = $values['title'];
     $params['type'] = $values['type'];
@@ -112,59 +143,14 @@ class CRM_Dataprocessor_Form_Filter extends CRM_Core_Form {
       $params['id'] = $this->id;
     }
 
-    $result = CRM_Dataprocessor_BAO_Filter::add($params);
-    $factory = dataprocessor_get_factory();
-    $filter  = $factory->getFilterByName($values['type']);
-    if  ($filter->getConfigurationUrl($result['id'], $this->dataProcessorId)) {
-      $redirectUrl = CRM_Utils_System::url($filter->getConfigurationUrl(), [
-        'reset' => 1,
-        'action' =>  'update',
-        'id' => $result['id'],
-        'data_processor_id' => $this->dataProcessorId
-      ]);
+    if ($this->filterTypeClass && $this->filterTypeClass->hasConfiguration()) {
+      $params['configuration'] = $this->filterTypeClass->processConfiguration($values);
     }
 
+    civicrm_api3('DataProcessorFilter', 'create', $params);
+
     CRM_Utils_System::redirect($redirectUrl);
     parent::postProcess();
   }
 
-  /**
-   * Function to add validation rules (overrides parent function)
-   *
-   * @access public
-   */
-  function addRules() {
-    if ($this->_action != CRM_Core_Action::DELETE) {
-      $this->addFormRule(array(
-        'CRM_Dataprocessor_Form_Filter',
-        'validateName'
-      ));
-    }
-  }
-
-  /**
-   * Function to validate if rule label already exists
-   *
-   * @param array $fields
-   * @return array|bool
-   * @access static
-   */
-  static function validateName($fields) {
-    /*
-     * if id not empty, edit mode. Check if changed before check if exists
-     */
-    $id = false;
-    if (!empty($fields['id'])) {
-      $id = $fields['id'];
-    }
-    if (empty($fields['name'])) {
-      $fields['name'] = CRM_Dataprocessor_BAO_Filter::buildNameFromTitle($fields['title']);
-    }
-    if (!CRM_Dataprocessor_BAO_Filter::isNameValid($fields['name'], $fields['data_processor_id'], $id)) {
-      $errors['name'] = E::ts('There is already a filter with this name');
-      return $errors;
-    }
-    return TRUE;
-  }
-
 }
\ No newline at end of file
diff --git a/CRM/Dataprocessor/Form/Output/AbstractUIOutputForm.php b/CRM/Dataprocessor/Form/Output/AbstractUIOutputForm.php
index 0ec54cff45bd30f75c3059ea3537883a16c11309..9537ad900a7e16466bc21dbfcb6c0801a10d5270 100644
--- a/CRM/Dataprocessor/Form/Output/AbstractUIOutputForm.php
+++ b/CRM/Dataprocessor/Form/Output/AbstractUIOutputForm.php
@@ -323,6 +323,7 @@ abstract class CRM_Dataprocessor_Form_Output_AbstractUIOutputForm extends CRM_Co
         else {
           switch ($type) {
             case \CRM_Utils_Type::T_DATE:
+            case \CRM_Utils_Type::T_TIMESTAMP:
               CRM_Core_Form_Date::buildDateRange($this, $fieldSpec->alias, $count, '_from', '_to', E::ts('From:'), $filterHandler->isRequired(), $operations);
               $count++;
               break;
diff --git a/CRM/Dataprocessor/Utils/DataSourceFields.php b/CRM/Dataprocessor/Utils/DataSourceFields.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4cca6a4c9491df31c717fd0f815e4f8bccc853a
--- /dev/null
+++ b/CRM/Dataprocessor/Utils/DataSourceFields.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * @author Jaap Jansma <jaap.jansma@civicoop.org>
+ * @license AGPL-3.0
+ */
+
+class CRM_Dataprocessor_Utils_DataSourceFields {
+
+  /**
+   * Returns an array with the name of the field as the key and the label of the field as the value.
+   *
+   * @oaram int $dataProcessorId
+   * @return array
+   * @throws \Exception
+   */
+  public static function getAvailableFieldsInDataSources($dataProcessorId) {
+    $dataProcessor = CRM_Dataprocessor_BAO_DataProcessor::getDataProcessorById($dataProcessorId);
+    foreach($dataProcessor->getDataSources() as $dataSource) {
+      foreach($dataSource->getAvailableFilterFields()->getFields() as $field) {
+        $fieldSelect[$dataSource->getSourceName().'::'.$field->name] = $dataSource->getSourceTitle().' :: '.$field->title;
+      }
+    }
+    return $fieldSelect;
+  }
+
+}
\ No newline at end of file
diff --git a/CRM/Dataprocessor/Utils/Importer.php b/CRM/Dataprocessor/Utils/Importer.php
index fcd441cf19c85b87c35a215559d0bf0b006cf221..a5b70651f789292c892941bbb09e269cdf103c09 100644
--- a/CRM/Dataprocessor/Utils/Importer.php
+++ b/CRM/Dataprocessor/Utils/Importer.php
@@ -73,8 +73,8 @@ class CRM_Dataprocessor_Utils_Importer {
 
     // Clear all existing data sources and outputs
     CRM_Dataprocessor_BAO_Source::deleteWithDataProcessorId($id);
-    CRM_Dataprocessor_BAO_Filter::deleteWithDataProcessorId($id);
-    CRM_Dataprocessor_BAO_Field::deleteWithDataProcessorId($id);
+    CRM_Dataprocessor_BAO_DataProcessorFilter::deleteWithDataProcessorId($id);
+    CRM_Dataprocessor_BAO_DataProcessorField::deleteWithDataProcessorId($id);
     CRM_Dataprocessor_BAO_Output::deleteWithDataProcessorId($id);
 
     foreach($data['data_sources'] as $data_source) {
@@ -85,12 +85,12 @@ class CRM_Dataprocessor_Utils_Importer {
     foreach($data['filters'] as $filter) {
       $params = $filter;
       $params['data_processor_id'] = $id;
-      $result = CRM_Dataprocessor_BAO_Filter::add($params);
+      civicrm_api3('DataProcessorFilter', 'create', $params);
     }
     foreach($data['fields'] as $field) {
       $params = $field;
       $params['data_processor_id'] = $id;
-      $result = CRM_Dataprocessor_BAO_Field::add($params);
+      civicrm_api3('DataProcessorField', 'create', $params);
     }
     foreach($data['outputs'] as $output) {
       $params = $output;
diff --git a/Civi/DataProcessor/Factory.php b/Civi/DataProcessor/Factory.php
index 245a2bcbc0e6e8e1d711be79b67e239a146f9743..d20880c997651fc7f2e4a3b4302b6b6dd4e910b4 100644
--- a/Civi/DataProcessor/Factory.php
+++ b/Civi/DataProcessor/Factory.php
@@ -121,7 +121,7 @@ class Factory {
     $this->addOutput('contact_search', 'CRM_DataprocessorSearch_ContactSearch', E::ts('Contact Search'));
     $this->addOutput('activity_search', 'CRM_DataprocessorSearch_ActivitySearch', E::ts('Activity Search'));
     $this->addOutput('export_csv', 'CRM_DataprocessorOutputExport_CSV', E::ts('CSV Export'));
-    $this->addFilter('simple_sql_filter', 'Civi\DataProcessor\FilterHandler\SimpleSqlFilter', E::ts('Simple Filter'));
+    $this->addFilter('simple_sql_filter', 'Civi\DataProcessor\FilterHandler\SimpleSqlFilter', E::ts('Field filter'));
     $this->addjoinType('simple_join', 'Civi\DataProcessor\DataFlow\MultipleDataFlows\SimpleJoin', E::ts('Simple Join'));
     $this->addjoinType('simple_non_required_join', 'Civi\DataProcessor\DataFlow\MultipleDataFlows\SimpleNonRequiredJoin', E::ts('Simple  (but not required) Join'));
   }
diff --git a/Civi/DataProcessor/FilterHandler/AbstractFilterHandler.php b/Civi/DataProcessor/FilterHandler/AbstractFilterHandler.php
index d6420526fc8911441d69a97dc6eb6d08e6265e63..48b9c1701f68daeaccbfa199651f289794c2e9a9 100644
--- a/Civi/DataProcessor/FilterHandler/AbstractFilterHandler.php
+++ b/Civi/DataProcessor/FilterHandler/AbstractFilterHandler.php
@@ -56,13 +56,49 @@ abstract class AbstractFilterHandler {
   }
 
   /**
-   * Returns the URL to a configuration screen.
-   * Return false when no configuration screen is present.
+   * Returns true when this filter has additional configuration
+   *
+   * @return bool
+   */
+  public function hasConfiguration() {
+    return false;
+  }
+
+  /**
+   * When this filter type has additional configuration you can add
+   * the fields on the form with this function.
+   *
+   * @param \CRM_Core_Form $form
+   * @param array $filter
+   */
+  public function buildConfigurationForm(\CRM_Core_Form $form, $filter=array()) {
+    // Example add a checkbox to the form.
+    // $form->add('checkbox', 'show_label', E::ts('Show label'));
+  }
+
+  /**
+   * When this filter type has configuration specify the template file name
+   * for the configuration form.
    *
    * @return false|string
    */
-  public function getConfigurationUrl() {
+  public function getConfigurationTemplateFileName() {
+    // Example return "CRM/FormFieldLibrary/Form/FieldConfiguration/TextField.tpl";
     return false;
   }
 
+
+  /**
+   * Process the submitted values and create a configuration array
+   *
+   * @param $submittedValues
+   * @return array
+   */
+  public function processConfiguration($submittedValues) {
+    // Add the show_label to the configuration array.
+    // $configuration['show_label'] = $submittedValues['show_label'];
+    // return $configuration;
+    return array();
+  }
+
 }
\ No newline at end of file
diff --git a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php
index a16ca8c2d8f5d3489f8ab154963040070e73be4d..79ded590eb1064b2ae1c8c4fa648545001e79afb 100644
--- a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php
+++ b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php
@@ -73,13 +73,60 @@ class SimpleSqlFilter extends AbstractFilterHandler {
   }
 
   /**
-   * Returns the URL to a configuration screen.
-   * Return false when no configuration screen is present.
+   * Returns true when this filter has additional configuration
+   *
+   * @return bool
+   */
+  public function hasConfiguration() {
+    return true;
+  }
+
+  /**
+   * When this filter type has additional configuration you can add
+   * the fields on the form with this function.
+   *
+   * @param \CRM_Core_Form $form
+   * @param array $filter
+   */
+  public function buildConfigurationForm(\CRM_Core_Form $form, $filter=array()) {
+    $fieldSelect = \CRM_Dataprocessor_Utils_DataSourceFields::getAvailableFieldsInDataSources($filter['data_processor_id']);
+
+    $form->add('select', 'field', E::ts('Field'), $fieldSelect, true, array(
+      'style' => 'min-width:250px',
+      'class' => 'crm-select2 huge',
+      'placeholder' => E::ts('- select -'),
+    ));
+    if (isset($filter['configuration'])) {
+      $configuration = $filter['configuration'];
+      if (isset($configuration['field']) && isset($configuration['datasource'])) {
+        $defaults['field'] = $configuration['datasource'] . '::' . $configuration['field'];
+        $form->setDefaults($defaults);
+      }
+    }
+  }
+
+  /**
+   * When this filter type has configuration specify the template file name
+   * for the configuration form.
    *
    * @return false|string
    */
-  public function getConfigurationUrl() {
-    return 'civicrm/dataprocessor/form/filter/simplefilter';
+  public function getConfigurationTemplateFileName() {
+    return "CRM/Dataprocessor/Form/Filter/SimpleSqlFilter.tpl";
+  }
+
+
+  /**
+   * Process the submitted values and create a configuration array
+   *
+   * @param $submittedValues
+   * @return array
+   */
+  public function processConfiguration($submittedValues) {
+    list($datasource, $field) = explode('::', $submittedValues['field'], 2);
+    $configuration['field'] = $field;
+    $configuration['datasource'] = $datasource;
+    return $configuration;
   }
 
 }
\ No newline at end of file
diff --git a/api/v3/DataProcessorFilter.php b/api/v3/DataProcessorFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..6737abacbc800ceb6cfa8093a1e60eb396a6fea6
--- /dev/null
+++ b/api/v3/DataProcessorFilter.php
@@ -0,0 +1,124 @@
+<?php
+use CRM_Dataprocessor_ExtensionUtil as E;
+
+/**
+ * DataProcessorFilter.create API specification (optional)
+ * This is used for documentation and validation.
+ *
+ * @param array $spec description of fields supported by this API call
+ * @return void
+ * @see http://wiki.civicrm.org/confluence/display/CRMDOC/API+Architecture+Standards
+ */
+function _civicrm_api3_data_processor_filter_create_spec(&$spec) {
+  $fields = CRM_Dataprocessor_DAO_DataProcessorFilter::fields();
+  foreach($fields as $fieldname => $field) {
+    $spec[$fieldname] = $field;
+    if ($fieldname != 'id' && isset($field['required']) && $field['required']) {
+      $spec[$fieldname]['api.required'] = true;
+    }
+  }
+}
+
+/**
+ * DataProcessorFilter.create API
+ *
+ * @param array $params
+ * @return array API result descriptor
+ * @throws API_Exception
+ */
+function civicrm_api3_data_processor_filter_create($params) {
+  if (!isset($params['weight']) && !isset($params['id'])) {
+    $params['weight'] = CRM_Utils_Weight::getDefaultWeight('CRM_Dataprocessor_DAO_DataProcessorFilter', array('data_processor_id' => $params['data_processor_id']));
+  }
+  $id = null;
+  if (isset($params['id'])) {
+    $id = $params['id'];
+  }
+  $params['name'] = CRM_Dataprocessor_BAO_DataProcessorFilter::checkName($params['title'], $params['data_processor_id'], $id, $params['name']);
+  return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+}
+
+/**
+ * DataProcessorFilter.delete API
+ *
+ * @param array $params
+ * @return array API result descriptor
+ * @throws API_Exception
+ */
+function civicrm_api3_data_processor_filter_delete($params) {
+  return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+}
+
+/**
+ * DataProcessorFilter.get API specification (optional)
+ * This is used for documentation and validation.
+ *
+ * @param array $spec description of fields supported by this API call
+ * @return void
+ * @see http://wiki.civicrm.org/confluence/display/CRMDOC/API+Architecture+Standards
+ */
+function civicrm_api3_data_processor_filter_get_spec(&$spec) {
+  $fields = CRM_Dataprocessor_DAO_DataProcessorFilter::fields();
+  foreach($fields as $fieldname => $field) {
+    $spec[$fieldname] = $field;
+  }
+}
+
+/**
+ * DataProcessorFilter.get API
+ *
+ * @param array $params
+ * @return array API result descriptor
+ * @throws API_Exception
+ */
+function civicrm_api3_data_processor_filter_get($params) {
+  if (!isset($params['options']) || !isset($params['options']['sort'])) {
+    $params['options']['sort'] = 'weight ASC';
+  }
+  $return = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+  foreach($return['values'] as $id => $value) {
+    if (isset($value['configuration'])) {
+      $return['values'][$id]['configuration'] = json_decode($value['configuration'], TRUE);
+    }
+  }
+  return $return;
+}
+
+
+/**
+ * DataProcessorFilter.check_name API specification
+ *
+ * @param $params
+ */
+function _civicrm_api3_data_processor_filter_check_name_spec($params) {
+  $params['id'] = array(
+    'name' => 'id',
+    'title' => E::ts('ID'),
+  );
+  $params['title'] = array(
+    'name' => 'title',
+    'title' => E::ts('Title'),
+    'api.required' => true,
+  );
+  $params['data_processor_id'] = array(
+    'name' => 'data_processor_id',
+    'title' => E::ts('Data Processor Id'),
+    'api.required' => true,
+  );
+  $params['name'] = array(
+    'name' => 'name',
+    'title' => E::ts('Name'),
+  );
+}
+
+/**
+ * DataProcessorFilter.check_name API
+ *
+ * @param $params
+ */
+function civicrm_api3_data_processor_filter_check_name($params) {
+  $name = CRM_Dataprocessor_BAO_DataProcessorFilter::checkName($params['title'], $params['data_processor_id'], $params['id'], $params['name']);
+  return array(
+    'name' => $name,
+  );
+}
diff --git a/api/v3/DataProcessorFilter/Create.php b/api/v3/DataProcessorFilter/Create.php
deleted file mode 100644
index f20d05d4a843deca67940a12b5af3b55d0ab2e4e..0000000000000000000000000000000000000000
--- a/api/v3/DataProcessorFilter/Create.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-use CRM_Dataprocessor_ExtensionUtil as E;
-
-/**
- * DataProcessorFilter.Create API specification (optional)
- * This is used for documentation and validation.
- *
- * @param array $spec description of filters supported by this API call
- * @return void
- * @see http://wiki.civicrm.org/confluence/display/CRM/API+Architecture+Standards
- */
-function _civicrm_api3_data_processor_filter_create_spec(&$spec) {
-  $spec['id'] = array(
-		'title' => E::ts('ID'),
-		'type' => CRM_Utils_Type::T_INT,
-		'api.required' => false
-	);
-  $spec['data_processor_id'] = array(
-    'title' => E::ts('Data Processor ID'),
-    'type' => CRM_Utils_Type::T_INT,
-    'api.required' => true,
-  );
-  $spec['is_required'] = array(
-    'title' => E::ts('Is required'),
-    'type' => CRM_Utils_Type::T_BOOLEAN,
-    'api.required' => true,
-    'api.default' => true,
-  );
-  $spec['type'] = array(
-    'title' => E::ts('Type'),
-    'type' => CRM_Utils_Type::T_STRING,
-    'api.required' => true
-  );
-  $spec['name'] = array(
-    'title' => E::ts('Name'),
-    'type' => CRM_Utils_Type::T_STRING,
-    'api.required' => true
-  );
-	$spec['title'] = array(
-		'title' => E::ts('Title'),
-		'type' => CRM_Utils_Type::T_STRING,
-		'api.required' => true
-	);
-	$spec['configuration'] = array(
-    'title' => E::ts('Configuration'),
-    'type' => CRM_Utils_Type::T_TEXT,
-    'api.required' => false,
-	);
-}
-
-/**
- * DataProcessorFilter.Create API
- *
- * @param array $params
- * @return array API result descriptor
- * @see civicrm_api3_create_success
- * @see civicrm_api3_create_error
- *
- *
- */
-function civicrm_api3_data_processor_filter_create($params) {
-  $returnValue = CRM_Dataprocessor_BAO_Filter::add($params);
-	$returnValues[$returnValue['id']] = $returnValue;
-  return civicrm_api3_create_success($returnValues, $params, 'DataProcessorFilter', 'Create');
-}
-
diff --git a/api/v3/DataProcessorFilter/Delete.php b/api/v3/DataProcessorFilter/Delete.php
deleted file mode 100644
index fdcb3341cb7c3ea22bcf5e43eef1fc8061bed011..0000000000000000000000000000000000000000
--- a/api/v3/DataProcessorFilter/Delete.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-use CRM_Dataprocessor_ExtensionUtil as E;
-
-/**
- * DataProcessorFilter.Delete API specification (optional)
- * This is used for documentation and validation.
- *
- * @param array $spec description of fields supported by this API call
- * @return void
- * @see http://wiki.civicrm.org/confluence/display/CRMDOC/API+Architecture+Standards
- */
-function _civicrm_api3_data_processor_filter_Delete_spec(&$spec) {
-  $spec['id'] = array(
-		'title' => E::ts('ID'),
-		'type' => CRM_Utils_Type::T_INT,
-		'api.required' => true
-	);
-}
-
-/**
- * DataProcessorFilter.Delete API
- *
- * @param array $params
- * @return array API result descriptor
- * @see civicrm_api3_create_success
- * @see civicrm_api3_create_error
- * @throws API_Exception
- */
-function civicrm_api3_data_processor_filter_Delete($params) {
-  if (!array_key_exists('id', $params) || empty($params['id'])) {
-    throw new API_Exception('Parameter id is mandatory and can not be empty in ' . __METHOD__, 0010);
-  } else {
-    return civicrm_api3_create_success(CRM_Dataprocessor_BAO_DataProcessorFilter::deleteWithId($params['id']), $params, 'DataProcessorFilter', 'Delete');
-  }
-}
-
diff --git a/api/v3/DataProcessorFilter/Get.php b/api/v3/DataProcessorFilter/Get.php
deleted file mode 100644
index dbdfd8a54534e04b208dfd351ecb1d08fc09808d..0000000000000000000000000000000000000000
--- a/api/v3/DataProcessorFilter/Get.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/**
- * DataProcessorFilter.Get API
- *
- * @param array $params
- * @return array API result descriptor
- * @see civicrm_api3_create_success
- * @see civicrm_api3_create_error
- * @throws API_Exception
- */
-function civicrm_api3_data_processor_filter_get($params) {
-  $returnValues = CRM_Dataprocessor_BAO_Filter::getValues($params);
-  return civicrm_api3_create_success($returnValues, $params, 'DataProcessorFilter', 'Get');
-}
-
-/**
- * DataProcessorFilter.Get API specification (optional)
- * This is used for documentation and validation.
- *
- * @param array $spec description of fields supported by this API call
- * @return void
- * @see http://wiki.civicrm.org/confluence/display/CRM/API+Architecture+Standards
- */
-function _civicrm_api3_data_processor_filter_get_spec(&$spec) {
-	$fields = CRM_Dataprocessor_BAO_Filter::fields();
-	foreach($fields as $fieldname => $field) {
-		$spec[$fieldname] = $field;
-	}
-}
-
diff --git a/dataprocessor.civix.php b/dataprocessor.civix.php
index 415bce1b6813b7584a9c312a8836f92d473a395a..e993b955bd7e6c635a0084b6cf38eb0580804f44 100644
--- a/dataprocessor.civix.php
+++ b/dataprocessor.civix.php
@@ -463,5 +463,11 @@ function _dataprocessor_civix_civicrm_entityTypes(&$entityTypes) {
       'class' => 'CRM_Dataprocessor_DAO_DataProcessorField',
       'table' => 'civicrm_data_processor_field',
     ),
+    'CRM_Dataprocessor_DAO_DataProcessorFilter' => 
+    array (
+      'name' => 'DataProcessorFilter',
+      'class' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+      'table' => 'civicrm_data_processor_filter',
+    ),
   ));
 }
diff --git a/sql/alter.sql b/sql/alter.sql
index e46fa163ac8397b483e11343ae6e0bd01386dc7e..4efe63d067e1b28c9015e12ee587f770ec9d289a 100644
--- a/sql/alter.sql
+++ b/sql/alter.sql
@@ -1,4 +1,12 @@
 ALTER TABLE `civicrm_data_processor_field`
 CHANGE `name` `name` VARCHAR(255) NOT NULL,
 CHANGE `type` `type` VARCHAR(255) NOT NULL,
-CHANGE `title` `title` VARCHAR(255) NOT NULL;
\ No newline at end of file
+CHANGE `title` `title` VARCHAR(255) NOT NULL;
+
+ALTER TABLE `civicrm_data_processor_filter`
+CHANGE `name` `name` VARCHAR(255) NOT NULL,
+CHANGE `type` `type` VARCHAR(255) NOT NULL,
+CHANGE `title` `title` VARCHAR(255) NOT NULL,
+ADD `weight` int NULL;
+
+UPDATE `civicrm_data_processor_filter` SET `weight` = `id`;
\ No newline at end of file
diff --git a/sql/auto_install.sql b/sql/auto_install.sql
index 18635bb0c02aeb4d9130cbc31c498dcfca45f3fa..e2e5878e57f032303ce408c897094b24cf03413e 100644
--- a/sql/auto_install.sql
+++ b/sql/auto_install.sql
@@ -62,6 +62,7 @@
 
 SET FOREIGN_KEY_CHECKS=0;
 
+DROP TABLE IF EXISTS `civicrm_data_processor_filter`;
 DROP TABLE IF EXISTS `civicrm_data_processor_field`;
 
 SET FOREIGN_KEY_CHECKS=1;
@@ -93,4 +94,27 @@ CREATE TABLE `civicrm_data_processor_field` (
 ,          CONSTRAINT FK_civicrm_data_processor_field_data_processor_id FOREIGN KEY (`data_processor_id`) REFERENCES `civicrm_data_processor`(`id`) ON DELETE CASCADE  
 )    ;
 
+-- /*******************************************************
+-- *
+-- * civicrm_data_processor_filter
+-- *
+-- *******************************************************/
+CREATE TABLE `civicrm_data_processor_filter` (
+
+
+     `id` int unsigned NOT NULL AUTO_INCREMENT  COMMENT 'Unique DataProcessorFilter ID',
+     `data_processor_id` int unsigned NOT NULL   COMMENT 'FK to Data Processor',
+     `weight` int NULL   ,
+     `name` varchar(255) NULL   ,
+     `title` varchar(255) NOT NULL   ,
+     `type` varchar(255) NOT NULL   ,
+     `is_required` tinyint NULL   ,
+     `configuration` text NULL    
+,
+        PRIMARY KEY (`id`)
+ 
+ 
+,          CONSTRAINT FK_civicrm_data_processor_filter_data_processor_id FOREIGN KEY (`data_processor_id`) REFERENCES `civicrm_data_processor`(`id`) ON DELETE CASCADE  
+)    ;
+
  
diff --git a/sql/auto_uninstall.sql b/sql/auto_uninstall.sql
index ef24e55f9769b35e4907f1908d572d73747b7637..f49727688c5273245adc7842193bc747290cefe2 100644
--- a/sql/auto_uninstall.sql
+++ b/sql/auto_uninstall.sql
@@ -33,6 +33,7 @@
 
 SET FOREIGN_KEY_CHECKS=0;
 
+DROP TABLE IF EXISTS `civicrm_data_processor_filter`;
 DROP TABLE IF EXISTS `civicrm_data_processor_field`;
 
 SET FOREIGN_KEY_CHECKS=1;
diff --git a/sql/create_civicrm_data_processor.sql b/sql/create_civicrm_data_processor.sql
index 1bafe6ea324f1bdb3785101393ddca5f5b14a89c..7d1d85345b18fdc478d32d231c9e2fbc00563657 100644
--- a/sql/create_civicrm_data_processor.sql
+++ b/sql/create_civicrm_data_processor.sql
@@ -26,17 +26,6 @@ CREATE TABLE IF NOT EXISTS `civicrm_data_processor_source` (
   PRIMARY KEY (`id`)
 ) ENGINE = InnoDB;
 
-CREATE TABLE IF NOT EXISTS `civicrm_data_processor_filter` (
-  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
-  `data_processor_id` INT UNSIGNED NOT NULL,
-  `name` VARCHAR(128) NOT NULL,
-  `type` VARCHAR(128) NOT NULL,
-  `title` VARCHAR(128) NOT NULL,
-  `is_required` TINYINT NULL DEFAULT 1,
-  `configuration` TEXT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE = InnoDB;
-
 CREATE TABLE IF NOT EXISTS `civicrm_data_processor_output` (
   `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
   `data_processor_id` INT UNSIGNED NOT NULL,
diff --git a/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Fields.tpl b/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Fields.tpl
index 3f39af1c4e4013343132f0eceaca4482cbe08524..c9df525707fd6fc93646ce7e1a7d2e48f89916b8 100644
--- a/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Fields.tpl
+++ b/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Fields.tpl
@@ -4,7 +4,7 @@
     <table>
         <tr>
             <th>{ts}Title{/ts}</th>
-            <th>{ts}Name{/ts}</th>
+            <th>{ts}System Name{/ts}</th>
             <th></th>
             <th></th>
             <th></th>
@@ -12,7 +12,7 @@
         {foreach from=$fields item=field}
             <tr>
                 <td>{$field.title}</td>
-                <td>{$field.name}</td>
+                <td><span class="description">{$field.name}</span></td>
                 <td>{if ($field.weight && !is_numeric($field.weight))}{$field.weight}{/if}</td>
                 <td>
                     <a href="{crmURL p="civicrm/dataprocessor/form/field" q="reset=1&action=update&data_processor_id=`$field.data_processor_id`&id=`$field.id`"}">{ts}Edit{/ts}</a>
diff --git a/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Filters.tpl b/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Filters.tpl
index fab5d7e0c03b822311d1faa097c95264dcb7594a..27e44682925565718d0e4ef4d4a9cb560674265f 100644
--- a/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Filters.tpl
+++ b/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Filters.tpl
@@ -4,17 +4,22 @@
         <table>
             <tr>
                 <th>{ts}Title{/ts}</th>
-                <th>{ts}Name{/ts}</th>
-                <th>{ts}Required{/ts}</th>
+                <th>{ts}System name{/ts}</th>
+                <th></th>
                 <th></th>
                 <th></th>
                 <th></th>
             </tr>
             {foreach from=$filters item=filter}
                 <tr>
-                    <td>{$filter.title}</td>
-                    <td>{$filter.name}</td>
-                    <td>{$filter.is_required}</td>
+                    <td>
+                        {$filter.title}
+                        {if ($filter.is_required)}
+                            <span class="crm-marker">*</span>
+                        {/if}
+                    </td>
+                    <td><span class="description">{$filter.name}</span></td>
+                    <td>{if ($filter.weight && !is_numeric($filter.weight))}{$filter.weight}{/if}</td>
                     <td>
                         {if $filter.configuration_link}
                             <a href="{$filter.configuration_link}">{ts}Configure Filter{/ts}</a>
diff --git a/templates/CRM/Dataprocessor/Form/Field.tpl b/templates/CRM/Dataprocessor/Form/Field.tpl
index a5e57d7d900edc4b399f6cfe5b4f5217a992b7ba..c46b6b8912c2a2d4244adb5c38356db18e4b18a8 100644
--- a/templates/CRM/Dataprocessor/Form/Field.tpl
+++ b/templates/CRM/Dataprocessor/Form/Field.tpl
@@ -58,8 +58,6 @@
               });
             }
           });
-
-          $('#type').change();
         });
         {/literal}
     </script>
diff --git a/templates/CRM/Dataprocessor/Form/Filter.tpl b/templates/CRM/Dataprocessor/Form/Filter.tpl
index b3afbc13dee646a041b58b28b785946b746a53c4..039c96134470d9f7d66f24a07b7d16ec14694613 100644
--- a/templates/CRM/Dataprocessor/Form/Filter.tpl
+++ b/templates/CRM/Dataprocessor/Form/Filter.tpl
@@ -1,7 +1,4 @@
 {crmScope extensionKey='dataprocessor'}
-<div class="crm-submit-buttons">
-    {include file="CRM/common/formButtons.tpl" location="top"}
-</div>
 
 {if $action eq 8}
     {* Are you sure to delete form *}
@@ -9,11 +6,19 @@
     <div class="crm-block crm-form-block crm-data-processor_label-block">
         <div class="crm-section">{ts 1=$filter->title}Are you sure to delete filter '%1'?{/ts}</div>
     </div>
-{else}
+
+    <div class="crm-submit-buttons">
+        {include file="CRM/common/formButtons.tpl" location="bottom"}
+    </div>
+{elseif (!$snippet)}
+
+    <div class="crm-submit-buttons">
+        {include file="CRM/common/formButtons.tpl" location="top"}
+    </div>
 
     {* block for rule data *}
     <h3>{ts}Field{/ts}</h3>
-    <div class="crm-block crm-form-block crm-data-processor_source-block">
+    <div class="crm-block crm-form-block crm-data-processor_filter-block">
         <div class="crm-section">
             <div class="label">{$form.type.label}</div>
             <div class="content">{$form.type.html}</div>
@@ -21,10 +26,19 @@
         </div>
         <div class="crm-section">
             <div class="label">{$form.title.label}</div>
-            <div class="content">{$form.title.html}</div>
+            <div class="content">
+                {$form.title.html}
+                <span class="">
+                {ts}System name:{/ts}&nbsp;
+                <span id="systemName" style="font-style: italic;">{if ($filter)}{$filter.name}{/if}</span>
+                <a href="javascript:void(0);" onclick="jQuery('#nameSection').removeClass('hiddenElement'); jQuery(this).parent().addClass('hiddenElement'); return false;">
+                  {ts}Change{/ts}
+                </a>
+                </span>
+            </div>
             <div class="clear"></div>
         </div>
-        <div class="crm-section">
+        <div id="nameSection" class="crm-section hiddenElement">
             <div class="label">{$form.name.label}</div>
             <div class="content">{$form.name.html}</div>
             <div class="clear"></div>
@@ -34,10 +48,55 @@
             <div class="content">{$form.is_required.html}</div>
             <div class="clear"></div>
         </div>
+
+        <div id="type_configuration">
+            {if ($configuration_template)}
+                {include file=$configuration_template}
+            {/if}
+        </div>
     </div>
-{/if}
 
-<div class="crm-submit-buttons">
-    {include file="CRM/common/formButtons.tpl" location="bottom"}
-</div>
+    <script type="text/javascript">
+        {literal}
+        CRM.$(function($) {
+          var id = {/literal}{if ($filter)}{$filter.id}{else}false{/if}{literal};
+          var data_processor_id = {/literal}{$data_processor_id}{literal};
+
+          $('#type').on('change', function() {
+            var type = $('#type').val();
+            if (type) {
+              var dataUrl = CRM.url('civicrm/dataprocessor/form/filter', {type: type, 'data_processor_id': data_processor_id, 'id': id});
+              CRM.loadPage(dataUrl, {'target': '#type_configuration'});
+            }
+          });
+
+          $('#title').on('blur', function() {
+            var title = $('#title').val();
+            if ($('#nameSection').hasClass('hiddenElement') && !id) {
+              CRM.api3('DataProcessorFilter', 'check_name', {
+                'title': title,
+                'data_processor_id': data_processor_id
+              }).done(function (result) {
+                $('#systemName').html(result.name);
+                $('#name').val(result.name);
+              });
+            }
+          });
+
+          $('#type').change();
+        });
+        {/literal}
+    </script>
+
+    <div class="crm-submit-buttons">
+        {include file="CRM/common/formButtons.tpl" location="bottom"}
+    </div>
+
+{else}
+    <div id="type_configuration">
+        {if ($configuration_template)}
+            {include file=$configuration_template}
+        {/if}
+    </div>
+{/if}
 {/crmScope}
\ No newline at end of file
diff --git a/templates/CRM/Dataprocessor/Form/Filter/SimpleFilter.tpl b/templates/CRM/Dataprocessor/Form/Filter/SimpleFilter.tpl
deleted file mode 100644
index c623039c643226698db29c847952d64b60c1bf7f..0000000000000000000000000000000000000000
--- a/templates/CRM/Dataprocessor/Form/Filter/SimpleFilter.tpl
+++ /dev/null
@@ -1,18 +0,0 @@
-{crmScope extensionKey='dataprocessor'}
-<div class="crm-submit-buttons">
-    {include file="CRM/common/formButtons.tpl" location="top"}
-</div>
-
-<h3>{ts}Filter configuration{/ts}</h3>
-<div class="crm-block crm-form-block crm-data-processor_source-block">
-    <div class="crm-section">
-        <div class="label">{$form.field.label}</div>
-        <div class="content">{$form.field.html}</div>
-        <div class="clear"></div>
-    </div>
-</div>
-
-<div class="crm-submit-buttons">
-    {include file="CRM/common/formButtons.tpl" location="bottom"}
-</div>
-{/crmScope}
\ No newline at end of file
diff --git a/templates/CRM/Dataprocessor/Form/Filter/SimpleSqlFilter.tpl b/templates/CRM/Dataprocessor/Form/Filter/SimpleSqlFilter.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..699cd97b3d12abaf39898421ff8f7a18bd052863
--- /dev/null
+++ b/templates/CRM/Dataprocessor/Form/Filter/SimpleSqlFilter.tpl
@@ -0,0 +1,7 @@
+{crmScope extensionKey='dataprocessor'}
+<div class="crm-section">
+    <div class="label">{$form.field.label}</div>
+    <div class="content">{$form.field.html}</div>
+    <div class="clear"></div>
+</div>
+{/crmScope}
\ No newline at end of file
diff --git a/templates/CRM/Dataprocessor/Form/Output/UIOutput/CriteriaForm.tpl b/templates/CRM/Dataprocessor/Form/Output/UIOutput/CriteriaForm.tpl
index 3330dd10d4dc564bd053bca698246e580ad474ad..b54cf9e8458bbbcb8f024d227e1d298a3eb3342e 100644
--- a/templates/CRM/Dataprocessor/Form/Output/UIOutput/CriteriaForm.tpl
+++ b/templates/CRM/Dataprocessor/Form/Output/UIOutput/CriteriaForm.tpl
@@ -17,7 +17,7 @@
                         {assign var=filterVal   value=$filterName|cat:"_value"}
                         {assign var=filterMin   value=$filterName|cat:"_min"}
                         {assign var=filterMax   value=$filterName|cat:"_max"}
-                        {if $filter.type == 'Date'}
+                        {if $filter.type == 'Date' || $filter.type == 'Timestamp'}
                             <tr>
                                 <td class="label">{$filter.title}</td>
                                 {include file="CRM/Dataprocessor/Form/Output/UIOutput/DateRange.tpl" fieldName=$filterName from='_from' to='_to'}
diff --git a/xml/Menu/dataprocessor.xml b/xml/Menu/dataprocessor.xml
index 327842c16b5c6f3c14cfc92a941876f1d679ef51..dad787ee27e87af68aa449e42d3f8686ddeacfec 100644
--- a/xml/Menu/dataprocessor.xml
+++ b/xml/Menu/dataprocessor.xml
@@ -42,13 +42,6 @@
     <access_arguments>access CiviCRM</access_arguments>
     <access_arguments>administer CiviCRM</access_arguments>
   </item>
-  <item>
-    <path>civicrm/dataprocessor/form/filter/simplefilter</path>
-    <page_callback>CRM_Dataprocessor_Form_Filter_SimpleFilter</page_callback>
-    <title>DataProcessor</title>
-    <access_arguments>access CiviCRM</access_arguments>
-    <access_arguments>administer CiviCRM</access_arguments>
-  </item>
   <item>
     <path>civicrm/dataprocessor/form/aggregate_field</path>
     <page_callback>CRM_Dataprocessor_Form_AggregateField</page_callback>
diff --git a/xml/schema/CRM/Dataprocessor/DataProcessorFilter.entityType.php b/xml/schema/CRM/Dataprocessor/DataProcessorFilter.entityType.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2f41a5efde3e2a201a88507b97c19ab78330bcd
--- /dev/null
+++ b/xml/schema/CRM/Dataprocessor/DataProcessorFilter.entityType.php
@@ -0,0 +1,11 @@
+<?php
+// This file declares a new entity type. For more details, see "hook_civicrm_entityTypes" at:
+// http://wiki.civicrm.org/confluence/display/CRMDOC/Hook+Reference
+return array (
+  0 => 
+  array (
+    'name' => 'DataProcessorFilter',
+    'class' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
+    'table' => 'civicrm_data_processor_filter',
+  ),
+);
diff --git a/xml/schema/CRM/Dataprocessor/DataProcessorFilter.xml b/xml/schema/CRM/Dataprocessor/DataProcessorFilter.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1fed632bc30ab3e2576a1b2c6bcda7ab7e6666a4
--- /dev/null
+++ b/xml/schema/CRM/Dataprocessor/DataProcessorFilter.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+
+<table>
+  <base>CRM/Dataprocessor</base>
+  <class>DataProcessorFilter</class>
+  <name>civicrm_data_processor_filter</name>
+  <log>false</log>
+
+  <field>
+    <name>id</name>
+    <type>int unsigned</type>
+    <required>true</required>
+    <comment>Unique DataProcessorFilter ID</comment>
+  </field>
+  <primaryKey>
+    <name>id</name>
+    <autoincrement>true</autoincrement>
+  </primaryKey>
+
+  <field>
+    <name>data_processor_id</name>
+    <title>Data Processor ID</title>
+    <type>int unsigned</type>
+    <required>true</required>
+    <comment>FK to Data Processor</comment>
+  </field>
+  <field>
+    <name>weight</name>
+    <title>Weight</title>
+    <type>int</type>
+    <required>false</required>
+    <length>255</length>
+  </field>
+  <field>
+    <name>name</name>
+    <title>Name</title>
+    <type>varchar</type>
+    <required>false</required>
+    <length>255</length>
+  </field>
+  <field>
+    <name>title</name>
+    <title>Title</title>
+    <type>varchar</type>
+    <required>true</required>
+    <length>255</length>
+  </field>
+  <field>
+    <name>type</name>
+    <title>Type</title>
+    <type>varchar</type>
+    <required>true</required>
+    <length>255</length>
+  </field>
+  <field>
+    <name>is_required</name>
+    <title>Is required</title>
+    <type>boolean</type>
+    <required>false</required>
+    <length>255</length>
+  </field>
+  <field>
+    <name>configuration</name>
+    <title>Configuration</title>
+    <type>text</type>
+    <required>false</required>
+    <length>255</length>
+    <serialize>JSON</serialize>
+  </field>
+  <foreignKey>
+    <name>data_processor_id</name>
+    <table>civicrm_data_processor</table>
+    <key>id</key>
+    <onDelete>CASCADE</onDelete>
+  </foreignKey>
+
+</table>