Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/configure.zcml
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/configure.zcml	(revision 320)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/configure.zcml	(revision 323)
@@ -3,9 +3,9 @@
     xmlns:five="http://namespaces.zope.org/five"
     xmlns:zcml="http://namespaces.zope.org/zcml"
-    xmlns:transmogrifier="http://namespaces.zope.org/transmogrifier"
+    xmlns:transmogrifier="http://namespaces.plone.org/transmogrifier"
     i18n_domain="quintagroup.pfm2pfg">
 
+    <include package="quintagroup.transmogrifier" file="meta.zcml" />
     <include package="quintagroup.transmogrifier" />
-    <include package="quintagroup.transmogrifier" file="meta.zcml" />
 
     <configure zcml:condition="installed Products.PloneFormMailer">
@@ -29,5 +29,5 @@
             from="PloneFormMailer"
             to="FormFolder"
-            file="formmailer-formfoler.xsl"
+            file="formmailer-formfolder.xsl"
             />
 
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/formmaileradapter.xsl
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/formmaileradapter.xsl	(revision 320)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/formmaileradapter.xsl	(revision 323)
@@ -25,6 +25,6 @@
                     <xsl:when test="name()='dc:rights'" />
                     <xsl:when test="name()='dc:language'" />
-                    <xsl:when test="name()='xmp:CreateDate'" />
-                    <xsl:when test="name()='xmp:ModifyDate'" />
+                    <!--xsl:when test="name()='xmp:CreateDate'" /-->
+                    <!-- xsl:when test="name()='xmp:ModifyDate'" /-->
                     <xsl:when test="name()='cmf:type'" />
                     <xsl:when test="name()='cmf:workflow_history'" />
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/formthankspage.xsl
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/formthankspage.xsl	(revision 320)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/formthankspage.xsl	(revision 323)
@@ -28,8 +28,7 @@
     <xsl:choose>
         <xsl:when test="@name='sent_title'">
-            <xsl:copy select=".">
-                <xsl:attribute name="name">title</xsl:attribute>
-                <xsl:value-of select="." />
-            </xsl:copy>
+            <dc:title>
+                <xsl:value-of select="."/>
+            </dc:title>
         </xsl:when>
         <xsl:when test="@name='sent_message'">
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/importing.py
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/importing.py	(revision 320)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/importing.py	(revision 323)
@@ -8,4 +8,5 @@
 
 from ZODB.POSException import ConflictError
+from Acquisition import aq_inner, aq_parent
 
 from Products.Marshall.registry import getComponent
@@ -17,8 +18,8 @@
 from quintagroup.transmogrifier.xslt import XSLTSection
 
-def info(obj, good=True):
+def debug(obj, good=True):
     type_name = obj.getPortalTypeName()
-    path = os.path.join(obj.getPhysicalPath()[1:])
-    msg = 'path=%s, type=%s' % (type_name, path) 
+    path = os.path.join(*obj.getPhysicalPath()[1:])
+    msg = 'type=%s, path=%s' % (type_name, path) 
     if good:
         logging.getLogger('pfm2pfg').info(msg)
@@ -75,8 +76,10 @@
         data = super(FormFolderImporter, self).__call__(data)
         xml = data['data']
+
         data['data'] = self.updateFormFolder(xml)
 
         # update FormMailerAdapter and FormThanksPage objects
         cleaned_xml = self.updateMailer(xml)
+
         self.updateResponsePage(cleaned_xml)
 
@@ -133,5 +136,5 @@
     def updateMailer(self, xml):
         mailer = self.context['mailer']
-        transformed = self.transform(xml)
+        transformed = self.transform(xml, 'FormMailerAdapter')
         self.demarshaller.demarshall(mailer, transformed)
         mailer.indexObject()
@@ -141,6 +144,8 @@
     def updateResponsePage(self, xml):
         page = self.context['thank-you']
-        transformed = self.transform(xml)
+        transformed = self.transform(xml, 'FormThanksPage')
         self.demarshaller.demarshall(page, transformed)
+        # override default value of description field
+        page.getField('description').getMutator(page)('')
         page.indexObject()
         debug(page)
