diff -upN orig\acl.module new\acl.module
--- orig\acl.module	Sat Nov 17 21:02:41 2007
+++ new\acl.module	Mon Dec 17 16:45:21 2007
@@ -10,6 +10,10 @@
  * ACLs can easily co-exist with the existing node_access system.
  */
 
+if (module_exists('workflow_ng')) {
+  include_once(drupal_get_path('module', 'acl') .'/acl_workflow_ng.inc');
+}
+
 /**
  * Create a new ACL.
  */
diff -upN orig\acl_workflow_ng.inc new\acl_workflow_ng.inc
--- orig\acl_workflow_ng.inc	Thu Jan 01 01:00:00 1970
+++ new\acl_workflow_ng.inc	Mon Dec 17 16:46:25 2007
@@ -0,0 +1,301 @@
+<?php
+
+/**
+ * @file ACL integration for the Workflow-ng module 
+ */
+
+
+/*
+ * Implementation of hook_action_info()
+ */
+function acl_action_info() {
+  return array(
+    'acl_workflow_ng_add_user_to_acl' => array(
+      '#label' => t('add user to ACL'),
+      '#arguments' => array(
+        'author' => array('#entity' => 'user', '#label' => t('User which will be added to the ACL')),
+      ),
+      '#module' => t('ACL'),
+    ),
+    'acl_workflow_ng_remove_user_from_acl' => array(
+      '#label' => t('remove user from ACL'),
+      '#arguments' => array(
+        'node' => array('#entity' => 'user', '#label' => t('User which will be removed from the ACL')),
+      ),
+      '#module' => t('ACL'),
+    ),
+    'acl_workflow_ng_add_node_to_acl' => array(
+      '#label' => t('add node to ACL'),
+      '#arguments' => array(
+        'node' => array('#entity' => 'node', '#label' => t('Content')),
+      ),
+      '#module' => t('ACL'),
+    ),
+    'acl_workflow_ng_remove_node_from_acl' => array(
+      '#label' => t('remove node from ACL'),
+      '#arguments' => array(
+        'node' => array('#entity' => 'node', '#label' => t('Content')),
+      ),
+      '#module' => t('ACL'),
+    ),  
+    'acl_workflow_ng_delete_whole_acl' => array(
+      '#label' => t('delete whole ACL(s) from node'),
+      '#arguments' => array(
+        'node' => array('#entity' => 'node', '#label' => t('Content')),
+      ),
+      '#module' => t('ACL'),
+    ),  
+    'acl_workflow_ng_delete_acl' => array(
+      '#label' => t('delete ACL'),
+      '#module' => t('ACL'),
+    ),     
+  );
+}
+
+
+/*
+ * Action: Add a user to ACL
+ */
+function acl_workflow_ng_add_user_to_acl($author, $settings, &$arguments, &$log) {
+  //check if arbitrary user passed instead of arguments.
+  if ($settings['user'] == ''){
+    $uid = $author->uid;
+  }
+  else {
+    $token = workflow_ng_token_replace_all (array('user','acl'), $settings, $arguments, $log);
+    $user = user_load(array($settings['input_type'] => trim($token['user'])));
+    if ($user) {
+       $uid = $user->uid;
+    }
+  }
+  //Making sure we add a valid user
+  if (isset ($uid)) {
+    //Check if ACL exists, or else create it
+    $acl_id = acl_get_id_by_name('acl', $token['acl']);
+    if (!$acl_id) {
+     $acl_id = acl_create_new_acl ('acl', $token['acl']);
+    }
+    
+    //TODO: Check if user not already in ACL
+    acl_add_user($acl_id, $uid);
+  }
+}
+
+/*
+ * Action: Add a user to ACL form
+ */
+function acl_workflow_ng_add_user_to_acl_form($settings = array(), $argument_info) {
+  $form = array();
+  $form['acl'] = array(
+    '#type' => 'textfield',
+    '#title' => t('ACL name'),
+    '#description' => t('Enter the name of the ACL. You may have a single user/ node assigned to several ACL lists'),
+    '#default_value' => $settings['acl'],
+    '#required' => TRUE,
+  );
+  $form['arbitrary_user'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Arbitrary user'),
+    '#description' => t('If the below User field is set, then the User argument will be disregarded.'),
+    '#collapsible' => TRUE,
+    '#collapsed' => FALSE
+  );  
+  $form['arbitrary_user']['user'] = array(
+    '#type' => 'textfield',
+    '#title' => t('User'),
+    '#description' => t('Enter the user id or name. You can use a token replacement.'),
+    '#default_value' => $settings['user'],
+  );
+  workflow_ng_token_replacement_help($form, $argument_info);  
+  $form['arbitrary_user']['input_type'] = array(
+    '#type' => 'radios',
+    '#title' => t('Input type'),
+    '#description' => t('Enter the user name or use a token replacement. If this is set, then the User argument will be disregarded.'),
+    '#default_value' => $settings['input_type'],
+    '#options' => array (
+      'uid' => 'User ID (UID)',
+      'name' => 'Name',
+      'mail' => 'Email',
+    ),
+  );
+      
+  return $form;
+}
+
+function acl_workflow_ng_add_user_to_acl_submit($form_id, $form_values) {
+  $token = workflow_ng_token_get_settings(array('acl', 'user'), $form_values);
+  $settings =  array('acl' => $form_values['acl'], 'user' => $form_values['user'], 'input_type' => $form_values['input_type']);
+  return $token + $settings;
+}
+
+/*
+ * Action: Remove a user from ACL
+ */
+function acl_workflow_ng_remove_user_from_acl($author, $settings, &$arguments, &$log) {
+  //Make sure ACL exists
+  $token = workflow_ng_token_replace_all (array('acl'), $settings, $arguments, $log);
+  $acl_id = acl_get_id_by_name('acl', $token['acl']);
+  if ($acl_id) {
+    //TODO: Check if user not already in ACL
+    acl_remove_user($acl_id, $author->uid);
+  }
+}
+
+/*
+ * Action: Remove a user from ACL form
+ */
+function acl_workflow_ng_remove_user_from_acl_form($settings = array(), $argument_info) {
+  $form = array();
+  $form['acl'] = array(
+    '#type' => 'textfield',
+    '#title' => t('ACL name'),
+    '#description' => t('Enter the name of the ACL.'),
+    '#default_value' => $settings['acl'],
+    '#required' => TRUE,
+  );
+  workflow_ng_token_replacement_help($form, $argument_info);
+  return $form;
+}
+
+function acl_workflow_ng_remove_user_from_acl_submit($form_id, $form_values) {
+  $token = workflow_ng_token_get_settings(array('acl'), $form_values);
+  $settings =  array('acl' => $form_values['acl']);
+  return $token + $settings;
+}
+
+
+/*
+ * Action: Add a node to ACL
+ */
+function acl_workflow_ng_add_node_to_acl($node, $settings, &$arguments, &$log) {
+  //Make sure ACL exists
+  $token = workflow_ng_token_replace_all (array('acl'), $settings, $arguments, $log);
+  $acl_id = acl_get_id_by_name('acl', $token['acl']);
+  if (!$acl_id) {
+    $acl_id = acl_create_new_acl ('acl', $token['acl']);
+  }
+  //TODO: Check if node not already in ACL
+  acl_node_add_acl($node->nid, $acl_id, (boolean)$settings['access_permissions']['view'], (boolean)$settings['access_permissions']['edit'], (boolean)$settings['access_permissions']['delete']);
+   //Make sure new node access grants are written.
+   node_save($node);  
+}
+
+/*
+ * Action: Add a node from ACL form
+ */
+function acl_workflow_ng_add_node_to_acl_form($settings = array(), $argument_info) {
+  $form = array();
+  $form['acl'] = array(
+    '#type' => 'textfield',
+    '#title' => t('ACL name'),
+    '#description' => t('Enter the name of the ACL.'),
+    '#default_value' => $settings['acl'],
+    '#required' => TRUE,
+  );
+  workflow_ng_token_replacement_help($form, $argument_info);
+  $form['access_permissions'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Access permissions'),
+    '#description' => t('Select the operations users will have access rights to, when added to the node ACL.'),
+    '#default_value' => $settings['access_permissions'],
+    '#options' => array (
+      'view'=> t('View'), 
+      'edit' => t('Edit'), 
+      'delete' => t('Delete'),
+    ),  
+  );  
+  return $form;
+}
+
+function acl_workflow_ng_add_node_to_acl_submit($form_id, $form_values) {
+  $token = workflow_ng_token_get_settings(array('acl'), $form_values);
+  $settings =  array('acl' => $form_values['acl'], 'access_permissions' => $form_values['access_permissions']);
+  return $token + $settings;
+}
+
+/*
+ * Action: Remove a node from ACL
+ */
+function acl_workflow_ng_remove_node_from_acl($node, $settings, &$arguments, &$log) {
+  //Make sure ACL exists
+  $token = workflow_ng_token_replace_all (array('acl'), $settings, $arguments, $log);
+  $acl_id = acl_get_id_by_name('acl', $token['acl']);
+  if ($acl_id) {
+    //TODO: Check if node not already in ACL
+    acl_node_remove_acl($node->nid, $acl_id);
+   //Make sure new node access grants are written.
+   node_save($node);    
+  }
+}
+
+/*
+ * Action: Remove a node from ACL form
+ */
+function acl_workflow_ng_remove_node_from_acl_form($settings = array(), $argument_info) {
+  $form = array();
+  $form['acl'] = array(
+    '#type' => 'textfield',
+    '#title' => t('ACL name'),
+    '#description' => t('Enter the name of the ACL.'),
+    '#default_value' => $settings['acl'],
+    '#required' => TRUE,
+  );
+  workflow_ng_token_replacement_help($form, $argument_info);
+  return $form;
+}
+
+function acl_workflow_ng_remove_node_from_acl_submit($form_id, $form_values) {
+  $token = workflow_ng_token_get_settings(array('acl'), $form_values);
+  $settings =  array('acl' => $form_values['acl']);
+  return $token + $settings;
+}
+
+/*
+ * Action: Delete a whole ACL(s) from node
+ */
+function acl_workflow_ng_delete_whole_acl($node, $settings, &$arguments, &$log) {
+  //Make sure ACL exists
+  //TODO: Check if node has any ACL defined
+  acl_node_clear_acls($node->nid, 'acl');
+
+  //Make sure new node access grants are written.
+  node_save($node);
+}
+
+
+/*
+ * Action: Delete ACL
+ */
+function acl_workflow_ng_delete_acl($settings, &$arguments, &$log) {
+  //Make sure ACL exists
+  $token = workflow_ng_token_replace_all (array('acl'), $settings, $arguments, $log);
+  $acl_id = acl_get_id_by_name('acl', $token['acl']);
+  if ($acl_id) {
+    //TODO: Check if node not already in ACL
+    acl_delete_acl($acl_id);
+   //Make sure new node access grants are written to all nodes.
+   node_access_rebuild();    
+  }
+}
+
+/*
+ * Action: Delte ACL form
+ */
+function acl_workflow_ng_delete_acl_form($settings = array(), $argument_info) {
+  $form = array();
+  $form['acl'] = array(
+    '#type' => 'textfield',
+    '#title' => t('ACL name'),
+    '#description' => t('Enter the name of the ACL.'),
+    '#default_value' => $settings['acl'],
+    '#required' => TRUE,
+  );
+  workflow_ng_token_replacement_help($form, $argument_info);
+  return $form;
+}
+
+function acl_workflow_ng_delete_acl_submit($form_id, $form_values) {
+  $token = workflow_ng_token_get_settings(array('acl'), $form_values);
+  $settings =  array('acl' => $form_values['acl']);
+  return $token + $settings;
+}
