<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,9 @@
 v0.7
 
+- Added yaws_arg:add_to_opaque/2, yaws_arg:add_all_to_opaque/2, and
+yaws_arg:get_opaque_val/2 to simplify accessing the 'opaque' field of the
+Yaws arg record.
+
 - Added support for multiple databases. More information is in the
 documentation. (yariv)
 </diff>
      <filename>CHANGELOG.txt</filename>
    </modified>
    <modified>
      <diff>@@ -99,7 +99,7 @@ many-to-many relations.)&lt;/p&gt;
 &lt;h2&gt;&lt;a name=&quot;types&quot;&gt;Data Types&lt;/a&gt;&lt;/h2&gt;
 
 &lt;h3&gt;&lt;a name=&quot;type-driver&quot;&gt;driver()&lt;/a&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;tt&gt;driver() = {Driver, Options::&lt;a href=&quot;#type-proplist&quot;&gt;proplist()&lt;/a&gt;} | {Driver, Options::&lt;a href=&quot;#type-proplist&quot;&gt;proplist()&lt;/a&gt;, [&lt;a href=&quot;#type-pool&quot;&gt;pool()&lt;/a&gt;]}&lt;/tt&gt;&lt;/p&gt;
+&lt;p&gt;&lt;tt&gt;driver() = atom() | {Driver::atom(), DriverOptions::&lt;a href=&quot;#type-proplist&quot;&gt;proplist()&lt;/a&gt;} | {Driver::atom(), DriverOptions::&lt;a href=&quot;#type-proplist&quot;&gt;proplist()&lt;/a&gt;, [&lt;a href=&quot;#type-pool&quot;&gt;pool()&lt;/a&gt;]}&lt;/tt&gt;&lt;/p&gt;
 
 
 &lt;h3&gt;&lt;a name=&quot;type-pool&quot;&gt;pool()&lt;/a&gt;&lt;/h3&gt;
@@ -107,8 +107,11 @@ many-to-many relations.)&lt;/p&gt;
 
 
 &lt;h2&gt;&lt;a name=&quot;index&quot;&gt;Function Index&lt;/a&gt;&lt;/h2&gt;
-&lt;table width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#code_gen-2&quot;&gt;code_gen/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generate code for the list of modules using the provided drivers.&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#code_gen-3&quot;&gt;code_gen/3&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
+&lt;table width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#code_gen-2&quot;&gt;code_gen/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Equivalent to &lt;a href=&quot;#code_gen-3&quot;&gt;&lt;tt&gt;code_gen(Modules, Drivers, [])&lt;/tt&gt;&lt;/a&gt;.
+&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#code_gen-3&quot;&gt;code_gen/3&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Equivalent to &lt;a href=&quot;#code_gen-4&quot;&gt;&lt;tt&gt;code_gen(Modules, Drivers, Options, [])&lt;/tt&gt;&lt;/a&gt;.
+&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#code_gen-4&quot;&gt;code_gen/4&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generate code for the list of modules using the provided drivers.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#start-1&quot;&gt;start/1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Start an ErlyDB session for the driver using the driver's default
   options.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#start-2&quot;&gt;start/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Start an ErlyDB sessions for the driver using the list of
@@ -118,94 +121,132 @@ many-to-many relations.)&lt;/p&gt;
 &lt;h2&gt;&lt;a name=&quot;functions&quot;&gt;Function Details&lt;/a&gt;&lt;/h2&gt;
 
 &lt;h3&gt;&lt;a name=&quot;code_gen-2&quot;&gt;code_gen/2&lt;/a&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;tt&gt;code_gen(Modules::[Module::atom() | string()], Options::[&lt;a href=&quot;#type-driver&quot;&gt;driver()&lt;/a&gt;]) -&amp;gt; ok | {error, Err}&lt;/tt&gt;&lt;/p&gt;
+&lt;tt&gt;code_gen(Modules, Drivers) -&amp;gt; term()
+&lt;/tt&gt;&lt;p&gt;Equivalent to &lt;a href=&quot;#code_gen-3&quot;&gt;&lt;tt&gt;code_gen(Modules, Drivers, [])&lt;/tt&gt;&lt;/a&gt;.&lt;/p&gt;
+
+
+&lt;h3&gt;&lt;a name=&quot;code_gen-3&quot;&gt;code_gen/3&lt;/a&gt;&lt;/h3&gt;
+&lt;tt&gt;code_gen(Modules, Drivers, Options) -&amp;gt; term()
+&lt;/tt&gt;&lt;p&gt;Equivalent to &lt;a href=&quot;#code_gen-4&quot;&gt;&lt;tt&gt;code_gen(Modules, Drivers, Options, [])&lt;/tt&gt;&lt;/a&gt;.&lt;/p&gt;
+
+
+&lt;h3&gt;&lt;a name=&quot;code_gen-4&quot;&gt;code_gen/4&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;code_gen(Modules::[Module::atom() | string()], Driver::[&lt;a href=&quot;#type-driver&quot;&gt;driver()&lt;/a&gt;] | &lt;a href=&quot;#type-driver&quot;&gt;driver()&lt;/a&gt;, Options::[term()], IncludePaths::[IncludePath::string()]) -&amp;gt; ok | {error, Err}&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;&lt;p&gt;Generate code for the list of modules using the provided drivers.&lt;/p&gt;
  
+  &lt;p&gt;If you're using ErlyWeb, you shouldn't need to call this function directly.
+  Instead, refer to &lt;a href=&quot;erlyweb.html#compile-2&quot;&gt;&lt;code&gt;erlyweb:compile/2&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
+ 
+  &lt;h4&gt;&lt;a name=&quot;Usage&quot;&gt;Usage&lt;/a&gt;&lt;/h4&gt;
+ 
   &lt;p&gt;In ErlyWeb 0.7, the signature for this function has changed.  
 ErlyDB used to support only a single driver with a single connection  
 pool in a session. As of ErlyWeb 0.7, ErlyDB supports multiple  
 drivers in a session, and multiple connection pools for each  
 driver.&lt;/p&gt;
  
-  &lt;p&gt;The 'Modules' parameter is a list of files or modules for which to  
+  &lt;h5&gt;&lt;a name=&quot;Modules&quot;&gt;Modules&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;  
+The 'Modules' parameter is a list of files or modules for which to  
 generate ErlyDB code. If a list item is an atom, ErlyDB assumes it's  
-a module that has been loaded into the VM or that resides in the  
+a module that has been loaded into the VM or that resides in the VM's  
 code path. In either case, the module's source code should be discoverable  
-either through path conventions or because it includes debug_info.  
-If a list item is a string, ErlyDB treats it as a file name (relative  
+either through Erlang's path conventions or because the module  
+was compiled with debug_info.&lt;/p&gt;
+ 
+  &lt;p&gt;If a list item is a string, ErlyDB treats it as a file name (relative  
 or absolute) and attempts to read it from disk.&lt;/p&gt;
  
-  &lt;p&gt;The 'Driver's parameter is a list of Driver::atom(),  
-{Driver::atom(), Options::proplist()} or  
-{Driver::atom(), Options::proplist(), Pools::pool()} tuples.  
-The first tuple in the Drivers list is  
+  &lt;h5&gt;&lt;a name=&quot;Drivers&quot;&gt;Drivers&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;
+  The 'Drivers' parameter is either a single element or a list of
+  elements of the form
+  &lt;code&gt;Driver::atom()&lt;/code&gt;,
+  &lt;code&gt;{Driver::atom(), DriverOptions::proplist()}&lt;/code&gt;, or
+  &lt;code&gt;{Driver::atom(), DriverOptions::proplist(), Pools::pool()}&lt;/code&gt;.&lt;/p&gt;
+ 
+  &lt;p&gt;The first element in the Drivers list is  
 the default driver that ErlyDB will use for all modules that don't  
 override the driver option.&lt;/p&gt;
  
-  &lt;p&gt;Driver can be 'mysql', 'psql' or 'mnesia'. Options is a list of  
+  &lt;p&gt;'Driver' can be &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;psql&lt;/code&gt; or &lt;code&gt;mnesia&lt;/code&gt;. 'Options' is a list of  
 driver-specific options. For a list of available options, refer to  
 the driver's documentation.&lt;/p&gt;
  
-  &lt;p&gt;Pools is a list of available connection pools for the driver.  
-Note that the driver must be started and the pools must be connected  
-before code_gen/2 is called. Each item in Pools is an atom indicating  
-the pool id, or a tuple of the form {default, PoolId}, indicating  
-that this pool will be used as the default pool for the driver.  
-If you don't provide a {default, PoolId} pool option, ErlyDB will use  
-the built-in default pool id.&lt;/p&gt;
+  &lt;p&gt;'DriverOptions' is a property list that contains driver-specific options  
+(e.g. '{allow_unsafe_statements, Bool}').  
+For more information refer to the driver's documentation.&lt;/p&gt;
+ 
+  &lt;p&gt;'Pools' is a list of available connection pools for the driver.
+  Note that the driver must be started and the pools must be connected
+  before code_gen/2 is called. Each item in 'Pools' is an atom indicating
+  the pool id, or a tuple of the form &lt;code&gt;{PoolId, default}&lt;/code&gt;, which indicates
+  that this pool will be used as the default pool for the driver.
+  If you don't provide a &lt;code&gt;{PoolId, default}&lt;/code&gt; pool option, ErlyDB will use  
+the driver-defined default pool id if it exists (you can obtain it by  
+calling Mod:get_default_pool_id(), where 'Mod' is the driver's  
+module, e.g. 'erlydb_mysql').&lt;/p&gt;
+ 
+  &lt;h5&gt;&lt;a name=&quot;Options&quot;&gt;Options&lt;/a&gt;&lt;/h5&gt;
  
-  &lt;p&gt;Below are some examples:&lt;/p&gt;
+  &lt;p&gt;'Options' is a list of options that are used for all modules. This may  
+include global driver options as well as options that are passed to  
+compile:file/2. For more information, refer to this function's documentation  
+in the OTP documentation.&lt;/p&gt;
+ 
+  &lt;h5&gt;&lt;a name=&quot;IncludePaths&quot;&gt;IncludePaths&lt;/a&gt;&lt;/h5&gt;
+ 
+  &lt;p&gt;Additional include paths that will be used to search for header files  
+when compiling the modules.&lt;/p&gt;
+ 
+  &lt;h4&gt;&lt;a name=&quot;Examples&quot;&gt;Examples&lt;/a&gt;&lt;/h4&gt;
  
   &lt;p&gt;Generate code for &quot;musician.erl&quot; using the MySQL driver. Only the default  
 pool is enabled.&lt;/p&gt;
  
-  &lt;pre&gt;  code_gen([&quot;musician.erl&quot;], [mysql]).&lt;/pre&gt;
+  &lt;pre&gt;  code_gen([&quot;musician.erl&quot;], mysql).&lt;/pre&gt;
  
-  &lt;p&gt;To use the previous settings but allow unsafe SQL statements, use  
-the following:&lt;/p&gt;
+  &lt;p&gt;Use the previous settings but allow unsafe SQL statements, and compile  
+with debug_info:&lt;/p&gt;
  
-  &lt;pre&gt;  code_gen([&quot;musician.erl&quot;], [{mysql, [{allow_unsafe_statements, true}]}]).&lt;/pre&gt;
+  &lt;pre&gt;  code_gen([&quot;musician.erl&quot;],
+    {mysql, [{allow_unsafe_statements, true}]},
+    [debug_info]).&lt;/pre&gt;
  
-  &lt;p&gt;Generate code for the modules using the MySQL driver with two additional  
-pools, 'pool1' and 'pool2'. The default pool is not overridden.&lt;/p&gt;
+  &lt;p&gt;Generate code for the modules using the MySQL driver with two additional
+  pools, 'pool1' and 'pool2'. The default pool is remains &lt;code&gt;erlydb_mysql&lt;/code&gt;:&lt;/p&gt;
  
   &lt;pre&gt;  code_gen([&quot;musician.erl&quot;, &quot;instrument.erl&quot;],
-    [{mysql, [], [pool1, pool2]}]).&lt;/pre&gt;
+    {mysql, [], [pool1, pool2]}).&lt;/pre&gt;
  
+  &lt;p&gt;Similar to the previous setting, but allow unsafe statement and use
+  &lt;code&gt;pool2&lt;/code&gt; as the default pool name:&lt;/p&gt;
  
+  &lt;pre&gt;  code_gen([&quot;src/musician.erl&quot;, &quot;src/instrument.erl&quot;],
+    {mysql, [{allow_unsafe_statements, true}],
+      [{pool1, {pool2, default}}]})&lt;/pre&gt;
  
-  &lt;p&gt;tells ErlyDB to use the 'mysql' driver with the default  
-code_gen([&quot;src/musician.erl&quot;, &quot;src/instrument.erl&quot;],    
-[{mysql, [{allow_unsafe_statements, true}],      
-[{pool1, {default, pool2}}]}])  
-'''&lt;/p&gt;
- 
-  &lt;p&gt;To specify which connection pool ErlyDB should for a specific module, add  
-the following line to the module's source code:&lt;/p&gt;
+  &lt;p&gt;Generate code for the modules using both the MySQL and Postgres driver.  
+The MySQL driver has 2 pools enabled: mysql_pool1 and mysql_pool2, which is  
+the default. The Postgres driver has a single default pool, pg_pool1.  
+The MySQL driver allows unsafe statements:&lt;/p&gt;
  
-  &lt;pre&gt;  -erlydb_options(pool_id, PoolId).&lt;/pre&gt;
+  &lt;pre&gt;  code_gen([&quot;src/musician.erl&quot;, &quot;src/instrument.erl&quot;, &quot;src/song.erl&quot;],
+    [{mysql, [{allow_unsafe_statements, true}],
+      [{mysql_pool1, {mysql_pool2, default}}]},
+     {psql, [], [{pg_pool1, default}]}])&lt;/pre&gt;
  
-  &lt;p&gt;This tells ErlyDB to use the default driver, but a non-default pool id.  
-If you want the module to use a non-default driver, use the attribute&lt;/p&gt;
+  &lt;h4&gt;&lt;a name=&quot;Module-Specific_Settings&quot;&gt;Module-Specific Settings&lt;/a&gt;&lt;/h4&gt;
  
-  &lt;p&gt;'''  
--erlydb_options(driver, Driver).  
-'''  
-or&lt;/p&gt;
+  &lt;p&gt;To specify which connection pool ErlyDB should for a specific module, add  
+the following line to the module's source code:&lt;/p&gt;
  
-  &lt;p&gt;'''  
--erlydb_options(driver, {Driver, PoolId}).  
-'''&lt;/p&gt;
+  &lt;pre&gt;  -erlydb_options([{driver, Driver}, {pool_id, PoolId}]).&lt;/pre&gt;
  
-  The first option tells ErlyDB to use a non-default driver with the
-  default pool id for the driver. The second option tells ErlyDB
-  to use a non-default driver, and a non-default pool id for the driver.
+  The 'driver' option tells ErlyDB to use a non-default driver for the
+  module. The 'pool_id' option tells ErlyDB to use a non-default pool id
+  for the module. Neither option is required -- you can specify only
+  a 'driver' option or only a 'pool_id' option.
  &lt;/p&gt;
 
-&lt;h3&gt;&lt;a name=&quot;code_gen-3&quot;&gt;code_gen/3&lt;/a&gt;&lt;/h3&gt;
-&lt;tt&gt;code_gen(Modules, Options, IncludePaths) -&amp;gt; term()
-&lt;/tt&gt;
-
 &lt;h3&gt;&lt;a name=&quot;start-1&quot;&gt;start/1&lt;/a&gt;&lt;/h3&gt;
 &lt;p&gt;&lt;tt&gt;start(Driver::atom()) -&amp;gt; ok | {error, Err}&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;Start an ErlyDB session for the driver using the driver's default</diff>
      <filename>doc/erlydb.html</filename>
    </modified>
    <modified>
      <diff>@@ -84,7 +84,7 @@ that defines the conditions in a {where, Conditions} clause.&lt;/p&gt;
   fields.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#aggregate_related_many_to_many-7&quot;&gt;aggregate_related_many_to_many/7&lt;/a&gt;&lt;/td&gt;&lt;td&gt;This function works as &lt;a href=&quot;#aggregate_related_many_to_one-5&quot;&gt;&lt;code&gt;aggregate_related_many_to_one/5&lt;/code&gt;&lt;/a&gt;, but
   for modules defining many-to-many relations.&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#aggregate_related_many_to_one-6&quot;&gt;aggregate_related_many_to_one/6&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Get aggregate statistics about fields from related records in  
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#aggregate_related_many_to_one-7&quot;&gt;aggregate_related_many_to_one/7&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Get aggregate statistics about fields from related records in  
 one-to-many relations.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#before_delete-1&quot;&gt;before_delete/1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A hook that gets called before a record is deleted.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#before_save-1&quot;&gt;before_save/1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A hook that gets called before a record is saved.&lt;/td&gt;&lt;/tr&gt;
@@ -126,8 +126,8 @@ to the Where and Extras expressions.&lt;/td&gt;&lt;/tr&gt;
 according to the Where and Extras expressions.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#find_related_many_to_many-5&quot;&gt;find_related_many_to_many/5&lt;/a&gt;&lt;/td&gt;&lt;td&gt;This function works as &lt;a href=&quot;#find_related_many_to_one-4&quot;&gt;&lt;code&gt;find_related_many_to_one/4&lt;/code&gt;&lt;/a&gt;, but
   for modules defining many-to-many relations.&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#find_related_many_to_one-4&quot;&gt;find_related_many_to_one/4&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Find the set of related records in a one-to-many relation.&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#find_related_one_to_many-2&quot;&gt;find_related_one_to_many/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Find the related record for a record from a module having a  
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#find_related_many_to_one-5&quot;&gt;find_related_many_to_one/5&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Find the set of related records in a one-to-many relation.&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#find_related_one_to_many-3&quot;&gt;find_related_one_to_many/3&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Find the related record for a record from a module having a  
 many-to-one relation.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#get-2&quot;&gt;get/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A generic getter function ErlyDB uses to generate getters, e.g.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#get_module-1&quot;&gt;get_module/1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Get the name of the module to which the record belongs.&lt;/td&gt;&lt;/tr&gt;
@@ -159,7 +159,7 @@ property list, e.g.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#set_fields_from_strs-3&quot;&gt;set_fields_from_strs/3&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Equivalent to &lt;a href=&quot;#set_fields-4&quot;&gt;&lt;tt&gt;set_fields(Module, Record, Fields,
 	   fun field_from_string/2)&lt;/tt&gt;&lt;/a&gt;.
 &lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#set_related_one_to_many-2&quot;&gt;set_related_one_to_many/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Set the foreign key fields of a record from a module having a  
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#set_related_one_to_many-3&quot;&gt;set_related_one_to_many/3&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Set the foreign key fields of a record from a module having a  
 many-to-one relation to the primary key values of the Other record.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#table-0&quot;&gt;table/0&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Return the name of the table that holds the records for this module.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#to_iolist-2&quot;&gt;to_iolist/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Equivalent to &lt;a href=&quot;#to_iolist-3&quot;&gt;&lt;tt&gt;to_iolist(Module, Recs, fun field_to_iolist/2)&lt;/tt&gt;&lt;/a&gt;.
@@ -255,8 +255,8 @@ would generate the following functions:&lt;/p&gt;
  &lt;/p&gt;
 &lt;p&gt;&lt;b&gt;See also:&lt;/b&gt; &lt;a href=&quot;#aggregate_related_many_to_one-5&quot;&gt;aggregate_related_many_to_one/5&lt;/a&gt;.&lt;/p&gt;
 
-&lt;h3&gt;&lt;a name=&quot;aggregate_related_many_to_one-6&quot;&gt;aggregate_related_many_to_one/6&lt;/a&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;tt&gt;aggregate_related_many_to_one(OtherModule::atom(), AggFunc::atom(), Rec::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;, Field::atom(), Where::&lt;a href=&quot;#type-where_expr&quot;&gt;where_expr()&lt;/a&gt;, Extras::&lt;a href=&quot;#type-extras_expr&quot;&gt;extras_expr()&lt;/a&gt;) -&amp;gt; float() | integer() | &lt;a href=&quot;#type-exit&quot;&gt;exit(Err)&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
+&lt;h3&gt;&lt;a name=&quot;aggregate_related_many_to_one-7&quot;&gt;aggregate_related_many_to_one/7&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;aggregate_related_many_to_one(OtherModule::atom(), PkFks::term(), AggFunc::atom(), Rec::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;, Field::atom(), Where::&lt;a href=&quot;#type-where_expr&quot;&gt;where_expr()&lt;/a&gt;, Extras::&lt;a href=&quot;#type-extras_expr&quot;&gt;extras_expr()&lt;/a&gt;) -&amp;gt; float() | integer() | &lt;a href=&quot;#type-exit&quot;&gt;exit(Err)&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;&lt;p&gt;Get aggregate statistics about fields from related records in  
 one-to-many relations.&lt;/p&gt;
  
@@ -583,8 +583,8 @@ according to the Where and Extras expressions.&lt;/p&gt;
  &lt;/p&gt;
 &lt;p&gt;&lt;b&gt;See also:&lt;/b&gt; &lt;a href=&quot;#find_related_many_to_one-4&quot;&gt;find_related_many_to_one/4&lt;/a&gt;.&lt;/p&gt;
 
-&lt;h3&gt;&lt;a name=&quot;find_related_many_to_one-4&quot;&gt;find_related_many_to_one/4&lt;/a&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;tt&gt;find_related_many_to_one(OtherModule::atom(), Rec::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;, Where::&lt;a href=&quot;#type-where_expr&quot;&gt;where_expr()&lt;/a&gt;, Extras::&lt;a href=&quot;#type-extras_expr&quot;&gt;extras_expr()&lt;/a&gt;) -&amp;gt; [&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;] | &lt;a href=&quot;#type-exit&quot;&gt;exit(Err)&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
+&lt;h3&gt;&lt;a name=&quot;find_related_many_to_one-5&quot;&gt;find_related_many_to_one/5&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;find_related_many_to_one(OtherModule::atom(), PkFks::term(), Rec::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;, Where::&lt;a href=&quot;#type-where_expr&quot;&gt;where_expr()&lt;/a&gt;, Extras::&lt;a href=&quot;#type-extras_expr&quot;&gt;extras_expr()&lt;/a&gt;) -&amp;gt; [&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;] | &lt;a href=&quot;#type-exit&quot;&gt;exit(Err)&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;&lt;p&gt;Find the set of related records in a one-to-many relation.&lt;/p&gt;
  
   &lt;p&gt;This function isn't meant to be used directly; ErlyDB uses this function  
@@ -617,8 +617,8 @@ functions to the 'dog' module:&lt;/p&gt;
  &lt;/p&gt;
 &lt;p&gt;&lt;b&gt;See also:&lt;/b&gt; &lt;a href=&quot;#find-3&quot;&gt;find/3&lt;/a&gt;, &lt;a href=&quot;#find_first-3&quot;&gt;find_first/3&lt;/a&gt;, &lt;a href=&quot;#find_max-4&quot;&gt;find_max/4&lt;/a&gt;, &lt;a href=&quot;#find_range-5&quot;&gt;find_range/5&lt;/a&gt;.&lt;/p&gt;
 
-&lt;h3&gt;&lt;a name=&quot;find_related_one_to_many-2&quot;&gt;find_related_one_to_many/2&lt;/a&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;tt&gt;find_related_one_to_many(OtherModule::atom(), Rec::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;) -&amp;gt; &lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt; | &lt;a href=&quot;#type-exit&quot;&gt;exit(Err)&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
+&lt;h3&gt;&lt;a name=&quot;find_related_one_to_many-3&quot;&gt;find_related_one_to_many/3&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;find_related_one_to_many(OtherModule::atom(), PkFkfields::&lt;a href=&quot;#type-proplist&quot;&gt;proplist()&lt;/a&gt;, Rec::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;) -&amp;gt; &lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt; | &lt;a href=&quot;#type-exit&quot;&gt;exit(Err)&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;&lt;p&gt;Find the related record for a record from a module having a  
 many-to-one relation.&lt;/p&gt;
  
@@ -835,8 +835,8 @@ value.&lt;/p&gt;
 
 &lt;p&gt;&lt;b&gt;See also:&lt;/b&gt; &lt;a href=&quot;#field_from_string-2&quot;&gt;field_from_string/2&lt;/a&gt;.&lt;/p&gt;
 
-&lt;h3&gt;&lt;a name=&quot;set_related_one_to_many-2&quot;&gt;set_related_one_to_many/2&lt;/a&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;tt&gt;set_related_one_to_many(Rec::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;, Other::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;) -&amp;gt; &lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt; | &lt;a href=&quot;#type-exit&quot;&gt;exit(Err)&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
+&lt;h3&gt;&lt;a name=&quot;set_related_one_to_many-3&quot;&gt;set_related_one_to_many/3&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;set_related_one_to_many(Rec::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;, PkFkFields::&lt;a href=&quot;#type-proplist&quot;&gt;proplist()&lt;/a&gt;, Other::&lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt;) -&amp;gt; &lt;a href=&quot;#type-record&quot;&gt;record()&lt;/a&gt; | &lt;a href=&quot;#type-exit&quot;&gt;exit(Err)&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;&lt;p&gt;Set the foreign key fields of a record from a module having a  
 many-to-one relation to the primary key values of the Other record.&lt;/p&gt;
  </diff>
      <filename>doc/erlydb_base.html</filename>
    </modified>
    <modified>
      <diff>@@ -42,6 +42,7 @@ This module implements the MySQL driver for ErlyDB.
 &lt;table width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#connect-5&quot;&gt;connect/5&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Call connect/7 with Port set to 3306 and Reconnect set to 'true'.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#connect-7&quot;&gt;connect/7&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Add a connection to the connection pool.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#connect-8&quot;&gt;connect/8&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Add a connection to the connection pool, with encoding specified.&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#connect-9&quot;&gt;connect/9&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Add a connection to the connection pool, with encoding specified.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#execute-2&quot;&gt;execute/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Execute a statement that was previously prepared with
    prepare/2.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#execute-3&quot;&gt;execute/3&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Execute a prepared statement with the list of parameters.&lt;/td&gt;&lt;/tr&gt;
@@ -53,7 +54,7 @@ This module implements the MySQL driver for ErlyDB.
     update() function.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#execute_update-3&quot;&gt;execute_update/3&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Execute a prepared statement with the list of parameters and
     and return the result as the the update() function.&lt;/td&gt;&lt;/tr&gt;
-&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#get_default_pool_name-0&quot;&gt;get_default_pool_name/0&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Get the default connection pool name for the driver.&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#get_default_pool_id-0&quot;&gt;get_default_pool_id/0&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Get the default connection pool name for the driver.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#get_last_insert_id-2&quot;&gt;get_last_insert_id/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Get the id of the last inserted record.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#get_metadata-1&quot;&gt;get_metadata/1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Get the table names and fields for the database.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#prepare-2&quot;&gt;prepare/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Register a prepared statement with the MySQL dispatcher.&lt;/td&gt;&lt;/tr&gt;
@@ -78,17 +79,28 @@ This module implements the MySQL driver for ErlyDB.
 &lt;h3&gt;&lt;a name=&quot;connect-5&quot;&gt;connect/5&lt;/a&gt;&lt;/h3&gt;
 &lt;p&gt;&lt;tt&gt;connect(PoolId::atom(), Hostname::string(), Username::string(), Password::string(), Database::string()) -&amp;gt; ok&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;Call connect/7 with Port set to 3306 and Reconnect set to 'true'.
+  If the connection is lost, reconnection is attempted.
+  The connection process is linked to the calling process.
  &lt;/p&gt;
 
 &lt;h3&gt;&lt;a name=&quot;connect-7&quot;&gt;connect/7&lt;/a&gt;&lt;/h3&gt;
 &lt;p&gt;&lt;tt&gt;connect(PoolId::atom(), Hostname::string, Port::integer(), Username::string(), Password::string(), Database::string(), Reconnect::&lt;a href=&quot;#type-boolean&quot;&gt;boolean()&lt;/a&gt;) -&amp;gt; ok&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;Add a connection to the connection pool. If PoolId is
-    'undefined', the default pool, 'erlydb_mysql', is used.
+    'undefined', the default pool, 'erlydb_mysql', is used. The connection
+    process is linked to the calling process.
  &lt;/p&gt;
 
 &lt;h3&gt;&lt;a name=&quot;connect-8&quot;&gt;connect/8&lt;/a&gt;&lt;/h3&gt;
 &lt;p&gt;&lt;tt&gt;connect(PoolId::atom(), Hostname::string, Port::integer(), Username::string(), Password::string(), Database::string(), Encoding, Reconnect::&lt;a href=&quot;#type-boolean&quot;&gt;boolean()&lt;/a&gt;) -&amp;gt; ok&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;Add a connection to the connection pool, with encoding specified.
+  The connection process is linked to the calling process.
+ &lt;/p&gt;
+
+&lt;h3&gt;&lt;a name=&quot;connect-9&quot;&gt;connect/9&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;connect(PoolId::atom(), Hostname::string, Port::integer(), Username::string(), Password::string(), Database::string(), Encoding::string(), Reconnect::&lt;a href=&quot;#type-boolean&quot;&gt;boolean()&lt;/a&gt;, LinkConnection::bool()) -&amp;gt; ok&lt;/tt&gt;&lt;/p&gt;
+&lt;p&gt;Add a connection to the connection pool, with encoding specified.
+  If LinkConnection == false, the connection will not be linked to the
+  current process.
  &lt;/p&gt;
 
 &lt;h3&gt;&lt;a name=&quot;execute-2&quot;&gt;execute/2&lt;/a&gt;&lt;/h3&gt;
@@ -126,8 +138,8 @@ This module implements the MySQL driver for ErlyDB.
     and return the result as the the update() function.
  &lt;/p&gt;
 
-&lt;h3&gt;&lt;a name=&quot;get_default_pool_name-0&quot;&gt;get_default_pool_name/0&lt;/a&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;tt&gt;get_default_pool_name() -&amp;gt; atom()&lt;/tt&gt;&lt;/p&gt;
+&lt;h3&gt;&lt;a name=&quot;get_default_pool_id-0&quot;&gt;get_default_pool_id/0&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;get_default_pool_id() -&amp;gt; atom()&lt;/tt&gt;&lt;/p&gt;
 &lt;p&gt;Get the default connection pool name for the driver.
  &lt;/p&gt;
 </diff>
      <filename>doc/erlydb_mysql.html</filename>
    </modified>
    <modified>
      <diff>@@ -36,6 +36,9 @@ that implements basic CRUD features for a database table.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#get_initial_ewc-1&quot;&gt;get_initial_ewc/1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Get the expanded 'ewc' tuple for the request.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#out-1&quot;&gt;out/1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;This is the out/1 function that Yaws calls when passing
    HTTP requests to the ErlyWeb appmod.&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#out-2&quot;&gt;out/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;This function is useful for embedding the result of a 'phased'  
+ErlyWeb rendering in an ErlyWeb component from the same application,  
+but using a different app controller.&lt;/td&gt;&lt;/tr&gt;
 &lt;/table&gt;
 
 &lt;h2&gt;&lt;a name=&quot;functions&quot;&gt;Function Details&lt;/a&gt;&lt;/h2&gt;
@@ -61,7 +64,10 @@ extension are compiled with ErlTL.&lt;/p&gt;
 ErlyWeb also lets you define the following options:&lt;/p&gt;
  
    &lt;p&gt;- &lt;code&gt;{last_compile_time, LocalTime}&lt;/code&gt;: Tells ErlyWeb to not compile files     
-that haven't changed since LocalTime.&lt;/p&gt;
+that haven't changed since LocalTime.     
+Since ErlyWeb 0.7, you can use 'auto' for LocalTime. This     
+instructs ErlyWeb to compile only the files that have changed since     
+the last compilation. This is the recommended option.&lt;/p&gt;
  
    &lt;p&gt;- &lt;code&gt;{erlydb_driver, Name}&lt;/code&gt;: Tells ErlyWeb which ErlyDB driver to use     
 when calling erlydb:code_gen on models that are placed in src/components.     
@@ -180,5 +186,20 @@ logic for handling client requests for different components.&lt;/p&gt;
 &lt;p&gt;This is the out/1 function that Yaws calls when passing
    HTTP requests to the ErlyWeb appmod.
  &lt;/p&gt;
+
+&lt;h3&gt;&lt;a name=&quot;out-2&quot;&gt;out/2&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;out(A::&lt;a href=&quot;#type-arg&quot;&gt;arg()&lt;/a&gt;, AppController::atom()) -&amp;gt; term()&lt;/tt&gt;&lt;/p&gt;
+&lt;p&gt;&lt;p&gt;This function is useful for embedding the result of a 'phased'  
+ErlyWeb rendering in an ErlyWeb component from the same application,  
+but using a different app controller.&lt;/p&gt;
+ 
+  This function was originally designed to simplify Facebook app development
+  with ErlyWeb using Erlang2Facebook
+  (http://code.google.com/p/erlang2facebook).
+  In erlang2facebook, the fb_canvas component intercepts requests
+  from Facebook and authenticates them. After authentication, it may be
+  useful to start a new ErlyWeb &quot;flow&quot; using an alternative app controller
+  and display the result in of this flow the output of fb_canvas.
+ &lt;/p&gt;
 &lt;/body&gt;
 &lt;/html&gt;</diff>
      <filename>doc/erlyweb.html</filename>
    </modified>
    <modified>
      <diff>@@ -234,28 +234,20 @@ component name as parameters.&lt;/p&gt;
 &lt;pre&gt;http://my-cool-app.com/people/bob&lt;/pre&gt;
 
 &lt;p&gt;ErlyWeb by default would try to invoke the function 'bob/1' in
-people_controller. This is probably not what you want. Instead, you
-probably want &quot;bob&quot; to be a parameter to a single generic function in
-people_controller. You can accomplish this by implementing the
-'people' component as follows:&lt;/p&gt;
+people_controller. You can tell ErlyWeb to override this behavior and instead
+pass &quot;bob&quot; as a parameter to people_controller:catch_all/2 as follows:&lt;/p&gt;
 
 &lt;p&gt;people_controller.erl:&lt;/p&gt;
 
 &lt;pre&gt;-module(people_controller).
 -export(index/1, catch_all/2).
 
-index(_A) -&amp;gt;
-  {data, undefined}.
-
 catch_all(A, [Name]) -&amp;gt;
   {data, Name}.&lt;/pre&gt;
 
 &lt;p&gt;people_view.et:&lt;/p&gt;
 
-&lt;pre&gt;&amp;lt;%@ index(_) %&amp;gt;
-nothing much here
-
-&amp;lt;%@ catch_all(Name) %&amp;gt;
+&lt;pre&gt;&amp;lt;%@ catch_all(Name) %&amp;gt;
 &amp;lt;% Name %&amp;gt;'s homepage
 ...&lt;/pre&gt;
 
@@ -299,12 +291,12 @@ such HTTP headers common to some or all of a controller's functions.&lt;/p&gt;
 &lt;h5&gt;&lt;a name=&quot;after_render/3&quot;&gt;after_render/3&lt;/a&gt;&lt;/h5&gt;
 
 &lt;p&gt;ErlyWeb lets you implement the after_render/3 hook in controllers to get 
-access to the rendered output. Teh &lt;/p&gt;
+access to the rendered output.&lt;/p&gt;
 
 &lt;p&gt;The signature of after_render/2 is&lt;/p&gt;
 
 &lt;pre&gt;after_render(FuncName::atom(), Params::[term()], Rendered::iolist()) -&amp;gt;
-  Ignored::any().&lt;/pre&gt;
+  Ignored::term().&lt;/pre&gt;
 
 &lt;p&gt;You can use the after_render/3 hook to implement a granular caching system.&lt;/p&gt;
 
@@ -391,26 +383,25 @@ index(A) -&amp;gt;
 home_view.et:
 &lt;pre&gt;&amp;lt;% index(Album) %&amp;gt;
 Your favorite album is:&amp;lt;br/&amp;gt;
-&amp;lt;% Album %&amp;gt;
+&amp;lt;% Album %&amp;gt;&lt;/pre&gt;
 
-== The App Controller ==
+&lt;h3&gt;&lt;a name=&quot;The_App_Controller&quot;&gt;The App Controller&lt;/a&gt;&lt;/h3&gt;
 
-ErlyWeb applications have a module called [AppName]_app_controller,
+&lt;p&gt;ErlyWeb applications have a module called [AppName]_app_controller,
 whose source file is in the 'src' directory by convention. The app controller
 provides the entry-point into ErlyWeb applications via the hook/1 function.
 Starting from ErlyWeb 0.6, the app controller can also have an error-trapping,
-error/3.
+error/3.&lt;/p&gt;
 
-=== hook/1 ===
+&lt;h4&gt;&lt;a name=&quot;hook/1&quot;&gt;hook/1&lt;/a&gt;&lt;/h4&gt;
 
-The signature for hook/1 is
+&lt;p&gt;The signature for hook/1 is&lt;/p&gt;
 
-```
-hook(A::arg()) -&amp;gt; hook_result() | [hook_result()]
+&lt;pre&gt;hook(A::arg()) -&amp;gt; hook_result() | [hook_result()]
 
 hook_result = ewc() | yaws_term() | response() |
   {phased, Ewc::ewc() | Response::response(),
-    fun(ExpandedEwc::ewc(), Data::iolist()) -&amp;gt;
+    fun(ExpandedEwc::ewc(), Data::iolist(), PhasedVars::proplist()) -&amp;gt;
       FinalEwc::ewc()}
 
 ewc() = any `ewc' tuple
@@ -436,39 +427,100 @@ top-level components. If you return a different &lt;code&gt;ewc&lt;/code&gt; tuple (e.g. one
 returned by calling &lt;a href=&quot;erlyweb.html#get_initial_ewc-1&quot;&gt;&lt;code&gt;erlyweb:get_initial_ewc/1&lt;/code&gt;&lt;/a&gt;), ErlyWeb expects you
 to ensure the safety of your components manually.&lt;/p&gt;
 
-&lt;p&gt;In ErlyWeb 0.5, the &lt;code&gt;phased&lt;/code&gt; return type was introduced to faciliate
-the conditional embedding of any rendered data in containers
-(before ErlyWeb 0.5, a similar, but weaker functionality was provided by
+&lt;h4&gt;&lt;a name=&quot;Phased_Rendering&quot;&gt;Phased Rendering&lt;/a&gt;&lt;/h4&gt;
+
+&lt;p&gt;In ErlyWeb 0.5, the &lt;code&gt;phased&lt;/code&gt; return type for hook/1 was introduced to let you
+embed components in containers after those components are rendered
+but before they are sent to the browser
+(before ErlyWeb 0.5, a similar but weaker functionality was provided by
 app views, which ErlyWeb no longer supports). By returning
-&lt;code&gt;{phased, Ewc, Fun}&lt;/code&gt;, you are instructing ErlyWeb to first render the
+&lt;code&gt;{phased, Ewc, Fun}&lt;/code&gt;, you instruct ErlyWeb to first render the
 requested component, and if the result includes a rendered
 iolist (i.e., the requested component didn't return only headers),
-then nest the resulting iolist in a container before returning it.&lt;/p&gt;
+then pass it to the function Fun, which would decide if/how the iolist should
+be embedded in a container.&lt;/p&gt;
+
+&lt;p&gt;The reason this is feature called 'phased' rendering is that ErlyWeb renders
+the response in 2 phases: first, the requested component, and second, the
+container in which the component should be embedded.&lt;/p&gt;
+
+&lt;p&gt;Fun takes 3 parameters: the fully expanded 'ewc' tuple
+that ErlyWeb has rendered  (this is usually the result of calling
+erlyweb:get_initial_ewc({ewc, A})), the rendered
+iolist, and an opaque parameter called 'PhasedVars' ('PhasedVars' was
+introduced in ErlyWeb 0.7). PhasedVars is a list of values returned from
+the rendered controller function, in a special tuple of the type
+{phased_vars, Vars}. The purpose of 'PhasedVars' is to let the controller
+function pass arbitrary values to the component that
+is rendered in the second phase. It is useful, for example, for letting
+the controller function set the title of a page when the page's header
+is rendered by the container in the second rendering phase.&lt;/p&gt;
 
-&lt;p&gt;This approach is superior to directly embedding the requested component in a
-container because it allows the requested component to return headers
-(sub-components aren't allowed to return the &lt;code&gt;{response, Elems}&lt;/code&gt; tuple,
-as discussed above). In addition, this approach lets ErlyWeb skip the
-unnecessary rendering of the container when the requested component
-returns only headers.&lt;/p&gt;
+&lt;p&gt;Fun may return any 'ewc' or 'data' tuple. ErlyWeb takes the result of Fun,
+renders it, and send the result back to the browser.&lt;/p&gt;
 
-&lt;p&gt;Consider this trivial example: returning&lt;/p&gt;
+&lt;p&gt;Consider this example return value from hook/1:&lt;/p&gt;
 
-&lt;pre&gt;{phased, {ewc, A}, fun(_Ewc, Data) -&amp;gt; {data, Data} end}&lt;/pre&gt;
+&lt;pre&gt;{phased, {ewc, A}, fun(_Ewc, Data, _PhasedVars) -&amp;gt; {data, Data} end}&lt;/pre&gt;
 
-&lt;p&gt;is tantamount to returning&lt;/p&gt;
+&lt;p&gt;It is tantamount to returning&lt;/p&gt;
 
 &lt;pre&gt;{ewc, A}&lt;/pre&gt;
 
-&lt;p&gt;Another example: the return value below&lt;/p&gt;
+&lt;p&gt;This return value tells ErlyWeb to render the component
+that corresponds to the arg's appmoddata field, and then return
+the rendered iolist to the browser verbatim.&lt;/p&gt;
+
+&lt;p&gt;Below is a more advanced example.&lt;/p&gt;
 
 &lt;pre&gt;{phased, {ewc, A},
-  fun(_Ewc, Data) -&amp;gt;
-    {html_container, index, [A, {data, Data}]}
+  fun(_Ewc, Data, PhasedVars) -&amp;gt;
+    {html_container,
+      [A, {data, Data}, proplists:get_value(title, PhasedVars)]}
   end}&lt;/pre&gt;
 
-&lt;p&gt;tells ErlyWeb to embed any rendered data in html_container by passing
-the parameters &lt;code&gt;[A, {data, Data}]&lt;/code&gt; to its 'index' function.&lt;/p&gt;
+&lt;p&gt;This return value tells ErlyWeb to first render the component that corresponds
+to the arg's appmoddata field, and then embed the rendered iolist
+(the 'Data' variable) in html_container. After ErlyWeb renders
+the requested component, it calls
+&lt;code&gt;html_container_controller:index(A, {data, Data}, proplists:get_value(title, PhasedVars))&lt;/code&gt; and passes the result to html_container_view:index/1.&lt;/p&gt;
+
+&lt;p&gt;How do you set the value of the 'title' property in PhasedVars? Below is
+an example controller function for an 'album' component that fetches from
+the database an album and its related songs, passes the song names to the
+view function, and sets the page's title according to the album name.&lt;/p&gt;
+
+&lt;p&gt;album_controller.erl:&lt;/p&gt;
+
+&lt;pre&gt;show(A, Id) -&amp;gt;
+  Album = album:find_id(Id),
+  AlbumName = album:name(Album),
+  Songs = album:songs(Album),
+  {response,
+    [{phased_vars, [{title, [&amp;lt;&amp;lt;&quot;song list for &quot;&amp;gt;&amp;gt;, AlbumName]}]},
+     {body, {data, [{song:name(S) || S &amp;lt;- Songs}]}}]}.&lt;/pre&gt;
+
+&lt;p&gt;Finally, below is an example html_container that takes the iolist and the
+'title' parameter and inserts them into the proper positions in the HTML
+page.&lt;/p&gt;
+
+&lt;p&gt;html_container_controller.erl:&lt;/p&gt;
+
+&lt;pre&gt;index(A, Ewc, Title) -&amp;gt;
+  [Ewc, {data, Title}].&lt;/pre&gt;
+
+&lt;p&gt;html_container_view.et:&lt;/p&gt;
+
+&lt;pre&gt;&amp;lt;%@ index([Data, Title]) %&amp;gt;
+&amp;lt;html&amp;gt;
+&amp;lt;head&amp;gt;
+&amp;lt;title&amp;gt;&amp;lt;% Title %&amp;gt;&amp;lt;/title&amp;gt;
+&amp;lt;/head&amp;gt;
+&amp;lt;body&amp;gt;
+&amp;lt;% Data %&amp;gt;
+&amp;lt;/body&amp;gt;
+&amp;lt;/html&amp;gt;&lt;/pre&gt;
+
 
 &lt;h4&gt;&lt;a name=&quot;error/3&quot;&gt;error/3&lt;/a&gt;&lt;/h4&gt;
 </diff>
      <filename>doc/overview-summary.html</filename>
    </modified>
    <modified>
      <diff>@@ -231,10 +231,8 @@ http://my-cool-app.com/people/bob
 '''
 
 ErlyWeb by default would try to invoke the function 'bob/1' in
-people_controller. This is probably not what you want. Instead, you
-probably want &quot;bob&quot; to be a parameter to a single generic function in
-people_controller. You can accomplish this by implementing the
-'people' component as follows:
+people_controller. You can tell ErlyWeb to override this behavior and instead
+pass &quot;bob&quot; as a parameter to people_controller:catch_all/2 as follows:
 
 people_controller.erl:
 
@@ -242,9 +240,6 @@ people_controller.erl:
 -module(people_controller).
 -export(index/1, catch_all/2).
 
-index(_A) -&gt;
-  {data, undefined}.
-
 catch_all(A, [Name]) -&gt;
   {data, Name}.
 '''
@@ -252,9 +247,6 @@ catch_all(A, [Name]) -&gt;
 people_view.et:
 
 ```
-&lt;%@ index(_) %&gt;
-nothing much here
-
 &lt;%@ catch_all(Name) %&gt;
 &lt;% Name %&gt;'s homepage
 ...
@@ -414,6 +406,7 @@ home_view.et:
 &lt;% index(Album) %&gt;
 Your favorite album is:&lt;br/&gt;
 &lt;% Album %&gt;
+'''
 
 == The App Controller ==
 
@@ -432,7 +425,7 @@ hook(A::arg()) -&gt; hook_result() | [hook_result()]
 
 hook_result = ewc() | yaws_term() | response() |
   {phased, Ewc::ewc() | Response::response(),
-    fun(ExpandedEwc::ewc(), Data::iolist()) -&gt;
+    fun(ExpandedEwc::ewc(), Data::iolist(), PhasedVars::proplist()) -&gt;
       FinalEwc::ewc()}
 
 ewc() = any `ewc' tuple
@@ -461,45 +454,112 @@ top-level components. If you return a different `ewc' tuple (e.g. one
 returned by calling {@link erlyweb:get_initial_ewc/1}), ErlyWeb expects you
 to ensure the safety of your components manually.
 
-In ErlyWeb 0.5, the `phased' return type was introduced to faciliate
-the conditional embedding of any rendered data in containers
-(before ErlyWeb 0.5, a similar, but weaker functionality was provided by
+=== Phased Rendering ===
+
+In ErlyWeb 0.5, the `phased' return type for hook/1 was introduced to let you
+embed components in containers after those components are rendered
+but before they are sent to the browser
+(before ErlyWeb 0.5, a similar but weaker functionality was provided by
 app views, which ErlyWeb no longer supports). By returning
-`{phased, Ewc, Fun}', you are instructing ErlyWeb to first render the
+`{phased, Ewc, Fun}', you instruct ErlyWeb to first render the
 requested component, and if the result includes a rendered
 iolist (i.e., the requested component didn't return only headers),
-then nest the resulting iolist in a container before returning it.
-
-This approach is superior to directly embedding the requested component in a
-container because it allows the requested component to return headers
-(sub-components aren't allowed to return the `{response, Elems}' tuple,
-as discussed above). In addition, this approach lets ErlyWeb skip the
-unnecessary rendering of the container when the requested component
-returns only headers.
-
-Consider this trivial example: returning
+then pass it to the function Fun, which would decide if/how the iolist should
+be embedded in a container.
+
+The reason this is feature called 'phased' rendering is that ErlyWeb renders
+the response in 2 phases: first, the requested component, and second, the
+container in which the component should be embedded.
+
+Fun takes 3 parameters: the fully expanded 'ewc' tuple
+that ErlyWeb has rendered  (this is usually the result of calling
+erlyweb:get_initial_ewc({ewc, A})), the rendered
+iolist, and an opaque parameter called 'PhasedVars' ('PhasedVars' was
+introduced in ErlyWeb 0.7). PhasedVars is a list of values returned from
+the rendered controller function, in a special tuple of the type
+{phased_vars, Vars}. The purpose of 'PhasedVars' is to let the controller
+function pass arbitrary values to the component that
+is rendered in the second phase. It is useful, for example, for letting
+the controller function set the title of a page when the page's header
+is rendered by the container in the second rendering phase.
+
+Fun may return any 'ewc' or 'data' tuple. ErlyWeb takes the result of Fun,
+renders it, and send the result back to the browser.
+
+Consider this example return value from hook/1:
 
 ```
-{phased, {ewc, A}, fun(_Ewc, Data) -&gt; {data, Data} end}
+{phased, {ewc, A}, fun(_Ewc, Data, _PhasedVars) -&gt; {data, Data} end}
 '''
 
-is tantamount to returning
+It is tantamount to returning
 
 ```
 {ewc, A}
 '''
 
-Another example: the return value below
+This return value tells ErlyWeb to render the component
+that corresponds to the arg's appmoddata field, and then return
+the rendered iolist to the browser verbatim.
+
+Below is a more advanced example.
 
 ```
 {phased, {ewc, A},
-  fun(_Ewc, Data) -&gt;
-    {html_container, index, [A, {data, Data}]}
+  fun(_Ewc, Data, PhasedVars) -&gt;
+    {html_container,
+      [A, {data, Data}, proplists:get_value(title, PhasedVars)]}
   end}
 '''
 
-tells ErlyWeb to embed any rendered data in html_container by passing
-the parameters `[A, {data, Data}]' to its 'index' function.
+This return value tells ErlyWeb to first render the component that corresponds
+to the arg's appmoddata field, and then embed the rendered iolist
+(the 'Data' variable) in html_container. After ErlyWeb renders
+the requested component, it calls
+`html_container_controller:index(A, {data, Data}, proplists:get_value(title, PhasedVars))' and passes the result to html_container_view:index/1.
+
+How do you set the value of the 'title' property in PhasedVars? Below is
+an example controller function for an 'album' component that fetches from
+the database an album and its related songs, passes the song names to the
+view function, and sets the page's title according to the album name.
+
+album_controller.erl:
+
+```
+show(A, Id) -&gt;
+  Album = album:find_id(Id),
+  AlbumName = album:name(Album),
+  Songs = album:songs(Album),
+  {response,
+    [{phased_vars, [{title, [&lt;&lt;&quot;song list for &quot;&gt;&gt;, AlbumName]}]},
+     {body, {data, [{song:name(S) || S &lt;- Songs}]}}]}.
+'''
+
+Finally, below is an example html_container that takes the iolist and the
+'title' parameter and inserts them into the proper positions in the HTML
+page.
+
+html_container_controller.erl:
+
+```
+index(A, Ewc, Title) -&gt;
+  [Ewc, {data, Title}].
+'''
+
+html_container_view.et:
+
+```
+&lt;%@ index([Data, Title]) %&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;&lt;% Title %&gt;&lt;/title&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;% Data %&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+'''
+
 
 === error/3 ===
 </diff>
      <filename>doc/overview.edoc</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,10 @@ having to include yaws_api.hrl.&lt;/p&gt;
   with the modified value.
  
 &lt;h2&gt;&lt;a name=&quot;index&quot;&gt;Function Index&lt;/a&gt;&lt;/h2&gt;
-&lt;table width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#appmod_prepath-1&quot;&gt;appmod_prepath/1&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
+&lt;table width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#add_all_to_opaque-2&quot;&gt;add_all_to_opaque/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;applies add_to_opaque for all values in the list.&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#add_to_opaque-2&quot;&gt;add_to_opaque/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Equivalent to &lt;tt&gt;Arg#arg{opaque = [Val | A#arg.opaque]}&lt;/tt&gt;.
+&lt;/td&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#appmod_prepath-1&quot;&gt;appmod_prepath/1&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#appmod_prepath-2&quot;&gt;appmod_prepath/2&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#appmoddata-1&quot;&gt;appmoddata/1&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#appmoddata-2&quot;&gt;appmoddata/2&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
@@ -44,6 +47,7 @@ having to include yaws_api.hrl.&lt;/p&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#docroot-2&quot;&gt;docroot/2&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#fullpath-1&quot;&gt;fullpath/1&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#fullpath-2&quot;&gt;fullpath/2&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#get_opaque_val-2&quot;&gt;get_opaque_val/2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Return the value corrsponding to the Key in the opaque proplist.&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#headers-1&quot;&gt;headers/1&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#headers-2&quot;&gt;headers/2&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;#method-1&quot;&gt;method/1&lt;/a&gt;&lt;/td&gt;&lt;td/&gt;&lt;/tr&gt;
@@ -66,6 +70,16 @@ having to include yaws_api.hrl.&lt;/p&gt;
 
 &lt;h2&gt;&lt;a name=&quot;functions&quot;&gt;Function Details&lt;/a&gt;&lt;/h2&gt;
 
+&lt;h3&gt;&lt;a name=&quot;add_all_to_opaque-2&quot;&gt;add_all_to_opaque/2&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;add_all_to_opaque(A::&lt;a href=&quot;#type-arg&quot;&gt;arg()&lt;/a&gt;, Vals::[term()]) -&amp;gt; &lt;a href=&quot;#type-arg&quot;&gt;arg()&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;
+&lt;p&gt;applies add_to_opaque for all values in the list
+ &lt;/p&gt;
+
+&lt;h3&gt;&lt;a name=&quot;add_to_opaque-2&quot;&gt;add_to_opaque/2&lt;/a&gt;&lt;/h3&gt;
+&lt;tt&gt;add_to_opaque(Arg, Val) -&amp;gt; term()
+&lt;/tt&gt;&lt;p&gt;Equivalent to &lt;tt&gt;Arg#arg{opaque = [Val | A#arg.opaque]}&lt;/tt&gt;.&lt;/p&gt;
+
+
 &lt;h3&gt;&lt;a name=&quot;appmod_prepath-1&quot;&gt;appmod_prepath/1&lt;/a&gt;&lt;/h3&gt;
 &lt;tt&gt;appmod_prepath(Arg) -&amp;gt; term()
 &lt;/tt&gt;
@@ -130,6 +144,12 @@ having to include yaws_api.hrl.&lt;/p&gt;
 &lt;tt&gt;fullpath(Arg, Val) -&amp;gt; term()
 &lt;/tt&gt;
 
+&lt;h3&gt;&lt;a name=&quot;get_opaque_val-2&quot;&gt;get_opaque_val/2&lt;/a&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;tt&gt;get_opaque_val(A::&lt;a href=&quot;#type-arg&quot;&gt;arg()&lt;/a&gt;, Key::term()) -&amp;gt; term() | undefined&lt;/tt&gt;&lt;/p&gt;
+&lt;p&gt;Return the value corrsponding to the Key in the opaque proplist.
+  If the key isn't found, return 'undefined'.
+ &lt;/p&gt;
+
 &lt;h3&gt;&lt;a name=&quot;headers-1&quot;&gt;headers/1&lt;/a&gt;&lt;/h3&gt;
 &lt;tt&gt;headers(Arg) -&amp;gt; term()
 &lt;/tt&gt;</diff>
      <filename>doc/yaws_arg.html</filename>
    </modified>
    <modified>
      <diff>@@ -141,11 +141,11 @@ driver_mod(mnesia) -&gt; erlydb_mnesia;
 driver_mod(odbc) -&gt; erlydb_odbc.
 
 
-%% @equiv code_gen(Modules, Drivers, []).
+%% @equiv code_gen(Modules, Drivers, [])
 code_gen(Modules, Drivers) -&gt;
     code_gen(Modules, Drivers, []).
 
-%% @equiv code_gen(Modules, Drivers, Options, []).
+%% @equiv code_gen(Modules, Drivers, Options, [])
 code_gen(Modules, Drivers, Options) -&gt;
     code_gen(Modules, Drivers, Options, []).
 </diff>
      <filename>src/erlydb/erlydb.erl</filename>
    </modified>
    <modified>
      <diff>@@ -1104,7 +1104,9 @@ find_related_one_to_many(OtherModule, PkFkFields, Rec) -&gt;
 %% @see find_first/3
 %% @see find_max/4
 %% @see find_range/5
-%% @spec find_related_many_to_one(OtherModule::atom(), Rec::record(),
+%% @spec find_related_many_to_one(OtherModule::atom(),
+%%    PkFks::term(),
+%%    Rec::record(),
 %%    Where::where_expr(), Extras::extras_expr()) -&gt; [record()] | exit(Err)
 find_related_many_to_one(OtherModule, PkFks, Rec, Where,
 			Extras) -&gt;
@@ -1135,7 +1137,9 @@ find_related_many_to_one(OtherModule, PkFks, Rec, Where,
 %% {@link aggregate/5}.
 %%
 %% @see aggregate/5
-%% @spec aggregate_related_many_to_one(OtherModule::atom(), AggFunc::atom(),
+%% @spec aggregate_related_many_to_one(OtherModule::atom(),
+%% PkFks::term(),
+%% AggFunc::atom(),
 %% Rec::record(), Field::atom(),
 %% Where::where_expr(), Extras::extras_expr()) -&gt; float() | integer() |
 %%   exit(Err)</diff>
      <filename>src/erlydb/erlydb_base.erl</filename>
    </modified>
    <modified>
      <diff>@@ -204,7 +204,7 @@ get_metadata(Options) -&gt;
 
 %% @doc Get the default connection pool name for the driver.
 %%
-%% @spec get_default_pool_name() -&gt; atom()
+%% @spec get_default_pool_id() -&gt; atom()
 get_default_pool_id() -&gt;
     ?Epid.
 </diff>
      <filename>src/erlydb/erlydb_mysql.erl</filename>
    </modified>
    <modified>
      <diff>@@ -35,13 +35,13 @@
 new() -&gt;
     #arg{}.
 
-%% @equiv Arg#arg{opaque = [Val | A#arg.opaque]}.
+%% @equiv Arg#arg{opaque = [Val | A#arg.opaque]}
 add_to_opaque(Arg, Val) -&gt;
     Arg#arg{opaque = [Val | Arg#arg.opaque]}.
 
 %% @doc applies add_to_opaque for all values in the list
 %%
-%% @spec add_all_to_opaque(A::arg(), Vals::[term()])
+%% @spec add_all_to_opaque(A::arg(), Vals::[term()]) -&gt; arg()
 add_all_to_opaque(A, Vals) -&gt;
     lists:foldl(
       fun(Val, A1) -&gt;</diff>
      <filename>src/erlyweb/yaws_arg.erl</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>fa189eabc057ff04da4091cea185fa32b77331c0</id>
    </parent>
  </parents>
  <author>
    <name>yarivvv</name>
    <email>yarivvv</email>
  </author>
  <url>http://github.com/yariv/erlyweb/commit/c948d5214797bfb56cc42d2f8c9b3258ce29876d</url>
  <id>c948d5214797bfb56cc42d2f8c9b3258ce29876d</id>
  <committed-date>2007-12-25T01:34:26-08:00</committed-date>
  <authored-date>2007-12-25T01:34:26-08:00</authored-date>
  <message>documentation changes</message>
  <tree>d7d7ca6c28d750d6deea941e85f3ff6517a2e57f</tree>
  <committer>
    <name>yarivvv</name>
    <email>yarivvv</email>
  </committer>
</commit>
