diff --git a/doc/src/sgml/arch-dev.sgml b/doc/src/sgml/arch-dev.sgml
new file mode 100644
index 7883c3c..ade0ad9
*** a/doc/src/sgml/arch-dev.sgml
--- b/doc/src/sgml/arch-dev.sgml
***************
*** 529,554 ****
     </para>
  
     <para>
!     The executor mechanism is used to evaluate all four basic SQL query types:
!     <command>SELECT</command>, <command>INSERT</command>, <command>UPDATE</command>, and
!     <command>DELETE</command>.  For <command>SELECT</command>, the top-level executor
!     code only needs to send each row returned by the query plan tree off
!     to the client.  For <command>INSERT</command>, each returned row is inserted
!     into the target table specified for the <command>INSERT</command>.  This is
!     done in a special top-level plan node called <literal>ModifyTable</literal>.
!     (A simple
!     <command>INSERT ... VALUES</command> command creates a trivial plan tree
!     consisting of a single <literal>Result</literal> node, which computes just one
!     result row, and <literal>ModifyTable</literal> above it to perform the insertion.
!     But <command>INSERT ... SELECT</command> can demand the full power
!     of the executor mechanism.)  For <command>UPDATE</command>, the planner arranges
!     that each computed row includes all the updated column values, plus
!     the <firstterm>TID</firstterm> (tuple ID, or row ID) of the original target row;
!     this data is fed into a <literal>ModifyTable</literal> node, which uses the
!     information to create a new updated row and mark the old row deleted.
!     For <command>DELETE</command>, the only column that is actually returned by the
!     plan is the TID, and the <literal>ModifyTable</literal> node simply uses the TID
!     to visit each target row and mark it deleted.
     </para>
  
    </sect1>
--- 529,564 ----
     </para>
  
     <para>
!     The executor mechanism is used to evaluate all four basic SQL query
!     types: <command>SELECT</command>, <command>INSERT</command>,
!     <command>UPDATE</command>, and <command>DELETE</command>.
!     For <command>SELECT</command>, the top-level executor code
!     only needs to send each row returned by the query plan tree
!     off to the client.  <command>INSERT ... SELECT</command>,
!     <command>UPDATE</command>, and <command>DELETE</command>
!     are effectively <command>SELECT</command>s under a special
!     top-level plan node called <literal>ModifyTable</literal>.
!    </para>
! 
!    <para>
!     <command>INSERT ... SELECT</command> feeds the rows up
!     to <literal>ModifyTable</literal> for insertion.  For
!     <command>UPDATE</command>, the planner arranges that each
!     computed row includes all the updated column values, plus the
!     <firstterm>TID</firstterm> (tuple ID, or row ID) of the original
!     target row; this data is fed up to the <literal>ModifyTable</literal>
!     node, which uses the information to create a new updated row and
!     mark the old row deleted.  For <command>DELETE</command>, the only
!     column that is actually returned by the plan is the TID, and the
!     <literal>ModifyTable</literal> node simply uses the TID to visit each
!     target row and mark it deleted.
!    </para>
! 
!    <para>
!     A simple <command>INSERT ... VALUES</command> command creates a
!     trivial plan tree consisting of a single <literal>Result</literal>
!     node, which computes just one result row, feeding that up
!     to<literal>ModifyTable</literal> to perform the insertion.
     </para>
  
    </sect1>
