<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -22,7 +22,7 @@
  * @since         CakePHP(tm) v 1.0.0.2312
  * @version       $Revision: 7945 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 20:16:01 -0600 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**</diff>
      <filename>app/config/inflections.php</filename>
    </modified>
    <modified>
      <filename>app/tmp/cache/models/empty</filename>
    </modified>
    <modified>
      <filename>app/tmp/cache/persistent/empty</filename>
    </modified>
    <modified>
      <filename>app/tmp/cache/views/empty</filename>
    </modified>
    <modified>
      <filename>app/tmp/logs/empty</filename>
    </modified>
    <modified>
      <filename>app/tmp/sessions/empty</filename>
    </modified>
    <modified>
      <filename>app/tmp/tests/empty</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: css.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: css.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.app.webroot
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 if (!defined('CAKE_CORE_INCLUDE_PATH')) {
@@ -95,7 +95,7 @@ if (!class_exists('File')) {
 
 	header(&quot;Date: &quot; . date(&quot;D, j M Y G:i:s &quot;, $templateModified) . 'GMT');
 	header(&quot;Content-Type: text/css&quot;);
-	header(&quot;Expires: &quot; . gmdate(&quot;D, j M Y H:i:s&quot;, time() + DAY) . &quot; GMT&quot;);
+	header(&quot;Expires: &quot; . gmdate(&quot;D, d M Y H:i:s&quot;, time() + DAY) . &quot; GMT&quot;);
 	header(&quot;Cache-Control: max-age=86400, must-revalidate&quot;); // HTTP/1.1
 	header(&quot;Pragma: cache&quot;);        // HTTP/1.0
 	print $output;</diff>
      <filename>app/webroot/css.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 // +---------------------------------------------------------------------------------------------------+ //
-// + $Id: VERSION.txt 8004 2009-01-16 20:15:21Z gwoo $
-// + Last Modified: $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+// + $Id: VERSION.txt 8120 2009-03-19 20:25:10Z gwoo $
+// + Last Modified: $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
 // + Modified By: $LastChangedBy: gwoo $
 // +---------------------------------------------------------------------------------------------------+ //
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-1.2.1.8004
\ No newline at end of file
+1.2.2.8120
\ No newline at end of file</diff>
      <filename>cake/VERSION.txt</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: config.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: config.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Core Configurations.
  *
@@ -17,10 +17,10 @@
  * @package       cake
  * @subpackage    cake.app.config
  * @since         CakePHP(tm) v 1.1.11.4062
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
-return $config['Cake.version'] = '1.2.1.8004';
+return $config['Cake.version'] = '1.2.2.8120';
 ?&gt;
\ No newline at end of file</diff>
      <filename>cake/config/config.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 #!/usr/bin/php -q
 &lt;?php
-/* SVN FILE: $Id: cake.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: cake.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Command-line code generation utility to automate programmer chores.
  *
@@ -20,9 +20,9 @@
  * @package       cake
  * @subpackage    cake.cake.console
  * @since         CakePHP(tm) v 1.2.0.5012
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -198,10 +198,14 @@ class ShellDispatcher {
  */
 	function __buildPaths() {
 		$paths = array();
-
 		$pluginPaths = Configure::read('pluginPaths');
+		if (!class_exists('Folder')) {
+			require LIBS . 'folder.php';
+		}
+
 		foreach ($pluginPaths as $pluginPath) {
-			$plugins = Configure::listObjects('plugin', $pluginPath);
+			$Folder =&amp; new Folder($pluginPath);
+			list($plugins,) = $Folder-&gt;read(false, true);
 			foreach ((array)$plugins as $plugin) {
 				$path = $pluginPath . Inflector::underscore($plugin) . DS . 'vendors' . DS . 'shells' . DS;
 				if (file_exists($path)) {
@@ -262,7 +266,6 @@ class ShellDispatcher {
 		Configure::write('debug', 1);
 		return true;
 	}
-
 /**
  * Dispatches a CLI request
  *
@@ -542,16 +545,19 @@ class ShellDispatcher {
 
 		$this-&gt;stdout(&quot;\nAvailable Shells:&quot;);
 		$_shells = array();
+
 		foreach ($this-&gt;shellPaths as $path) {
 			if (is_dir($path)) {
 				$shells = Configure::listObjects('file', $path);
-				$path = str_replace(CORE_PATH, 'CORE/', $path);
+				$path = str_replace(CAKE_CORE_INCLUDE_PATH . DS . 'cake' . DS, 'CORE' . DS, $path);
+				$path = str_replace(APP, 'APP' . DS, $path);
 				$path = str_replace(ROOT, 'ROOT', $path);
 				$path = rtrim($path, DS);
 				$this-&gt;stdout(&quot;\n &quot; . $path . &quot;:&quot;);
 				if (empty($shells)) {
 					$this-&gt;stdout(&quot;\t - none&quot;);
 				} else {
+					sort($shells);
 					foreach ($shells as $shell) {
 						if ($shell !== 'shell.php') {
 							$this-&gt;stdout(&quot;\t &quot; . str_replace('.php', '', $shell));</diff>
      <filename>cake/console/cake.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: acl.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: acl.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.console.libs
  * @since         CakePHP(tm) v 1.2.0.5012
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 App::import('Component', 'Acl');
@@ -36,7 +36,7 @@ class AclShell extends Shell {
 /**
  * Contains instance of AclComponent
  *
- * @var object
+ * @var AclComponent
  * @access public
  */
 	var $Acl;</diff>
      <filename>cake/console/libs/acl.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: shell.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: shell.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Base class for Shells
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.console.libs
  * @since         CakePHP(tm) v 1.2.0.5012
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -34,7 +34,7 @@ class Shell extends Object {
 /**
  * An instance of the ShellDispatcher object that loaded this script
  *
- * @var object
+ * @var ShellDispatcher
  * @access public
  */
 	var $Dispatch = null;
@@ -49,7 +49,7 @@ class Shell extends Object {
  * Holds the DATABASE_CONFIG object for the app. Null if database.php could not be found,
  * or the app does not exist.
  *
- * @var object
+ * @var DATABASE_CONFIG
  * @access public
  */
 	var $DbConfig = null;
@@ -471,11 +471,11 @@ class Shell extends Object {
 		if (App::import('vendor', 'simpletest' . DS . 'simpletest')) {
 			return true;
 		}
-		$unitTest = $this-&gt;in('Cake test suite not installed.  Do you want to bake unit test files anyway?', array('y','n'), 'y');
+		$unitTest = $this-&gt;in('SimpleTest is not installed.  Do you want to bake unit test files anyway?', array('y','n'), 'y');
 		$result = low($unitTest) == 'y' || low($unitTest) == 'yes';
 
 		if ($result) {
-			$this-&gt;out(&quot;\nYou can download the Cake test suite from http://cakeforge.org/projects/testsuite/&quot;, true);
+			$this-&gt;out(&quot;\nYou can download SimpleTest from http://simpletest.org&quot;, true);
 		}
 		return $result;
 	}</diff>
      <filename>cake/console/libs/shell.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: extract.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: extract.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.console.libs
  * @since         CakePHP(tm) v 1.2.0.5012
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -135,7 +135,7 @@ class ExtractTask extends Shell{
 		} else {
 			$response = '';
 			while ($response == '') {
-				$response = $this-&gt;in(&quot;What is the full path you would like to extract?\nExample: &quot; . $this-&gt;params['root'] . DS . &quot;myapp\n[Q]uit&quot;, null, 'Q');
+				$response = $this-&gt;in(&quot;What is the full path you would like to extract?\nExample: &quot; . $this-&gt;params['root'] . DS . &quot;myapp\n[Q]uit&quot;, null, $this-&gt;params['working']);
 				if (strtoupper($response) === 'Q') {
 					$this-&gt;out('Extract Aborted');
 					$this-&gt;_stop();
@@ -668,6 +668,9 @@ class ExtractTask extends Shell{
 		$files = glob(&quot;$path*.{php,ctp,thtml,inc,tpl}&quot;, GLOB_BRACE);
 		$dirs = glob(&quot;$path*&quot;, GLOB_ONLYDIR);
 
+		$files = $files ? $files : array();
+		$dirs = $dirs ? $dirs : array();
+
 		foreach ($dirs as $dir) {
 			if (!preg_match(&quot;!(^|.+/)(CVS|.svn)$!&quot;, $dir)) {
 				$files = array_merge($files, $this-&gt;__searchDirectory(&quot;$dir&quot; . DS));</diff>
      <filename>cake/console/libs/tasks/extract.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: model.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: model.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * The ModelTask handles creating and updating models files.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.console.libs.tasks
  * @since         CakePHP(tm) v 1.2
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 App::import('Model', 'ConnectionManager');
@@ -570,13 +570,13 @@ class ModelTask extends Shell {
 				$belongsToCount = count($associations['belongsTo']);
 
 				for ($i = 0; $i &lt; $belongsToCount; $i++) {
-					$out .= &quot;\t\t\t'{$associations['belongsTo'][$i]['alias']}' =&gt; &quot;;
-					$out .= &quot;array('className' =&gt; '{$associations['belongsTo'][$i]['className']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'foreignKey' =&gt; '{$associations['belongsTo'][$i]['foreignKey']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'conditions' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'fields' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'order' =&gt; ''\n&quot;;
-					$out .= &quot;\t\t\t)&quot;;
+					$out .= &quot;\t\t'{$associations['belongsTo'][$i]['alias']}' =&gt; array(\n&quot;;
+					$out .= &quot;\t\t\t'className' =&gt; '{$associations['belongsTo'][$i]['className']}',\n&quot;;
+					$out .= &quot;\t\t\t'foreignKey' =&gt; '{$associations['belongsTo'][$i]['foreignKey']}',\n&quot;;
+					$out .= &quot;\t\t\t'conditions' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'fields' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'order' =&gt; ''\n&quot;;
+					$out .= &quot;\t\t)&quot;;
 					if ($i + 1 &lt; $belongsToCount) {
 						$out .= &quot;,&quot;;
 					}
@@ -591,14 +591,14 @@ class ModelTask extends Shell {
 				$hasOneCount = count($associations['hasOne']);
 
 				for ($i = 0; $i &lt; $hasOneCount; $i++) {
-					$out .= &quot;\t\t\t'{$associations['hasOne'][$i]['alias']}' =&gt; &quot;;
-					$out .= &quot;array('className' =&gt; '{$associations['hasOne'][$i]['className']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'foreignKey' =&gt; '{$associations['hasOne'][$i]['foreignKey']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'dependent' =&gt; false,\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'conditions' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'fields' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'order' =&gt; ''\n&quot;;
-					$out .= &quot;\t\t\t)&quot;;
+					$out .= &quot;\t\t'{$associations['hasOne'][$i]['alias']}' =&gt; array(\n&quot;;
+					$out .= &quot;\t\t\t'className' =&gt; '{$associations['hasOne'][$i]['className']}',\n&quot;;
+					$out .= &quot;\t\t\t'foreignKey' =&gt; '{$associations['hasOne'][$i]['foreignKey']}',\n&quot;;
+					$out .= &quot;\t\t\t'dependent' =&gt; false,\n&quot;;
+					$out .= &quot;\t\t\t'conditions' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'fields' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'order' =&gt; ''\n&quot;;
+					$out .= &quot;\t\t)&quot;;
 					if ($i + 1 &lt; $hasOneCount) {
 						$out .= &quot;,&quot;;
 					}
@@ -613,19 +613,19 @@ class ModelTask extends Shell {
 				$hasManyCount = count($associations['hasMany']);
 
 				for ($i = 0; $i &lt; $hasManyCount; $i++) {
-					$out .= &quot;\t\t\t'{$associations['hasMany'][$i]['alias']}' =&gt; &quot;;
-					$out .= &quot;array('className' =&gt; '{$associations['hasMany'][$i]['className']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'foreignKey' =&gt; '{$associations['hasMany'][$i]['foreignKey']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'dependent' =&gt; false,\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'conditions' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'fields' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'order' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'limit' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'offset' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'exclusive' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'finderQuery' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t\t\t'counterQuery' =&gt; ''\n&quot;;
-					$out .= &quot;\t\t\t)&quot;;
+					$out .= &quot;\t\t'{$associations['hasMany'][$i]['alias']}' =&gt; array(\n&quot;;
+					$out .= &quot;\t\t\t'className' =&gt; '{$associations['hasMany'][$i]['className']}',\n&quot;;
+					$out .= &quot;\t\t\t'foreignKey' =&gt; '{$associations['hasMany'][$i]['foreignKey']}',\n&quot;;
+					$out .= &quot;\t\t\t'dependent' =&gt; false,\n&quot;;
+					$out .= &quot;\t\t\t'conditions' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'fields' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'order' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'limit' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'offset' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'exclusive' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'finderQuery' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'counterQuery' =&gt; ''\n&quot;;
+					$out .= &quot;\t\t)&quot;;
 					if ($i + 1 &lt; $hasManyCount) {
 						$out .= &quot;,&quot;;
 					}
@@ -639,21 +639,21 @@ class ModelTask extends Shell {
 				$hasAndBelongsToManyCount = count($associations['hasAndBelongsToMany']);
 
 				for ($i = 0; $i &lt; $hasAndBelongsToManyCount; $i++) {
-					$out .= &quot;\t\t\t'{$associations['hasAndBelongsToMany'][$i]['alias']}' =&gt; &quot;;
-					$out .= &quot;array('className' =&gt; '{$associations['hasAndBelongsToMany'][$i]['className']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'joinTable' =&gt; '{$associations['hasAndBelongsToMany'][$i]['joinTable']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'foreignKey' =&gt; '{$associations['hasAndBelongsToMany'][$i]['foreignKey']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'associationForeignKey' =&gt; '{$associations['hasAndBelongsToMany'][$i]['associationForeignKey']}',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'unique' =&gt; true,\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'conditions' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'fields' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'order' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'limit' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'offset' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'finderQuery' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'deleteQuery' =&gt; '',\n&quot;;
-					$out .= &quot;\t\t\t\t\t\t'insertQuery' =&gt; ''\n&quot;;
-					$out .= &quot;\t\t\t)&quot;;
+					$out .= &quot;\t\t'{$associations['hasAndBelongsToMany'][$i]['alias']}' =&gt; array(\n&quot;;
+					$out .= &quot;\t\t\t'className' =&gt; '{$associations['hasAndBelongsToMany'][$i]['className']}',\n&quot;;
+					$out .= &quot;\t\t\t'joinTable' =&gt; '{$associations['hasAndBelongsToMany'][$i]['joinTable']}',\n&quot;;
+					$out .= &quot;\t\t\t'foreignKey' =&gt; '{$associations['hasAndBelongsToMany'][$i]['foreignKey']}',\n&quot;;
+					$out .= &quot;\t\t\t'associationForeignKey' =&gt; '{$associations['hasAndBelongsToMany'][$i]['associationForeignKey']}',\n&quot;;
+					$out .= &quot;\t\t\t'unique' =&gt; true,\n&quot;;
+					$out .= &quot;\t\t\t'conditions' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'fields' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'order' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'limit' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'offset' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'finderQuery' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'deleteQuery' =&gt; '',\n&quot;;
+					$out .= &quot;\t\t\t'insertQuery' =&gt; ''\n&quot;;
+					$out .= &quot;\t\t)&quot;;
 					if ($i + 1 &lt; $hasAndBelongsToManyCount) {
 						$out .= &quot;,&quot;;
 					}
@@ -718,7 +718,7 @@ class ModelTask extends Shell {
 			$out .= &quot;\tfunction test{$className}Find() {\n&quot;;
 			$out .= &quot;\t\t\$this-&gt;{$className}-&gt;recursive = -1;\n&quot;;
 			$out .= &quot;\t\t\$results = \$this-&gt;{$className}-&gt;find('first');\n\t\t\$this-&gt;assertTrue(!empty(\$results));\n\n&quot;;
-			$out .= &quot;\t\t\$expected = array('$className' =&gt; array(\n$results\n\t\t\t));\n&quot;;
+			$out .= &quot;\t\t\$expected = array('$className' =&gt; array(\n$results\n\t\t));\n&quot;;
 			$out .= &quot;\t\t\$this-&gt;assertEqual(\$results, \$expected);\n&quot;;
 			$out .= &quot;\t}\n&quot;;
 			$out .= &quot;}\n&quot;;
@@ -862,7 +862,7 @@ class ModelTask extends Shell {
 								$type = $value;
 								$value = array('type'=&gt; $type);
 							}
-							$col = &quot;\t\t\t'{$field}' =&gt; array('type'=&gt;'&quot; . $value['type'] . &quot;', &quot;;
+							$col = &quot;\t\t'{$field}' =&gt; array('type'=&gt;'&quot; . $value['type'] . &quot;', &quot;;
 
 							switch ($value['type']) {
 								case 'integer':
@@ -898,11 +898,11 @@ class ModelTask extends Shell {
 									$insert .= &quot;feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.'&quot;;
 								break;
 							}
-							$records[] = &quot;\t\t\t'$field'  =&gt; $insert&quot;;
+							$records[] = &quot;\t\t'$field'  =&gt; $insert&quot;;
 							unset($value['type']);
 							$col .= join(', ',  $schema-&gt;__values($value));
 						} else {
-							$col = &quot;\t\t\t'indexes' =&gt; array(&quot;;
+							$col = &quot;\t\t'indexes' =&gt; array(&quot;;
 							$props = array();
 							foreach ((array)$value as $key =&gt; $index) {
 								$props[] = &quot;'{$key}' =&gt; array(&quot;.join(', ',  $schema-&gt;__values($index)).&quot;)&quot;;
@@ -914,11 +914,11 @@ class ModelTask extends Shell {
 					}
 					$out .= join(&quot;,\n&quot;, $cols);
 				}
-				$out .= &quot;\n\t\t\t);\n&quot;;
+				$out .= &quot;\n\t);\n&quot;;
 			}
 		}
 		$records = join(&quot;,\n&quot;, $records);
-		$out .= &quot;\tvar \$records = array(array(\n$records\n\t\t\t));\n&quot;;
+		$out .= &quot;\tvar \$records = array(array(\n$records\n\t));\n&quot;;
 		$out .= &quot;}\n&quot;;
 		$path = TESTS . DS . 'fixtures' . DS;
 		if (isset($this-&gt;plugin)) {
@@ -930,7 +930,7 @@ class ModelTask extends Shell {
 		$content = &quot;&lt;?php \n/* SVN FILE: $header$ */\n/* &quot;. $model .&quot; Fixture generated on: &quot; . date('Y-m-d H:m:s') . &quot; : &quot;. time() . &quot;*/\n{$out}?&gt;&quot;;
 		$this-&gt;out(&quot;\nBaking test fixture for $model...&quot;);
 		if ($this-&gt;createFile($path . $filename, $content)) {
-			return $records;
+			return str_replace(&quot;\t\t&quot;, &quot;\t\t\t&quot;, $records);
 		}
 		return false;
 	}</diff>
      <filename>cake/console/libs/tasks/model.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: test.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: test.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * The TestTask handles creating and updating test files.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.console.libs.tasks
  * @since         CakePHP(tm) v 1.2
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -87,19 +87,19 @@ class TestTask extends Shell {
 		}
 
 		while ($class == null) {
+			$cases = array();
+			$this-&gt;hr();
+			$this-&gt;out(&quot;Select a class:&quot;);
+			$this-&gt;hr();
+
+			$keys = array();
+			foreach ($options as $key =&gt; $option) {
+				$this-&gt;out(++$key . '. ' . $option);
+				$keys[] = $key;
+			}
+			$keys[] = 'q';
 
-				$this-&gt;hr();
-				$this-&gt;out(&quot;Select a class:&quot;);
-				$this-&gt;hr();
-
-				$keys = array();
-				foreach ($options as $key =&gt; $option) {
-					$this-&gt;out(++$key . '. ' . $option);
-					$keys[] = $key;
-				}
-				$keys[] = 'q';
-
-				$key = $this-&gt;in(__(&quot;Enter the class to test or (q)uit&quot;, true), $keys, 'q');
+			$key = $this-&gt;in(__(&quot;Enter the class to test or (q)uit&quot;, true), $keys, 'q');
 
 			if ($key != 'q') {
 				if (isset($options[--$key])) {
@@ -143,7 +143,7 @@ class TestTask extends Shell {
 		}
 
 		if (strpos($this-&gt;path, $class) === false) {
-			$this-&gt;path .= 'cases' . DS . Inflector::tableize($class) . DS;
+			$this-&gt;filePath = $this-&gt;path . 'cases' . DS . Inflector::tableize($class) . DS;
 		}
 
 		$class = Inflector::classify($class);
@@ -175,14 +175,14 @@ class TestTask extends Shell {
 
 		$this-&gt;out(&quot;Baking unit test for $name...&quot;);
 		$this-&gt;out($out);
-		$ok = $this-&gt;in(__('Is this correct?'), array('y', 'n'), 'y');
+		$ok = $this-&gt;in(__('Is this correct?', true), array('y', 'n'), 'y');
 		if ($ok == 'n') {
 			return false;
 		}
 
 		$header = '$Id';
 		$content = &quot;&lt;?php \n/* SVN FILE: $header$ */\n/* &quot;. $name .&quot; Test cases generated on: &quot; . date('Y-m-d H:m:s') . &quot; : &quot;. time() . &quot;*/\n{$out}?&gt;&quot;;
-		return $this-&gt;createFile($this-&gt;path . Inflector::underscore($name) . '.test.php', $content);
+		return $this-&gt;createFile($this-&gt;filePath . Inflector::underscore($name) . '.test.php', $content);
 	}
 /**
  * Handles the extra stuff needed</diff>
      <filename>cake/console/libs/tasks/test.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: dispatcher.php 7961 2008-12-25 23:21:36Z gwoo $ */
+/* SVN FILE: $Id: dispatcher.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Dispatcher takes the URL information, parses it for paramters and
  * tells the involved controllers what to do.
@@ -20,9 +20,9 @@
  * @package       cake
  * @subpackage    cake.cake
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 7961 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-25 15:21:36 -0800 (Thu, 25 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -87,7 +87,6 @@ class Dispatcher extends Object {
 		if ($base !== false) {
 			Configure::write('App.base', $base);
 		}
-
 		if ($url !== null) {
 			return $this-&gt;dispatch($url);
 		}
@@ -105,45 +104,36 @@ class Dispatcher extends Object {
  * @access public
  */
 	function dispatch($url = null, $additionalParams = array()) {
-		$parse = true;
-
-		if (is_array($url)) {
-			$url = $this-&gt;__extractParams($url, $additionalParams);
-			$parse = false;
-		}
-
 		if ($this-&gt;base === false) {
 			$this-&gt;base = $this-&gt;baseUrl();
 		}
 
-		if ($url !== null) {
-			$_GET['url'] = $url;
-		}
-
-		if ($parse) {
+		if (is_array($url)) {
+			$url = $this-&gt;__extractParams($url, $additionalParams);
+		} else {
+			if ($url) {
+				$_GET['url'] = $url;
+			}
 			$url = $this-&gt;getUrl();
+			$this-&gt;params = array_merge($this-&gt;parseParams($url), $additionalParams);
 		}
+
 		$this-&gt;here = $this-&gt;base . '/' . $url;
 
 		if ($this-&gt;cached($url)) {
 			$this-&gt;_stop();
 		}
 
-		if ($parse) {
-			$this-&gt;params = array_merge($this-&gt;parseParams($url), $additionalParams);
-		}
 		$controller =&amp; $this-&gt;__getController();
 
 		if (!is_object($controller)) {
 			Router::setRequestInfo(array($this-&gt;params, array('base' =&gt; $this-&gt;base, 'webroot' =&gt; $this-&gt;webroot)));
-			return $this-&gt;cakeError('missingController', array(
-				array(
-					'className' =&gt; Inflector::camelize($this-&gt;params['controller']) . 'Controller',
-					'webroot' =&gt; $this-&gt;webroot,
-					'url' =&gt; $url,
-					'base' =&gt; $this-&gt;base
-				)
-			));
+			return $this-&gt;cakeError('missingController', array(array(
+				'className' =&gt; Inflector::camelize($this-&gt;params['controller']) . 'Controller',
+				'webroot' =&gt; $this-&gt;webroot,
+				'url' =&gt; $url,
+				'base' =&gt; $this-&gt;base
+			)));
 		}
 
 		$privateAction = (bool)(strpos($this-&gt;params['action'], '_', 0) === 0);
@@ -163,15 +153,13 @@ class Dispatcher extends Object {
 		));
 
 		if ($privateAction) {
-			return $this-&gt;cakeError('privateAction', array(
-				array(
-					'className' =&gt; Inflector::camelize($this-&gt;params['controller'] . &quot;Controller&quot;),
-					'action' =&gt; $this-&gt;params['action'],
-					'webroot' =&gt; $this-&gt;webroot,
-					'url' =&gt; $url,
-					'base' =&gt; $this-&gt;base
-				)
-			));
+			return $this-&gt;cakeError('privateAction', array(array(
+				'className' =&gt; Inflector::camelize($this-&gt;params['controller'] . &quot;Controller&quot;),
+				'action' =&gt; $this-&gt;params['action'],
+				'webroot' =&gt; $this-&gt;webroot,
+				'url' =&gt; $url,
+				'base' =&gt; $this-&gt;base
+			)));
 		}
 
 		$controller-&gt;base = $this-&gt;base;
@@ -187,15 +175,12 @@ class Dispatcher extends Object {
 		} else {
 			$controller-&gt;data = null;
 		}
-
 		if (array_key_exists('return', $this-&gt;params) &amp;&amp; $this-&gt;params['return'] == 1) {
 			$controller-&gt;autoRender = false;
 		}
-
 		if (!empty($this-&gt;params['bare'])) {
 			$controller-&gt;autoLayout = false;
 		}
-
 		if (array_key_exists('layout', $this-&gt;params)) {
 			if (empty($this-&gt;params['layout'])) {
 				$controller-&gt;autoLayout = false;
@@ -203,11 +188,9 @@ class Dispatcher extends Object {
 				$controller-&gt;layout = $this-&gt;params['layout'];
 			}
 		}
-
 		if (isset($this-&gt;params['viewPath'])) {
 			$controller-&gt;viewPath = $this-&gt;params['viewPath'];
 		}
-
 		return $this-&gt;_invoke($controller, $this-&gt;params);
 	}
 /**
@@ -233,14 +216,13 @@ class Dispatcher extends Object {
 				App::import('Core', 'Scaffold');
 				return new Scaffold($controller, $params);
 			}
-			return $this-&gt;cakeError('missingAction', array(
-				array(
-					'className' =&gt; Inflector::camelize($params['controller'].&quot;Controller&quot;),
-					'action' =&gt; $params['action'],
-					'webroot' =&gt; $this-&gt;webroot,
-					'url' =&gt; $this-&gt;here,
-					'base' =&gt; $this-&gt;base)));
-
+			return $this-&gt;cakeError('missingAction', array(array(
+				'className' =&gt; Inflector::camelize($params['controller'].&quot;Controller&quot;),
+				'action' =&gt; $params['action'],
+				'webroot' =&gt; $this-&gt;webroot,
+				'url' =&gt; $this-&gt;here,
+				'base' =&gt; $this-&gt;base
+			)));
 		}
 		$output = $controller-&gt;dispatchMethod($params['action'], $params['pass']);
 
@@ -262,16 +244,13 @@ class Dispatcher extends Object {
  *
  * @param array $url
  * @param array $additionalParams
- * @return null
+ * @return string $url
  * @access private
- * @todo commented Router::url(). this improved performance,
- *		 will work on this more later.
  */
 	function __extractParams($url, $additionalParams = array()) {
 		$defaults = array('pass' =&gt; array(), 'named' =&gt; array(), 'form' =&gt; array());
 		$this-&gt;params = array_merge($defaults, $url, $additionalParams);
-		//$url = Router::url($url);
-		//return $url;
+		return Router::url($url);
 	}
 /**
  * Returns array of GET and POST parameters. GET parameters are taken from given URL.
@@ -300,19 +279,18 @@ class Dispatcher extends Object {
 				unset($params['form']['_method']);
 			}
 		}
-		extract(Router::getNamedExpressions());
+		$namedExpressions = Router::getNamedExpressions();
+		extract($namedExpressions);
 		include CONFIGS . 'routes.php';
 		$params = array_merge(Router::parse($fromUrl), $params);
 
-		if (empty($params['action'])) {
+		if (strlen($params['action']) === 0) {
 			$params['action'] = 'index';
 		}
-
 		if (isset($params['form']['data'])) {
 			$params['data'] = Router::stripEscape($params['form']['data']);
 			unset($params['form']['data']);
 		}
-
 		if (isset($_GET)) {
 			if (ini_get('magic_quotes_gpc') === '1') {
 				$url = stripslashes_deep($_GET);
@@ -325,13 +303,11 @@ class Dispatcher extends Object {
 				$params['url'] = $url;
 			}
 		}
-
 		foreach ($_FILES as $name =&gt; $data) {
 			if ($name != 'data') {
 				$params['form'][$name] = $data;
 			}
 		}
-
 		if (isset($_FILES['data'])) {
 			foreach ($_FILES['data'] as $key =&gt; $data) {
 				foreach ($data as $model =&gt; $fields) {
@@ -363,12 +339,10 @@ class Dispatcher extends Object {
 		if (!$base) {
 			$base = $this-&gt;base;
 		}
-
 		if ($base !== false) {
 			$this-&gt;webroot = $base . '/';
 			return $this-&gt;base = $base;
 		}
-
 		if (!$baseUrl) {
 			$base = dirname(env('PHP_SELF'));
 
@@ -418,10 +392,12 @@ class Dispatcher extends Object {
 	function _restructureParams($params, $reverse = false) {
 		if ($reverse === true) {
 			extract(Router::getArgs($params['action']));
-			$params = array_merge($params, array('controller'=&gt; $params['plugin'],
-						'action'=&gt; $params['controller'],
-						'pass' =&gt; array_merge($pass, $params['pass']),
-						'named' =&gt; array_merge($named, $params['named'])));
+			$params = array_merge($params, array(
+				'controller'=&gt; $params['plugin'],
+				'action'=&gt; $params['controller'],
+				'pass' =&gt; array_merge($pass, $params['pass']),
+				'named' =&gt; array_merge($named, $params['named'])
+			));
 			$this-&gt;plugin = $params['plugin'];
 		} else {
 			$params['plugin'] = $params['controller'];
@@ -444,24 +420,29 @@ class Dispatcher extends Object {
  */
 	function &amp;__getController($params = null) {
 		if (!is_array($params)) {
-			$params = $this-&gt;params;
+			$original = $params = $this-&gt;params;
 		}
 		$controller = false;
-
-		if (!$ctrlClass = $this-&gt;__loadController($params)) {
+		$ctrlClass = $this-&gt;__loadController($params);
+		if (!$ctrlClass) {
 			if (!isset($params['plugin'])) {
 				$params = $this-&gt;_restructureParams($params);
 			} else {
+				if (empty($original['pass']) &amp;&amp; $original['action'] == 'index') {
+					$params['action'] = null;
+				}
 				$params = $this-&gt;_restructureParams($params, true);
 			}
-
-			if (!$ctrlClass = $this-&gt;__loadController($params)) {
+			$ctrlClass = $this-&gt;__loadController($params);
+			if (!$ctrlClass) {
+				$this-&gt;params = $original;
 				return $controller;
 			}
+		} else {
+			$params = $this-&gt;params;
 		}
 		$name = $ctrlClass;
 		$ctrlClass = $ctrlClass . 'Controller';
-
 		if (class_exists($ctrlClass)) {
 			if (strtolower(get_parent_class($ctrlClass)) === strtolower($name . 'AppController') &amp;&amp; empty($params['plugin'])) {
 				$params = $this-&gt;_restructureParams($params);
@@ -481,7 +462,6 @@ class Dispatcher extends Object {
  */
 	function __loadController($params) {
 		$pluginName = $pluginPath = $controller = null;
-
 		if (!empty($params['plugin'])) {
 			$this-&gt;plugin = $params['plugin'];
 			$pluginName = Inflector::camelize($params['plugin']);
@@ -489,11 +469,10 @@ class Dispatcher extends Object {
 			$this-&gt;params['controller'] = $this-&gt;plugin;
 			$controller = $pluginName;
 		}
-
 		if (!empty($params['controller'])) {
+			$this-&gt;params['controller'] = $params['controller'];
 			$controller = Inflector::camelize($params['controller']);
 		}
-
 		if ($pluginPath . $controller) {
 			if (App::import('Controller', $pluginPath . $controller)) {
 				return $controller;
@@ -522,11 +501,9 @@ class Dispatcher extends Object {
 		if ($base) {
 			$uri = preg_replace('/^(?:\/)?(?:' . preg_quote($base, '/') . ')?(?:url=)?/', '', $uri);
 		}
-
 		if (PHP_SAPI == 'isapi') {
 			$uri = preg_replace('/^(?:\/)?(?:\/)?(?:\?)?(?:url=)?/', '', $uri);
 		}
-
 		if (!empty($uri)) {
 			if (key($_GET) &amp;&amp; strpos(key($_GET), '?') !== false) {
 				unset($_GET[key($_GET)]);
@@ -540,11 +517,9 @@ class Dispatcher extends Object {
 		} elseif (empty($uri) &amp;&amp; is_string(env('QUERY_STRING'))) {
 			$uri = env('QUERY_STRING');
 		}
-
 		if (strpos($uri, 'index.php') !== false) {
 			list(, $uri) = explode('index.php', $uri, 2);
 		}
-
 		if (empty($uri) || $uri == '/' || $uri == '//') {
 			return '';
 		}
@@ -563,7 +538,6 @@ class Dispatcher extends Object {
 			if ($uri == null) {
 				$uri = $this-&gt;uri();
 			}
-
 			if ($base == null) {
 				$base = $this-&gt;base;
 			}
@@ -596,7 +570,6 @@ class Dispatcher extends Object {
 		} else {
 			$url = $_GET['url'];
 		}
-
 		if ($url{0} == '/') {
 			$url = substr($url, 1);
 		}</diff>
      <filename>cake/dispatcher.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: cache.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: cache.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Caching for CakePHP.
  *
@@ -18,9 +18,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 1.2.0.4933
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -33,7 +33,7 @@ class Cache extends Object {
 /**
  * Cache engine to use
  *
- * @var object
+ * @var CacheEngine
  * @access protected
  */
 	var $_Engine = null;
@@ -142,10 +142,6 @@ class Cache extends Object {
  * @static
  */
 	function engine($name = 'File', $settings = array()) {
-		if (!$name || Configure::read('Cache.disable')) {
-			return false;
-		}
-
 		$cacheClass = $name . 'Engine';
 		$_this =&amp; Cache::getInstance();
 		if (!isset($_this-&gt;_Engine[$name])) {
@@ -220,19 +216,17 @@ class Cache extends Object {
  *
  * @param string $key Identifier for the data
  * @param mixed $value Data to be cached - anything except a resource
- * @param mixed $config Optional - string configuration name, a duration for expiration,
- *				or array('config' =&gt; 'string configuration name', 'duration' =&gt; 'duration for expiration')
+ * @param string $config Optional - string configuration name
  * @return boolean True if the data was successfully cached, false on failure
  * @access public
  * @static
  */
 	function write($key, $value, $config = null) {
 		$_this =&amp; Cache::getInstance();
-		$thisDuration = null;
+
 		if (is_array($config)) {
 			extract($config);
 		} else if ($config &amp;&amp; (is_numeric($config) || is_numeric($config[0]) || (isset($config[1]) &amp;&amp; is_numeric($config[1])))) {
-			$thisDuration = $config;
 			$config = null;
 		}
 
@@ -259,13 +253,6 @@ class Cache extends Object {
 			return false;
 		}
 
-		if ($thisDuration !== null) {
-			if (!is_numeric($thisDuration)) {
-				$thisDuration = strtotime($thisDuration) - time();
-			}
-			$duration = $thisDuration;
-		}
-
 		if ($duration &lt; 1) {
 			return false;
 		}</diff>
      <filename>cake/libs/cache.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: file.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: file.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * File Storage engine for cache
  *
@@ -18,9 +18,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.cache
  * @since         CakePHP(tm) v 1.2.0.4933
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -34,7 +34,7 @@ class FileEngine extends CacheEngine {
 /**
  * Instance of File class
  *
- * @var object
+ * @var File
  * @access private
  */
 	var $__File = null;</diff>
      <filename>cake/libs/cache/file.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: memcache.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: memcache.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Memcache storage engine for cache
  *
@@ -18,9 +18,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.cache
  * @since         CakePHP(tm) v 1.2.0.4933
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -33,7 +33,7 @@ class MemcacheEngine extends CacheEngine {
 /**
  * Memcache wrapper.
  *
- * @var object
+ * @var Memcache
  * @access private
  */
 	var $__Memcache = null;
@@ -100,8 +100,8 @@ class MemcacheEngine extends CacheEngine {
  */
 	function write($key, &amp;$value, $duration) {
 		$expires = time() + $duration;
-		$this-&gt;__Memcache-&gt;set($key.'_expires', $expires, $this-&gt;settings['compress'], $duration);
-		return $this-&gt;__Memcache-&gt;set($key, $value, $this-&gt;settings['compress'], $duration);
+		$this-&gt;__Memcache-&gt;set($key.'_expires', $expires, $this-&gt;settings['compress'], $expires);
+		return $this-&gt;__Memcache-&gt;set($key, $value, $this-&gt;settings['compress'], $expires);
 	}
 /**
  * Read a key from the cache</diff>
      <filename>cake/libs/cache/memcache.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: xcache.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: xcache.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Xcache storage engine for cache.
  *
@@ -18,9 +18,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.cache
  * @since         CakePHP(tm) v 1.2.0.4947
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -107,11 +107,12 @@ class XcacheEngine extends CacheEngine {
  */
 	function clear() {
 		$this-&gt;__auth();
-		for ($i = 0, $max = xcache_count(XC_TYPE_VAR); $i &lt; $max; $i++) {
+		$max = xcache_count(XC_TYPE_VAR);
+		for ($i = 0; $i &lt; $max; $i++) {
 			xcache_clear_cache(XC_TYPE_VAR, $i);
 		}
 		$this-&gt;__auth(true);
-		return xcache_count(XC_TYPE_VAR) == 0;
+		return true;
 	}
 /**
  * Populates and reverses $_SERVER authentication values</diff>
      <filename>cake/libs/cache/xcache.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: class_registry.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: class_registry.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Class collections.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 0.9.2
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -72,20 +72,26 @@ class ClassRegistry {
 /**
  * Loads a class, registers the object in the registry and returns instance of the object.
  *
- * @param mixed $class as a string or a single key =&gt; value array instance will be created,
- * 	stored in the registry and returned.
- *   Required: array('class' =&gt; 'ClassName', 'alias' =&gt; 'AliasNameStoredInTheRegistry', 'type' =&gt; 'TypeOfClass');
- *   Model Classes can accept optional array('id' =&gt; $id, 'table' =&gt; $table, 'ds' =&gt; $ds, 'alias' =&gt; $alias);
+ * Examples
+ * Simple Use: Get a Post model instance ```ClassRegistry::init('Post');```
+ * 
+ * Exapanded: ```array('class' =&gt; 'ClassName', 'alias' =&gt; 'AliasNameStoredInTheRegistry', 'type' =&gt; 'TypeOfClass');```
+ * 
+ * Model Classes can accept optional ```array('id' =&gt; $id, 'table' =&gt; $table, 'ds' =&gt; $ds, 'alias' =&gt; $alias);```
+ * 
  * When $class is a numeric keyed array, multiple class instances will be stored in the registry,
- *   no instance of the object will be returned
- *   array(
- *  	array('class' =&gt; 'ClassName', 'alias' =&gt; 'AliasNameStoredInTheRegistry', 'type' =&gt; 'TypeOfClass'),
- *  	array('class' =&gt; 'ClassName', 'alias' =&gt; 'AliasNameStoredInTheRegistry', 'type' =&gt; 'TypeOfClass'),
- *  	array('class' =&gt; 'ClassName', 'alias' =&gt; 'AliasNameStoredInTheRegistry', 'type' =&gt; 'TypeOfClass')
- *  );
- *
+ *  no instance of the object will be returned
+ * {{{
+ * array(
+ *		array('class' =&gt; 'ClassName', 'alias' =&gt; 'AliasNameStoredInTheRegistry', 'type' =&gt; 'TypeOfClass'),
+ *		array('class' =&gt; 'ClassName', 'alias' =&gt; 'AliasNameStoredInTheRegistry', 'type' =&gt; 'TypeOfClass'),
+ *		array('class' =&gt; 'ClassName', 'alias' =&gt; 'AliasNameStoredInTheRegistry', 'type' =&gt; 'TypeOfClass')
+ * );
+ * }}}
+ * @param mixed $class as a string or a single key =&gt; value array instance will be created,
+ *  stored in the registry and returned.
  * @param string $type TypeOfClass
- * @return object intance of ClassName
+ * @return object instance of ClassName
  * @access public
  * @static
  */</diff>
      <filename>cake/libs/class_registry.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: configure.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: configure.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 1.0.0.2363
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -246,19 +246,22 @@ class Configure extends Object {
 /**
  * Used to store a dynamic variable in the Configure instance.
  *
- * Usage
+ * Usage:
+ * {{{
  * Configure::write('One.key1', 'value of the Configure::One[key1]');
  * Configure::write(array('One.key1' =&gt; 'value of the Configure::One[key1]'));
  * Configure::write('One', array(
  *     'key1' =&gt; 'value of the Configure::One[key1]',
  *     'key2' =&gt; 'value of the Configure::One[key2]'
  * );
+ * 
  * Configure::write(array(
  *     'One.key1' =&gt; 'value of the Configure::One[key1]',
  *     'One.key2' =&gt; 'value of the Configure::One[key2]'
  * ));
+ * }}}
  *
- * @link          http://book.cakephp.org/view/412/write
+ * @link http://book.cakephp.org/view/412/write
  * @param array $config Name of var to write
  * @param mixed $value Value to set for var
  * @return void</diff>
      <filename>cake/libs/configure.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: component.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: component.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  *
  * PHP versions 4 and 5
@@ -16,9 +16,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.controller
  * @since         CakePHP(tm) v TBD
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -74,9 +74,6 @@ class Component extends Object {
 			'base' =&gt; $controller-&gt;base
 		);
 
-		if (!in_array('Session', $controller-&gt;components)) {
-			array_unshift($controller-&gt;components, 'Session');
-		}
 		$this-&gt;_loadComponents($controller);
 	}
 /**
@@ -179,40 +176,28 @@ class Component extends Object {
  * @access protected
  */
 	function _loadComponents(&amp;$object, $parent = null) {
-		$components = $object-&gt;components;
 		$base = $this-&gt;__controllerVars['base'];
+		$normal = Set::normalize($object-&gt;components);
+		if ($parent == null) {
+			$normal = Set::merge(array('Session' =&gt; null), $normal);
+		}
+		foreach ((array)$normal as $component =&gt; $config) {
+			$plugin = null;
 
-		if (is_array($object-&gt;components)) {
-			$normal = Set::normalize($object-&gt;components);
-			foreach ($normal as $component =&gt; $config) {
-				$plugin = null;
-
-				if (isset($this-&gt;__controllerVars['plugin'])) {
-					$plugin = $this-&gt;__controllerVars['plugin'] . '.';
-				}
-
-				if (strpos($component, '.') !== false) {
-					list($plugin, $component) = explode('.', $component);
-					$plugin = $plugin . '.';
-				}
-				$componentCn = $component . 'Component';
+			if (isset($this-&gt;__controllerVars['plugin'])) {
+				$plugin = $this-&gt;__controllerVars['plugin'] . '.';
+			}
 
-				if (!class_exists($componentCn)) {
-					if (is_null($plugin) || !App::import('Component', $plugin . $component)) {
-						if (!App::import('Component', $component)) {
-							$this-&gt;cakeError('missingComponentFile', array(array(
-								'className' =&gt; $this-&gt;__controllerVars['name'],
-								'component' =&gt; $component,
-								'file' =&gt; Inflector::underscore($component) . '.php',
-								'base' =&gt; $base,
-								'code' =&gt; 500
-							)));
-							return false;
-						}
-					}
+			if (strpos($component, '.') !== false) {
+				list($plugin, $component) = explode('.', $component);
+				$plugin = $plugin . '.';
+			}
+			$componentCn = $component . 'Component';
 
-					if (!class_exists($componentCn)) {
-						$this-&gt;cakeError('missingComponentClass', array(array(
+			if (!class_exists($componentCn)) {
+				if (is_null($plugin) || !App::import('Component', $plugin . $component)) {
+					if (!App::import('Component', $component)) {
+						$this-&gt;cakeError('missingComponentFile', array(array(
 							'className' =&gt; $this-&gt;__controllerVars['name'],
 							'component' =&gt; $component,
 							'file' =&gt; Inflector::underscore($component) . '.php',
@@ -223,35 +208,46 @@ class Component extends Object {
 					}
 				}
 
-				if ($parent === null) {
-					$this-&gt;_primary[] = $component;
+				if (!class_exists($componentCn)) {
+					$this-&gt;cakeError('missingComponentClass', array(array(
+						'className' =&gt; $this-&gt;__controllerVars['name'],
+						'component' =&gt; $component,
+						'file' =&gt; Inflector::underscore($component) . '.php',
+						'base' =&gt; $base,
+						'code' =&gt; 500
+					)));
+					return false;
 				}
+			}
+
+			if ($parent === null) {
+				$this-&gt;_primary[] = $component;
+			}
 
-				if (isset($this-&gt;_loaded[$component])) {
-					$object-&gt;{$component} =&amp; $this-&gt;_loaded[$component];
+			if (isset($this-&gt;_loaded[$component])) {
+				$object-&gt;{$component} =&amp; $this-&gt;_loaded[$component];
 
-					if (!empty($config) &amp;&amp; isset($this-&gt;__settings[$component])) {
-						$this-&gt;__settings[$component] = array_merge($this-&gt;__settings[$component], $config);
-					} elseif (!empty($config)) {
-						$this-&gt;__settings[$component] = $config;
-					}
+				if (!empty($config) &amp;&amp; isset($this-&gt;__settings[$component])) {
+					$this-&gt;__settings[$component] = array_merge($this-&gt;__settings[$component], $config);
+				} elseif (!empty($config)) {
+					$this-&gt;__settings[$component] = $config;
+				}
+			} else {
+				if ($componentCn === 'SessionComponent') {
+					$object-&gt;{$component} =&amp; new $componentCn($base);
 				} else {
-					if ($componentCn === 'SessionComponent') {
-						$object-&gt;{$component} =&amp; new $componentCn($base);
-					} else {
-						$object-&gt;{$component} =&amp; new $componentCn();
-					}
-					$object-&gt;{$component}-&gt;enabled = true;
-					$this-&gt;_loaded[$component] =&amp; $object-&gt;{$component};
-					if (!empty($config)) {
-						$this-&gt;__settings[$component] = $config;
-					}
+					$object-&gt;{$component} =&amp; new $componentCn();
 				}
-
-				if (isset($object-&gt;{$component}-&gt;components) &amp;&amp; is_array($object-&gt;{$component}-&gt;components) &amp;&amp; (!isset($object-&gt;{$component}-&gt;{$parent}))) {
-					$this-&gt;_loadComponents($object-&gt;{$component}, $component);
+				$object-&gt;{$component}-&gt;enabled = true;
+				$this-&gt;_loaded[$component] =&amp; $object-&gt;{$component};
+				if (!empty($config)) {
+					$this-&gt;__settings[$component] = $config;
 				}
 			}
+
+			if (isset($object-&gt;{$component}-&gt;components) &amp;&amp; is_array($object-&gt;{$component}-&gt;components) &amp;&amp; (!isset($object-&gt;{$component}-&gt;{$parent}))) {
+				$this-&gt;_loadComponents($object-&gt;{$component}, $component);
+			}
 		}
 	}
 }</diff>
      <filename>cake/libs/controller/component.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: auth.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: auth.php 8120 2009-03-19 20:25:10Z gwoo $ */
 
 /**
  * Authentication component
@@ -20,9 +20,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.controller.components
  * @since         CakePHP(tm) v 0.10.0.1076
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 
@@ -262,14 +262,24 @@ class AuthComponent extends Object {
  * @access public
  */
 	function startup(&amp;$controller) {
+		$methods = array_flip($controller-&gt;methods);
 		$isErrorOrTests = (
 			strtolower($controller-&gt;name) == 'cakeerror' ||
-			(strtolower($controller-&gt;name) == 'tests' &amp;&amp; Configure::read() &gt; 0) ||
-			!in_array($controller-&gt;params['action'], $controller-&gt;methods)
+			(strtolower($controller-&gt;name) == 'tests' &amp;&amp; Configure::read() &gt; 0)
 		);
 		if ($isErrorOrTests) {
 			return true;
 		}
+
+		$isMissingAction = (
+			$controller-&gt;scaffold === false &amp;&amp;
+			!isset($methods[strtolower($controller-&gt;params['action'])])
+		);
+
+		if ($isMissingAction) {
+			return true;
+		}
+
 		if (!$this-&gt;__setDefaults()) {
 			return false;
 		}
@@ -282,6 +292,7 @@ class AuthComponent extends Object {
 		}
 		$url = Router::normalize($url);
 		$loginAction = Router::normalize($this-&gt;loginAction);
+
 		$isAllowed = (
 			$this-&gt;allowedActions == array('*') ||
 			in_array($controller-&gt;params['action'], $this-&gt;allowedActions)</diff>
      <filename>cake/libs/controller/components/auth.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: request_handler.php 7961 2008-12-25 23:21:36Z gwoo $ */
+/* SVN FILE: $Id: request_handler.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Request object for handling alternative HTTP requests
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.controller.components
  * @since         CakePHP(tm) v 0.10.4.1076
- * @version       $Revision: 7961 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-25 15:21:36 -0800 (Thu, 25 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 
@@ -368,7 +368,7 @@ class RequestHandlerComponent extends Object {
  *
  * @param string $name The name of the Content-type, i.e. &quot;html&quot;, &quot;xml&quot;, &quot;css&quot;
  * @param mixed $type The Content-type or array of Content-types assigned to the name,
- *                    i.e. &quot;text/html&quot;, or &quot;application/xml&quot;
+ *    i.e. &quot;text/html&quot;, or &quot;application/xml&quot;
  * @return void
  * @access public
  */
@@ -427,11 +427,11 @@ class RequestHandlerComponent extends Object {
  * header.
  *
  * @param mixed $type Can be null (or no parameter), a string type name, or an
- *					array of types
+ *   array of types
  * @return mixed If null or no parameter is passed, returns an array of content
- *				types the client accepts.  If a string is passed, returns true
- *				if the client accepts it.  If an array is passed, returns true
- *				if the client accepts one or more elements in the array.
+ *   types the client accepts.  If a string is passed, returns true
+ *   if the client accepts it.  If an array is passed, returns true
+ *   if the client accepts one or more elements in the array.
  * @access public
  * @see RequestHandlerComponent::setContent()
  */
@@ -504,9 +504,9 @@ class RequestHandlerComponent extends Object {
  * HTTP_ACCEPT.
  *
  * @param mixed $type An optional array of 'friendly' content-type names, i.e.
- *                     'html', 'xml', 'js', etc.
+ *   'html', 'xml', 'js', etc.
  * @return mixed If $type is null or not provided, the first content-type in the
- *                list, based on preference, is returned.
+ *    list, based on preference, is returned.
  * @access public
  * @see RequestHandlerComponent::setContent()
  */
@@ -607,13 +607,13 @@ class RequestHandlerComponent extends Object {
  * is not set.
  *
  * @param mixed $type Friendly type name, i.e. 'html' or 'xml', or a full content-type,
- * 					  like 'application/x-shockwave'.
+ *    like 'application/x-shockwave'.
  * @param array $options If $type is a friendly type name that is associated with
- *                     more than one type of content, $index is used to select
- *                     which content-type to use.
+ *    more than one type of content, $index is used to select which content-type to use.
+ *   
  * @return boolean Returns false if the friendly type name given in $type does
- *                 not exist in the type map, or if the Content-type header has
- *                 already been set by this method.
+ *    not exist in the type map, or if the Content-type header has
+ *    already been set by this method.
  * @access public
  * @see RequestHandlerComponent::setContent()
  */
@@ -672,7 +672,7 @@ class RequestHandlerComponent extends Object {
  * Returns the current response type (Content-type header), or null if none has been set
  *
  * @return mixed A string content type alias, or raw content type if no alias map exists,
- *               otherwise null
+ *    otherwise null
  * @access public
  */
 	function responseType() {</diff>
      <filename>cake/libs/controller/components/request_handler.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: controller.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: controller.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Base controller class.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.controller
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -292,6 +292,32 @@ class Controller extends Object {
  */
 	var $methods = array();
 /**
+ * This controller's primary model class name, the Inflector::classify()'ed version of 
+ * the controller's $name property.
+ *
+ * Example: For a controller named 'Comments', the modelClass would be 'Comment'
+ *
+ * @var string
+ * @access public
+ */
+	var $modelClass = null;
+/**
+ * This controller's model key name, an underscored version of the controller's $modelClass property.
+ *
+ * Example: For a controller named 'ArticleComments', the modelKey would be 'article_comment'
+ *
+ * @var string
+ * @access public
+ */
+	var $modelKey = null;
+/**
+ * Holds any validation errors produced by the last call of the validateErrors() method/
+ *
+ * @var array Validation errors, or false if none
+ * @access public
+ */
+	var $validationErrors = null;
+/**
  * Constructor.
  *
  */
@@ -321,7 +347,6 @@ class Controller extends Object {
 		foreach ($parentMethods as $key =&gt; $value) {
 			$parentMethods[$key] = strtolower($value);
 		}
-
 		$this-&gt;methods = array_diff($childMethods, $parentMethods);
 		parent::__construct();
 	}
@@ -364,7 +389,7 @@ class Controller extends Object {
 			}
 
 			foreach ($merge as $var) {
-				if (isset($appVars[$var]) &amp;&amp; !empty($appVars[$var]) &amp;&amp; is_array($this-&gt;{$var})) {
+				if (!empty($appVars[$var]) &amp;&amp; is_array($this-&gt;{$var})) {
 					if ($var === 'components') {
 						$normal = Set::normalize($this-&gt;{$var});
 						$app = Set::normalize($appVars[$var]);
@@ -376,7 +401,7 @@ class Controller extends Object {
 			}
 		}
 
-		if ($pluginController) {
+		if ($pluginController &amp;&amp; $pluginName != null) {
 			$appVars = get_class_vars($pluginController);
 			$uses = $appVars['uses'];
 			$merge = array('components', 'helpers');
@@ -619,7 +644,7 @@ class Controller extends Object {
  *
  * @param mixed $one A string or an array of data.
  * @param mixed $two Value in case $one is a string (which then works as the key).
- * 				Unused if $one is an associative array, otherwise serves as the values to $one's keys.
+ *   Unused if $one is an associative array, otherwise serves as the values to $one's keys.
  * @return void
  * @access public
  * @link http://book.cakephp.org/view/427/set
@@ -824,7 +849,7 @@ class Controller extends Object {
  * Does not work if the current debug level is higher than 0.
  *
  * @param string $message Message to display to the user
- * @param string $url Relative URL to redirect to after the time expires
+ * @param mixed $url Relative string or array-based URL to redirect to after the time expires
  * @param integer $pause Time to show the message
  * @return void Renders flash layout
  * @access public
@@ -1018,7 +1043,8 @@ class Controller extends Object {
 		$type = 'all';
 
 		if (isset($defaults[0])) {
-			$type = array_shift($defaults);
+			$type = $defaults[0];
+			unset($defaults[0]);
 		}
 		$extra = array_diff_key($defaults, compact(
 			'conditions', 'fields', 'order', 'limit', 'page', 'recursive'
@@ -1043,6 +1069,7 @@ class Controller extends Object {
 		} elseif (intval($page) &lt; 1) {
 			$options['page'] = $page = 1;
 		}
+		$page = $options['page'] = (integer)$page;
 
 		if (method_exists($object, 'paginate')) {
 			$results = $object-&gt;paginate($conditions, $fields, $order, $limit, $page, $recursive, $extra);
@@ -1141,4 +1168,4 @@ class Controller extends Object {
 		return false;
 	}
 }
-?&gt;
\ No newline at end of file
+?&gt;</diff>
      <filename>cake/libs/controller/controller.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: scaffold.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: scaffold.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Scaffold.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.controller
  * @since         Cake v 0.10.0.1076
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -39,7 +39,7 @@ class Scaffold extends Object {
 /**
  * Controller object
  *
- * @var object
+ * @var Controller
  * @access public
  */
 	var $controller = null;</diff>
      <filename>cake/libs/controller/scaffold.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: error.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: error.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Error handler
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 0.10.5.1732
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 App::import('Controller', 'App');
@@ -70,7 +70,7 @@ class ErrorHandler extends Object {
 /**
  * Controller instance.
  *
- * @var object
+ * @var Controller
  * @access public
  */
 	var $controller = null;
@@ -151,7 +151,7 @@ class ErrorHandler extends Object {
 		$this-&gt;controller-&gt;set(array(
 			'code' =&gt; '404',
 			'name' =&gt; __('Not Found', true),
-			'message' =&gt; $url,
+			'message' =&gt; h($url),
 			'base' =&gt; $this-&gt;controller-&gt;base
 		));
 		$this-&gt;_outputMessage('error404');</diff>
      <filename>cake/libs/error.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: file.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: file.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Convenience class for reading, writing and appending to files.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -42,7 +42,7 @@ class File extends Object {
 /**
  * Folder object of the File
  *
- * @var object
+ * @var Folder
  * @access public
  */
 	var $Folder = null;
@@ -375,11 +375,11 @@ class File extends Object {
 		return false;
 	}
 /**
-* Returns the full path of the File.
-*
-* @return string Full path to file
-* @access public
-*/
+ * Returns the full path of the File.
+ *
+ * @return string Full path to file
+ * @access public
+ */
 	function pwd() {
 		if (is_null($this-&gt;path)) {
 			$this-&gt;path = $this-&gt;Folder-&gt;slashTerm($this-&gt;Folder-&gt;pwd()) . $this-&gt;name;</diff>
      <filename>cake/libs/file.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: folder.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: folder.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Convenience class for handling directories.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -212,17 +212,18 @@ class Folder extends Object {
  */
 	function _findRecursive($pattern, $sort = false) {
 		list($dirs, $files) = $this-&gt;read($sort);
-
 		$found = array();
+
 		foreach ($files as $file) {
 			if (preg_match('/^' . $pattern . '$/i', $file)) {
 				$found[] = Folder::addPathElement($this-&gt;path, $file);
 			}
 		}
 		$start = $this-&gt;path;
+
 		foreach ($dirs as $dir) {
 			$this-&gt;cd(Folder::addPathElement($start, $dir));
-			$found = array_merge($found, $this-&gt;findRecursive($pattern));
+			$found = array_merge($found, $this-&gt;findRecursive($pattern, $sort));
 		}
 		return $found;
 	}
@@ -526,6 +527,10 @@ class Folder extends Object {
 		if (is_dir($path) === true) {
 			$normalFiles = glob($path . '*');
 			$hiddenFiles = glob($path . '\.?*');
+
+			$normalFiles = $normalFiles ? $normalFiles : array();
+			$hiddenFiles = $hiddenFiles ? $hiddenFiles : array();
+
 			$files = array_merge($normalFiles, $hiddenFiles);
 			if (is_array($files)) {
 				foreach ($files as $file) {</diff>
      <filename>cake/libs/folder.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: http_socket.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: http_socket.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * HTTP Socket connection class.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 1.2.0
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 App::import('Core', array('Socket', 'Set', 'Router'));
@@ -66,7 +66,7 @@ class HttpSocket extends CakeSocket {
 			'fragment' =&gt; null
 		),
 		'auth' =&gt; array(
-			'method' =&gt; 'basic',
+			'method' =&gt; 'Basic',
 			'user' =&gt; null,
 			'pass' =&gt; null
 		),
@@ -121,7 +121,7 @@ class HttpSocket extends CakeSocket {
 				'port' =&gt; 80
 			),
 			'auth' =&gt; array(
-				'method' =&gt; 'basic',
+				'method' =&gt; 'Basic',
 				'user' =&gt; null,
 				'pass' =&gt; null
 			),</diff>
      <filename>cake/libs/http_socket.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: i18n.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: i18n.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 1.2.0.4116
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -40,7 +40,7 @@ class I18n extends Object {
 /**
  * Instance of the I10n class for localization
  *
- * @var object
+ * @var I10n
  * @access public
  */
 	var $l10n = null;
@@ -213,31 +213,31 @@ class I18n extends Object {
 		if (strpos($header, &quot;plurals=3&quot;)) {
 			if (strpos($header, &quot;100!=11&quot;)) {
 				if (strpos($header, &quot;10&lt;=4&quot;)) {
-					return $n % 10 === 1 &amp;&amp; $n % 100 !== 11 ? 0 : ($n % 10 &gt;= 2 &amp;&amp; $n % 10 &lt;= 4 &amp;&amp; ($n % 100 &lt; 10 || $n % 100 &gt;= 20) ? 1 : 2);
+					return $n % 10 == 1 &amp;&amp; $n % 100 != 11 ? 0 : ($n % 10 &gt;= 2 &amp;&amp; $n % 10 &lt;= 4 &amp;&amp; ($n % 100 &lt; 10 || $n % 100 &gt;= 20) ? 1 : 2);
 				} elseif (strpos($header, &quot;100&lt;10&quot;)) {
-					return $n % 10 === 1 &amp;&amp; $n % 100 !== 11 ? 0 : ($n % 10 &gt;= 2 &amp;&amp; ($n % 100 &lt; 10 || $n % 100 &gt;= 20) ? 1 : 2);
+					return $n % 10 == 1 &amp;&amp; $n % 100 != 11 ? 0 : ($n % 10 &gt;= 2 &amp;&amp; ($n % 100 &lt; 10 || $n % 100 &gt;= 20) ? 1 : 2);
 				}
 				return $n % 10 == 1 &amp;&amp; $n % 100 != 11 ? 0 : ($n != 0 ? 1 : 2);
 			} elseif (strpos($header, &quot;n==2&quot;)) {
-				return $n === 1 ? 0 : ($n === 2 ? 1 : 2);
+				return $n == 1 ? 0 : ($n == 2 ? 1 : 2);
 			} elseif (strpos($header, &quot;n==0&quot;)) {
-				return $n === 1 ? 0 : ($n === 0 || ($n % 100 &gt; 0 &amp;&amp; $n % 100 &lt; 20) ? 1 : 2);
+				return $n == 1 ? 0 : ($n == 0 || ($n % 100 &gt; 0 &amp;&amp; $n % 100 &lt; 20) ? 1 : 2);
 			} elseif (strpos($header, &quot;n&gt;=2&quot;)) {
-				return $n === 1 ? 0 : ($n &gt;= 2 &amp;&amp; $n &lt;= 4 ? 1 : 2);
+				return $n == 1 ? 0 : ($n &gt;= 2 &amp;&amp; $n &lt;= 4 ? 1 : 2);
 			} elseif (strpos($header, &quot;10&gt;=2&quot;)) {
-				return $n === 1 ? 0 : ($n % 10 &gt;= 2 &amp;&amp; $n % 10 &lt;= 4 &amp;&amp; ($n % 100 &lt; 10 || $n % 100 &gt;= 20) ? 1 : 2);
+				return $n == 1 ? 0 : ($n % 10 &gt;= 2 &amp;&amp; $n % 10 &lt;= 4 &amp;&amp; ($n % 100 &lt; 10 || $n % 100 &gt;= 20) ? 1 : 2);
 			}
-			return $n % 10 === 1 ? 0 : ($n % 10 === 2 ? 1 : 2);
+			return $n % 10 == 1 ? 0 : ($n % 10 == 2 ? 1 : 2);
 		} elseif (strpos($header, &quot;plurals=4&quot;)) {
 			if (strpos($header, &quot;100==2&quot;)) {
-				return $n % 100 === 1 ? 0 : ($n % 100 === 2 ? 1 : ($n % 100 === 3 || $n % 100 === 4 ? 2 : 3));
+				return $n % 100 == 1 ? 0 : ($n % 100 == 2 ? 1 : ($n % 100 == 3 || $n % 100 == 4 ? 2 : 3));
 			} elseif (strpos($header, &quot;n&gt;=3&quot;)) {
-				return $n === 1 ? 0 : ($n === 2 ? 1 : ($n == 0 || ($n &gt;= 3 &amp;&amp; $n &lt;= 10) ? 2 : 3));
+				return $n == 1 ? 0 : ($n == 2 ? 1 : ($n == 0 || ($n &gt;= 3 &amp;&amp; $n &lt;= 10) ? 2 : 3));
 			} elseif (strpos($header, &quot;100&gt;=1&quot;)) {
-				return $n === 1 ? 0 : ($n == 0 || ($n % 100 &gt;= 1 &amp;&amp; $n % 100 &lt;= 10) ? 1 : ($n % 100 &gt;= 11 &amp;&amp; $n % 100 &lt;= 20 ? 2 : 3));
+				return $n == 1 ? 0 : ($n == 0 || ($n % 100 &gt;= 1 &amp;&amp; $n % 100 &lt;= 10) ? 1 : ($n % 100 &gt;= 11 &amp;&amp; $n % 100 &lt;= 20 ? 2 : 3));
 			}
 		} elseif (strpos($header, &quot;plurals=5&quot;)) {
-			return $n === 1 ? 0 : ($n === 2 ? 1 : ($n &gt;= 3 &amp;&amp; $n &lt;= 6 ? 2 : ($n &gt;= 7 &amp;&amp; $n &lt;= 10 ? 3 : 4)));
+			return $n == 1 ? 0 : ($n == 2 ? 1 : ($n &gt;= 3 &amp;&amp; $n &lt;= 6 ? 2 : ($n &gt;= 7 &amp;&amp; $n &lt;= 10 ? 3 : 4)));
 		}
 	}
 /**</diff>
      <filename>cake/libs/i18n.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: inflector.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: inflector.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Pluralize and singularize English words.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -167,7 +167,7 @@ class Inflector extends Object {
 			'/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|vir)us$/i' =&gt; '\1i',
 			'/us$/' =&gt; 'uses',
 			'/(alias)$/i' =&gt; '\1es',
-			'/(ax|cri|test)is$/i' =&gt; '\1es',
+			'/(ax|cris|test)is$/i' =&gt; '\1es',
 			'/s$/' =&gt; 's',
 			'/^$/' =&gt; '',
 			'/$/' =&gt; 's');
@@ -282,6 +282,7 @@ class Inflector extends Object {
 			'/^(ox)en/i' =&gt; '\1',
 			'/(alias)(es)*$/i' =&gt; '\1',
 			'/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|viri?)i$/i' =&gt; '\1us',
+			'/([ftw]ax)es/' =&gt; '\1',
 			'/(cris|ax|test)es$/i' =&gt; '\1is',
 			'/(shoe)s$/i' =&gt; '\1',
 			'/(o)es$/i' =&gt; '\1',</diff>
      <filename>cake/libs/inflector.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: l10n.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: l10n.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 1.2.0.4116
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -381,7 +381,6 @@ class L10n extends Object {
 		if (Configure::read('Config.language') === null) {
 			Configure::write('Config.language', $this-&gt;lang);
 		}
-		Configure::write('charset', $this-&gt;charset);
 
 		if ($language) {
 			return $language;</diff>
      <filename>cake/libs/l10n.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: behavior.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: behavior.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Model behaviors base class.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model
  * @since         CakePHP(tm) v 1.2.0.0
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -205,11 +205,11 @@ class ModelBehavior extends Object {
  * @subpackage    cake.cake.libs.model
  */
 class BehaviorCollection extends Object {
-
 /**
  * Stores a reference to the attached name
  *
- * @var object
+ * @var string
+ * @access public
  */
 	var $modelName = null;
 /**
@@ -273,13 +273,22 @@ class BehaviorCollection extends Object {
 		}
 
 		if (!isset($this-&gt;{$name})) {
-			if (PHP5) {
-				$this-&gt;{$name} = new $class;
+			if (ClassRegistry::isKeySet($class)) {
+				if (PHP5) {
+					$this-&gt;{$name} = ClassRegistry::getObject($class);
+				} else {
+					$this-&gt;{$name} =&amp; ClassRegistry::getObject($class);
+				}
 			} else {
-				$this-&gt;{$name} =&amp; new $class;
+				if (PHP5) {
+					$this-&gt;{$name} = new $class;
+				} else {
+					$this-&gt;{$name} =&amp; new $class;
+				}
+				ClassRegistry::addObject($class, $this-&gt;{$name});
 			}
 		} elseif (isset($this-&gt;{$name}-&gt;settings) &amp;&amp; isset($this-&gt;{$name}-&gt;settings[$this-&gt;modelName])) {
-			if (!empty($config)) {
+			if ($config !== null &amp;&amp; $config !== false) {
 				$config = array_merge($this-&gt;{$name}-&gt;settings[$this-&gt;modelName], $config);
 			} else {
 				$config = array();
@@ -295,11 +304,18 @@ class BehaviorCollection extends Object {
 		}
 		$methods = get_class_methods($this-&gt;{$name});
 		$parentMethods = array_flip(get_class_methods('ModelBehavior'));
-		$callbacks = array('setup' =&gt; true, 'cleanup' =&gt; true, 'beforeFind' =&gt; true, 'afterFind' =&gt; true, 'beforeSave' =&gt; true, 'afterSave' =&gt; true, 'beforeDelete' =&gt; true, 'afterDelete' =&gt; true, 'afterError' =&gt; true);
+		$callbacks = array(
+			'setup', 'cleanup', 'beforeFind', 'afterFind', 'beforeSave', 'afterSave',
+			'beforeDelete', 'afterDelete', 'afterError'
+		);
 
 		foreach ($methods as $m) {
 			if (!isset($parentMethods[$m])) {
-				if ($m[0] != '_' &amp;&amp; !array_key_exists($m, $this-&gt;__methods) &amp;&amp; !isset($callbacks[$m])) {
+				$methodAllowed = (
+					$m[0] != '_' &amp;&amp; !array_key_exists($m, $this-&gt;__methods) &amp;&amp;
+					!in_array($m, $callbacks)
+				);
+				if ($methodAllowed) {
 					$this-&gt;__methods[$m] = array($m, $name);
 				}
 			}
@@ -363,9 +379,9 @@ class BehaviorCollection extends Object {
  * Gets the list of currently-enabled behaviors, or, the current status of a single behavior
  *
  * @param string $name Optional.  The name of the behavior to check the status of.  If omitted,
- *						returns an array of currently-enabled behaviors
+ *   returns an array of currently-enabled behaviors
  * @return mixed If $name is specified, returns the boolean status of the corresponding behavior.
- *               Otherwise, returns an array of all enabled behaviors.
+ *   Otherwise, returns an array of all enabled behaviors.
  * @access public
  */
 	function enabled($name = null) {
@@ -463,9 +479,9 @@ class BehaviorCollection extends Object {
  * Gets the list of attached behaviors, or, whether the given behavior is attached
  *
  * @param string $name Optional.  The name of the behavior to check the status of.  If omitted,
- *						returns an array of currently-attached behaviors
+ *   returns an array of currently-attached behaviors
  * @return mixed If $name is specified, returns the boolean status of the corresponding behavior.
- *               Otherwise, returns an array of all attached behaviors.
+ *    Otherwise, returns an array of all attached behaviors.
  * @access public
  */
 	function attached($name = null) {</diff>
      <filename>cake/libs/model/behavior.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: containable.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: containable.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Behavior for binding management.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.console.libs
  * @since         CakePHP(tm) v 1.2.0.5669
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -47,18 +47,18 @@ class ContainableBehavior extends ModelBehavior {
  */
 	var $runtime = array();
 /**
- * Initiate behavior for the model using specified settings. Available settings:
+ * Initiate behavior for the model using specified settings.
+ * 
+ * Available settings:
  *
  * - recursive: (boolean, optional) set to true to allow containable to automatically
- * 				determine the recursiveness level needed to fetch specified models,
- * 				and set the model recursiveness to this level. setting it to false
- * 				disables this feature. DEFAULTS TO: true
- *
- * - notices:	(boolean, optional) issues E_NOTICES for bindings referenced in a
- * 				containable call that are not valid. DEFAULTS TO: true
- *
+ *   determine the recursiveness level needed to fetch specified models,
+ *   and set the model recursiveness to this level. setting it to false
+ *   disables this feature. DEFAULTS TO: true
+ * - notices: (boolean, optional) issues E_NOTICES for bindings referenced in a
+ *   containable call that are not valid. DEFAULTS TO: true
  * - autoFields: (boolean, optional) auto-add needed fields to fetch requested
- * 				bindings. DEFAULTS TO: true
+ *   bindings. DEFAULTS TO: true
  *
  * @param object $Model Model using the behavior
  * @param array $settings Settings to override for model.</diff>
      <filename>cake/libs/model/behaviors/containable.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: translate.php 7961 2008-12-25 23:21:36Z gwoo $ */
+/* SVN FILE: $Id: translate.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model.behaviors
  * @since         CakePHP(tm) v 1.2.0.4525
- * @version       $Revision: 7961 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-25 15:21:36 -0800 (Thu, 25 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -370,6 +370,8 @@ class TranslateBehavior extends ModelBehavior {
 		}
 		if (!empty($model-&gt;translateTable) &amp;&amp; $model-&gt;translateTable !== $this-&gt;runtime[$model-&gt;alias]['model']-&gt;useTable) {
 			$this-&gt;runtime[$model-&gt;alias]['model']-&gt;setSource($model-&gt;translateTable);
+		} elseif (empty($model-&gt;translateTable) &amp;&amp; empty($model-&gt;translateModel)) {
+			$this-&gt;runtime[$model-&gt;alias]['model']-&gt;setSource('i18n');
 		}
 		return $this-&gt;runtime[$model-&gt;alias]['model'];
 	}</diff>
      <filename>cake/libs/model/behaviors/translate.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: tree.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: tree.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Tree behavior class.
  *
@@ -19,16 +19,17 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model.behaviors
  * @since         CakePHP v 1.2.0.4487
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
- * Short description for file
- *
- * Long description for file
+ * Tree Behavior.
  *
+ * Enables a model object to act as a node-based tree. Using Modified Preorder Tree Traversal
+ * 
+ * @see http://en.wikipedia.org/wiki/Tree_traversal
  * @package       cake
  * @subpackage    cake.cake.libs.model.behaviors
  */
@@ -52,8 +53,8 @@ class TreeBehavior extends ModelBehavior {
 /**
  * Initiate Tree behavior
  *
- * @param object $Model
- * @param array $config
+ * @param object $Model instance of model
+ * @param array $config array of configuration settings.
  * @return void
  * @access public
  */
@@ -77,7 +78,7 @@ class TreeBehavior extends ModelBehavior {
  * Overriden to transparently manage setting the lft and rght fields if and only if the parent field is included in the
  * parameters to be saved.
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance.
  * @param boolean $created indicates whether the node just saved was created or updated
  * @return boolean true on success, false on failure
  * @access public
@@ -98,7 +99,7 @@ class TreeBehavior extends ModelBehavior {
  *
  * Will delete the current node and all children using the deleteAll method and sync the table
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @return boolean true to continue, false to abort the delete
  * @access public
  */
@@ -130,7 +131,7 @@ class TreeBehavior extends ModelBehavior {
  * this method bypassing the setParent logic.
  *
  * @since         1.2
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @return boolean true to continue, false to abort the save
  * @access public
  */
@@ -201,7 +202,7 @@ class TreeBehavior extends ModelBehavior {
  * If the direct parameter is set to true, only the direct children are counted (based upon the parent_id field)
  * If false is passed for the id parameter, all top level nodes are counted, or all nodes are counted.
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $id The ID of the record to read or false to read all top level nodes
  * @param boolean $direct whether to count direct, or all, children
  * @return integer number of child nodes
@@ -241,7 +242,7 @@ class TreeBehavior extends ModelBehavior {
  * If the direct parameter is set to true, only the direct children are returned (based upon the parent_id field)
  * If false is passed for the id parameter, top level, or all (depending on direct parameter appropriate) are counted.
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $id The ID of the record to read
  * @param boolean $direct whether to return only the direct, or all, children
  * @param mixed $fields Either a single string of a field name, or an array of field names
@@ -299,7 +300,7 @@ class TreeBehavior extends ModelBehavior {
 /**
  * A convenience method for returning a hierarchical array used for HTML select boxes
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $conditions SQL conditions as a string or as an array('field' =&gt;'value',...)
  * @param string $keyPath A string path to the key, i.e. &quot;{n}.Post.id&quot;
  * @param string $valuePath A string path to the value, i.e. &quot;{n}.Post.title&quot;
@@ -356,7 +357,7 @@ class TreeBehavior extends ModelBehavior {
  *
  * reads the parent id and returns this node
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $id The ID of the record to read
  * @param integer $recursive The number of levels deep to fetch associated records
  * @return array Array of data for the parent node
@@ -387,7 +388,7 @@ class TreeBehavior extends ModelBehavior {
 /**
  * Get the path to the given node
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $id The ID of the record to read
  * @param mixed $fields Either a single string of a field name, or an array of field names
  * @param integer $recursive The number of levels deep to fetch associated records
@@ -424,7 +425,7 @@ class TreeBehavior extends ModelBehavior {
  *
  * If the node is the last child, or is a top level node with no subsequent node this method will return false
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $id The ID of the record to move
  * @param mixed $number how many places to move the node or true to move to last position
  * @return boolean true on success, false on failure
@@ -481,7 +482,7 @@ class TreeBehavior extends ModelBehavior {
  *
  * If the node is the first child, or is a top level node with no previous node this method will return false
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $id The ID of the record to move
  * @param mixed $number how many places to move the node, or true to move to first position
  * @return boolean true on success, false on failure
@@ -543,7 +544,7 @@ class TreeBehavior extends ModelBehavior {
  * parameter only applies to &quot;parent&quot; mode and determines what to do if the parent field contains an id that is not present.
  *
  * @todo Could be written to be faster, *maybe*. Ideally using a subquery and putting all the logic burden on the DB.
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param string $mode parent or tree
  * @param mixed $missingParentAction 'return' to do nothing and return, 'delete' to
  * delete, or the id of the parent to set as the parent_id
@@ -615,9 +616,16 @@ class TreeBehavior extends ModelBehavior {
  * This method does not change the parent of any node.
  *
  * Requires a valid tree, by default it verifies the tree before beginning.
- *
- * @param AppModel $Model
- * @param array $options
+ * 
+ * Options:
+ * 
+ * - 'id' id of record to use as top node for reordering
+ * - 'field' Which field to use in reordeing defaults to displayField
+ * - 'order' Direction to order either DESC or ASC (defaults to ASC)
+ * - 'verify' Whether or not to verify the tree before reorder. defaults to true.
+ *
+ * @param AppModel $Model Model instance
+ * @param array $options array of options to use in reordering.
  * @return boolean true on success, false on failure
  */
 	function reorder(&amp;$Model, $options = array()) {
@@ -649,7 +657,7 @@ class TreeBehavior extends ModelBehavior {
  * If the parameter delete is false, the node will become a new top level node. Otherwise the node will be deleted
  * after the children are reparented.
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $id The ID of the record to remove
  * @param boolean $delete whether to delete the node after reparenting children (if any)
  * @return boolean true on success, false on failure
@@ -717,7 +725,7 @@ class TreeBehavior extends ModelBehavior {
  *
  * Returns true if the tree is valid otherwise an array of (type, incorrect left/right index, message)
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @return mixed true if the tree is valid or empty, otherwise an array of (error type [index, node],
  *  [incorrect left/right index,node id], message)
  * @access public
@@ -788,7 +796,7 @@ class TreeBehavior extends ModelBehavior {
  * of recovering a corrupted table, or creating new nodes. Otherwise it should always be false. In reality this
  * method could be private, since calling save with parent_id set also calls setParent
  *
- * @param AppModel $Model
+ * @param AppModel $Model Model instance
  * @param mixed $parentId
  * @return boolean true on success, false on failure
  * @access protected</diff>
      <filename>cake/libs/model/behaviors/tree.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 &lt;?php
-/* SVN FILE: $Id: connection_manager.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: connection_manager.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
- * Short description for file.
+ * Datasource connection manager
  *
- * Long description for file
+ * Provides an interface for loading and enumerating connections defined in app/config/database.php
  *
  * PHP versions 4 and 5
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model
  * @since         CakePHP(tm) v 0.10.x.1402
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 uses ('model' . DS . 'datasources' . DS . 'datasource');
@@ -39,7 +39,7 @@ class ConnectionManager extends Object {
 /**
  * Holds a loaded instance of the Connections object
  *
- * @var object
+ * @var DATABASE_CONFIG
  * @access public
  */
 	var $config = null;
@@ -85,7 +85,7 @@ class ConnectionManager extends Object {
 /**
  * Gets a reference to a DataSource object
  *
- * @param string $name The name of the DataSource, as defined in app/config/connections
+ * @param string $name The name of the DataSource, as defined in app/config/database.php
  * @return object Instance
  * @access public
  * @static
@@ -145,8 +145,9 @@ class ConnectionManager extends Object {
 /**
  * Loads the DataSource class for the given connection name
  *
- * @param mixed $connName A string name of the connection, as defined in Connections config,
- *                        or an array containing the file and class name of the object.
+ * @param mixed $connName A string name of the connection, as defined in app/config/database.php,
+ *                        or an array containing the filename (without extension) and class name of the object,
+ *                        to be found in app/models/datasources/ or cake/libs/model/datasources/.
  * @return boolean True on success, null on failure or false if the class is already loaded
  * @access public
  * @static
@@ -259,4 +260,4 @@ class ConnectionManager extends Object {
 		}
 	}
 }
-?&gt;
\ No newline at end of file
+?&gt;</diff>
      <filename>cake/libs/model/connection_manager.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: dbo_db2.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: dbo_db2.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * IBM DB2 for DBO
  *
@@ -21,9 +21,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model.datasources.dbo
  * @since         CakePHP(tm) v 0.10.5.1790
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -513,8 +513,8 @@ class DboDb2 extends DboSource {
  * do not correspond to a particular model belong under array
  * key 0.
  *
- * 1.  Gets the column headers
- *
+ * 1. Gets the column headers
+ * {{{
  * Post.id
  * Post.title
  *
@@ -529,7 +529,7 @@ class DboDb2 extends DboSource {
  *          [0] =&gt; Post
  *          [1] =&gt; title
  *      )
- *
+ * }}}
  * @param unknown_type $results
  */
 	function resultSet(&amp;$results, $sql = null) {</diff>
      <filename>cake/libs/model/datasources/dbo/dbo_db2.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: dbo_mysql.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: dbo_mysql.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * MySQL layer for DBO
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model.datasources.dbo
  * @since         CakePHP(tm) v 0.10.5.1790
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -177,7 +177,11 @@ class DboMysqlBase extends DboSource {
 		$table = $this-&gt;fullTableName($model);
 		if ($table) {
 			$indexes = $this-&gt;query('SHOW INDEX FROM ' . $table);
-			$keys = Set::extract($indexes, '{n}.STATISTICS');
+			if (isset($indexes[0]['STATISTICS'])) {
+				$keys = Set::extract($indexes, '{n}.STATISTICS');
+			} else {
+				$keys = Set::extract($indexes, '{n}.0');
+			}
 			foreach ($keys as $i =&gt; $key) {
 				if (!isset($index[$key['Key_name']])) {
 					$col = array();</diff>
      <filename>cake/libs/model/datasources/dbo/dbo_mysql.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: dbo_source.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: dbo_source.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model.datasources
  * @since         CakePHP(tm) v 0.10.0.1076
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 App::import('Core', array('Set', 'String'));
@@ -225,10 +225,10 @@ class DboSource extends DataSource {
 
 			if (strpos(strtolower($args[0]), 'findby') === 0) {
 				$all  = false;
-				$field = Inflector::underscore(preg_replace('/findBy/i', '', $args[0]));
+				$field = Inflector::underscore(preg_replace('/^findBy/i', '', $args[0]));
 			} else {
 				$all  = true;
-				$field = Inflector::underscore(preg_replace('/findAllBy/i', '', $args[0]));
+				$field = Inflector::underscore(preg_replace('/^findAllBy/i', '', $args[0]));
 			}
 
 			$or = (strpos($field, '_or_') !== false);
@@ -411,12 +411,23 @@ class DboSource extends DataSource {
 			$data[$i] = str_replace($this-&gt;startQuote . '(', '(', $data[$i]);
 			$data[$i] = str_replace(')' . $this-&gt;startQuote, ')', $data[$i]);
 
-			if (strpos($data[$i], ' AS ')) {
-				$data[$i] = str_replace(' AS ', $this-&gt;endQuote . ' AS ' . $this-&gt;startQuote, $data[$i]);
+			if (preg_match('/\s+AS\s+/', $data[$i])) {
+				if (preg_match('/\w+\s+AS\s+/', $data[$i])) {
+					$quoted = $this-&gt;endQuote . ' AS ' . $this-&gt;startQuote;
+					$data[$i] = str_replace(' AS ', $quoted, $data[$i]);
+				} else {
+					$quoted = ' AS ' . $this-&gt;startQuote;
+					$data[$i] = str_replace(' AS ', $quoted, $data[$i]) . $this-&gt;endQuote;
+				}
 			}
+
 			if (!empty($this-&gt;endQuote) &amp;&amp; $this-&gt;endQuote == $this-&gt;startQuote) {
 				if (substr_count($data[$i], $this-&gt;endQuote) % 2 == 1) {
-					$data[$i] = trim($data[$i], $this-&gt;endQuote);
+					if (substr($data[$i], -2) == $this-&gt;endQuote . $this-&gt;endQuote) {
+						$data[$i] = substr($data[$i], 0, -1);
+					} else {
+						$data[$i] = trim($data[$i], $this-&gt;endQuote);
+					}
 				}
 			}
 			if (strpos($data[$i], '*')) {
@@ -1680,7 +1691,7 @@ class DboSource extends DataSource {
 							strpos($fields[$i], ' ') !== false ||
 							strpos($fields[$i], '(') !== false
 						);
-						$fields[$i] = $this-&gt;name(($prefix ? '' : '') . $alias . '.' . $fields[$i]);
+						$fields[$i] = $this-&gt;name(($prefix ? $alias . '.' : '') . $fields[$i]);
 					} else {
 						$value = array();
 						$comma = strpos($fields[$i], ',');
@@ -1893,6 +1904,7 @@ class DboSource extends DataSource {
 				$key = substr($key, 0, $split);
 			}
 		}
+
 		$type = (is_object($model) ? $model-&gt;getColumnType($key) : null);
 		$null = ($value === null || (is_array($value) &amp;&amp; empty($value)));
 
@@ -1904,9 +1916,10 @@ class DboSource extends DataSource {
 		}
 		$value = $this-&gt;value($value, $type);
 
-		$key = (strpos($key, '(') !== false || strpos($key, ')') !== false) ?
-			$this-&gt;__quoteFields($key) :
-			$key = $this-&gt;name($key);
+		if ($key !== '?') {
+			$isKey = (strpos($key, '(') !== false || strpos($key, ')') !== false);
+			$key = $isKey ? $this-&gt;__quoteFields($key) : $this-&gt;name($key);
+		}
 
 		if ($bound) {
 			return String::insert($key . ' ' . trim($operator), $value);
@@ -2102,10 +2115,11 @@ class DboSource extends DataSource {
 	function hasAny(&amp;$Model, $sql) {
 		$sql = $this-&gt;conditions($sql);
 		$table = $this-&gt;fullTableName($Model);
-		$where = $sql ? &quot;WHERE {$sql}&quot; : 'WHERE 1 = 1';
-		$id = $Model-&gt;primaryKey;
+		$alias = $this-&gt;alias . $this-&gt;name($Model-&gt;alias);
+		$where = $sql ? &quot;{$sql}&quot; : ' WHERE 1 = 1';
+		$id = $Model-&gt;escapeField();
 
-		$out = $this-&gt;fetchRow(&quot;SELECT COUNT({$id}) {$this-&gt;alias}count FROM {$table} {$where}&quot;);
+		$out = $this-&gt;fetchRow(&quot;SELECT COUNT({$id}) {$this-&gt;alias}count FROM {$table} {$alias}{$where}&quot;);
 
 		if (is_array($out)) {
 			return $out[0]['count'];
@@ -2219,7 +2233,7 @@ class DboSource extends DataSource {
  *
  * @param object $schema An instance of a subclass of CakeSchema
  * @param string $tableName Optional.  If specified only the table name given will be generated.
- *						Otherwise, all tables defined in the schema are generated.
+ *   Otherwise, all tables defined in the schema are generated.
  * @return string
  */
 	function createSchema($schema, $tableName = null) {
@@ -2276,7 +2290,7 @@ class DboSource extends DataSource {
  *
  * @param object $schema An instance of a subclass of CakeSchema
  * @param string $table Optional.  If specified only the table name given will be generated.
- *						Otherwise, all tables defined in the schema are generated.
+ *   Otherwise, all tables defined in the schema are generated.
  * @return string
  */
 	function dropSchema($schema, $table = null) {
@@ -2297,7 +2311,7 @@ class DboSource extends DataSource {
  * Generate a database-native column schema string
  *
  * @param array $column An array structured like the following: array('name'=&gt;'value', 'type'=&gt;'value'[, options]),
- *						where options can be 'default', 'length', or 'key'.
+ *   where options can be 'default', 'length', or 'key'.
  * @return string
  */
 	function buildColumn($column) {</diff>
      <filename>cake/libs/model/datasources/dbo_source.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: model.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: model.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Object-relational mapper.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model
  * @since         CakePHP(tm) v 0.10.0.0
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -221,7 +221,7 @@ class Model extends Overloadable {
 /**
  * Holds the Behavior objects currently bound to this model.
  *
- * @var object
+ * @var BehaviorCollection
  * @access public
  */
 	var $Behaviors = null;
@@ -280,10 +280,11 @@ class Model extends Overloadable {
  * @access private
  */
 	var $__associationKeys = array(
-			'belongsTo' =&gt; array('className', 'foreignKey', 'conditions', 'fields', 'order', 'counterCache'),
-			'hasOne' =&gt; array('className', 'foreignKey','conditions', 'fields','order', 'dependent'),
-			'hasMany' =&gt; array('className', 'foreignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'dependent', 'exclusive', 'finderQuery', 'counterQuery'),
-			'hasAndBelongsToMany' =&gt; array('className', 'joinTable', 'with', 'foreignKey', 'associationForeignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'unique', 'finderQuery', 'deleteQuery', 'insertQuery'));
+		'belongsTo' =&gt; array('className', 'foreignKey', 'conditions', 'fields', 'order', 'counterCache'),
+		'hasOne' =&gt; array('className', 'foreignKey','conditions', 'fields','order', 'dependent'),
+		'hasMany' =&gt; array('className', 'foreignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'dependent', 'exclusive', 'finderQuery', 'counterQuery'),
+		'hasAndBelongsToMany' =&gt; array('className', 'joinTable', 'with', 'foreignKey', 'associationForeignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'unique', 'finderQuery', 'deleteQuery', 'insertQuery')
+	);
 /**
  * Holds provided/generated association key names and other data for all associations.
  *
@@ -1209,9 +1210,8 @@ class Model extends Overloadable {
 				foreach ($this-&gt;_schema as $field =&gt; $properties) {
 					if ($this-&gt;primaryKey === $field) {
 						$fInfo = $this-&gt;_schema[$field];
-						$isUUID = (
-							($fInfo['type'] === 'string' &amp;&amp; $fInfo['length'] === 36) ||
-							($fInfo['type'] === 'binary' &amp;&amp; $fInfo['length'] === 16)
+						$isUUID = ($fInfo['length'] === 36 &amp;&amp;
+							($fInfo['type'] === 'string' || $fInfo['type'] === 'binary')
 						);
 						if (empty($this-&gt;data[$this-&gt;alias][$this-&gt;primaryKey]) &amp;&amp; $isUUID) {
 							list($fields[], $values[]) = array($this-&gt;primaryKey, String::uuid());
@@ -1278,8 +1278,12 @@ class Model extends Overloadable {
 					'fields' =&gt; $this-&gt;hasAndBelongsToMany[$assoc]['associationForeignKey']
 				));
 
-				$isUUID = !empty($this-&gt;{$join}-&gt;primaryKey) &amp;&amp; (($this-&gt;{$join}-&gt;_schema[$this-&gt;{$join}-&gt;primaryKey]['type'] === 'string' &amp;&amp; $this-&gt;{$join}-&gt;_schema[$this-&gt;{$join}-&gt;primaryKey]['length'] === 36)
-						|| ($this-&gt;{$join}-&gt;_schema[$this-&gt;{$join}-&gt;primaryKey]['type'] === 'binary' &amp;&amp; $this-&gt;{$join}-&gt;_schema[$this-&gt;{$join}-&gt;primaryKey]['length'] === 16));
+				$isUUID = !empty($this-&gt;{$join}-&gt;primaryKey) &amp;&amp; (
+						$this-&gt;{$join}-&gt;_schema[$this-&gt;{$join}-&gt;primaryKey]['length'] === 36 &amp;&amp; (
+						$this-&gt;{$join}-&gt;_schema[$this-&gt;{$join}-&gt;primaryKey]['type'] === 'string' ||
+						$this-&gt;{$join}-&gt;_schema[$this-&gt;{$join}-&gt;primaryKey]['type'] === 'binary'
+					)
+				);
 
 				$newData = $newValues = array();
 				$primaryAdded = false;
@@ -1309,6 +1313,8 @@ class Model extends Overloadable {
 						unset($values);
 					} elseif (isset($row[$this-&gt;hasAndBelongsToMany[$assoc]['associationForeignKey']])) {
 						$newData[] = $row;
+					} elseif (isset($row[$join][$this-&gt;hasAndBelongsToMany[$assoc]['associationForeignKey']])) {
+						$newData[] = $row[$join];
 					}
 				}
 
@@ -1513,7 +1519,6 @@ class Model extends Overloadable {
 						case 'belongsTo':
 							if ($this-&gt;__save($this-&gt;{$association}, $values, $options)) {
 								$data[$this-&gt;alias][$this-&gt;belongsTo[$association]['foreignKey']] = $this-&gt;{$association}-&gt;id;
-								unset($data[$association]);
 							} else {
 								$validationErrors[$association] = $this-&gt;{$association}-&gt;validationErrors;
 								$validates = false;
@@ -1678,7 +1683,7 @@ class Model extends Overloadable {
 			$this-&gt;id = $id;
 
 			if (!empty($this-&gt;belongsTo)) {
-				$keys = $this-&gt;find('first', array('fields', $this-&gt;__collectForeignKeys()));
+				$keys = $this-&gt;find('first', array('fields' =&gt; $this-&gt;__collectForeignKeys()));
 			}
 
 			if ($db-&gt;delete($this)) {
@@ -2338,9 +2343,15 @@ class Model extends Overloadable {
 		$this-&gt;exists();
 
 		$_validate = $this-&gt;validate;
-		if (array_key_exists('fieldList', $options) &amp;&amp; is_array($options['fieldList']) &amp;&amp; !empty($options['fieldList'])) {
+		$whitelist = $this-&gt;whitelist;
+
+		if (array_key_exists('fieldList', $options)) {
+			$whitelist = $options['fieldList'];
+		}
+
+		if (!empty($whitelist)) {
 			$validate = array();
-			foreach ($options['fieldList'] as $f) {
+			foreach ((array)$whitelist as $f) {
 				if (!empty($this-&gt;validate[$f])) {
 					$validate[$f] = $this-&gt;validate[$f];
 				}</diff>
      <filename>cake/libs/model/model.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: schema.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: schema.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Schema database management for CakePHP.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.model
  * @since         CakePHP(tm) v 1.2.0.5550
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 App::import('Model', 'ConnectionManager');
@@ -167,10 +167,12 @@ class CakeSchema extends Object {
 /**
  * Reads database and creates schema tables
  *
+ * Options
+ * 
+ * - 'connection' - the db connection to use
+ * - 'name' - name of the schema
+ * - 'models' - a list of models to use, or false to ignore models
  * @param array $options schema object properties
- *		'connection' - the db connection to use
- *		'name' - name of the schema
- *		'models' - a list of models to use, or false to ignore models
  * @return array Array indexed by name and tables
  * @access public
  */
@@ -329,11 +331,11 @@ class CakeSchema extends Object {
 								$type = $value;
 								$value = array('type'=&gt; $type);
 							}
-							$col = &quot;\t\t\t'{$field}' =&gt; array('type' =&gt; '&quot; . $value['type'] . &quot;', &quot;;
+							$col = &quot;\t\t'{$field}' =&gt; array('type' =&gt; '&quot; . $value['type'] . &quot;', &quot;;
 							unset($value['type']);
 							$col .= join(', ',  $this-&gt;__values($value));
 						} else {
-							$col = &quot;\t\t\t'indexes' =&gt; array(&quot;;
+							$col = &quot;\t\t'indexes' =&gt; array(&quot;;
 							$props = array();
 							foreach ((array)$value as $key =&gt; $index) {
 								$props[] = &quot;'{$key}' =&gt; array(&quot;.join(', ',  $this-&gt;__values($index)).&quot;)&quot;;
@@ -345,7 +347,7 @@ class CakeSchema extends Object {
 					}
 					$out .= join(&quot;,\n&quot;, $cols);
 				}
-				$out .= &quot;\n\t\t);\n&quot;;
+				$out .= &quot;\n\t);\n&quot;;
 			}
 		}
 		$out .=&quot;}\n&quot;;
@@ -353,7 +355,7 @@ class CakeSchema extends Object {
 
 		$File =&amp; new File($path . DS . $file, true);
 		$header = '$Id';
-		$content = &quot;&lt;?php \n/* SVN FILE: $header$ */\n/* &quot;. $name .&quot; schema generated on: &quot; . date('Y-m-d H:m:s') . &quot; : &quot;. time() . &quot;*/\n{$out}?&gt;&quot;;
+		$content = &quot;&lt;?php \n/* SVN FILE: {$header}$ */\n/* {$name} schema generated on: &quot; . date('Y-m-d H:m:s') . &quot; : &quot;. time() . &quot;*/\n{$out}?&gt;&quot;;
 		$content = $File-&gt;prepare($content);
 		if ($File-&gt;write($content)) {
 			return $content;</diff>
      <filename>cake/libs/model/schema.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: object.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: object.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Object class, allowing __construct and __destruct in PHP4.
  *
@@ -20,9 +20,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -38,7 +38,7 @@ class Object {
 /**
  * Log object
  *
- * @var object
+ * @var CakeLog
  * @access protected
  */
 	var $_log = null;
@@ -248,7 +248,11 @@ class Object {
 		$objectArray = array(&amp;$object);
 		$data = str_replace('\\', '\\\\', serialize($objectArray));
 		$data = '&lt;?php $' . $name . ' = \'' . str_replace('\'', '\\\'', $data) . '\' ?&gt;';
-		cache($file, $data, '+1 day');
+		$duration = '+999 days';
+		if (Configure::read() &gt;= 1) {
+			$duration = '+10 seconds';
+		}
+		cache($file, $data, $duration);
 	}
 /**
  * Open the persistent class file for reading
@@ -267,14 +271,16 @@ class Object {
 			case 'registry':
 				$vars = unserialize(${$name});
 				foreach ($vars['0'] as $key =&gt; $value) {
-					App::import('Model', Inflector::classify($key));
+					if (strpos($key, '_behavior') !== false) {
+						App::import('Behavior', Inflector::classify(substr($key, 0, -9)));
+					} else {
+						App::import('Model', Inflector::classify($key));
+					}
+					unset ($value);
 				}
 				unset($vars);
 				$vars = unserialize(${$name});
 				foreach ($vars['0'] as $key =&gt; $value) {
-					foreach ($vars['0'][$key]-&gt;Behaviors-&gt;_attached as $behavior) {
-						App::import('Behavior', $behavior);
-					}
 					ClassRegistry::addObject($key, $value);
 					unset ($value);
 				}</diff>
      <filename>cake/libs/object.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: router.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: router.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Parses the request URL into controller, action, and parameters.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -215,25 +215,25 @@ class Router extends Object {
 		return $_this-&gt;routes;
 	}
 /**
- *Specifies what named parameters CakePHP should be parsing. The most common setups are:
+ * Specifies what named parameters CakePHP should be parsing. The most common setups are:
  *
  * Do not parse any named parameters:
- * 	Router::connectNamed(false);
+ * {{{ Router::connectNamed(false); }}}
  *
  * Parse only default parameters used for CakePHP's pagination:
- * 	Router::connectNamed(false, array('default' =&gt; true));
+ * {{{ Router::connectNamed(false, array('default' =&gt; true)); }}}
  *
  * Parse only the page parameter if its value is a number:
- * 	Router::connectNamed(array('page' =&gt; '[\d]+'), array('default' =&gt; false, 'greedy' =&gt; false));
+ * {{{ Router::connectNamed(array('page' =&gt; '[\d]+'), array('default' =&gt; false, 'greedy' =&gt; false)); }}}
  *
  * Parse only the page parameter no mater what.
- * 	Router::connectNamed(array('page'), array('default' =&gt; false, 'greedy' =&gt; false));
+ * {{{ Router::connectNamed(array('page'), array('default' =&gt; false, 'greedy' =&gt; false)); }}}
  *
  * Parse only the page parameter if the current action is 'index'.
- * 	Router::connectNamed(array('page' =&gt; array('action' =&gt; 'index')), array('default' =&gt; false, 'greedy' =&gt; false));
+ * {{{ Router::connectNamed(array('page' =&gt; array('action' =&gt; 'index')), array('default' =&gt; false, 'greedy' =&gt; false)); }}}
  *
  * Parse only the page parameter if the current action is 'index' and the controller is 'pages'.
- * 	Router::connectNamed(array('page' =&gt; array('action' =&gt; 'index', 'controller' =&gt; 'pages')), array('default' =&gt; false, 'greedy' =&gt; false));
+ * {{{ Router::connectNamed(array('page' =&gt; array('action' =&gt; 'index', 'controller' =&gt; 'pages')), array('default' =&gt; false, 'greedy' =&gt; false)); }}}
  *
  * @param array $named A list of named parameters. Key value pairs are accepted where values are either regex strings to match, or arrays as seen above.
  * @param array $options Allows to control all settings: separator, greedy, reset, default
@@ -276,11 +276,14 @@ class Router extends Object {
 /**
  * Creates REST resource routes for the given controller(s)
  *
- * @param mixed $controller		A controller name or array of controller names (i.e. &quot;Posts&quot; or &quot;ListItems&quot;)
- * @param array $options		Options to use when generating REST routes
- *					'id' -		The regular expression fragment to use when matching IDs.  By default, matches
- *								integer values and UUIDs.
- *					'prefix' -	URL prefix to use for the generated routes.  Defaults to '/'.
+ * Options:
+ *
+ * - 'id' - The regular expression fragment to use when matching IDs.  By default, matches
+ *    integer values and UUIDs.
+ * - 'prefix' - URL prefix to use for the generated routes.  Defaults to '/'.
+ *
+ * @param mixed $controller A controller name or array of controller names (i.e. &quot;Posts&quot; or &quot;ListItems&quot;)
+ * @param array $options Options to use when generating REST routes
  * @return void
  * @access public
  * @static
@@ -732,32 +735,33 @@ class Router extends Object {
  *
  * Returns an URL pointing to a combination of controller and action. Param
  * $url can be:
- *	+ Empty - the method will find adress to actuall controller/action.
- *	+ '/' - the method will find base URL of application.
- *	+ A combination of controller/action - the method will find url for it.
  *
- * @param  mixed  $url    Cake-relative URL, like &quot;/products/edit/92&quot; or &quot;/presidents/elect/4&quot;
- *                        or an array specifying any of the following: 'controller', 'action',
- *                        and/or 'plugin', in addition to named arguments (keyed array elements),
- *                        and standard URL arguments (indexed array elements)
- * @param mixed $options If (bool)true, the full base URL will be prepended to the result. 
- *                       If an array accepts the following keys
- *                           escape - used when making urls embedded in html escapes query string '&amp;'
- *                           full - if true the full base URL will be prepended.
- * @return string  Full translated URL with base path.
+ * - Empty - the method will find adress to actuall controller/action.
+ * - '/' - the method will find base URL of application.
+ * - A combination of controller/action - the method will find url for it.
+ *
+ * @param mixed $url Cake-relative URL, like &quot;/products/edit/92&quot; or &quot;/presidents/elect/4&quot;
+ *   or an array specifying any of the following: 'controller', 'action',
+ *   and/or 'plugin', in addition to named arguments (keyed array elements),
+ *   and standard URL arguments (indexed array elements)
+ * @param mixed $full If (bool) true, the full base URL will be prepended to the result.
+ *   If an array accepts the following keys
+ *    - escape - used when making urls embedded in html escapes query string '&amp;'
+ *    - full - if true the full base URL will be prepended.
+ * @return string Full translated URL with base path.
  * @access public
  * @static
  */
 	function url($url = null, $full = false) {
 		$_this =&amp; Router::getInstance();
 		$defaults = $params = array('plugin' =&gt; null, 'controller' =&gt; null, 'action' =&gt; 'index');
-		
+
 		if (is_bool($full)) {
 			$escape = false;
 		} else {
 			extract(array_merge(array('escape' =&gt; false, 'full' =&gt; false), $full));
 		}
-		
+
 		if (!empty($_this-&gt;__params)) {
 			if (isset($this) &amp;&amp; !isset($this-&gt;params['requested'])) {
 				$params = $_this-&gt;__params[0];
@@ -842,6 +846,7 @@ class Router extends Object {
 				}
 				$url = $originalUrl;
 			}
+
 			$named = $args = array();
 			$skip = array(
 				'bare', 'action', 'controller', 'plugin', 'ext', '?', '#', 'prefix', $_this-&gt;__admin
@@ -896,7 +901,6 @@ class Router extends Object {
 					$output .= '/' . $name . $_this-&gt;named['separator'] . $value;
 				}
 			}
-
 			$output = str_replace('//', '/', $base . '/' . $output);
 		} else {
 			if (((strpos($url, '://')) || (strpos($url, 'javascript:') === 0) || (strpos($url, 'mailto:') === 0)) || (!strncmp($url, '#', 1))) {
@@ -1078,6 +1082,8 @@ class Router extends Object {
 			if (isset($params[$key])) {
 				$string = $params[$key];
 				unset($params[$key]);
+			} else {
+				$key = $key . '/';
 			}
 			$out = str_replace(':' . $key, $string, $out);
 		}
@@ -1085,6 +1091,7 @@ class Router extends Object {
 		if (strpos($route[0], '*')) {
 			$out = str_replace('*', $params['pass'], $out);
 		}
+
 		return $out;
 	}
 /**</diff>
      <filename>cake/libs/router.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: session.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: session.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Session class for Cake.
  *
@@ -22,9 +22,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v .0.10.0.1222
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -349,7 +349,9 @@ class CakeSession extends Object {
 		if (empty($var)) {
 			return false;
 		}
-		$this-&gt;watchKeys[] = $var;
+		if (!in_array($var, $this-&gt;watchKeys, true)) {
+			$this-&gt;watchKeys[] = $var;
+		}
 	}
 /**
  * Tells Session to stop watching a given key path
@@ -571,10 +573,8 @@ class CakeSession extends Object {
 				$this-&gt;__setError(1, 'Session Highjacking Attempted !!!');
 			}
 		} else {
-			srand ((double)microtime() * 1000000);
 			$this-&gt;write('Config.userAgent', $this-&gt;_userAgent);
 			$this-&gt;write('Config.time', $this-&gt;sessionTime);
-			$this-&gt;write('Config.rand', mt_rand());
 			$this-&gt;write('Config.timeout', 10);
 			$this-&gt;valid = true;
 			$this-&gt;__setError(1, 'Session is valid');</diff>
      <filename>cake/libs/session.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: set.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: set.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Library of array functions for Cake.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 1.2.0
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -369,16 +369,16 @@ class Set extends Object {
  * @static
  */
 	function extract($path, $data = null, $options = array()) {
-		if (empty($data) &amp;&amp; is_string($path) &amp;&amp; $path{0} === '/') {
-			return array();
+		if (is_string($data)) {
+			$tmp = $data;
+			$data = $path;
+			$path = $tmp;
 		}
-		if (is_string($data) &amp;&amp; $data{0} === '/') {
-			$tmp = $path;
-			$path = $data;
-			$data = $tmp;
+		if (strpos($path, '/') === false) {
+			return Set::classicExtract($data, $path);
 		}
-		if (is_array($path) || empty($data) || is_object($path) || empty($path)) {
-			return Set::classicExtract($path, $data);
+		if (empty($data)) {
+			return array();
 		}
 		if ($path === '/') {
 			return $data;
@@ -388,12 +388,12 @@ class Set extends Object {
 		if (!isset($contexts[0])) {
 			$contexts = array($data);
 		}
-		$tokens = array_slice(preg_split('/(?&lt;!=)\/(?![a-z]*\])/', $path), 1);
+		$tokens = array_slice(preg_split('/(?&lt;!=)\/(?![a-z-]*\])/', $path), 1);
 
 		do {
 			$token = array_shift($tokens);
 			$conditions = false;
-			if (preg_match_all('/\[([^\]]+)\]/', $token, $m)) {
+			if (preg_match_all('/\[([^=]+=\/[^\/]+\/|[^\]]+)\]/', $token, $m)) {
 				$conditions = $m[1];
 				$token = substr($token, 0, strpos($token, '['));
 			}
@@ -411,8 +411,10 @@ class Set extends Object {
 					$context['key'] = array_pop($context['trace']);
 					if (isset($context['trace'][1]) &amp;&amp; $context['trace'][1] &gt; 0) {
 						$context['item'] = $context['item'][0];
-					} else {
+					} else if(!empty($context['item'][$key])){
 						$context['item'] = $context['item'][$key];
+					} else {
+						$context['item'] = array_shift($context['item']);
 					}
 					$matches[] = $context;
 					continue;
@@ -449,6 +451,8 @@ class Set extends Object {
 									'item' =&gt; $item,
 								);
 								break;
+							} else {
+								array_unshift($tokens, $token);
 							}
 						} else {
 							$key = $token;
@@ -1086,7 +1090,7 @@ class Set extends Object {
 	function sort($data, $path, $dir) {
 		$result = Set::__flatten(Set::extract($data, $path));
 		list($keys, $values) = array(Set::extract($result, '{n}.id'), Set::extract($result, '{n}.value'));
-		
+
 		$dir = strtolower($dir);
 		if ($dir === 'asc') {
 			$dir = SORT_ASC;</diff>
      <filename>cake/libs/set.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: string.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: string.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * String handling methods.
  *
@@ -18,9 +18,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP(tm) v 1.2.0.5551
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -211,10 +211,10 @@ class String extends Object {
  * @static
  */
 	function insert($str, $data, $options = array()) {
-		$options = array_merge(
-			array('before' =&gt; ':', 'after' =&gt; null, 'escape' =&gt; '\\', 'format' =&gt; null, 'clean' =&gt; false),
-			$options
+		$defaults = array(
+			'before' =&gt; ':', 'after' =&gt; null, 'escape' =&gt; '\\', 'format' =&gt; null, 'clean' =&gt; false
 		);
+		$options += $defaults;
 		$format = $options['format'];
 
 		if (!isset($format)) {
@@ -231,7 +231,7 @@ class String extends Object {
 
 		if (array_keys($data) === array_keys(array_values($data))) {
 			$offset = 0;
-			while ($pos = strpos($str, '?', $offset)) {
+			while (($pos = strpos($str, '?', $offset)) !== false) {
 				$val = array_shift($data);
 				$offset = $pos + strlen($val);
 				$str = substr_replace($str, $val, $pos, 1);</diff>
      <filename>cake/libs/string.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: helper.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: helper.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Backend for helpers.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view
  * @since         CakePHP(tm) v 0.2.9
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -175,7 +175,7 @@ class Helper extends Overloadable {
  * @return string  Full translated URL with base path.
  */
 	function url($url = null, $full = false) {
-		return Router::url($url, array('full' =&gt; $full, 'escape' =&gt; true));
+		return h(Router::url($url, $full));
 	}
 /**
  * Checks if a file exists when theme is used, if no file is found default location is returned
@@ -567,15 +567,26 @@ class Helper extends Overloadable {
 
 		$result = null;
 
-		if (isset($this-&gt;data[$this-&gt;model()][$this-&gt;field()])) {
-			$result = $this-&gt;data[$this-&gt;model()][$this-&gt;field()];
-		} elseif (isset($this-&gt;data[$this-&gt;field()]) &amp;&amp; is_array($this-&gt;data[$this-&gt;field()])) {
-			if (ClassRegistry::isKeySet($this-&gt;field())) {
-				$model =&amp; ClassRegistry::getObject($this-&gt;field());
-				$result = $this-&gt;__selectedArray($this-&gt;data[$this-&gt;field()], $model-&gt;primaryKey);
+		$modelName = $this-&gt;model();
+		$fieldName = $this-&gt;field();
+		$modelID = $this-&gt;modelID();
+
+		if (is_null($fieldName)) {
+			$fieldName = $modelName;
+			$modelName = null;
+		}
+
+		if (isset($this-&gt;data[$fieldName]) &amp;&amp; $modelName === null) {
+			$result = $this-&gt;data[$fieldName];
+		} elseif (isset($this-&gt;data[$modelName][$fieldName])) {
+			$result = $this-&gt;data[$modelName][$fieldName];
+		} elseif (isset($this-&gt;data[$fieldName]) &amp;&amp; is_array($this-&gt;data[$fieldName])) {
+			if (ClassRegistry::isKeySet($fieldName)) {
+				$model =&amp; ClassRegistry::getObject($fieldName);
+				$result = $this-&gt;__selectedArray($this-&gt;data[$fieldName], $model-&gt;primaryKey);
 			}
-		} elseif (isset($this-&gt;data[$this-&gt;model()][$this-&gt;modelID()][$this-&gt;field()])) {
-			$result = $this-&gt;data[$this-&gt;model()][$this-&gt;modelID()][$this-&gt;field()];
+		} elseif (isset($this-&gt;data[$modelName][$modelID][$fieldName])) {
+			$result = $this-&gt;data[$modelName][$modelID][$fieldName];
 		}
 
 		if (is_array($result)) {</diff>
      <filename>cake/libs/view/helper.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: ajax.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: ajax.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Helper for AJAX operations.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 0.10.0.1076
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -42,14 +42,14 @@ class AjaxHelper extends AppHelper {
 /**
  * HtmlHelper instance
  *
- * @var object
+ * @var HtmlHelper
  * @access public
  */
 	var $Html = null;
 /**
  * JavaScriptHelper instance
  *
- * @var object
+ * @var JavaScriptHelper
  * @access public
  */
 	var $Javascript = null;
@@ -303,12 +303,11 @@ class AjaxHelper extends AppHelper {
  * (all elements available in params).  The options for defining callbacks is the same
  * as AjaxHelper::link().
  *
- * @param mixed $params Either a string identifying the form target, or an array of method
- *                      parameters, including:
- *                          - 'params' =&gt; Acts as the form target
- *                          - 'type' =&gt; 'post' or 'get'
- *                          - 'options' =&gt; An array containing all HTML and script options used to
- *                             generate the form tag and Ajax request.
+ * @param mixed $params Either a string identifying the form target, or an array of method parameters, including:
+ *  - 'params' =&gt; Acts as the form target
+ *  - 'type' =&gt; 'post' or 'get'
+ *  - 'options' =&gt; An array containing all HTML and script options used to
+ *  generate the form tag and Ajax request.
  * @param array $type How form data is posted: 'get' or 'post'
  * @param array $options Callback/HTML options
  * @return string JavaScript/HTML code
@@ -902,7 +901,7 @@ class AjaxHelper extends AppHelper {
 				}
 				if (isset($options['bind'])) {
 					$bind = $options['bind'];
-					
+
 					$hasBinding = (
 						(is_array($bind) &amp;&amp; in_array($callback, $bind)) ||
 						(is_string($bind) &amp;&amp; strpos($bind, $callback) !== false)</diff>
      <filename>cake/libs/view/helpers/ajax.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: cache.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: cache.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 1.0.0.2277
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -52,7 +52,7 @@ class CacheHelper extends AppHelper {
 /**
  * holds the View object passed in final call to CacheHelper::cache()
  *
- * @var object
+ * @var View
  * @access public
  */
 	var $view;</diff>
      <filename>cake/libs/view/helpers/cache.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: form.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: form.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Automatic generation of HTML FORMs from given data.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 0.10.0.1076
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -73,15 +73,17 @@ class FormHelper extends AppHelper {
 /**
  * Returns an HTML FORM element.
  *
+ * Options:
+ *
+ * - 'type' Form method defaults to POST
+ * - 'action'  The Action the form submits to. Can be a string or array,
+ * - 'url'  The url the form submits to. Can be a string or a url array,
+ * - 'default'  Allows for the creation of Ajax forms.
+ * - 'onsubmit' Used in conjunction with 'default' to create ajax forms.
+ *
  * @access public
  * @param string $model The model object which the form is being defined for
- * @param array	 $options
- *			'type' Form method defaults to POST
- * 			'action'  The Action the form submits to. Can be a string or array,
- *			'url'  The url the form submits to. Can be a string or a url array,
- *			'default'  Allows for the creation of Ajax forms.
- *			'onsubmit' Used in conjunction with 'default' to create ajax forms.
- *
+ * @param array $options An array of html attributes and options.
  * @return string An formatted opening FORM tag.
  */
 	function create($model = null, $options = array()) {
@@ -375,13 +377,16 @@ class FormHelper extends AppHelper {
 /**
  * Returns a formatted error message for given FORM field, NULL if no errors.
  *
- * @param string $field A field name, like &quot;Modelname.fieldname&quot;
- * @param mixed $text		Error message or array of $options
- * @param array $options	Rendering options for &lt;div /&gt; wrapper tag
- *			'escape'  bool  Whether or not to html escape the contents of the error.
- *			'wrap'  mixed  Whether or not the error message should be wrapped in a div. If a
- * 					string, will be used as the HTML tag to use.
- *			'class'  string  The classname for the error message
+ * Options:
+ *
+ * - 'escape'  bool  Whether or not to html escape the contents of the error.
+ * - 'wrap'  mixed  Whether or not the error message should be wrapped in a div. If a
+ *   string, will be used as the HTML tag to use.
+ * - 'class'  string  The classname for the error message
+ *
+ * @param string $field  A field name, like &quot;Modelname.fieldname&quot;
+ * @param mixed $text  Error message or array of $options
+ * @param array $options  Rendering options for &lt;div /&gt; wrapper tag
  * @return string If there are errors this method returns an error message, otherwise null.
  * @access public
  */
@@ -554,16 +559,17 @@ class FormHelper extends AppHelper {
 /**
  * Generates a form input element complete with label and wrapper div
  *
- * @param string $fieldName This should be &quot;Modelname.fieldname&quot;
- * @param array $options - Each type of input takes different options.
- * 		See each field type method for more information.
- *		'type' - Force the type of widget you want. e.g. type =&gt; 'select'
- *		'label' - control the label
- *		'div' - control the wrapping div element
- *		'options' - for widgets that take options e.g. radio, select
- * 		'error' - control the error message that is produced
+ * Options - See each field type method for more information.
  *
- * @return string
+ * - 'type' - Force the type of widget you want. e.g. ```type =&gt; 'select'```
+ * - 'label' - control the label
+ * - 'div' - control the wrapping div element
+ * - 'options' - for widgets that take options e.g. radio, select
+ * - 'error' - control the error message that is produced
+ *
+ * @param string $fieldName This should be &quot;Modelname.fieldname&quot;
+ * @param array $options Each type of input takes different options.
+ * @return string Completed form widget
  */
 	function input($fieldName, $options = array()) {
 		$view =&amp; ClassRegistry::getObject('view');
@@ -822,12 +828,15 @@ class FormHelper extends AppHelper {
 /**
  * Creates a checkbox input widget.
  *
+ * Options:
+ *
+ * - 'value' - the value of the checkbox
+ * - checked' - boolean indicate that this checkbox is checked.
+ *
  * @param string $fieldName Name of a field, like this &quot;Modelname.fieldname&quot;
  * @param array $options Array of HTML attributes.
- *		'value' - the value of the checkbox
- *		'checked' - boolean indicate that this checkbox is checked.
  * @todo Right now, automatically setting the 'checked' value is dependent on whether or not the
- * 		 checkbox is bound to a model.  This should probably be re-evaluated in future versions.
+ *    checkbox is bound to a model.  This should probably be re-evaluated in future versions.
  * @return string An HTML text input element
  */
 	function checkbox($fieldName, $options = array()) {
@@ -854,14 +863,16 @@ class FormHelper extends AppHelper {
 /**
  * Creates a set of radio widgets.
  *
- * @param  string  	$fieldName 		Name of a field, like this &quot;Modelname.fieldname&quot;
- * @param  array	$options		Radio button options array.
- * @param  array	$attributes		Array of HTML attributes.
- *		'separator' - define the string in between the radio buttons
- *		'legend' - control whether or not the widget set has a fieldset &amp; legend
- *		'value' - indicate a value that is should be checked
- * 		'label' - boolean to indicate whether or not labels for widgets show be displayed
+ * Attributes:
+ *
+ * - 'separator' - define the string in between the radio buttons
+ * - 'legend' - control whether or not the widget set has a fieldset &amp; legend
+ * - 'value' - indicate a value that is should be checked
+ * - 'label' - boolean to indicate whether or not labels for widgets show be displayed
  *
+ * @param string $fieldName Name of a field, like this &quot;Modelname.fieldname&quot;
+ * @param array $options Radio button options array.
+ * @param array $attributes Array of HTML attributes.
  * @return string
  */
 	function radio($fieldName, $options = array(), $attributes = array()) {
@@ -936,7 +947,7 @@ class FormHelper extends AppHelper {
 /**
  * Creates a text input widget.
  *
- * @param string $fieldNamem Name of a field, in the form &quot;Modelname.fieldname&quot;
+ * @param string $fieldName Name of a field, in the form &quot;Modelname.fieldname&quot;
  * @param array  $options Array of HTML attributes.
  * @return string An HTML text input element
  */
@@ -968,7 +979,7 @@ class FormHelper extends AppHelper {
 /**
  * Creates a textarea widget.
  *
- * @param string $fieldNamem Name of a field, in the form &quot;Modelname.fieldname&quot;
+ * @param string $fieldName Name of a field, in the form &quot;Modelname.fieldname&quot;
  * @param array $options Array of HTML attributes.
  * @return string An HTML text input element
  */
@@ -993,8 +1004,8 @@ class FormHelper extends AppHelper {
 /**
  * Creates a hidden input field.
  *
- * @param  string  $fieldName Name of a field, in the form&quot;Modelname.fieldname&quot;
- * @param  array	$options Array of HTML attributes.
+ * @param string $fieldName Name of a field, in the form&quot;Modelname.fieldname&quot;
+ * @param array $options Array of HTML attributes.
  * @return string
  * @access public
  */
@@ -1044,8 +1055,8 @@ class FormHelper extends AppHelper {
 /**
  * Creates a button tag.
  *
- * @param  string  $title  The button's caption
- * @param  array  $options Array of options.
+ * @param string $title  The button's caption
+ * @param array $options Array of options.
  * @return string A HTML button tag.
  * @access public
  */
@@ -1069,11 +1080,11 @@ class FormHelper extends AppHelper {
 /**
  * Creates a submit button element.
  *
- * @param  string  $caption	 The label appearing on the button OR if string contains :// or the
- * 						extension .jpg, .jpe, .jpeg, .gif, .png use an image if the extension
- * 						exists, AND the first character is /, image is relative to webroot,
- *						OR if the first character is not /, image is relative to webroot/img.
- * @param  array   $options
+ * @param string $caption The label appearing on the button OR if string contains :// or the
+ *  extension .jpg, .jpe, .jpeg, .gif, .png use an image if the extension
+ *  exists, AND the first character is /, image is relative to webroot,
+ *  OR if the first character is not /, image is relative to webroot/img.
+ * @param array $options 
  * @return string A HTML submit button
  */
 	function submit($caption = null, $options = array()) {
@@ -1135,18 +1146,21 @@ class FormHelper extends AppHelper {
 /**
  * Returns a formatted SELECT element.
  *
+ * Attributes:
+ *
+ * - 'showParents' - If included in the array and set to true, an additional option element
+ *   will be added for the parent of each option group.
+ * - 'multiple' - show a multiple select box.  If set to 'checkbox' multiple checkboxes will be
+ *   created instead.
+ *
  * @param string $fieldName Name attribute of the SELECT
  * @param array $options Array of the OPTION elements (as 'value'=&gt;'Text' pairs) to be used in the
- * 						 SELECT element
+ *    SELECT element
  * @param mixed $selected The option selected by default.  If null, the default value
- *						  from POST data will be used when available.
- * @param array $attributes	 The HTML attributes of the select element.
- *		'showParents' - If included in the array and set to true, an additional option element
- *						will be added for the parent of each option group.
- *		'multiple' - show a multiple select box.  If set to 'checkbox' multiple checkboxes will be
- * 					 created instead.
+ *   from POST data will be used when available.
+ * @param array $attributes The HTML attributes of the select element.
  * @param mixed $showEmpty If true, the empty select option is shown.  If a string,
- *						   that string is displayed as the empty element.
+ *   that string is displayed as the empty element.
  * @return string Formatted SELECT element
  */
 	function select($fieldName, $options = array(), $selected = null, $attributes = array(), $showEmpty = '') {
@@ -1300,11 +1314,13 @@ class FormHelper extends AppHelper {
 /**
  * Returns a SELECT element for months.
  *
+ * Attributes:
+ *
+ * - 'monthNames' is set and false 2 digit numbers will be used instead of text.
+ *
  * @param string $fieldName Prefix name for the SELECT element
  * @param string $selected Option which is selected.
  * @param array $attributes Attributes for the select element
- *		'monthNames' is set and false 2 digit numbers will be used instead of text.
- *
  * @param boolean $showEmpty Show/hide the empty select option
  * @return string
  */
@@ -1460,16 +1476,19 @@ class FormHelper extends AppHelper {
 /**
  * Returns a set of SELECT elements for a full datetime setup: day, month and year, and then time.
  *
+ * Attributes:
+ *
+ * - 'monthNames' If set and false numbers will be used for month select instead of text.
+ * - 'minYear' The lowest year to use in the year select
+ * - 'maxYear' The maximum year to use in the year select
+ * - 'interval' The interval for the minutes select. Defaults to 1
+ * - 'separator' The contents of the string between select elements. Defaults to '-'
+ *
  * @param string $fieldName Prefix name for the SELECT element
  * @param string $dateFormat DMY, MDY, YMD or NONE.
  * @param string $timeFormat 12, 24, NONE
  * @param string $selected Option which is selected.
  * @param string $attributes array of Attributes
- *		'monthNames' If set and false numbers will be used for month select instead of text.
- *		'minYear' The lowest year to use in the year select
- *		'maxYear' The maximum year to use in the year select
- *		'interval' The interval for the minutes select. Defaults to 1
- *		'separator' The contents of the string between select elements. Defaults to '-'
  * @param bool $showEmpty Whether or not to show an empty default value.
  * @return string The HTML formatted OPTION element
  */
@@ -1829,7 +1848,10 @@ class FormHelper extends AppHelper {
 	}
 /**
  * Sets field defaults and adds field to form security input hash
- *
+ * 
+ * Options
+ *  - secure - boolean whether or not the the field should be added to the security fields.
+ * 
  * @param string $field
  * @param array $options
  * @return array</diff>
      <filename>cake/libs/view/helpers/form.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: html.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: html.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Html Helper class file.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 0.9.1
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -189,7 +189,7 @@ class HtmlHelper extends AppHelper {
 /**
  * Creates a link to an external resource and handles basic meta tags
  *
- * @param  string  $title The title of the external resource
+ * @param  string  $type The title of the external resource
  * @param  mixed   $url   The address of the external resource or string for content attribute
  * @param  array   $attributes Other attributes for the generated tag. If the type attribute is html, rss, atom, or icon, the mime-type is returned.
  * @param  boolean $inline If set to false, the generated tag appears in the head tag of the layout.
@@ -285,9 +285,8 @@ class HtmlHelper extends AppHelper {
 			$escapeTitle = false;
 		}
 
-		if (isset($htmlAttributes['escape'])) {
+		if (isset($htmlAttributes['escape']) &amp;&amp; $escapeTitle == true) {
 			$escapeTitle = $htmlAttributes['escape'];
-			unset($htmlAttributes['escape']);
 		}
 
 		if ($escapeTitle === true) {
@@ -380,7 +379,8 @@ class HtmlHelper extends AppHelper {
 /**
  * Builds CSS style data from an array of CSS properties
  *
- * @param array $data
+ * @param array $data Style data array
+ * @param boolean $inline Whether or not the style block should be displayed inline
  * @return string CSS styling data
  */
 	function style($data, $inline = true) {
@@ -426,7 +426,7 @@ class HtmlHelper extends AppHelper {
  * Creates a formatted IMG element.
  *
  * @param string $path Path to the image file, relative to the app/webroot/img/ directory.
- * @param array	$htmlAttributes Array of HTML attributes.
+ * @param array	$options Array of HTML attributes.
  * @return string
  */
 	function image($path, $options = array()) {
@@ -435,7 +435,7 @@ class HtmlHelper extends AppHelper {
 		} elseif ($path[0] === '/') {
 			$path = $this-&gt;webroot($path);
 		} elseif (strpos($path, '://') === false) {
-			if (Configure::read('Asset.timestamp') == true &amp;&amp; Configure::read() &gt; 0) {
+			if ((Configure::read('Asset.timestamp') == true &amp;&amp; Configure::read() &gt; 0) || Configure::read('Asset.timestamp') === 'force') {
 				$path .= '?' . @filemtime(str_replace('/', DS, WWW_ROOT . IMAGES_URL . $path));
 			}
 			$path = $this-&gt;webroot(IMAGES_URL . $path);
@@ -531,7 +531,7 @@ class HtmlHelper extends AppHelper {
  *
  * @param string $name Tag name.
  * @param string $text String content that will appear inside the div element.
- *			If null, only a start tag will be printed
+ *   If null, only a start tag will be printed
  * @param array $attributes Additional HTML attributes of the DIV tag
  * @param boolean $escape If true, $text will be HTML-escaped
  * @return string The formatted tag element
@@ -555,7 +555,7 @@ class HtmlHelper extends AppHelper {
  *
  * @param string $class CSS class name of the div element.
  * @param string $text String content that will appear inside the div element.
- *			If null, only a start tag will be printed
+ *   If null, only a start tag will be printed
  * @param array $attributes Additional HTML attributes of the DIV tag
  * @param boolean $escape If true, $text will be HTML-escaped
  * @return string The formatted DIV element</diff>
      <filename>cake/libs/view/helpers/html.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: javascript.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: javascript.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Javascript Helper class file.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 0.10.0.1076
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -152,16 +152,19 @@ class JavascriptHelper extends AppHelper {
 /**
  * Returns a JavaScript script tag.
  *
+ * Options:
+ *
+ *  - allowCache: boolean, designates whether this block is cacheable using the
+ * current cache settings.
+ *  - safe: boolean, whether this block should be wrapped in CDATA tags.  Defaults
+ * to helper's object configuration.
+ *  - inline: whether the block should be printed inline, or written
+ * to cached for later output (i.e. $scripts_for_layout).
+ *
  * @param string $script The JavaScript to be wrapped in SCRIPT tags.
  * @param array $options Set of options:
- *             - allowCache: boolean, designates whether this block is cacheable using the
- *               current cache settings.
- *             - safe: boolean, whether this block should be wrapped in CDATA tags.  Defaults
- *               to helper's object configuration.
- *             - inline: whether the block should be printed inline, or written
- *               to cached for later output (i.e. $scripts_for_layout).
  * @return string The full SCRIPT element, with the JavaScript inside it, or null,
- *                if 'inline' is set to false.
+ *   if 'inline' is set to false.
  */
 	function codeBlock($script = null, $options = array()) {
 		if (!empty($options) &amp;&amp; !is_array($options)) {
@@ -240,9 +243,9 @@ class JavascriptHelper extends AppHelper {
  * the path will be relative to the base path of your application.  Otherwise, the path will
  * be relative to your JavaScript path, usually webroot/js.
  *
- * @param  mixed  $url String URL to JavaScript file, or an array of URLs.
- * @param  boolean $inline If true, the &lt;script /&gt; tag will be printed inline,
- *                         otherwise it will be printed in the &lt;head /&gt;, using $scripts_for_layout
+ * @param mixed $url String URL to JavaScript file, or an array of URLs.
+ * @param boolean $inline If true, the &lt;script /&gt; tag will be printed inline,
+ *   otherwise it will be printed in the &lt;head /&gt;, using $scripts_for_layout
  * @see JS_URL
  * @return string
  */
@@ -522,6 +525,13 @@ class JavascriptHelper extends AppHelper {
 		if ($this-&gt;useNative) {
 			$rt = json_encode($data);
 		} else {
+			if (is_null($data)) {
+				return 'null';
+			}
+			if (is_bool($data)) {
+				return $data ? 'true' : 'false';
+			}
+
 			if (is_array($data)) {
 				$keys = array_keys($data);
 			}</diff>
      <filename>cake/libs/view/helpers/javascript.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: number.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: number.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Number Helper.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 0.10.0.1076
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -52,21 +52,17 @@ class NumberHelper extends AppHelper {
  * @static
  */
 	function toReadableSize($size) {
-		switch ($size) {
-			case 0:
-				return '0 Bytes';
-			case 1:
-				return '1 Byte';
+		switch (true) {
 			case $size &lt; 1024:
-				return $size . ' Bytes';
+				return sprintf(__n('%d Byte', '%d Bytes', $size, true), $size);
 			case round($size / 1024) &lt; 1024:
-				return $this-&gt;precision($size / 1024, 0) . ' KB';
+				return sprintf(__('%d KB', true), $this-&gt;precision($size / 1024, 0));
 			case round($size / 1024 / 1024, 2) &lt; 1024:
-				return $this-&gt;precision($size / 1024 / 1024, 2) . ' MB';
+				return sprintf(__('%.2f MB', true), $this-&gt;precision($size / 1024 / 1024, 2));
 			case round($size / 1024 / 1024 / 1024, 2) &lt; 1024:
-				return $this-&gt;precision($size / 1024 / 1024 / 1024, 2) . ' GB';
+				return sprintf(__('%.2f GB', true), $this-&gt;precision($size / 1024 / 1024 / 1024, 2));
 			default:
-				return $this-&gt;precision($size / 1024 / 1024 / 1024 / 1024, 2) . ' TB';
+				return sprintf(__('%.2f TB', true), $this-&gt;precision($size / 1024 / 1024 / 1024 / 1024, 2));
 		}
 	}
 /**
@@ -85,7 +81,7 @@ class NumberHelper extends AppHelper {
  *
  * @param float $number A floating point number
  * @param integer $options if int then places, if string then before, if (,.-) then use it
- * 							or array with places and before keys
+ *   or array with places and before keys
  * @return string formatted number
  * @static
  */
@@ -128,7 +124,7 @@ class NumberHelper extends AppHelper {
  *
  * @param float $number
  * @param string $currency Shortcut to default options. Valid values are 'USD', 'EUR', 'GBP', otherwise
- *               set at least 'before' and 'after' options.
+ *   set at least 'before' and 'after' options.
  * @param array $options
  * @return string Number formatted as a currency.
  */
@@ -172,6 +168,8 @@ class NumberHelper extends AppHelper {
 			$number = $number * $multiply;
 			$options['before'] = null;
 			$options['places'] = null;
+		} elseif (empty($options['before'])) {
+			$options['before'] = null;
 		} else {
 			$options['after'] = null;
 		}</diff>
      <filename>cake/libs/view/helpers/number.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: paginator.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: paginator.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Pagination Helper class file.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 1.2.0
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -47,20 +47,21 @@ class PaginatorHelper extends AppHelper {
  * Holds the default options for pagination links
  *
  * The values that may be specified are:
- * - &lt;i&gt;$options['format']&lt;/i&gt; Format of the counter. Supported formats are 'range' and 'pages'
- *                             and custom (default). In the default mode the supplied string is
- *                             parsed and constants are replaced by their actual values.
- *                             Constants: %page%, %pages%, %current%, %count%, %start%, %end% .
- * - &lt;i&gt;$options['separator']&lt;/i&gt; The separator of the actual page and number of pages (default: ' of ').
- * - &lt;i&gt;$options['url']&lt;/i&gt; Url of the action. See Router::url()
- * - &lt;i&gt;$options['url']['sort']&lt;/i&gt;  the key that the recordset is sorted.
- * - &lt;i&gt;$options['url']['direction']&lt;/i&gt; Direction of the sorting (default: 'asc').
- * - &lt;i&gt;$options['url']['page']&lt;/i&gt; Page # to display.
- * - &lt;i&gt;$options['model']&lt;/i&gt; The name of the model.
- * - &lt;i&gt;$options['escape']&lt;/i&gt; Defines if the title field for the link should be escaped (default: true).
- * - &lt;i&gt;$options['update']&lt;/i&gt; DOM id of the element updated with the results of the AJAX call.
+ *
+ *  - &lt;i&gt;$options['format']&lt;/i&gt; Format of the counter. Supported formats are 'range' and 'pages'
+ *   and custom (default). In the default mode the supplied string is parsed and constants are replaced
+ *   by their actual values.
+ *   Constants: %page%, %pages%, %current%, %count%, %start%, %end% .
+ *  - &lt;i&gt;$options['separator']&lt;/i&gt; The separator of the actual page and number of pages (default: ' of ').
+ *  - &lt;i&gt;$options['url']&lt;/i&gt; Url of the action. See Router::url()
+ *  - &lt;i&gt;$options['url']['sort']&lt;/i&gt;  the key that the recordset is sorted.
+ *  - &lt;i&gt;$options['url']['direction']&lt;/i&gt; Direction of the sorting (default: 'asc').
+ *  - &lt;i&gt;$options['url']['page']&lt;/i&gt; Page # to display.
+ *  - &lt;i&gt;$options['model']&lt;/i&gt; The name of the model.
+ *  - &lt;i&gt;$options['escape']&lt;/i&gt; Defines if the title field for the link should be escaped (default: true).
+ *  - &lt;i&gt;$options['update']&lt;/i&gt; DOM id of the element updated with the results of the AJAX call.
  *                             If this key isn't specified Paginator will use plain HTML links.
- * - &lt;i&gt;$options['indicator']&lt;/i&gt; DOM id of the element that will be shown when doing AJAX requests.
+ *  - &lt;i&gt;$options['indicator']&lt;/i&gt; DOM id of the element that will be shown when doing AJAX requests.
  *
  * @var array
  */
@@ -84,7 +85,7 @@ class PaginatorHelper extends AppHelper {
  * Sets default options for all pagination links
  *
  * @param  mixed $options Default options for pagination links. If a string is supplied - it
- *                        is used as the DOM id element to update. See #options for list of keys.
+ * is used as the DOM id element to update. See #options for list of keys.
  */
 	function options($options = array()) {
 		if (is_string($options)) {
@@ -129,7 +130,7 @@ class PaginatorHelper extends AppHelper {
  * @param  string $model Optional model name.  Uses the default if none is specified.
  * @param  mixed $options Options for pagination links. See #options for list of keys.
  * @return string The name of the key by which the recordset is being sorted, or
- *                null if the results are not currently sorted.
+ *  null if the results are not currently sorted.
  */
 	function sortKey($model = null, $options = array()) {
 		if (empty($options)) {
@@ -143,7 +144,7 @@ class PaginatorHelper extends AppHelper {
 			}
 			return $options['sort'];
 		} elseif (isset($options['order']) &amp;&amp; is_array($options['order'])) {
-			return preg_replace('/.*\./', '', key($options['order']));
+			return key($options['order']);
 		} elseif (isset($options['order']) &amp;&amp; is_string($options['order'])) {
 			if (preg_match('/(?:\w+\.)?(\w+)/', $options['order'], $result) &amp;&amp; isset($result[1])) {
 				return $result[1];
@@ -157,7 +158,7 @@ class PaginatorHelper extends AppHelper {
  * @param  string $model Optional model name.  Uses the default if none is specified.
  * @param  mixed $options Options for pagination links. See #options for list of keys.
  * @return string The direction by which the recordset is being sorted, or
- *                null if the results are not currently sorted.
+ *  null if the results are not currently sorted.
  */
 	function sortDir($model = null, $options = array()) {
 		$dir = null;
@@ -209,7 +210,7 @@ class PaginatorHelper extends AppHelper {
  * @param  string $key The name of the key that the recordset should be sorted.
  * @param  array $options Options for sorting link. See #options for list of keys.
  * @return string A link sorting default by 'asc'. If the resultset is sorted 'asc' by the specified
- *                key the returned link will sort by 'desc'.
+ *  key the returned link will sort by 'desc'.
  */
 	function sort($title, $key = null, $options = array()) {
 		$options = array_merge(array('url' =&gt; array(), 'model' =&gt; null), $options);
@@ -221,19 +222,15 @@ class PaginatorHelper extends AppHelper {
 			$title = __(Inflector::humanize(preg_replace('/_id$/', '', $title)), true);
 		}
 		$dir = 'asc';
-		$model = null;
 
-		if (strpos($key, '.') !== false) {
-			list($model, $key) = explode('.', $key);
-			$model = $model . '.';
-		}
 		if ($this-&gt;sortKey($options['model']) == $key &amp;&amp; $this-&gt;sortDir($options['model']) == 'asc') {
 			$dir = 'desc';
 		}
 		if (is_array($title) &amp;&amp; array_key_exists($dir, $title)) {
 			$title = $title[$dir];
 		}
-		$url = array_merge(array('sort' =&gt; $model . $key, 'direction' =&gt; $dir), $url, array('order' =&gt; null));
+
+		$url = array_merge(array('sort' =&gt; $key, 'direction' =&gt; $dir), $url, array('order' =&gt; null));
 		return $this-&gt;link($title, $url, $options);
 	}
 /**
@@ -260,7 +257,8 @@ class PaginatorHelper extends AppHelper {
 
 		$obj = isset($options['update']) ? 'Ajax' : 'Html';
 		$url = array_merge(array('page' =&gt; $this-&gt;current($model)), $url);
-		return $this-&gt;{$obj}-&gt;link($title, Set::filter($url, true), $options);
+		$url = array_merge(Set::filter($url, true), array_intersect_key($url, array('plugin'=&gt;true)));
+		return $this-&gt;{$obj}-&gt;link($title, $url, $options);
 	}
 /**
  * Merges passed URL options with current pagination state to generate a pagination URL.
@@ -278,12 +276,6 @@ class PaginatorHelper extends AppHelper {
 			$sort = $direction = null;
 			if (is_array($url['order'])) {
 				list($sort, $direction) = array($this-&gt;sortKey($model, $url), current($url['order']));
-				$key = array_keys($url['order']);
-
-				if (strpos($key[0], '.') !== false) {
-					list($model) = explode('.', $key[0]);
-					$sort = $model . '.' . $sort;
-				}
 			}
 			unset($url['order']);
 			$url = array_merge($url, compact('sort', 'direction'));
@@ -641,4 +633,4 @@ class PaginatorHelper extends AppHelper {
 		return $out;
 	}
 }
-?&gt;
\ No newline at end of file
+?&gt;</diff>
      <filename>cake/libs/view/helpers/paginator.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: time.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: time.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Time Helper class file.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 0.10.0.1076
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**
@@ -284,12 +284,13 @@ class TimeHelper extends AppHelper {
 /**
  * Returns either a relative date or a formatted date depending
  * on the difference between the current time and given datetime.
- * $datetime should be in a &lt;i&gt;strtotime&lt;/i&gt;-parsable format, like MySQL's datetime datatype.
+ * $datetime should be in a &lt;i&gt;strtotime&lt;/i&gt; - parsable format, like MySQL's datetime datatype.
  *
  * Options:
- *  'format' =&gt; a fall back format if the relative time is longer than the duration specified by end
- *  'end' =&gt;  The end of relative time telling
- *  'userOffset' =&gt; Users offset from GMT (in hours)
+ *
+ * - 'format' =&gt; a fall back format if the relative time is longer than the duration specified by end
+ * - 'end' =&gt; The end of relative time telling
+ * - 'userOffset' =&gt; Users offset from GMT (in hours)
  *
  * Relative dates look something like this:
  *	3 weeks, 4 days ago
@@ -464,7 +465,7 @@ class TimeHelper extends AppHelper {
  *
  * @param mixed $dateTime Datetime string (strtotime-compatible) or Unix timestamp
  * @param mixed $options Default format string, if timestamp is used in $dateTime, or an array of options to be passed
- *						 on to timeAgoInWords().
+ *   on to timeAgoInWords().
  * @return string Relative time string.
  * @see		TimeHelper::timeAgoInWords
  */</diff>
      <filename>cake/libs/view/helpers/time.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: xml.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: xml.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * XML Helper class file.
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.helpers
  * @since         CakePHP(tm) v 1.2
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 App::import('Core', array('Xml', 'Set'));
@@ -148,12 +148,16 @@ class XmlHelper extends AppHelper {
  * Serializes a model resultset into XML
  *
  * @param  mixed  $data The content to be converted to XML
- * @param  array  $options The data formatting options
+ * @param  array  $options The data formatting options.  For a list of valid options, see
+ *                         XmlNode::__construct().
  * @return string A copy of $data in XML format
+ * @see XmlNode
  */
 	function serialize($data, $options = array()) {
-		$data =&amp; new Xml($data, array_merge(array('attributes' =&gt; false, 'format' =&gt; 'attributes'), $options));
-		return $data-&gt;toString(array_merge(array('header' =&gt; false), $options));
+		$options += array('attributes' =&gt; false, 'format' =&gt; 'attributes');
+		$data =&amp; new Xml($data, $options);
+		return $data-&gt;toString($options + array('header' =&gt; false));
 	}
 }
+
 ?&gt;
\ No newline at end of file</diff>
      <filename>cake/libs/view/helpers/xml.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: media.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: media.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Methods to display or download any type of file
  *
@@ -17,9 +17,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view
  * @since         CakePHP(tm) v 1.2.0.5714
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 class MediaView extends View {
@@ -80,6 +80,13 @@ class MediaView extends View {
 								'silo' =&gt; 'model/mesh', 'vrml' =&gt; 'model/vrml', 'wrl' =&gt; 'model/vrml',
 								'mime' =&gt; 'www/mime', 'pdb' =&gt; 'chemical/x-pdb', 'xyz' =&gt; 'chemical/x-pdb');
 /**
+ * Holds headers sent to browser before rendering media
+ *
+ * @var array
+ * @access protected
+ */
+	var $_headers = array();
+/**
  * Constructor
  *
  * @param object $controller
@@ -106,6 +113,11 @@ class MediaView extends View {
 			$path = APP . $path . $id;
 		}
 
+		if (!file_exists($path)) {
+			header('Content-Type: text/html');
+			$this-&gt;cakeError('error404');
+		}
+
 		if (is_null($name)) {
 			$name = $id;
 		}
@@ -114,7 +126,7 @@ class MediaView extends View {
 			$this-&gt;mimeType = array_merge($this-&gt;mimeType, $mimeType);
 		}
 
-		if (file_exists($path) &amp;&amp; isset($extension) &amp;&amp; isset($this-&gt;mimeType[$extension]) &amp;&amp; connection_status() == 0) {
+		if (isset($extension) &amp;&amp; isset($this-&gt;mimeType[$extension]) &amp;&amp; connection_status() == 0) {
 			$chunkSize = 8192;
 			$buffer = '';
 			$fileSize = @filesize($path);
@@ -130,18 +142,27 @@ class MediaView extends View {
 			}
 
 			if ($download) {
-				$contentType = 'application/octet-stream';
+				$contentTypes = array('application/octet-stream');
 				$agent = env('HTTP_USER_AGENT');
 
-				if (preg_match('%Opera(/| )([0-9].[0-9]{1,2})%', $agent) || preg_match('/MSIE ([0-9].[0-9]{1,2})/', $agent)) {
-					$contentType = 'application/octetstream';
+				if (preg_match('%Opera(/| )([0-9].[0-9]{1,2})%', $agent)) {
+					$contentTypes[0] = 'application/octetstream';
+				} else if (preg_match('/MSIE ([0-9].[0-9]{1,2})/', $agent)) {
+					$contentTypes[0] = 'application/force-download';
+					array_push($contentTypes, array(
+						'application/octet-stream',
+						'application/download'
+					));
+				}
+				foreach($contentTypes as $contentType) {
+					$this-&gt;_header('Content-Type: ' . $contentType);
 				}
-				header('Content-Type: ' . $contentType);
-				header('Content-Disposition: attachment; filename=&quot;' . $name . '.' . $extension . '&quot;;');
-				header('Expires: 0');
-				header('Accept-Ranges: bytes');
-				header('Cache-Control: private', false);
-				header('Pragma: private');
+				$this-&gt;_header(array(
+					'Content-Disposition: attachment; filename=&quot;' . $name . '.' . $extension . '&quot;;',
+					'Expires: 0',
+					'Accept-Ranges: bytes',
+					'Cache-Control: private' =&gt; false,
+					'Pragma: private'));
 
 				$httpRange = env('HTTP_RANGE');
 				if (isset($httpRange)) {
@@ -150,30 +171,36 @@ class MediaView extends View {
 					$size = $fileSize - 1;
 					$length = $fileSize - $range;
 
-					header('HTTP/1.1 206 Partial Content');
-					header('Content-Length: ' . $length);
-					header('Content-Range: bytes ' . $range . $size . '/' . $fileSize);
+					$this-&gt;_header(array(
+						'HTTP/1.1 206 Partial Content',
+						'Content-Length: ' . $length,
+						'Content-Range: bytes ' . $range . $size . '/' . $fileSize));
+
 					fseek($handle, $range);
 				} else {
-					header('Content-Length: ' . $fileSize);
+					$this-&gt;_header('Content-Length: ' . $fileSize);
 				}
 			} else {
-				header('Date: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
+				$this-&gt;_header('Date: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
 				if ($cache) {
 					if (!is_numeric($cache)) {
 						$cache = strtotime($cache) - time();
 					}
-					header('Cache-Control: max-age=' . $cache);
-					header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache) . ' GMT');
-					header('Pragma: cache');
+					$this-&gt;_header(array(
+						'Cache-Control: max-age=' . $cache,
+						'Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache) . ' GMT',
+						'Pragma: cache'));
 				} else {
-					header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
-					header('Pragma: no-cache');
+					$this-&gt;_header(array(
+						'Cache-Control: must-revalidate, post-check=0, pre-check=0',
+						'Pragma: no-cache'));
 				}
-				header('Last-Modified: ' . $modified);
-				header('Content-Type: ' . $this-&gt;mimeType[$extension]);
-				header('Content-Length: ' . $fileSize);
+				$this-&gt;_header(array(
+					'Last-Modified: ' . $modified,
+					'Content-Type: ' . $this-&gt;mimeType[$extension],
+					'Content-Length: ' . $fileSize));
 			}
+			$this-&gt;_output();
 			@ob_end_clean();
 
 			while (!feof($handle) &amp;&amp; connection_status() == 0 &amp;&amp; !connection_aborted()) {
@@ -188,5 +215,35 @@ class MediaView extends View {
 		}
 		return false;
 	}
+/**
+ * Method to set headers
+ * @param mixed $header
+ * @param boolean $boolean
+ * @access protected
+ */
+	function _header($header, $boolean = true) {
+		if (is_array($header)) {
+			foreach ($header as $string =&gt; $boolean) {
+				if (is_numeric($string)) {
+					$this-&gt;_headers[] = array($boolean =&gt; true);
+				} else {
+					$this-&gt;_headers[] = array($string =&gt; $boolean);
+				}
+			}
+			return;
+		}
+		$this-&gt;_headers[] = array($header =&gt; $boolean);
+		return;
+	}
+/**
+ * Method to output headers
+ * @access protected
+ */
+	function _output() {
+		foreach ($this-&gt;_headers as $key =&gt; $value) {
+			$header = key($value);
+			header($header, $value[$header]);
+		}
+	}
 }
 ?&gt;
\ No newline at end of file</diff>
      <filename>cake/libs/view/media.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: home.ctp 7961 2008-12-25 23:21:36Z gwoo $ */
+/* SVN FILE: $Id: home.ctp 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  *
  * PHP versions 4 and 5
@@ -16,11 +16,14 @@
  * @package       cake
  * @subpackage    cake.cake.libs.view.templates.pages
  * @since         CakePHP(tm) v 0.10.0.1076
- * @version       $Revision: 7961 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-25 15:21:36 -0800 (Thu, 25 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
+if (Configure::read() == 0):
+	$this-&gt;cakeError('error404');
+endif;
 ?&gt;
 &lt;h2&gt;&lt;?php echo sprintf(__('Release Notes for CakePHP %s.', true), Configure::version()); ?&gt;&lt;/h2&gt;
 &lt;a href=&quot;https://trac.cakephp.org/wiki/changelog/1.2.x.x&quot;&gt;&lt;?php __('Read the changelog'); ?&gt; &lt;/a&gt;</diff>
      <filename>cake/libs/view/pages/home.ctp</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: xml.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: xml.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * XML handling for Cake.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.libs
  * @since         CakePHP v .0.10.3.1400
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 App::import('Core', 'Set');
@@ -188,7 +188,7 @@ class XmlNode extends Object {
 			return $object;
 		}
 		$name = null;
-		$options = array_merge(array('format' =&gt; 'attributes'), $options);
+		$options += array('format' =&gt; 'attributes');
 
 		if ($keyName !== null &amp;&amp; !is_numeric($keyName)) {
 			$name = $keyName;
@@ -769,8 +769,8 @@ class Xml extends XmlNode {
 	var $__header = null;
 
 /**
- * Default array keys/object properties to use as tag names when converting objects or array structures to XML.
- * Set by passing $options['tags'] to this object's constructor.
+ * Default array keys/object properties to use as tag names when converting objects or array
+ * structures to XML. Set by passing $options['tags'] to this object's constructor.
  *
  * @var array
  * @access private
@@ -797,8 +797,20 @@ class Xml extends XmlNode {
  * Constructor.  Sets up the XML parser with options, gives it this object as
  * its XML object, and sets some variables.
  *
- * @param string $input What should be used to set up
- * @param array $options Options to set up with
+ * @param mixed $input The content with which this XML document should be initialized.  Can be a
+ *                     string, array or object.  If a string is specified, it may be a literal XML
+ *                     document, or a URL or file path to read from.
+ * @param array $options Options to set up with, valid options are as follows:
+ *                      - 'root': The name of the root element, defaults to '#document'
+ *                      - 'version': The XML version, defaults to '1.0'
+ *                      - 'encoding': Document encoding, defaults to 'UTF-8'
+ *                      - 'namespaces': An array of namespaces (as strings) used in this document
+ *                      - 'format': Specifies the format this document converts to when parsed or
+ *                         rendered out as text, either 'attributes' or 'tags',
+ *                         defaults to 'attributes'
+ *                       - 'tags': An array specifying any tag-specific formatting options, indexed
+ *                         by tag name.  See XmlNode::normalize().
+ * @see XmlNode::normalize()
  */
 	function __construct($input = null, $options = array()) {
 		$defaults = array(
@@ -820,7 +832,6 @@ class Xml extends XmlNode {
 				$this-&gt;append($input, $options);
 			}
 		}
-
 		// if (Configure::read('App.encoding') !== null) {
 		// 	$this-&gt;encoding = Configure::read('App.encoding');
 		// }
@@ -863,7 +874,11 @@ class Xml extends XmlNode {
  */
 	function parse() {
 		$this-&gt;__initParser();
-		$this-&gt;__header = trim(str_replace(a('&lt;' . '?', '?' . '&gt;'), a('', ''), substr(trim($this-&gt;__rawData), 0, strpos($this-&gt;__rawData, &quot;\n&quot;))));
+		$this-&gt;__header = trim(str_replace(
+			a('&lt;' . '?', '?' . '&gt;'),
+			a('', ''),
+			substr(trim($this-&gt;__rawData), 0, strpos($this-&gt;__rawData, &quot;\n&quot;))
+		));
 
 		xml_parse_into_struct($this-&gt;__parser, $this-&gt;__rawData, $vals);
 		$xml =&amp; $this;
@@ -871,7 +886,8 @@ class Xml extends XmlNode {
 
 		for ($i = 0; $i &lt; $count; $i++) {
 			$data = $vals[$i];
-			$data = array_merge(array('tag' =&gt; null, 'value' =&gt; null, 'attributes' =&gt; array()), $data);
+			$data += array('tag' =&gt; null, 'value' =&gt; null, 'attributes' =&gt; array());
+
 			switch ($data['type']) {
 				case &quot;open&quot; :
 					$xml =&amp; $xml-&gt;createElement($data['tag'], $data['value'], $data['attributes']);
@@ -906,8 +922,8 @@ class Xml extends XmlNode {
 /**
  * Returns a string representation of the XML object
  *
- * @param mixed $options If boolean: whether to include the XML header with the document (defaults to true); if array:
- *						 overrides the default XML generation options
+ * @param mixed $options If boolean: whether to include the XML header with the document
+ *        (defaults to true); if an array, overrides the default XML generation options
  * @return string XML data
  * @access public
  * @deprecated</diff>
      <filename>cake/libs/xml.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: cake_test_case.php 8004 2009-01-16 20:15:21Z gwoo $ */
+/* SVN FILE: $Id: cake_test_case.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.tests.libs
  * @since         CakePHP(tm) v 1.2.0.4667
- * @version       $Revision: 8004 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2009-01-16 12:15:21 -0800 (Fri, 16 Jan 2009) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
  */
 if (!class_exists('dispatcher')) {
@@ -223,7 +223,7 @@ class CakeTestCase extends UnitTestCase {
  * * @param array $params	Additional parameters as sent by testAction().
  */
 	function endController(&amp;$controller, $params = array()) {
-		if (isset($this-&gt;db) &amp;&amp; isset($this-&gt;_actionFixtures) &amp;&amp; !empty($this-&gt;_actionFixtures)) {
+		if (isset($this-&gt;db) &amp;&amp; isset($this-&gt;_actionFixtures) &amp;&amp; !empty($this-&gt;_actionFixtures) &amp;&amp; $this-&gt;dropTables) {
 			foreach ($this-&gt;_actionFixtures as $fixture) {
 				$fixture-&gt;drop($this-&gt;db);
 			}
@@ -232,13 +232,20 @@ class CakeTestCase extends UnitTestCase {
 /**
  * Executes a Cake URL, and can get (depending on the $params['return'] value):
  *
- * 1. 'result': Whatever the action returns (and also specifies $this-&gt;params['requested'] for controller)
- * 2. 'view': The rendered view, without the layout
- * 3. 'contents': The rendered view, within the layout.
- * 4. 'vars': the view vars
- *
- * @param string $url	Cake URL to execute (e.g: /articles/view/455)
- * @param array $params	Parameters, or simply a string of what to return
+ * Params:
+ * - 'return' has several possible values:
+ *   1. 'result': Whatever the action returns (and also specifies $this-&gt;params['requested'] for controller)
+ *   2. 'view': The rendered view, without the layout
+ *   3. 'contents': The rendered view, within the layout.
+ *   4. 'vars': the view vars
+ * 
+ * - 'fixturize' - Set to true if you want to copy model data from 'connection' to the test_suite connection
+ * - 'data' - The data you want to insert into $this-&gt;data in the controller.
+ * - 'connection' - Which connection to use in conjunction with fixturize (defaults to 'default')
+ * - 'method' - What type of HTTP method to simulate (defaults to post)
+ * 
+ * @param string $url Cake URL to execute (e.g: /articles/view/455)
+ * @param mixed $params Parameters (see above), or simply a string of what to return
  * @return mixed Whatever is returned depending of requested result
  * @access public
  */
@@ -254,7 +261,6 @@ class CakeTestCase extends UnitTestCase {
 		if (is_string($params)) {
 			$params = array('return' =&gt; $params);
 		}
-
 		$params = array_merge($default, $params);
 
 		$toSave = array(
@@ -408,7 +414,9 @@ class CakeTestCase extends UnitTestCase {
  * @access public
  */
 	function after($method) {
-		if (isset($this-&gt;_fixtures) &amp;&amp; isset($this-&gt;db) &amp;&amp; !in_array(strtolower($method), array('start', 'end'))) {
+		$isTestMethod = !in_array(strtolower($method), array('start', 'end'));
+
+		if (isset($this-&gt;_fixtures) &amp;&amp; isset($this-&gt;db) &amp;&amp; $isTestMethod) {
 			foreach ($this-&gt;_fixtures as $fixture) {
 				$fixture-&gt;truncate($this-&gt;db);
 			}
@@ -433,14 +441,17 @@ class CakeTestCase extends UnitTestCase {
  * @access public
  */
 	function getTests() {
-		$methods = array_diff(parent::getTests(), array('testAction', 'testaction'));
-		$methods = array_merge(array_merge(array('start', 'startCase'), $methods), array('endCase', 'end'));
-		return $methods;
+		return array_merge(
+			array('start', 'startCase'),
+			array_diff(parent::getTests(), array('testAction', 'testaction')),
+			array('endCase', 'end')
+		);
 	}
 /**
  * Chooses which fixtures to load for a given test
  *
- * @param string $fixture Each parameter is a model name that corresponds to a fixture, i.e. 'Post', 'Author', etc.
+ * @param string $fixture Each parameter is a model name that corresponds to a
+ *                        fixture, i.e. 'Post', 'Author', etc.
  * @access public
  * @see CakeTestCase::$autoFixtures
  */
@@ -453,14 +464,16 @@ class CakeTestCase extends UnitTestCase {
 				$fixture-&gt;truncate($this-&gt;db);
 				$fixture-&gt;insert($this-&gt;db);
 			} else {
-				trigger_error(&quot;Non-existent fixture class {$class} referenced in test&quot;, E_USER_WARNING);
+				trigger_error(&quot;Referenced fixture class {$class} not found&quot;, E_USER_WARNING);
 			}
 		}
 	}
 /**
- * Takes an array $expected and generates a regex from it to match the provided $string. Samples for $expected:
+ * Takes an array $expected and generates a regex from it to match the provided $string.
+ * Samples for $expected:
  *
- * Checks for an input tag with a name attribute (contains any non-empty value) and an id attribute that contains 'my-input':
+ * Checks for an input tag with a name attribute (contains any non-empty value) and an id
+ * attribute that contains 'my-input':
  * 	array('input' =&gt; array('name', 'id' =&gt; 'my-input'))
  *
  * Checks for two p elements with some text in them:
@@ -473,15 +486,15 @@ class CakeTestCase extends UnitTestCase {
  * 		'/p'
  *	)
  *
- * You can also specify a pattern expression as part of the attribute values, or the tag being defined,
- * if you prepend the value with preg: and enclose it with slashes, like so:
+ * You can also specify a pattern expression as part of the attribute values, or the tag
+ * being defined, if you prepend the value with preg: and enclose it with slashes, like so:
  *	array(
  *  	array('input' =&gt; array('name', 'id' =&gt; 'preg:/FieldName\d+/')),
  *  	'preg:/My\s+field/'
  *	)
  *
- * Important: This function is very forgiving about whitespace and also accepts any permutation of attribute order.
- * It will also allow whitespaces between specified tags.
+ * Important: This function is very forgiving about whitespace and also accepts any
+ * permutation of attribute order. It will also allow whitespaces between specified tags.
  *
  * @param string $string An HTML/XHTML/XML string
  * @param array $expected An array, see above
@@ -504,8 +517,11 @@ class CakeTestCase extends UnitTestCase {
 			if (is_string($tags) &amp;&amp; $tags{0} == '&lt;') {
 				$tags = array(substr($tags, 1) =&gt; array());
 			} elseif (is_string($tags)) {
-				if (preg_match('/^\*?\//', $tags, $match)) {
+				$tagsTrimmed = preg_replace('/\s+/m', '', $tags);
+
+				if (preg_match('/^\*?\//', $tags, $match) &amp;&amp; $tagsTrimmed !== '//') {
 					$prefix = array(null, null);
+
 					if ($match[0] == '*/') {
 						$prefix = array('Anything, ', '.*?');
 					}
@@ -552,7 +568,7 @@ class CakeTestCase extends UnitTestCase {
 							$attr = $val;
 							$val = '.+?';
 							$explanations[] = sprintf('Attribute &quot;%s&quot; present', $attr);
-						} else if (!empty($val) &amp;&amp; preg_match('/^preg\:\/(.+)\/$/i', $val, $matches)) {
+						} elseif (!empty($val) &amp;&amp; preg_match('/^preg\:\/(.+)\/$/i', $val, $matches)) {
 							$quotes = '&quot;?';
 							$val = $matches[1];
 							$explanations[] = sprintf('Attribute &quot;%s&quot; matches &quot;%s&quot;', $attr, $val);</diff>
      <filename>cake/tests/lib/cake_test_case.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;?php
-/* SVN FILE: $Id: test_manager.php 7945 2008-12-19 02:16:01Z gwoo $ */
+/* SVN FILE: $Id: test_manager.php 8120 2009-03-19 20:25:10Z gwoo $ */
 /**
  * Short description for file.
  *
@@ -19,9 +19,9 @@
  * @package       cake
  * @subpackage    cake.cake.tests.lib
  * @since         CakePHP(tm) v 1.2.0.4433
- * @version       $Revision: 7945 $
+ * @version       $Revision: 8120 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2009-03-19 13:25:10 -0700 (Thu, 19 Mar 2009) $
  * @license       http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
  */
 define('CORE_TEST_CASES', TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'cases');
@@ -277,6 +277,8 @@ class TestManager {
 		}
 
 		$files = glob($directory . DS . '*');
+		$files = $files ? $files : array();
+
 		foreach ($files as $file) {
 			if (is_dir($file)) {
 				$fileList = array_merge($fileList, $this-&gt;_getRecursiveFileList($file, $fileTestFunction));</diff>
      <filename>cake/tests/lib/test_manager.php</filename>
    </modified>
    <modified>
      <diff>@@ -22,7 +22,7 @@
  * @since         CakePHP(tm) v 0.2.9
  * @version       $Revision: 7945 $
  * @modifiedby    $LastChangedBy: gwoo $
- * @lastmodified  $Date: 2008-12-18 20:16:01 -0600 (Thu, 18 Dec 2008) $
+ * @lastmodified  $Date: 2008-12-18 18:16:01 -0800 (Thu, 18 Dec 2008) $
  * @license       http://www.opensource.org/licenses/mit-license.php The MIT License
  */
 /**</diff>
      <filename>index.php</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>5d082deafc5ddff167cb8bbbdf90134f836f5935</id>
    </parent>
  </parents>
  <author>
    <name>klevo</name>
    <email>klevo@klevo.sk</email>
  </author>
  <url>http://github.com/SteveHatherley/wildflower/commit/5b613f274a2e6e8f01eab6416f3fbcf1f073f68d</url>
  <id>5b613f274a2e6e8f01eab6416f3fbcf1f073f68d</id>
  <committed-date>2009-04-18T10:39:41-07:00</committed-date>
  <authored-date>2009-04-18T10:39:41-07:00</authored-date>
  <message>Updated Cake to 1.2.2.8120 Stable</message>
  <tree>17d8056b1c0724401eef4755561bbeda6b23b3ce</tree>
  <committer>
    <name>klevo</name>
    <email>klevo@klevo.sk</email>
  </committer>
</commit>
