diff --git a/product/ZMySQLDDA/CHANGES.txt b/product/ZMySQLDDA/CHANGES.txt
new file mode 100755
index 0000000000000000000000000000000000000000..3f4b2d46e352578e05fd2b2ab0c447a116795367
--- /dev/null
+++ b/product/ZMySQLDDA/CHANGES.txt
@@ -0,0 +1,5 @@
+Z MySQL DDA Releases
+
+  2.0.9
+
+    Initial Release
diff --git a/product/ZMySQLDDA/DA.py b/product/ZMySQLDDA/DA.py
new file mode 100755
index 0000000000000000000000000000000000000000..a52c1d2a8453e45a4ff5d0d618ad3157bfc7286f
--- /dev/null
+++ b/product/ZMySQLDDA/DA.py
@@ -0,0 +1,145 @@
+##############################################################################
+# 
+# Zope Public License (ZPL) Version 1.0
+# -------------------------------------
+# 
+# Copyright (c) Digital Creations.  All rights reserved.
+# Copyright (c) Nexedi SARL 2004.  All rights reserved.
+# 
+# This license has been certified as Open Source(tm).
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 
+# 1. Redistributions in source code must retain the above copyright
+#    notice, this list of conditions, and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions, and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+# 
+# 3. Digital Creations requests that attribution be given to Zope
+#    in any manner possible. Zope includes a "Powered by Zope"
+#    button that is installed by default. While it is not a license
+#    violation to remove this button, it is requested that the
+#    attribution remain. A significant investment has been put
+#    into Zope, and this effort will continue if the Zope community
+#    continues to grow. This is one way to assure that growth.
+# 
+# 4. All advertising materials and documentation mentioning
+#    features derived from or use of this software must display
+#    the following acknowledgement:
+# 
+#      "This product includes software developed by Digital Creations
+#      for use in the Z Object Publishing Environment
+#      (http://www.zope.org/)."
+# 
+#    In the event that the product being advertised includes an
+#    intact Zope distribution (with copyright and license included)
+#    then this clause is waived.
+# 
+# 5. Names associated with Zope or Digital Creations must not be used to
+#    endorse or promote products derived from this software without
+#    prior written permission from Digital Creations.
+# 
+# 6. Modified redistributions of any form whatsoever must retain
+#    the following acknowledgment:
+# 
+#      "This product includes software developed by Digital Creations
+#      for use in the Z Object Publishing Environment
+#      (http://www.zope.org/)."
+# 
+#    Intact (re-)distributions of any official Zope release do not
+#    require an external acknowledgement.
+# 
+# 7. Modifications are encouraged but must be packaged separately as
+#    patches to official Zope releases.  Distributions that do not
+#    clearly separate the patches from the original work must be clearly
+#    labeled as unofficial distributions.  Modifications which do not
+#    carry the name Zope may be packaged in any form, as long as they
+#    conform to all of the clauses above.
+# 
+# 
+# Disclaimer
+# 
+#   THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
+#   EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+#   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+#   PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
+#   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+#   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+#   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+#   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+#   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+#   SUCH DAMAGE.
+# 
+# 
+# This software consists of contributions made by Digital Creations and
+# many individuals on behalf of Digital Creations.  Specific
+# attributions are listed in the accompanying credits file.
+# 
+##############################################################################
+
+from Products.ZMySQLDA.DA import *
+from db import DeferredDB
+
+manage_addZMySQLDeferredConnectionForm=HTMLFile('deferredConnectionAdd',globals())
+
+def manage_addZMySQLDeferredConnection(self, id, title,
+                                connection_string,
+                                check=None, REQUEST=None):
+    """Add a DB connection to a folder"""
+    self._setObject(id, DeferredConnection(id, title, connection_string, check))
+    if REQUEST is not None: return self.manage_main(self,REQUEST)
+
+class DeferredConnection(Connection):
+    """
+        Experimental MySQL DA which implements
+        deferred SQL code execution to reduce locking issues
+    """
+    meta_type=title='Z %s Database Deferred Connection' % database_type
+    
+    def factory(self): return DeferredDB
+    
+    def connect(self,s):
+        try: self._v_database_connection.close()
+        except: pass
+        self._v_connected=''
+        DB=self.factory()
+        ## No try. DO.
+        self._v_database_connection=DeferredDB(s)
+        self._v_connected=DateTime()
+        return self
+       
+classes=('DA.DeferredConnection')
+
+meta_types=(
+    {'name':'Z %s Database Deferred Connection' % database_type,
+     'action':'manage_addZ%sDeferredConnectionForm' % database_type,
+     },
+    )
+
+folder_methods={
+    'manage_addZMySQLDeferredConnection':
+    manage_addZMySQLDeferredConnection,
+    'manage_addZMySQLDeferredConnectionForm':
+    manage_addZMySQLDeferredConnectionForm,
+    }
+
+__ac_permissions__=(
+    ('Add Z MySQL Database Connections',
+     ('manage_addZMySQLConnectionForm',
+      'manage_addZMySQLConnection')),
+    )
+
+misc_={'conn': ImageFile(
+    os.path.join('Shared','DC','ZRDB','www','DBAdapterFolder_icon.gif'))}
+
+for icon in ('table', 'view', 'stable', 'what',
+             'field', 'text','bin','int','float',
+             'date','time','datetime'):
+    misc_[icon]=ImageFile(os.path.join('icons','%s.gif') % icon, globals())
diff --git a/product/ZMySQLDDA/DEPENDENCIES.txt b/product/ZMySQLDDA/DEPENDENCIES.txt
new file mode 100755
index 0000000000000000000000000000000000000000..151d8af655fd877e6cd88e8a96fa78cca514c1d0
--- /dev/null
+++ b/product/ZMySQLDDA/DEPENDENCIES.txt
@@ -0,0 +1,6 @@
+* MySQL-python-0.9.2 or newer
+
+* Zope-2.3.0 or newer
+
+* ZMySQLDA 2.0.9 or newer
+
diff --git a/product/ZMySQLDDA/README.txt b/product/ZMySQLDDA/README.txt
new file mode 100755
index 0000000000000000000000000000000000000000..6695265cb8885090946beebcbd9d5bb385f39d7d
--- /dev/null
+++ b/product/ZMySQLDDA/README.txt
@@ -0,0 +1,18 @@
+Z MySQL Deferred DA
+
+  This is the Z MySQL database deferred adapter product for the 
+  Z Object Publishing Environment. It is based on
+  ZMySQLDA and follows the same API and installation
+  procedure. 
+  
+  The main difference with ZMySQLDA is that the execution
+  of SQL expressions is deferred and executed during the Zope
+  commit time rather than immediately. This allows for example
+  to group INSERT and DELETE statements in a very short amount of
+  time, which reduces risks of lock. It also allows to use
+  MyISAM tables without raising useless exception messages related
+  to the non transactional nature of MyISAM.
+  
+  ** IMPORTANT **
+  
+  SELECT expressions will not work in deferred mode
\ No newline at end of file
diff --git a/product/ZMySQLDDA/VERSION.txt b/product/ZMySQLDDA/VERSION.txt
new file mode 100755
index 0000000000000000000000000000000000000000..197875ed4d0e5c2dfc964a1578fbfafa13927aa8
--- /dev/null
+++ b/product/ZMySQLDDA/VERSION.txt
@@ -0,0 +1 @@
+ZMySQLDA 2.0.9
diff --git a/product/ZMySQLDDA/__init__.py b/product/ZMySQLDDA/__init__.py
new file mode 100755
index 0000000000000000000000000000000000000000..91beec23a5d4d837f7e64866dd7b86c7fe537b64
--- /dev/null
+++ b/product/ZMySQLDDA/__init__.py
@@ -0,0 +1,107 @@
+##############################################################################
+# 
+# Zope Public License (ZPL) Version 1.0
+# -------------------------------------
+# 
+# Copyright (c) Digital Creations.  All rights reserved.
+# 
+# This license has been certified as Open Source(tm).
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 
+# 1. Redistributions in source code must retain the above copyright
+#    notice, this list of conditions, and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions, and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+# 
+# 3. Digital Creations requests that attribution be given to Zope
+#    in any manner possible. Zope includes a "Powered by Zope"
+#    button that is installed by default. While it is not a license
+#    violation to remove this button, it is requested that the
+#    attribution remain. A significant investment has been put
+#    into Zope, and this effort will continue if the Zope community
+#    continues to grow. This is one way to assure that growth.
+# 
+# 4. All advertising materials and documentation mentioning
+#    features derived from or use of this software must display
+#    the following acknowledgement:
+# 
+#      "This product includes software developed by Digital Creations
+#      for use in the Z Object Publishing Environment
+#      (http://www.zope.org/)."
+# 
+#    In the event that the product being advertised includes an
+#    intact Zope distribution (with copyright and license included)
+#    then this clause is waived.
+# 
+# 5. Names associated with Zope or Digital Creations must not be used to
+#    endorse or promote products derived from this software without
+#    prior written permission from Digital Creations.
+# 
+# 6. Modified redistributions of any form whatsoever must retain
+#    the following acknowledgment:
+# 
+#      "This product includes software developed by Digital Creations
+#      for use in the Z Object Publishing Environment
+#      (http://www.zope.org/)."
+# 
+#    Intact (re-)distributions of any official Zope release do not
+#    require an external acknowledgement.
+# 
+# 7. Modifications are encouraged but must be packaged separately as
+#    patches to official Zope releases.  Distributions that do not
+#    clearly separate the patches from the original work must be clearly
+#    labeled as unofficial distributions.  Modifications which do not
+#    carry the name Zope may be packaged in any form, as long as they
+#    conform to all of the clauses above.
+# 
+# 
+# Disclaimer
+# 
+#   THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
+#   EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+#   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+#   PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
+#   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+#   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+#   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+#   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+#   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+#   SUCH DAMAGE.
+# 
+# 
+# This software consists of contributions made by Digital Creations and
+# many individuals on behalf of Digital Creations.  Specific
+# attributions are listed in the accompanying credits file.
+# 
+##############################################################################
+__doc__='''Generic Deferred Database Adapter Package Registration
+
+$Id$'''
+__version__='$Revision$'[11:-2]
+
+import sys, string
+import DA
+
+methods=DA.folder_methods
+misc_=DA.misc_
+
+def initialize(context):
+
+    context.registerClass(
+        DA.DeferredConnection,
+        permission='Add Z MySQL Database Deferred Connections',
+        constructors=(DA.manage_addZMySQLDeferredConnectionForm,
+                      DA.manage_addZMySQLDeferredConnection,)
+    )
+    
+    context.registerHelp()
+    context.registerHelpTitle('ZMySQLDDA')
+
diff --git a/product/ZMySQLDDA/browse.dtml b/product/ZMySQLDDA/browse.dtml
new file mode 100755
index 0000000000000000000000000000000000000000..4e600bc10752ea86449eba20efe67aa1273e08c9
--- /dev/null
+++ b/product/ZMySQLDDA/browse.dtml
@@ -0,0 +1,12 @@
+<html>
+  <head><title><!--#var title_or_id--> tables</title></head>
+  <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
+    <!--#var manage_tabs-->
+    <!--#tree header=info-->
+      <IMG SRC="<!--#var SCRIPT_NAME-->/misc_/ZMySQLDA/<!--#var icon-->"
+       ALT="<!--#var Type-->" BORDER="0">
+      <!--#var Name--><!--#var Description-->
+    <!--#/tree-->
+
+  </body>
+</html>
diff --git a/product/ZMySQLDDA/connectionAdd.dtml b/product/ZMySQLDDA/connectionAdd.dtml
new file mode 100755
index 0000000000000000000000000000000000000000..cd7b5c1fb290926b9b49e66c666b269ae74e14e7
--- /dev/null
+++ b/product/ZMySQLDDA/connectionAdd.dtml
@@ -0,0 +1,92 @@
+<html>
+  <head><title>Add Z MySQL Database Connection</title></head>
+  <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
+  
+    <h2>Add Z MySQL Database Deferred Connection</h2>
+    
+    <form action="manage_addZMySQLConnection" method="POST">
+      <table cellspacing="2">
+	<tr>
+	  <th align="LEFT" valign="TOP">Id</th>
+	  <td align="LEFT" valign="TOP">
+            <input type="TEXT" name="id" size="40"
+                value="MySQL_database_connection">
+          </td>
+	</tr>
+	<tr>
+	  <th align="LEFT" valign="TOP"><em>Title</em></th>
+	  <td align="LEFT" valign="TOP">
+            <input type="TEXT" name="title" size="40"
+                value="Z MySQL Database Connection">
+          </td>
+	</tr>
+	<tr>
+	  <th align="LEFT" valign="TOP">
+             Enter a Database Connection String
+	     <a href="#1"><sup>1</sup></a></th>
+	  <td align="LEFT" valign="TOP">
+            <input type="TEXT" name="connection_string" size="40">
+          </td>
+	</tr>
+	<tr>
+	  <th align="LEFT" valign="TOP">Connect immediately</th>
+	  <td align="LEFT" valign="TOP">
+            <input name="check" type="CHECKBOX" value="YES" CHECKED>
+          </td>
+	</tr>
+	<tr>
+	  <td></td>
+	  <td><br><input type="SUBMIT" value="Add"></td>
+	</tr>
+      </table>
+    </form>
+
+
+
+<dt><a hname="1"><sup>1</sup></a> Connection Strings</dt>
+<dd>
+<p>
+    The connection string used for Z MySQL Database Connection
+    is of the form:
+<pre>
+    [*lock] [+/-][database][@host[:port]] [user [password [unix_socket]]]
+</pre>
+    or typically:
+<pre>
+       database user password
+</pre>
+    to use a MySQL server on localhost via the standard UNIX socket.
+    Only specify host if the server is on a remote system. You can
+    use a non-standard port, if necessary. Hint: To use a non-standard
+    port on the local system, use 127.0.0.1 for the host instead of
+    localhost.
+<p>
+    Either a database or a host or both must be specified.
+<p>
+    If the UNIX socket is in a non-standard location, you can specify
+    the full path to it after the password.
+<p>
+    A '-' in front of the database tells ZMySQLDA to not use Zope's
+    Transaction Manager, even if the server supports transactions. A
+    '+' in front of the database tells ZMySQLDA that it must use
+    transactions; an exception will be raised if they are not
+    supported by the server. If neither '-' or '+' are present, then
+    transactions will be enabled if the server supports them.  If you
+    are using non-transaction safe tables (TSTs) on a server that
+    supports TSTs, use '-'. If you require transactions, use '+'. If
+    you aren't sure, don't use either.
+<p>
+    *<em>lock</em> at the begining of the connection string means to
+    psuedo-transactional. When the transaction begins, it will acquire
+    a lock on the server named <em>lock</em> (i.e. MYLOCK). When the
+    transaction commits, the lock will be released. If the transaction
+    is aborted and restarted, which can happen due to a ConflictError,
+    you'll get an error in the logs, and inconsistent data. In this
+    respect, it's equivalent to transactions turned off.
+<p>
+    Transactions are highly recommended. Using a named lock in
+    conjunctions with transactions is probably pointless.  
+</dd></dl>
+
+  </body>
+</html>
diff --git a/product/ZMySQLDDA/connectionEdit.dtml b/product/ZMySQLDDA/connectionEdit.dtml
new file mode 100755
index 0000000000000000000000000000000000000000..b2379944ccdbb4388935a89167f71fc26111a9b7
--- /dev/null
+++ b/product/ZMySQLDDA/connectionEdit.dtml
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html lang="en">
+  <head><title>Edit <dtml-var title_or_id></title></head>
+  <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
+    <dtml-var manage_tabs>
+    
+    <h2>Edit <dtml-var title_or_id></h2>
+    
+    <form action="manage_edit" method="POST">
+      <table cellspacing="2">
+
+        <tr>
+	  <th align="LEFT" valign="TOP">Id</th>
+	  <td align="LEFT" valign="TOP"><dtml-var id></td>
+	</tr>
+
+	<tr>
+	  <th align="LEFT" valign="TOP"><em>Title</em></th>
+	  <td align="LEFT" valign="TOP">
+	    <input type="TEXT" name="title" size="40"
+                   value="<dtml-var title html_quote>">
+	  </td>
+	</tr>
+
+	<tr>
+	  <th align="LEFT" valign="TOP">Database Connection String</th>
+	  <td align="LEFT" valign="TOP">
+	    <input type="TEXT" name="connection_string" size="40"
+                   value="<dtml-var connection_string html_quote>">
+	  </td>
+	</tr>
+	<tr>
+	  <th align="LEFT" valign="TOP">Connect immediately</th>
+	  <td align="LEFT" valign="TOP">
+            <input name="check" type="CHECKBOX" value="YES" CHECKED>
+          </td>
+	</tr>
+
+        <tr>
+	  <td></td>
+	  <td><br><input type="SUBMIT" value="Change"></td>
+	</tr>
+
+      </table>
+    </form>
+
+  </body>
+</html>
diff --git a/product/ZMySQLDDA/db.py b/product/ZMySQLDDA/db.py
new file mode 100755
index 0000000000000000000000000000000000000000..7ef477efe58bc8b2fada4a21933fbc73046bff16
--- /dev/null
+++ b/product/ZMySQLDDA/db.py
@@ -0,0 +1,180 @@
+##############################################################################
+# 
+# Zope Public License (ZPL) Version 1.0
+# -------------------------------------
+# 
+# Copyright (c) Digital Creations.  All rights reserved.
+# Copyright (c) Nexedi SARL 2004.  All rights reserved.
+# 
+# This license has been certified as Open Source(tm).
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 
+# 1. Redistributions in source code must retain the above copyright
+#    notice, this list of conditions, and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions, and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+# 
+# 3. Digital Creations requests that attribution be given to Zope
+#    in any manner possible. Zope includes a "Powered by Zope"
+#    button that is installed by default. While it is not a license
+#    violation to remove this button, it is requested that the
+#    attribution remain. A significant investment has been put
+#    into Zope, and this effort will continue if the Zope community
+#    continues to grow. This is one way to assure that growth.
+# 
+# 4. All advertising materials and documentation mentioning
+#    features derived from or use of this software must display
+#    the following acknowledgement:
+# 
+#      "This product includes software developed by Digital Creations
+#      for use in the Z Object Publishing Environment
+#      (http://www.zope.org/)."
+# 
+#    In the event that the product being advertised includes an
+#    intact Zope distribution (with copyright and license included)
+#    then this clause is waived.
+# 
+# 5. Names associated with Zope or Digital Creations must not be used to
+#    endorse or promote products derived from this software without
+#    prior written permission from Digital Creations.
+# 
+# 6. Modified redistributions of any form whatsoever must retain
+#    the following acknowledgment:
+# 
+#      "This product includes software developed by Digital Creations
+#      for use in the Z Object Publishing Environment
+#      (http://www.zope.org/)."
+# 
+#    Intact (re-)distributions of any official Zope release do not
+#    require an external acknowledgement.
+# 
+# 7. Modifications are encouraged but must be packaged separately as
+#    patches to official Zope releases.  Distributions that do not
+#    clearly separate the patches from the original work must be clearly
+#    labeled as unofficial distributions.  Modifications which do not
+#    carry the name Zope may be packaged in any form, as long as they
+#    conform to all of the clauses above.
+# 
+# 
+# Disclaimer
+# 
+#   THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
+#   EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+#   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+#   PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
+#   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+#   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+#   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+#   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+#   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+#   SUCH DAMAGE.
+# 
+# 
+# This software consists of contributions made by Digital Creations and
+# many individuals on behalf of Digital Creations.  Specific
+# attributions are listed in the accompanying credits file.
+# 
+##############################################################################
+
+from Products.ZMySQLDA.db import *
+
+class DeferredDB(DB):
+    """
+        An experimental MySQL DA which implements deferred execution
+        of SQL code in order to reduce locks and provide better behaviour
+        with MyISAM non transactional tables
+    """
+    
+    def __init__(self,connection):
+        DB.__init__(self, connection)
+        self.sql_string_list = []
+                
+    def query(self,query_string, max_rows=1000):
+        self._use_TM and self._register()
+        desc=None
+        result=()
+        db=self.db
+        try:
+            self._lock.acquire()
+            for qs in filter(None, map(strip,split(query_string, '\0'))):
+                qtype = upper(split(qs, None, 1)[0])
+                if qtype == "SELECT":
+                      raise NotSupportedError, "can not SELECT in deferred connections"
+                #LOG('ZMySQLDDA', 0, "insert string %s" % qs )
+                self.sql_string_list.append(qs)
+        finally:
+            self._lock.release()
+
+        return (),()
+
+    def _begin(self, *ignored):
+        from thread import get_ident
+        self._tlock.acquire()
+        self._tthread = get_ident()
+        
+    def _finish(self, *ignored):
+        from thread import get_ident
+        if not self._tlock.locked() or self._tthread != get_ident():
+            LOG('ZMySQLDA', INFO, "ignoring _finish")
+            return
+        # BEGIN commit
+        LOG('ZMySQLDDA', INFO, "BEGIN commit")
+        try:
+            if self._transactions:
+                self.db.query("BEGIN")
+                self.db.store_result()
+            if self._mysql_lock:
+                self.db.query("SELECT GET_LOCK('%s',0)" % self._mysql_lock)
+                self.db.store_result()
+        except:
+            LOG('ZMySQLDDA', ERROR, "exception during _begin",
+                error=sys.exc_info())
+            self._tlock.release()
+            raise
+        # Execute SQL            
+        db = self.db
+        for qs in self.sql_string_list:
+            try:
+                db.query(qs)
+                c=db.store_result()                       
+            except OperationalError, m:
+                if m[0] not in hosed_connection: raise
+                # Hm. maybe the db is hosed.  Let's restart it.
+                db=self.db=apply(self.Database_Connection, (), self.kwargs)
+                try:
+                    db.query(qs)
+                    c=db.store_result()
+                except OperationalError, m:
+                    raise            
+            LOG('ZMySQLDDA', INFO, "Execute %s" % qs)
+        # Finish commit             
+        LOG('ZMySQLDDA', INFO, "FINISH commit")
+        try:
+            try:
+                if self._mysql_lock:
+                    self.db.query("SELECT RELEASE_LOCK('%s')" % self._mysql_lock)
+                    self.db.store_result()
+                if self._transactions:
+                    self.db.query("COMMIT")
+                self.db.store_result()
+            except:
+                LOG('ZMySQLDDA', ERROR, "exception during _finish",
+                    error=sys.exc_info())
+                raise
+        finally:
+            self._tlock.release()
+
+    def _abort(self, *ignored):
+        from thread import get_ident
+        if not self._tlock.locked() or self._tthread != get_ident():
+            LOG('ZMySQLDDA', INFO, "ignoring _abort")
+            return
+        self._tlock.release()          
\ No newline at end of file
diff --git a/product/ZMySQLDDA/deferredConnectionAdd.dtml b/product/ZMySQLDDA/deferredConnectionAdd.dtml
new file mode 100755
index 0000000000000000000000000000000000000000..73581b10f9eadfdcc5c24393c3e88897fd54c71e
--- /dev/null
+++ b/product/ZMySQLDDA/deferredConnectionAdd.dtml
@@ -0,0 +1,92 @@
+<html>
+  <head><title>Add Z MySQL Database Connection</title></head>
+  <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
+  
+    <h2>Add Z MySQL Database Connection</h2>
+    
+    <form action="manage_addZMySQLDeferredConnection" method="POST">
+      <table cellspacing="2">
+	<tr>
+	  <th align="LEFT" valign="TOP">Id</th>
+	  <td align="LEFT" valign="TOP">
+            <input type="TEXT" name="id" size="40"
+                value="MySQL_database_connection">
+          </td>
+	</tr>
+	<tr>
+	  <th align="LEFT" valign="TOP"><em>Title</em></th>
+	  <td align="LEFT" valign="TOP">
+            <input type="TEXT" name="title" size="40"
+                value="Z MySQL Database Connection">
+          </td>
+	</tr>
+	<tr>
+	  <th align="LEFT" valign="TOP">
+             Enter a Database Connection String
+	     <a href="#1"><sup>1</sup></a></th>
+	  <td align="LEFT" valign="TOP">
+            <input type="TEXT" name="connection_string" size="40">
+          </td>
+	</tr>
+	<tr>
+	  <th align="LEFT" valign="TOP">Connect immediately</th>
+	  <td align="LEFT" valign="TOP">
+            <input name="check" type="CHECKBOX" value="YES" CHECKED>
+          </td>
+	</tr>
+	<tr>
+	  <td></td>
+	  <td><br><input type="SUBMIT" value="Add"></td>
+	</tr>
+      </table>
+    </form>
+
+
+
+<dt><a hname="1"><sup>1</sup></a> Connection Strings</dt>
+<dd>
+<p>
+    The connection string used for Z MySQL Database Connection
+    is of the form:
+<pre>
+    [*lock] [+/-][database][@host[:port]] [user [password [unix_socket]]]
+</pre>
+    or typically:
+<pre>
+       database user password
+</pre>
+    to use a MySQL server on localhost via the standard UNIX socket.
+    Only specify host if the server is on a remote system. You can
+    use a non-standard port, if necessary. Hint: To use a non-standard
+    port on the local system, use 127.0.0.1 for the host instead of
+    localhost.
+<p>
+    Either a database or a host or both must be specified.
+<p>
+    If the UNIX socket is in a non-standard location, you can specify
+    the full path to it after the password.
+<p>
+    A '-' in front of the database tells ZMySQLDA to not use Zope's
+    Transaction Manager, even if the server supports transactions. A
+    '+' in front of the database tells ZMySQLDA that it must use
+    transactions; an exception will be raised if they are not
+    supported by the server. If neither '-' or '+' are present, then
+    transactions will be enabled if the server supports them.  If you
+    are using non-transaction safe tables (TSTs) on a server that
+    supports TSTs, use '-'. If you require transactions, use '+'. If
+    you aren't sure, don't use either.
+<p>
+    *<em>lock</em> at the begining of the connection string means to
+    psuedo-transactional. When the transaction begins, it will acquire
+    a lock on the server named <em>lock</em> (i.e. MYLOCK). When the
+    transaction commits, the lock will be released. If the transaction
+    is aborted and restarted, which can happen due to a ConflictError,
+    you'll get an error in the logs, and inconsistent data. In this
+    respect, it's equivalent to transactions turned off.
+<p>
+    Transactions are highly recommended. Using a named lock in
+    conjunctions with transactions is probably pointless.  
+</dd></dl>
+
+  </body>
+</html>
diff --git a/product/ZMySQLDDA/help/DA.py b/product/ZMySQLDDA/help/DA.py
new file mode 100755
index 0000000000000000000000000000000000000000..86051d8ee460a88ff34a821df3774159d38a87d1
--- /dev/null
+++ b/product/ZMySQLDDA/help/DA.py
@@ -0,0 +1,61 @@
+def manage_addZMySQLDeferredConnection(self, id, title,
+                                connection_string,
+                                check=None, REQUEST=None):
+    """Add a MySQL deferred connection to a folder.
+
+    Arguments:
+
+        REQUEST -- The current request
+
+        title -- The title of the ZMySQLDA Connection (string)
+
+        id -- The id of the ZMySQLDA Connection (string)
+
+        connection_string -- The connection string is of the form:
+
+        '[*lock] [+/-][database][@host[:port]] [user [password [unix_socket]]]'
+
+        or typically:
+
+                'database user password'
+
+        to use a MySQL server on localhost via the standard UNIX
+        socket.  Only specify host if the server is on a remote
+        system. You can use a non-standard port, if necessary. If the
+        UNIX socket is in a non-standard location, you can specify the
+        full path to it after the password. Hint: To use a
+        non-standard port on the local system, use 127.0.0.1 for the
+        host instead of localhost.
+        
+        Either a database or a host or both must be specified.     
+
+        A '-' in front of the database tells ZMySQLDA to not use
+        Zope's Transaction Manager, even if the server supports
+        transactions. A '+' in front of the database tells ZMySQLDA
+        that it must use transactions; an exception will be raised if
+        they are not supported by the server. If neither '-' or '+'
+        are present, then transactions will be enabled if the server
+        supports them.  If you are using non-transaction safe tables
+        (TSTs) on a server that supports TSTs, use '-'. If you require
+        transactions, use '+'. If you aren't sure, don't use either.
+
+        *lock at the begining of the connection string means to
+        psuedo-transactional. When the transaction begins, it will
+        acquire a lock on the server named lock (i.e. MYLOCK). When
+        the transaction commits, the lock will be released. If the
+        transaction is aborted and restarted, which can happen due to
+        a ConflictError, you'll get an error in the logs, and
+        inconsistent data. In this respect, it's equivalent to
+        transactions turned off.
+
+        Transactions are highly recommended. Using a named lock in
+        conjunctions with transactions is probably pointless.
+
+        """
+
+class DeferredConnection:
+    """MySQL Deferred Connection Object"""
+
+    __constructor__ = manage_addZMySQLConnection
+
+
diff --git a/product/ZMySQLDDA/help/DABase.py b/product/ZMySQLDDA/help/DABase.py
new file mode 100755
index 0000000000000000000000000000000000000000..d6fbff1464c62b27d268e3d8cbcb625aa207643c
--- /dev/null
+++ b/product/ZMySQLDDA/help/DABase.py
@@ -0,0 +1,35 @@
+def manage_addZMySQLDeferredConnection(self, id, title,
+                                connection_string,
+                                check=None, REQUEST=None):
+    """Add a MySQL deferred connection to a folder.
+
+    Arguments:
+
+        REQUEST -- The current request
+
+        title -- The title of the ZMySQLDA Connection (string)
+
+        id -- The id of the ZMySQLDA Connection (string)
+
+        connection_string -- The connection string is of the form:
+
+                'database[@host[:port]] [user [password [unix_socket]]]'
+
+        or typically:
+
+                'database user password'
+
+        to use a MySQL server on localhost via the standard UNIX socket.
+        Only specify host if the server is on a remote system. You can
+        use a non-standard port, if necessary. If the UNIX socket is in
+        a non-standard location, you can specify the full path to it
+        after the password.
+
+    """
+
+class DeferredConnection:
+    """MySQL Deferred Connection Object"""
+
+    __constructor__ = manage_addZMySQLConnection
+
+
diff --git a/product/ZMySQLDDA/help/db.py b/product/ZMySQLDDA/help/db.py
new file mode 100755
index 0000000000000000000000000000000000000000..78f7c9d74bc3164a51b1ea8a045ca082357f2fed
--- /dev/null
+++ b/product/ZMySQLDDA/help/db.py
@@ -0,0 +1,28 @@
+class DB:
+
+    """This is the ZMySQLDDA Database Deferred Connection Object."""
+
+    def __init__(self,connection):
+        """
+            connection
+               blah blah
+        """
+        
+    def tables(self, rdb=0,
+               _care=('TABLE', 'VIEW')):
+        """Returns a list of tables in the current database."""
+
+    def columns(self, table_name):
+        """Returns a list of column descriptions for 'table_name'."""
+
+    def query(self,query_string, max_rows=1000):
+        """Execute 'query_string' and return at most 'max_rows'."""
+
+    def _begin(self, *ignored):
+        """Begin a transaction (when TM is enabled)."""
+        
+    def _finish(self, *ignored):
+        """Commit a transaction (when TM is enabled)."""
+
+    def _abort(self, *ignored):
+        """Rollback a transaction (when TM is enabled)."""
diff --git a/product/ZMySQLDDA/icons/bin.gif b/product/ZMySQLDDA/icons/bin.gif
new file mode 100755
index 0000000000000000000000000000000000000000..e4691265687b23c83b3032da963526c0b3a8e526
Binary files /dev/null and b/product/ZMySQLDDA/icons/bin.gif differ
diff --git a/product/ZMySQLDDA/icons/date.gif b/product/ZMySQLDDA/icons/date.gif
new file mode 100755
index 0000000000000000000000000000000000000000..0d88a57343f8a727924fd2fc1bad32c4ecb5b24d
Binary files /dev/null and b/product/ZMySQLDDA/icons/date.gif differ
diff --git a/product/ZMySQLDDA/icons/datetime.gif b/product/ZMySQLDDA/icons/datetime.gif
new file mode 100755
index 0000000000000000000000000000000000000000..faa540b11f97cfba8c689dcbf1162de4c51c4a63
Binary files /dev/null and b/product/ZMySQLDDA/icons/datetime.gif differ
diff --git a/product/ZMySQLDDA/icons/field.gif b/product/ZMySQLDDA/icons/field.gif
new file mode 100755
index 0000000000000000000000000000000000000000..9bf8692be6c734783164f7c8df4a99c7696c6635
Binary files /dev/null and b/product/ZMySQLDDA/icons/field.gif differ
diff --git a/product/ZMySQLDDA/icons/float.gif b/product/ZMySQLDDA/icons/float.gif
new file mode 100755
index 0000000000000000000000000000000000000000..dd427299369f706417724103e20b3b5c89480ffd
Binary files /dev/null and b/product/ZMySQLDDA/icons/float.gif differ
diff --git a/product/ZMySQLDDA/icons/int.gif b/product/ZMySQLDDA/icons/int.gif
new file mode 100755
index 0000000000000000000000000000000000000000..ef2c5e3690d5b55e816b388c1112b58c9f55aee2
Binary files /dev/null and b/product/ZMySQLDDA/icons/int.gif differ
diff --git a/product/ZMySQLDDA/icons/stable.gif b/product/ZMySQLDDA/icons/stable.gif
new file mode 100755
index 0000000000000000000000000000000000000000..acdd37df61c44de3b08fa95c8302e6702a423da5
Binary files /dev/null and b/product/ZMySQLDDA/icons/stable.gif differ
diff --git a/product/ZMySQLDDA/icons/table.gif b/product/ZMySQLDDA/icons/table.gif
new file mode 100755
index 0000000000000000000000000000000000000000..cce83beaf96b7d4e6147e7c6a18c975c541df349
Binary files /dev/null and b/product/ZMySQLDDA/icons/table.gif differ
diff --git a/product/ZMySQLDDA/icons/text.gif b/product/ZMySQLDDA/icons/text.gif
new file mode 100755
index 0000000000000000000000000000000000000000..a2e5aab6f29769c52dff27f822fc9da76f0be924
Binary files /dev/null and b/product/ZMySQLDDA/icons/text.gif differ
diff --git a/product/ZMySQLDDA/icons/time.gif b/product/ZMySQLDDA/icons/time.gif
new file mode 100755
index 0000000000000000000000000000000000000000..6d089150008c5f5e5d35771e238266d2e0f37cc5
Binary files /dev/null and b/product/ZMySQLDDA/icons/time.gif differ
diff --git a/product/ZMySQLDDA/icons/view.gif b/product/ZMySQLDDA/icons/view.gif
new file mode 100755
index 0000000000000000000000000000000000000000..71b30de161aa4c99d3f09e19aa7fcf9a7d1e1757
Binary files /dev/null and b/product/ZMySQLDDA/icons/view.gif differ
diff --git a/product/ZMySQLDDA/icons/what.gif b/product/ZMySQLDDA/icons/what.gif
new file mode 100755
index 0000000000000000000000000000000000000000..8b5516e397d2684c0ee4628ddd2730964e07bee0
Binary files /dev/null and b/product/ZMySQLDDA/icons/what.gif differ
diff --git a/product/ZMySQLDDA/table_info.dtml b/product/ZMySQLDDA/table_info.dtml
new file mode 100755
index 0000000000000000000000000000000000000000..639c23fd14c5fcc2bea839bc5db3458cf90e2dcf
--- /dev/null
+++ b/product/ZMySQLDDA/table_info.dtml
@@ -0,0 +1,7 @@
+<dtml-var standard_html_header>
+
+<dtml-var TABLE_TYPE><dtml-if TABLE_OWNER>
+ owned by <dtml-var TABLE_OWNER></dtml-if>
+<dtml-if REMARKS><br><dtml-var REMARKS></dtml-if>
+
+<dtml-var standard_html_footer>