diff --git a/acl.install b/acl.install
index 0a3aa95..bcad3f7 100644
--- a/acl.install
+++ b/acl.install
@@ -96,7 +96,12 @@ function acl_schema() {
         'type'        => 'int',
         'size'        => 'small',
         'not null'    => TRUE,
-        'default'     => 0)),
+        'default'     => 0),
+      'data'        => array(
+        'description' => 'Additional data for this grant.',
+        'type'        => 'varchar',
+        'length'      => 255,
+        'not null'    => FALSE)),
     'primary key'     => array('acl_id', 'nid'),
     'indexes'         => array(
       'nid'           => array('nid')),
@@ -219,3 +224,13 @@ function acl_update_6003() {
   return $ret;
 }
 
+/**
+ * Implementation of hook_update_N()
+ * Add 'data' column.
+ */
+function acl_update_6004() {
+  $ret = array();
+  db_add_field($ret, 'acl_node', 'data', array('type' => 'varchar', 'length' => 255, 'not null' => FALSE, 'default' => ''));
+  return $ret;
+}
+
diff --git a/acl.module b/acl.module
index a739207..948e5ff 100644
--- a/acl.module
+++ b/acl.module
@@ -77,9 +77,10 @@ function acl_edit_form($acl_id, $label = NULL, $new_acl = FALSE) {
 /**
  * Provide access control to a node based upon an ACL id.
  */
-function acl_node_add_acl($nid, $acl_id, $view, $update, $delete, $priority = 0) {
+function acl_node_add_acl($nid, $acl_id, $view, $update, $delete, $priority = 0, $data = NULL) {
+  if ($data) $data = serialize($data);
   db_query("DELETE FROM {acl_node} WHERE acl_id = %d AND nid = %d", $acl_id, $nid);
-  db_query("INSERT INTO {acl_node} (acl_id, nid, grant_view, grant_update, grant_delete, priority) VALUES (%d, %d, %d, %d, %d, %d)", $acl_id, $nid, $view, $update, $delete, $priority);
+  db_query("INSERT INTO {acl_node} (acl_id, nid, grant_view, grant_update, grant_delete, data, priority) VALUES (%d, %d, %d, %d, %d, '%s', %d)", $acl_id, $nid, $view, $update, $delete, $data, $priority);
 }
 
 /**
@@ -152,6 +153,7 @@ function acl_node_access_records($node) {
   $result = db_query("SELECT n.*, 'acl' AS realm, n.acl_id AS gid, a.module FROM {acl_node} n INNER JOIN {acl} a ON n.acl_id = a.acl_id WHERE nid = %d", $node->nid);
   $grants = array();
   while ($grant = db_fetch_array($result)) {
+    $grant['data'] = unserialize($grant['data']);
     if (module_exists($grant['module']) && module_invoke($grant['module'], 'enabled')) {
       if (acl_has_users($grant['gid'])) {
         $grants[] = $grant;
