Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 12515)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 12516)
@@ -211,6 +211,9 @@
         exporter = getUtility(ICSVExporter, name=exporter_name)
         exporter_title = getattr(exporter, 'title', 'Unknown')
-        args = ', '.join(['%s=%s' % (item[0], item[1])
-            for item in job.kwargs.items()])
+        if not job.kwargs.has_key('selected'):
+            args = ', '.join(['%s=%s' % (item[0], item[1])
+                for item in job.kwargs.items()])
+        else:
+            args = 'selection'
         status = job.finished and 'ready' or 'running'
         status = job.failed and 'FAILED' or status
Index: /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 12515)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 12516)
@@ -344,4 +344,12 @@
         """
 
+    def get_selected(site, selected):
+        """Get datasets in `site` to be exported.
+
+        The set of data is specified by a list of identifiers.
+
+        Returns an iterable.
+        """
+
     def export(iterable, filepath=None):
         """Export iterables as rows in a CSV file.
@@ -369,4 +377,12 @@
         Which special keywords are supported is up to the respective
         exporter.
+        """
+
+    def export_selected(site, filepath=None, **kw):
+        """Export items in `site` specified by a list of identifiers
+        called `selected`.
+
+        If `filepath` is not given, a string with the data should be
+        returned.
         """
 
Index: /main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py	(revision 12515)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/utils/batching.py	(revision 12516)
@@ -497,4 +497,12 @@
         raise NotImplementedError
 
+    def get_selected(self, site, selected):
+        """Get datasets to export for selected items
+        specified by a list of identifiers.
+
+        Returns an iterable.
+        """
+        raise NotImplementedError
+
     def export(self, iterable, filepath=None):
         """Export `iterable` as CSV file.
@@ -521,4 +529,15 @@
         """
         data = self.get_filtered(site, **kw)
+        return self.export(data, filepath=filepath)
+
+    def export_selected(self, site, filepath=None, **kw):
+        """Export those items specified by a list of identifiers
+        called `selected`.
+
+        If `filepath` is ``None``, a raw string with CSV data should
+        be returned.
+        """
+        selected = kw.get('selected', [])
+        data = self.get_selected(site, selected)
         return self.export(data, filepath=filepath)
 
@@ -551,4 +570,6 @@
     if kw == {}:
         exporter.export_all(site, filepath=output_path)
+    elif kw.has_key('selected'):
+        exporter.export_selected(site, filepath=output_path, **kw)
     else:
         exporter.export_filtered(site, filepath=output_path, **kw)
Index: /main/waeup.kofa/trunk/src/waeup/kofa/utils/tests/test_batching.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/utils/tests/test_batching.py	(revision 12515)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/utils/tests/test_batching.py	(revision 12516)
@@ -342,7 +342,12 @@
         # we can pass in positional and keyword args
         exporter = ExporterBase()
-        writer, outfile = exporter.get_csv_writer(filepath=self.workfile)
         self.assertRaises(NotImplementedError, exporter.export_filtered,
                           'foo', bar='bar')
+
+    def test_export_selected(self):
+        # we can pass in a list of identifiers
+        exporter = ExporterBase()
+        self.assertRaises(NotImplementedError, exporter.export_selected,
+                          'foo', selected=[])
         return
 
@@ -360,4 +365,11 @@
     def export_filtered(self, site, filepath=None, foo=None, bar=None):
         if foo or bar:
+            open(filepath, 'wb').write(SAMPLE_FILTERED_DATA)
+            return
+        self.export_all(site, filepath=filepath)
+        return
+
+    def export_selected(self, site, filepath=None, selected=None):
+        if selected:
             open(filepath, 'wb').write(SAMPLE_FILTERED_DATA)
             return
@@ -399,4 +411,12 @@
         # we export filtered sets
         result_path = export_job(None, 'cave_exporter', foo='foo')
+        contents = open(result_path, 'rb').read()
+        shutil.rmtree(os.path.dirname(result_path))
+        self.assertEqual(contents, SAMPLE_FILTERED_DATA)
+        return
+
+    def test_export_job_selected(self):
+        # we export subsets
+        result_path = export_job(None, 'cave_exporter', selected=['foo'])
         contents = open(result_path, 'rb').read()
         shutil.rmtree(os.path.dirname(result_path))
