diff --git a/acl.module b/acl.module
index a739207..3b93abd 100644
--- a/acl.module
+++ b/acl.module
@@ -22,6 +22,7 @@
  *   An arbitrary name for this ACL, freely defined by the client module.
  * @param $number
  *   An arbitrary number for this ACL, freely defined by the client module.
+ *
  * @return
  *   The ID of the newly created ACL.
  */
@@ -98,7 +99,7 @@ function acl_node_clear_acls($nid, $module) {
     $acls[] = $o->acl_id;
   }
   if ($acls) {
-    db_query("DELETE FROM {acl_node} WHERE nid = %d AND acl_id IN (". db_placeholders($acls) .")", array_merge(array($nid), $acls));
+    db_query("DELETE FROM {acl_node} WHERE nid = %d AND acl_id IN (" . db_placeholders($acls) . ")", array_merge(array($nid), $acls));
   }
 }
 
@@ -269,10 +270,17 @@ function acl_node_access_explain($row) {
  * Asks the client for its interpretation of the given grant record.
  */
 function _acl_get_explanation($text, $acl_id, $module, $name, $number, $users = NULL) {
-  $hook = $module .'_acl_explain';
+  $hook = $module . '_acl_explain';
   if (function_exists($hook)) {
-    return '<span title="'. $hook($acl_id, $name, $number, $users) .'">'. $text .'</span>';
+    return '<span title="' . $hook($acl_id, $name, $number, $users) . '">' . $text . '</span>';
   }
   return $text;
 }
 
+function acl_views_api() {
+  return array(
+    'api' => 2,
+    'path' => drupal_get_path('module', 'acl') . '/includes',
+  );
+}
+
diff --git a/includes/acl.views.inc b/includes/acl.views.inc
new file mode 100644
index 0000000..8eab8be
--- /dev/null
+++ b/includes/acl.views.inc
@@ -0,0 +1,52 @@
+<?php
+
+function acl_views_data() {
+  $data = array();
+
+  if (module_exists('acl')) {
+
+    $data['node']['acl_view'] = array(
+      'title' => t('ACL: view'),
+      'help' => t('Current user has ACL view permission.'),
+      'filter' => array(
+        'handler' => 'acl_handler_filter_view',
+      ),
+    );
+
+    $data['node']['acl_update'] = array(
+      'title' => t('ACL: update'),
+      'help' => t('Current user has ACL update permission.'),
+      'filter' => array(
+        'handler' => 'acl_handler_filter_update',
+      ),
+    );
+
+    $data['node']['acl_delete'] = array(
+      'title' => t('ACL: delete'),
+      'help' => t('Current user has ACL delete permission.'),
+      'filter' => array(
+        'handler' => 'acl_handler_filter_delete',
+      ),
+    );
+  }
+  return $data;
+}
+
+function acl_views_handlers() {
+  return array(
+    'info' => array(
+      'path' => drupal_get_path('module', 'acl') . '/includes',
+    ),
+    'handlers' => array(
+      'acl_handler_filter_view' => array(
+        'parent' => 'views_handler_filter',
+      ),
+      'acl_handler_filter_update' => array(
+        'parent' => 'views_handler_filter',
+      ),
+      'acl_handler_filter_delete' => array(
+        'parent' => 'views_handler_filter',
+      ),
+    ),
+  );
+}
diff --git a/includes/acl_handler_filter_delete.inc b/includes/acl_handler_filter_delete.inc
new file mode 100644
index 0000000..e2fc50e
--- /dev/null
+++ b/includes/acl_handler_filter_delete.inc
@@ -0,0 +1,15 @@
+<?php
+/**
+ * @file
+ * Views filter for ACL delete permission
+ */
+class acl_handler_filter_view extends views_handler_filter {
+  function admin_summary() {}
+
+  function operator_form() {}
+
+  function query() {
+    $table = $this->ensure_my_table();
+    $this->query->add_where($this->options['group'], "node.nid IN (SELECT nid FROM acl_node INNER JOIN acl_user on acl_node.acl_id = acl_user.acl_id WHERE acl_node.grant_delete = 1 AND acl_user.uid = ***CURRENT_USER*** )");
+  }
+}
diff --git a/includes/acl_handler_filter_update.inc b/includes/acl_handler_filter_update.inc
new file mode 100644
index 0000000..cfad45b
--- /dev/null
+++ b/includes/acl_handler_filter_update.inc
@@ -0,0 +1,16 @@
+<?php
+/**
+ * @file
+ * Views filter for ACL update permission
+ */
+class acl_handler_filter_update extends views_handler_filter {
+  function admin_summary() {}
+
+  function operator_form() {}
+
+  function query() {
+    $table = $this->ensure_my_table();
+    $this->query->add_where($this->options['group'], "node.nid IN (SELECT nid FROM acl_node INNER JOIN acl_user on acl_node.acl_id = acl_user.acl_id WHERE acl_node.grant_update = 1 AND acl_user.uid = ***CURRENT_USER*** )");
+  }
+}
+
diff --git a/includes/acl_handler_filter_view.inc b/includes/acl_handler_filter_view.inc
new file mode 100644
index 0000000..033f6f7
--- /dev/null
+++ b/includes/acl_handler_filter_view.inc
@@ -0,0 +1,15 @@
+<?php
+/**
+ * @file
+ * Views filter for ACL view permission
+ */
+class acl_handler_filter_view extends views_handler_filter {
+  function admin_summary() {}
+
+  function operator_form() {}
+
+  function query() {
+    $table = $this->ensure_my_table();
+    $this->query->add_where($this->options['group'], "node.nid IN (SELECT nid FROM acl_node INNER JOIN acl_user on acl_node.acl_id = acl_user.acl_id WHERE acl_node.grant_view = 1 AND acl_user.uid = ***CURRENT_USER*** )");
+  }
+}
