Index: patterns.module
===================================================================
--- patterns.module	(revision 661)
+++ patterns.module	(working copy)
@@ -1686,13 +1686,28 @@
   return $pattern;
 }
 
+function patterns_array_map($function, $array, $params) {
+  $new_array = array();
+  foreach( $array as $key => $value ) {
+    if (is_array($value)) {
+      $new_array[$key] = patterns_array_map($function, $value, $params);
+    } else {
+      $keyparams = array_merge(array($key), $params);
+      $key = call_user_func_array($function, $keyparams);
+      $fullparams = array_merge(array($value), $params);
+      $new_array[$key] = call_user_func_array($function, $fullparams);
+    }
+  }
+  return $new_array;
+}
+
 /**
  * Return an array with detailed information about the pattern
  */
 function patterns_get_pattern_details($pattern, $recursive = FALSE, &$pids = array()) {
 
   // prevent infinite recursion
-  if (in_array($pattern->pid, $pids)) return array();
+//  if (in_array($pattern->pid, $pids)) return array();
   $pids[] = $pattern->pid;
 
   $actions = !empty($pattern->pattern['actions']) ? $pattern->pattern['actions'] : array();
@@ -1720,6 +1735,14 @@
           continue;
         }
         $a = patterns_get_pattern_details($p, TRUE, $pids);
+        // we replace for tokens in the generated pattern
+        // this is just a proof of concept, so far
+        if (function_exists('_token_replace_tokens') && !empty($action['parameters'])) {
+          $tokens = array_keys($action['parameters']);
+          $values = array_values($action['parameters']);
+          // using the internal replace function from the token module
+          $a = patterns_array_map('_token_replace_tokens', $a, array($tokens, $values, '__', '__'));
+        }
         // array_merge doesn't preserve numeric array keys
         // so we handle 'info' separately 
         $info = $result['info'];
