Index: customfilter.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/customfilter/Attic/customfilter.admin.inc,v
retrieving revision 1.1.2.8.2.45
diff -u -p -r1.1.2.8.2.45 customfilter.admin.inc
--- customfilter.admin.inc	8 Oct 2009 18:06:50 -0000	1.1.2.8.2.45
+++ customfilter.admin.inc	30 Oct 2009 15:52:25 -0000
@@ -138,9 +138,7 @@ function customfilter_filter_delete($for
 function customfilter_filter_delete_submit($form, &$form_state) {
   $fid = $form['#fid'];
 
-  db_query('DELETE FROM {customfilter_rules} WHERE fid = %d', $fid);
-  db_query('DELETE FROM {customfilter_filters} WHERE fid = %d', $fid);
-  customfilter_cache_clear('filters', $form_state['values']['fid']);
+  _customfilter_delete_filter('filters', $fid);
 
   $form_state['redirect'] = 'admin/settings/customfilter';
 }
Index: customfilter.export.inc
===================================================================
RCS file: customfilter.export.inc
diff -N customfilter.export.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ customfilter.export.inc	30 Oct 2009 15:52:25 -0000
@@ -0,0 +1,38 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Import/Export functionality provided by Customfilter module.
+ */
+
+/**
+ * Export a filter to code.
+ *
+ * @param $filters
+ *   An array of filters, or filter names.
+ */
+function customfilter_export_filter($filters = array()) {
+  $output = array();
+  $output = '$filters = array();'. "\n";
+  foreach ($filters as $filter) {
+    if (!is_array($filter)) {
+      // We got just the filter name, for example from the features
+      // implementation.
+      $filter = _customfilter_get_filter($filter);
+    }
+    $new_filter = (array) $filter;
+
+    // Allow other modules to change the exported filter.
+    drupal_alter('customfilter_export', $new_filter);
+
+    // Remove the flag ID.
+    unset($new_flag['fid']);
+
+    $output .= '// Exported filter: "'. check_plain($filter['name']) . '"' . ".\n";
+    $output .= '$filters[] = ' . var_export($new_filter, TRUE) . ";\n";
+  }
+  $output .= 'return $filters;';
+  return $output;
+}
+
Index: customfilter.features.inc
===================================================================
RCS file: customfilter.features.inc
diff -N customfilter.features.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ customfilter.features.inc	30 Oct 2009 15:52:25 -0000
@@ -0,0 +1,69 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Features integration for Customfilter module.
+ */
+
+/**
+ * Implementation of hook_features_export().
+ */
+function customfilter_features_export($data, &$export, $module_name = '') {
+  $pipe = array();
+
+  // Add customfilter module as a dependency.
+  $export['dependencies']['features'] = 'customfilter';
+
+  foreach ($data as $key => $fid) {
+    $filter = _customfilter_get_filter($fid);
+    $export['features']['customfilter'][$fid] = $filter;
+  }
+
+  return $pipe;
+}
+
+/**
+ * Implementation of hook_features_export_options().
+ */
+function customfilter_features_export_options() {
+  $options = array();
+  // Get all flags.
+  foreach (_customfilter_get_filters() as $filter) {
+    $options[$filter['fid']] = check_plain($filter['name']);
+  }
+  return $options;
+}
+
+/**
+ * Implementation of hook_features_export_render().
+ */
+function customfilter_features_export_render($module = 'foo', $data, $features_export) {
+  module_load_include('inc', 'customfilter', '/customfilter.export');
+  $code = customfilter_export_filter($data);
+  return array('customfilter_default_filter' => $code);
+}
+
+/**
+ * Implementation of hook_features_revert().
+ *
+ * @param $module
+ *   The name of module for which to revert content.
+ */
+function customfilter_features_revert($module = NULL) {
+  // Get default filter from features.
+  if (module_hook($module, 'customfilter_default_filter')) {
+    module_load_include('inc', 'customfilter', '/customfilter.admin');
+    $default_filters = module_invoke($module, 'customfilter_default_filter');
+
+    // Delete flags that are defined in code.
+    foreach ($default_filters as $default_filter) {
+      _customfilter_delete_filter($default_filter['fid']);
+    }
+  }
+  else {
+    drupal_set_message(t('Could not load default filter.'), 'error');
+    return FALSE;
+  }
+  return TRUE;
+}
Index: customfilter.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/customfilter/customfilter.module,v
retrieving revision 1.3.2.1.2.16.2.58
diff -u -p -r1.3.2.1.2.16.2.58 customfilter.module
--- customfilter.module	6 Oct 2009 20:30:31 -0000	1.3.2.1.2.16.2.58
+++ customfilter.module	30 Oct 2009 15:52:25 -0000
@@ -405,6 +405,19 @@ function customfilter_theme() {
   );
 }
 
+/**
+ * Implementation of hook_features_api().
+ */
+function customfilter_features_api() {
+  return array(
+    'customfilter' => array(
+      'feature_source' => TRUE,
+      'default_hook' => 'customfilter_default_filter',
+      'file' => drupal_get_path('module', 'customfilter') . '/customfilter.features.inc',
+    ),
+  );
+}
+
 /*****************************************************************************
  * Public functions.
  ****************************************************************************/
@@ -452,6 +465,17 @@ function _customfilter_breadcrumb(array 
 }
 
 /**
+ * Delete a filter from the database table.
+ * @param $fid
+ *   The filter id.
+ */
+function _customfilter_delete_filter($fid) {
+  db_query('DELETE FROM {customfilter_rules} WHERE fid = %d', $fid);
+  db_query('DELETE FROM {customfilter_filters} WHERE fid = %d', $fid);
+  customfilter_cache_clear($fid);
+}
+
+/**
  * Delete a rule from the database table.
  * @param $rid
  *   The rule ID.
@@ -491,6 +515,26 @@ function _customfilter_get_filters() {
 }
 
 /**
+ * Get a single filter.
+ * 
+ * @param $fid 
+ *   Id of filter to get.
+ * @return 
+ *   A single filter.
+ */
+function _customfilter_get_filter($fid) {
+  $filters = _customfilter_get_filters();
+  foreach ($filters as $filter) {
+  	if ($filter['fid'] == $fid) {
+    	return $filter;
+  	}
+  }
+  $result = db_query("SELECT * FROM {customfilter_filters} WHERE fid = %d", $fid);
+  $filter = db_fetch_array($result);
+  return $filter;
+}
+
+/**
  * Retrieve the replacement rules for a specific filter.
  *
  * @param $fid
