Index: /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configure.zcml
===================================================================
--- /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configure.zcml	(revision 678)
+++ /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configure.zcml	(revision 679)
@@ -4,4 +4,5 @@
     xmlns:transmogrifier="http://namespaces.plone.org/transmogrifier"
     xmlns:gs="http://namespaces.zope.org/genericsetup"
+    xmlns:browser="http://namespaces.zope.org/browser"
     i18n_domain="quintagroup.transmogrifier">
 
@@ -165,3 +166,20 @@
         />
 
+    <browser:page
+        name="pipeline-config"
+        for="Products.CMFPlone.interfaces.IPloneSiteRoot"
+        permission="zope2.ViewManagementScreens"
+        class=".configview.PipelineConfigView"
+        template="pipelineconfig.pt"
+        />
+
+    <gs:registerProfile
+        name="default"
+        title="quintagroup.transmogrifier extension profile"
+        directory="profiles/default"
+        description="Profile that adds Content Migration configlet."
+        for="Products.CMFPlone.interfaces.IPloneSiteRoot"
+        provides="Products.GenericSetup.interfaces.EXTENSION"
+        />
+
 </configure>
Index: /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configview.py
===================================================================
--- /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configview.py	(revision 679)
+++ /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configview.py	(revision 679)
@@ -0,0 +1,59 @@
+from zope.annotation import IAnnotations
+
+from Products.Five.browser import BrowserView
+
+from collective.transmogrifier.transmogrifier import configuration_registry
+
+ANNOKEY = 'quintagroup.transmogrifier.config'
+
+class PipelineConfigView(BrowserView):
+    """ View for setting persistent pipeline config.
+    """
+
+    def __init__(self, context, request):
+        super(PipelineConfigView, self).__init__(context, request)
+        self.anno = IAnnotations(context)
+        self.status = None
+
+    def __call__(self):
+        action = self.request.form.get('action')
+        if action is not None:
+            stat = []
+            # handle export config
+            export_config = self.request.form['export'].strip()
+            expkey = ANNOKEY+'.export'
+            oldconfig = self.getConfig('export')
+            if export_config and export_config != oldconfig:
+                self.anno[expkey] = export_config
+                stat.append('updated export')
+            elif not export_config and expkey in self.anno:
+                del self.anno[expkey]
+                stat.append('removed export')
+            # handle import config
+            import_config = self.request.form['import'].strip()
+            impkey = ANNOKEY+'.import'
+            oldconfig = self.getConfig('import')
+            if import_config and import_config != oldconfig:
+                self.anno[impkey] = import_config
+                stat.append('updated import')
+            elif not import_config and impkey in self.anno:
+                del self.anno[impkey]
+                stat.append('removed import')
+            if stat:
+                self.status = 'Changes: %s configuration.' % ' and '.join(stat)
+            else:
+                self.status = 'No changes'
+
+        return self.index()
+
+    def getConfig(self, type_):
+        key = '%s.%s' % (ANNOKEY, type_)
+        if key in self.anno:
+            return self.anno[key]
+        else:
+            fname = configuration_registry.getConfiguration(type_)['configuration']
+            return file(fname).read()
+
+    def isDefault(self, type_):
+        key = '%s.%s' % (ANNOKEY, type_)
+        return key not in self.anno
Index: /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/exportimport.py
===================================================================
--- /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/exportimport.py	(revision 678)
+++ /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/exportimport.py	(revision 679)
@@ -1,6 +1,10 @@
+import tempfile
+
 from zope.interface import implements
+from zope.annotation import IAnnotations
 
 from collective.transmogrifier.interfaces import ITransmogrifier
 from collective.transmogrifier.transmogrifier import _load_config, constructPipeline
+from collective.transmogrifier.transmogrifier import configuration_registry
 
 from Products.GenericSetup.context import TarballExportContext, TarballImportContext
@@ -9,7 +13,36 @@
 from quintagroup.transmogrifier.writer import WriterSection
 from quintagroup.transmogrifier.reader import ReaderSection
+from quintagroup.transmogrifier.configview import ANNOKEY
 
 EXPORT_CONFIG = 'export'
 IMPORT_CONFIG = 'import'
