Index: ca/ca.admin.inc
===================================================================
--- ca/ca.admin.inc	(revision 2360)
+++ ca/ca.admin.inc	(working copy)
@@ -224,6 +224,14 @@ function ca_predicate_meta_form($form_state, $pid)
     '#default_value' => ($pid && isset($predicate['#weight'])) ? $predicate['#weight'] : 0,
   );
 
+  // Additional data for that predicate, not managed by CA itself,
+  // but that can be used by other modules to extend the predicate.
+  // Use a validation function to store data in there.
+  $form['predicate_data'] = array(
+    '#type' => 'value',
+    '#value' => isset($predicate['#data']) ? $predicate['#data'] : array(),
+  );
+
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Save predicate'),
Index: ca/ca.module
===================================================================
--- ca/ca.module	(revision 2360)
+++ ca/ca.module	(working copy)
@@ -359,6 +359,7 @@ function ca_prepare_db_predicate($data) {
       // Condition and action data needs to be unserialized.
       case 'conditions':
       case 'actions':
+      case 'data':
         $predicate['#'. $key] = unserialize($value);
         break;
       case 'ca_trigger':
@@ -1031,13 +1032,13 @@ function ca_save_predicate($predicate) {
 
   if (!$result) {
     // If not, then insert it.
-    db_query("INSERT INTO {ca_predicates} (pid, title, description, class, status, weight, uid, ca_trigger, conditions, actions, created, modified) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d, '%s', '%s', '%s', %d, %d)",
-      $predicate['#pid'], $predicate['#title'], $predicate['#description'], $predicate['#class'], $predicate['#status'], $predicate['#weight'], $predicate['#uid'], $predicate['#trigger'], serialize($predicate['#conditions']), serialize($predicate['#actions']), time(), time());
+    db_query("INSERT INTO {ca_predicates} (pid, title, description, class, status, weight, uid, ca_trigger, conditions, actions, data, created, modified) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d, '%s', '%s', '%s', '%s', %d, %d)",
+      $predicate['#pid'], $predicate['#title'], $predicate['#description'], $predicate['#class'], $predicate['#status'], $predicate['#weight'], $predicate['#uid'], $predicate['#trigger'], serialize($predicate['#conditions']), serialize($predicate['#actions']), serialize($predicate['#data']), time(), time());
   }
   else {
     // Otherwise, update it.
-    db_query("UPDATE {ca_predicates} SET title = '%s', description = '%s', class = '%s', status = %d, weight = %d, uid = %d, ca_trigger = '%s', conditions = '%s', actions = '%s', modified = %d WHERE pid = '%s'",
-      $predicate['#title'], $predicate['#description'], $predicate['#class'], $predicate['#status'], $predicate['#weight'], $predicate['#uid'], $predicate['#trigger'], serialize($predicate['#conditions']), serialize($predicate['#actions']), time(), $predicate['#pid']);
+    db_query("UPDATE {ca_predicates} SET title = '%s', description = '%s', class = '%s', status = %d, weight = %d, uid = %d, ca_trigger = '%s', conditions = '%s', actions = '%s', data = '%s', modified = %d WHERE pid = '%s'",
+      $predicate['#title'], $predicate['#description'], $predicate['#class'], $predicate['#status'], $predicate['#weight'], $predicate['#uid'], $predicate['#trigger'], serialize($predicate['#conditions']), serialize($predicate['#actions']), serialize($predicate['#data']), time(), $predicate['#pid']);
   }
 }
 
Index: ca/ca.install
===================================================================
--- ca/ca.install	(revision 2360)
+++ ca/ca.install	(working copy)
@@ -70,6 +70,11 @@ function ca_schema() {
         'size' => 'big',
         'serialize' => TRUE,
       ),
+      'data' => array(
+        'type' => 'text',
+        'size' => 'big',
+        'serialize' => TRUE,
+      ),
       'created' => array(
         'type' => 'int',
         'not null' => TRUE,
@@ -127,3 +132,18 @@ function ca_update_6001() {
 
   return $ret;
 }
+
+/**
+ * Add a 'data' column to predicates.
+ */
+function ca_update_6002() {
+  $ret = array();
+
+  db_add_field($ret, 'ca_predicates', 'data', array(
+    'type' => 'text',
+    'size' => 'big',
+    'serialize' => TRUE,
+  ));
+
+  return $ret;
+}