@@ -154,6 +159,8 @@
             _to=to,
             _files=dict(
-                name='.marshall.xml',
-                data=xml
+                marshall=dict(
+                    name='.marshall.xml',
+                    data=xml
+                )
             )
         )
@@ -228,9 +235,9 @@
         try:
             IXMLDemarshaller(field).demarshall(field_node, **options)
-            info(field)
+            debug(field)
         except ConflictError:
             raise
         except:
-            info("on updating %s %s" % (type_name, field_id), False)
+            debug("on updating %s %s" % (type_name, field_id), False)
 
     def createFieldset(self, title):
@@ -259,4 +266,5 @@
     def __init__(self, context):
         self.context = context
+        self.date_fields = ['creation_date', 'modification_date']
 
     def demarshall(self, node, **kw):
@@ -277,7 +285,12 @@
                 continue
             mutator(value)
-        self.context.reindexObject()
-
-        return True
+
+        # set creation and modification date equal to dates in form folder
+        form_folder = aq_parent(aq_inner(self.context))
+        for field in self.date_fields:
+            value = form_folder.getField(field).getAccessor(form_folder)()
+            self.context.getField(field).getMutator(self.context)(value)
+
+        self.context.indexObject()
 
     def extractData(self, node):
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests.py
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests.py	(revision 320)
+++ 	(revision )
@@ -1,54 +1,0 @@
-import unittest
-
-from zope.testing import doctestunit
-from zope.component import testing
-from Testing import ZopeTestCase as ztc
-
-from Products.Five import zcml
-from Products.Five import fiveconfigure
-from Products.PloneTestCase import PloneTestCase as ptc
-from Products.PloneTestCase.layer import PloneSite
-ptc.setupPloneSite()
-
-import quintagroup.transmogrifier.pfm2pfg
-
-class TestCase(ptc.PloneTestCase):
-    class layer(PloneSite):
-        @classmethod
-        def setUp(cls):
-            fiveconfigure.debug_mode = True
-            zcml.load_config('configure.zcml',
-                             quintagroup.transmogrifier.pfm2pfg)
-            fiveconfigure.debug_mode = False
-
-        @classmethod
-        def tearDown(cls):
-            pass
-
-
-def test_suite():
-    return unittest.TestSuite([
-
-        # Unit tests
-        #doctestunit.DocFileSuite(
-        #    'README.txt', package='quintagroup.transmogrifier.pfm2pfg',
-        #    setUp=testing.setUp, tearDown=testing.tearDown),
-
-        #doctestunit.DocTestSuite(
-        #    module='quintagroup.transmogrifier.pfm2pfg.mymodule',
-        #    setUp=testing.setUp, tearDown=testing.tearDown),
-
-
-        # Integration tests that use PloneTestCase
-        #ztc.ZopeDocFileSuite(
-        #    'README.txt', package='quintagroup.transmogrifier.pfm2pfg',
-        #    test_class=TestCase),
-
-        #ztc.FunctionalDocFileSuite(
-        #    'browser.txt', package='quintagroup.transmogrifier.pfm2pfg',
-        #    test_class=TestCase),
-
-        ])
-
-if __name__ == '__main__':
-    unittest.main(defaultTest='test_suite')
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/__init__.py
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/__init__.py	(revision 323)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/__init__.py	(revision 323)
@@ -0,0 +1,1 @@
+# i'm a package
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/post-software.xml
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/post-software.xml	(revision 323)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/post-software.xml	(revision 323)
@@ -0,0 +1,603 @@
+<?xml version="1.0" encoding="utf-8"?>
+<metadata xmlns="http://plone.org/ns/archetypes/" xmlns:cmf="http://cmf.zope.org/namespaces/default/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmp="adobe:ns:meta">
+    <dc:title>
+        Publish new content management product or module
+    </dc:title>
+    <dc:creator>
+        admin
+    </dc:creator>
+    <xmp:CreateDate>
+        2007-05-15T08:41:51Z
+    </xmp:CreateDate>
+    <xmp:ModifyDate>
+        2007-12-04T09:25:47Z
+    </xmp:ModifyDate>
+    <field name="id">
+        post-software
+    </field>
+    <field name="allowDiscussion">
+        None
+    </field>
+    <field name="effectiveDate">
+        2007/12/04 03:25:47.294 US/Central
+    </field>
+    <field name="recipient_email">
+        string:test@mail.com
+    </field>
+    <field name="body_pt">
+        &lt;tal:block i18n:domain=&quot;pfm&quot;
+           tal:define=&quot;form here/form;
+                       groups form/get_groups;&quot;&gt;
+&lt;html&gt;
+&lt;body style=&quot;font-family:verdana,sans-serif;&quot;&gt;
+&lt;p tal:condition=&quot;here/getBodyPre&quot; tal:content=&quot;here/getBodyPre&quot; /&gt;
+&lt;p tal:condition=&quot;options/prepend&quot; tal:content=&quot;options/prepend&quot; /&gt;
+
+&lt;tal:block tal:repeat=&quot;group groups&quot;&gt;
+  &lt;h1 tal:condition=&quot;python:group!='Default'&quot; tal:content=&quot;group&quot; /&gt;
+  &lt;table style=&quot;font-family:verdana,sans-serif;&quot;&gt;
+    &lt;tbody valign=&quot;top&quot;&gt;
+      &lt;tal:block tal:repeat=&quot;field python:form.get_fields_in_group(group)&quot;&gt;
+        &lt;tr&gt;
+          &lt;th i18n:translate=&quot;&quot; style=&quot;text-align:right; white-space: nowrap; border-bottom: 1px solid #cccccc;&quot; tal:content=&quot;field/title&quot; /&gt;
+          &lt;td&gt;
+            &lt;div tal:repeat=&quot;line field/mailsplitter&quot;&gt;
+              &lt;span tal:content=&quot;line&quot;/&gt;
+            &lt;/div&gt;
+          &lt;/td&gt;
+        &lt;/tr&gt;
+      &lt;/tal:block&gt;
+    &lt;/tbody&gt;
+  &lt;/table&gt;
+&lt;/tal:block&gt;
+
+&lt;p tal:condition=&quot;options/append&quot; tal:content=&quot;options/append&quot; /&gt;
+&lt;p tal:condition=&quot;here/getBodyPost&quot; tal:content=&quot;here/getBodyPost&quot; /&gt;
+&lt;pre tal:content=&quot;here/getFooter&quot; /&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+&lt;/tal:block&gt;
+    </field>
+    <field name="body_type">
+        text/html
+    </field>
+    <field name="form_pre">
+        
+&lt;p&gt;form prologue&lt;/p&gt;
+
+    </field>
+    <field name="form_post">
+        
+&lt;p&gt;form epilogue&lt;/p&gt;
+
+    </field>
+    <field name="form_buttons">
+        Submit|submit|submit|context
+    </field>
+    <field name="form_buttons">
+        Reset|reset|reset|standalone
+    </field>
+    <field name="sent_title">
+        The form was send to editor.
+    </field>
+    <field name="sent_message">
+        
+&lt;p&gt;Thank you for new content. Our editor will review your request.&lt;br /&gt;&lt;/p&gt;
+
+    </field>
+    <uid>
+        738f9995ffd82394ff8a3fb75450c354
+    </uid>
+    <cmf:type>
+        PloneFormMailer
+    </cmf:type>
+    <cmf:workflow_history>
+        <cmf:workflow id="PloneFormMailer_workflow">
+            <cmf:history>
+                <cmf:var id="action" type="None" value="None"/>
+                <cmf:var id="actor" type="str" value="admin"/>
+                <cmf:var id="comments" type="str" value=""/>
+                <cmf:var id="review_state" type="str" value="members only send"/>
+                <cmf:var id="time" type="date" value="2007-05-15 03:41:51"/>
+            </cmf:history>
+            <cmf:history>
+                <cmf:var id="action" type="str" value="enable anonymous send"/>
+                <cmf:var id="actor" type="str" value="admin"/>
+                <cmf:var id="comments" type="str" value=""/>
+                <cmf:var id="review_state" type="str" value="anoymous send"/>
+                <cmf:var id="time" type="date" value="2007-12-04 03:25:47"/>
+            </cmf:history>
+        </cmf:workflow>
+    </cmf:workflow_history>
+    <cmf:security>
+        <cmf:local_role role="Owner" user_id="admin"/>
+    </cmf:security>
+    <field name="recipient_name">
+        ContentManagementSoftware.Info
+    </field>
+    <field name="subject">
+        string:Update Software
+    </field>
+
+<form>
+  <title>PFM Formulator</title>
+  <row_length>4</row_length>
+  <name>form</name>
+  <action/>
+  <method>POST</method>
+  <enctype/>
+  <encoding>UTF-8</encoding>
+  <stored_encoding>ISO-8859-1</stored_encoding>
+  <unicode_mode>false</unicode_mode>
+  <i18n_domain/>
+  <groups>
+    <group>
+      <title>Default</title>
+      <fields>
+
+      <field><id>fullname</id> <type>StringField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description/>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">1</required>
+          <title>Your fullname</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+        </messages>
+      </field>
+      <field><id>email</id> <type>EmailField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description/>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">1</required>
+          <title>Your e-mail</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+          <message name="not_email">You did not enter an email address.</message>
+        </messages>
+      </field>
+      <field><id>softwaretitle</id> <type>StringField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description/>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">0</required>
+          <title>Title</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+        </messages>
+      </field>
+      <field><id>softwaredescription</id> <type>TextAreaField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description>Short information about product software</description>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <height type="int">5</height>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <max_linelength/>
+          <max_lines/>
+          <required type="int">0</required>
+          <title>Description</title>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+          <width type="int">40</width>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_many_lines">You entered too many lines.</message>
+          <message name="line_too_long">A line was too long.</message>
+          <message name="too_long">You entered too many characters.</message>
+        </messages>
+      </field>
+      <field><id>softwaresummary</id> <type>TextAreaField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description>Full information about product software.</description>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <height type="int">15</height>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <max_linelength/>
+          <max_lines/>
+          <required type="int">0</required>
+          <title>Summary</title>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+          <width type="int">40</width>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_many_lines">You entered too many lines.</message>
+          <message name="line_too_long">A line was too long.</message>
+          <message name="too_long">You entered too many characters.</message>
+        </messages>
+      </field>
+      <field><id>version</id> <type>StringField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description/>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">0</required>
+          <title>Product version</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+        </messages>
+      </field>
+      <field><id>devstage</id> <type>StringField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description>Beta, stable, development, release candidat or other.</description>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">0</required>
+          <title>Development Stage</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+        </messages>
+      </field>
+      <field><id>license</id> <type>StringField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description>GPL, LGPL, BSD, freeware or other.</description>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">0</required>
+          <title>License</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+        </messages>
+      </field>
+      <field><id>supportcms</id> <type>StringField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description>CMS version, supported by the product</description>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">0</required>
+          <title>Support CMS version</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+        </messages>
+      </field>
+      <field><id>developed</id> <type>StringField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description>Who develop the product</description>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">0</required>
+          <title>Developed By</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+        </messages>
+      </field>
+      <field><id>downloadurl</id> <type>LinkField</type>
+        <values>
+          <alternate_name/>
+          <check_link type="int">0</check_link>
+          <check_timeout type="float">7.0</check_timeout>
+          <check_timeout>7.0</check_timeout>
+          <css_class/>
+          <default/>
+          <description>URL for downloading product</description>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <link_type>external</link_type>
+          <max_length/>
+          <required type="int">0</required>
+          <title>DownloadURL</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+          <message name="not_link">The specified link is broken.</message>
+        </messages>
+      </field>
+      <field><id>softwareurl</id> <type>LinkField</type>
+        <values>
+          <alternate_name/>
+          <check_link type="int">0</check_link>
+          <check_timeout type="float">7.0</check_timeout>
+          <check_timeout>7.0</check_timeout>
+          <css_class/>
+          <default/>
+          <description/>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <link_type>external</link_type>
+          <max_length/>
+          <required type="int">0</required>
+          <title>Software URL</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+          <message name="not_link">The specified link is broken.</message>
+        </messages>
+      </field>
+      <field><id>demourl</id> <type>LinkField</type>
+        <values>
+          <alternate_name/>
+          <check_link type="int">0</check_link>
+          <check_timeout type="float">7.0</check_timeout>
+          <check_timeout>7.0</check_timeout>
+          <css_class/>
+          <default/>
+          <description>URL with software product demo</description>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <link_type>external</link_type>
+          <max_length/>
+          <required type="int">0</required>
+          <title>Demo URL</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+          <message name="not_link">The specified link is broken.</message>
+        </messages>
+      </field>
+      <field><id>cms</id> <type>LinkField</type>
+        <values>
+          <alternate_name/>
+          <check_link type="int">0</check_link>
+          <check_timeout type="float">7.0</check_timeout>
+          <check_timeout>7.0</check_timeout>
+          <css_class/>
+          <default/>
+          <description>Control management systems supported by the product</description>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <link_type>external</link_type>
+          <max_length/>
+          <required type="int">0</required>
+          <title>CMS</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+          <message name="not_link">The specified link is broken.</message>
+        </messages>
+      </field>
+      <field><id>softwaredate</id> <type>DateTimeField</type>
+        <values>
+          <allow_empty_time type="int">1</allow_empty_time>
+          <alternate_name/>
+          <ampm_time_style type="int">0</ampm_time_style>
+          <css_class/>
+          <date_only type="int">0</date_only>
+          <date_separator>/</date_separator>
+          <default_now type="int">0</default_now>
+          <description>The date of product release</description>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <hidden type="int">0</hidden>
+          <hide_day type="int">0</hide_day>
+          <input_order>ymd</input_order>
+          <input_style>list</input_style>
+          <required type="int">0</required>
+          <time_separator>:</time_separator>
+          <title>Release Date</title>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="not_datetime">You did not enter a valid date and time.</message>
+          <message name="datetime_out_of_range">The date and time you entered were out of range.</message>
+        </messages>
+      </field>
+      <field><id>platforms</id> <type>StringField</type>
+        <values>
+          <alternate_name/>
+          <css_class/>
+          <default/>
+          <description>Choose OS platform, supported with the product</description>
+          <display_maxwidth/>
+          <display_width type="int">20</display_width>
+          <enabled type="int">1</enabled>
+          <external_validator/>
+          <extra/>
+          <hidden type="int">0</hidden>
+          <max_length/>
+          <required type="int">0</required>
+          <title>Platforms</title>
+          <truncate type="int">0</truncate>
+          <unicode type="int">0</unicode>
+          <whitespace_preserve type="int">0</whitespace_preserve>
+        </values>
+        <tales>
+        </tales>
+        <messages>
+          <message name="external_validator_failed">The input failed the external validator.</message>
+          <message name="required_not_found">Input is required but no input given.</message>
+          <message name="too_long">Too much input was given.</message>
+        </messages>
+      </field>
+      </fields>
+    </group>
+  </groups>
+</form>
+</metadata>
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.cfg
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.cfg	(revision 323)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.cfg	(revision 323)
@@ -0,0 +1,26 @@
+[transmogrifier]
+pipeline =
+    source
+    substitution
+    constructor
+    xslt
+    datacorrector
+    demarshaller
+    referencesimporter
+    propertiesimporter
+    commentsimporter
+    IMPORTING
+include = quintagroup.transmogrifier:import.cfg
+
+[source]
+blueprint = quintagroup.transmogrifier.pfm2pfg.tests.source
+
+[substitution]
+blueprint = quintagroup.transmogrifier.substitution
+key = _type
+PloneFormMailer = FormFolder
+
+[xslt]
+blueprint = quintagroup.transmogrifier.xslt
+from-key = _old_type
+to-key = _type
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.py
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.py	(revision 323)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.py	(revision 323)
@@ -0,0 +1,114 @@
+import unittest
+import os.path
+
+from zope.interface import classProvides, implements
+
+from Products.Five import zcml
+from Products.Five import fiveconfigure
+from Testing import ZopeTestCase as ztc
+
+from Products.PloneTestCase import PloneTestCase as ptc
+from Products.PloneTestCase.layer import onsetup
+
+from collective.transmogrifier.interfaces import ISectionBlueprint, ISection, ITransmogrifier
+
+class Source(object):
+    classProvides(ISectionBlueprint)
+    implements(ISection)
+
+    def __init__(self, transmogrifier, name, options, previous):
+        self.previous = previous
+
+    def __iter__(self):
+        for item in self.previous:
+            yield item
+
+        fname = os.path.join(os.path.dirname(__file__), 'post-software.xml')
+        xml = file(fname).read()
+        item = dict(
+            _type='PloneFormMailer',
+            _path='post-software',
+            _files=dict(
+                marshall=dict(
+                    name='.marshall.xml',
+                    data=xml
+                )
+            )
+        )
+        yield item
+
+ztc.installProduct('PloneFormGen')
+
+@onsetup
+def setup_product():
+    fiveconfigure.debug_mode = True
+    import quintagroup.transmogrifier.pfm2pfg
+    zcml.load_config('configure.zcml', quintagroup.transmogrifier.pfm2pfg)
+    import quintagroup.transmogrifier.pfm2pfg.tests
+    zcml.load_config('test_import.zcml', quintagroup.transmogrifier.pfm2pfg.tests)
+    fiveconfigure.debug_mode = False
+
+setup_product()
+ptc.setupPloneSite(products=['PloneFormGen'])
+
+class TestImport(ptc.PloneTestCase):
+    """ Test importing of PloneFormGen content.
+    """
+
+    def afterSetUp(self):
+        # run transmogrifier pipeline
+        transmogrifier = ITransmogrifier(self.portal)
+        transmogrifier('test_import')
+
+    def test_form_folder(self):
+        self.failUnless('post-software' in self.portal)
+        form = self.portal['post-software']
+
+        self.assertEqual(form['title'], 'Publish new content management product or module')
+        self.assertEqual(form.getFormPrologue(), '<p>form prologue</p>')
+        self.assertEqual(form.getFormEpilogue(), '<p>form epilogue</p>')
+        #self.assertEqual(form['thanksPageOverride'], 'string:')
+        #self.assertEqual(form['afterValidationOverride'], 'redirect_to:')
+
+    def test_mailer(self):
+        form = self.portal['post-software']
+        self.failUnless('mailer' in form)
+        mailer = form['mailer']
+        #import pdb; pdb.set_trace()
+
+        self.assertEqual(mailer['subjectOverride'], 'string:Update Software')
+        self.assertEqual(mailer['recipientOverride'], 'string:test@mail.com')
+        self.assertEqual(mailer['body_type'], 'html')
+
+        self.assertEqual(mailer.created(), form.created())
+        self.assertEqual(mailer.modified(), form.modified())
+
+    def test_thanks_page(self):
+        form = self.portal['post-software']
+        self.failUnless('thank-you' in form)
+        page = form['thank-you']
+
+        self.assertEqual(page.Title(), 'The form was send to editor.')
+        self.assertEqual(page.getThanksPrologue(), 
+            '<p>Thank you for new content. Our editor will review your request.<br /></p>')
+
+        self.assertEqual(page.created(), form.created())
+        self.assertEqual(page.modified(), form.modified())
+
+    def test_fields(self):
+        form = self.portal['post-software']
+        fields = ['fullname', 'email', 'softwaretitle', 'softwaredescription',
+            'softwaresummary', 'version', 'devstage', 'license', 'supportcms',
+            'developed', 'downloadurl', 'softwareurl', 'demourl', 'cms',
+            'softwaredate', 'platforms']
+        for i in fields:
+            self.failUnless(i in form)
+
+    #def test_able_to_add_document(self):
+        #new_id = self.folder.invokeFactory('Document', 'my-page')
+        #self.assertEquals('my-page', new_id)
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(TestImport))
+    return suite
Index: quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.zcml
===================================================================
--- quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.zcml	(revision 323)
+++ quintagroup.transmogrifier.pfm2pfg/trunk/quintagroup/transmogrifier/pfm2pfg/tests/test_import.zcml	(revision 323)
@@ -0,0 +1,17 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:transmogrifier="http://namespaces.plone.org/transmogrifier">
+
+    <utility
+        component=".test_import.Source"
+        name="quintagroup.transmogrifier.pfm2pfg.tests.source"
+        />
+
+    <transmogrifier:registerConfig
+        name="test_import"
+        title="Import pipeline configuration"
+        description="Customized for PloneFormMailer/PloneFormGen content types content import pipeline."
+        configuration="test_import.cfg"
+        />
+
+</configure>