+
+CONFIGFILE = None
+def registerPersistentConfig(site, type_):
+    """ Try to get persistent pipeline configuration of given type (export or import)
+        and register it for use with transmogrifier.
+    """
+    global CONFIGFILE
+    anno = IAnnotations(site)
+    key = '%s.%s' % (ANNOKEY, type_)
+    config = anno.has_key(key) and anno[key] or None
+
+    # unregister old config
+    name = 'persitent-%s' % type_
+    if name in configuration_registry._config_ids:
+        configuration_registry._config_ids.remove(name)
+        del configuration_registry._config_info[name]
+
+    # register new
+    if config is not None:
+        title = description = u'Persistent %s pipeline'
+        tf = tempfile.NamedTemporaryFile('w+t', suffix='.cfg')
+        tf.write(config)
+        tf.seek(0)
+        CONFIGFILE = tf
+        configuration_registry.registerConfiguration(name, title, description, tf.name)
+        return name
+    else:
+        return None
 
 def exportSiteStructure(context):
@@ -19,5 +52,11 @@
     # some modification in pipeline sections
 
-    transmogrifier._raw = _load_config(EXPORT_CONFIG)
+    config_name = registerPersistentConfig(context.getSite(), 'export')
+    if config_name is None:
+        transmogrifier._raw = _load_config(EXPORT_CONFIG)
+    else:
+        transmogrifier._raw = _load_config(config_name)
+        global CONFIGFILE
+        CONFIGFILE = None
     transmogrifier._data = {}
 
@@ -55,5 +94,11 @@
     # some modification in pipeline sections
 
-    transmogrifier._raw = _load_config(IMPORT_CONFIG)
+    config_name = registerPersistentConfig(context.getSite(), 'import')
+    if config_name is None:
+        transmogrifier._raw = _load_config(IMPORT_CONFIG)
+    else:
+        transmogrifier._raw = _load_config(config_name)
+        global CONFIGFILE
+        CONFIGFILE = None
     transmogrifier._data = {}
 
Index: /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/pipelineconfig.pt
===================================================================
--- /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/pipelineconfig.pt	(revision 679)
+++ /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/pipelineconfig.pt	(revision 679)
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal">
+<head>
+  <title>Content migration configuration</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+</head>
+<body>
+
+    <h1>Configuration of transmogrifier pipelines for content migration</h1>
+
+    <div style="background-color:#eee; padding:0.5em; line-height:1.2em;">
+        The default configuration is registered in ZCML and it's initially displayed
+        in this form. If you click 'Save' button for the first time it will be 
+        persisted in datebase and will override the default configuration. To swich
+        back to default configuration simply leave blank input area and click 'Save'.
+    </div>
+
+    <pre tal:content="view/status" tal:condition="view/status"
+         style="background-color:#ddd; padding:0.5em;
+         border: 1px black dashed; line-height:1.2em;">
+        Status
+    </pre>
+
+    <form action="#" method="POST"
+        tal:attributes="action request/getURL">
+
+        <table>
+            <tr>
+            <td>
+                <label>Export configuration <span style="color: red;" tal:condition="python:view.isDefault('export')">(default)</span></label>
+                <br/>
+                <textarea name="export" cols="80" rows="30"
+                    tal:content="python:view.getConfig('export')">
+                    config
+                </textarea>
+            </td>
+            <td>
+                <label>Import configuration <span style="color: red;" tal:condition="python:view.isDefault('import')">(default)</span></label>
+                <br/>
+                <textarea name="import" cols="80" rows="30" 
+                    tal:content="python:view.getConfig('import')">
+                    config
+                </textarea>
+            </td>
+        </table>
+        <input type="submit" name="action" value="Save" />
+    </form>
+
+</body>
+</html>
Index: /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/profiles/default/controlpanel.xml
===================================================================
--- /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/profiles/default/controlpanel.xml	(revision 679)
+++ /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/profiles/default/controlpanel.xml	(revision 679)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<object name="portal_controlpanel" meta_type="Plone Control Panel Tool">
+ <configlet title="Content migration" action_id="transmogrifier" appId="None"
+    category="Products" condition_expr=""
+    url_expr="string:${portal_url}/@@pipeline-config" visible="True">
+  <permission>Manage portal</permission>
+ </configlet>
+</object>
Index: /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/profiles/default/metadata.xml
===================================================================
--- /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/profiles/default/metadata.xml	(revision 679)
+++ /quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/profiles/default/metadata.xml	(revision 679)
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<metadata>
+  <version>0.1</version>
+</metadata>
