Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 9027)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 9032)
@@ -914,4 +914,27 @@
         return open(fullpath, 'rb').read()
 
+class SkeletonDownloadView(UtilityView, grok.View):
+    grok.context(IDataCenter)
+    grok.name('skeleton')
+    grok.require('waeup.manageDataCenter')
+
+    def update(self, processorname=None):
+        self.processorname = self.request.form['name']
+        self.filename = ('%s_000.csv' %
+            self.processorname.replace('processor','import'))
+        return
+
+    def render(self):
+        #ob_class = self.__implemented__.__name__.replace('waeup.kofa.','')
+        #self.context.logger.info(
+        #    '%s - skeleton downloaded: %s' % (ob_class, self.filename))
+        self.response.setHeader(
+            'Content-Type', 'text/csv; charset=UTF-8')
+        self.response.setHeader(
+            'Content-Disposition:', 'attachment; filename="%s' % self.filename)
+        processor = getUtility(IBatchProcessor, name=self.processorname)
+        csv_data = processor.get_csv_skeleton()
+        return csv_data
+
 class DatacenterImportStep1(KofaPage):
     """Manual import step 1: choose file
@@ -1375,4 +1398,8 @@
         self.response.setHeader(
             'Content-Type', 'text/csv; charset=UTF-8')
+        acronym = grok.getSite()['configuration'].acronym.replace(' ','')
+        filename = "%s%s.csv" % (acronym, exporter.title.title().replace(' ',''))
+        self.response.setHeader(
+            'Content-Disposition:', 'attachment; filename="%s' % filename)
         return csv_data
 
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenteruploadpage.pt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenteruploadpage.pt	(revision 9027)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenteruploadpage.pt	(revision 9032)
@@ -19,5 +19,5 @@
       <th i18n:translate="">Processor</th>
       <th i18n:translate="">Available Fields</th>
-      <th i18n:translate="">CSV Skeleton File (not yet)</th>
+      <th i18n:translate="">CSV Skeleton File</th>
     </tr>
   </thead>
@@ -31,5 +31,7 @@
     </td>
     <td>
-      <span tal:replace="importer/name"></span>.csv
+      <a tal:attributes="href python: 'skeleton?name=' + importer['name']"
+         tal:content="python: importer['name'].replace('processor', 'import') + '_000.csv'">
+         FILENAME</a>
     </td>
   </tr>
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/tests/test_browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/tests/test_browser.py	(revision 9027)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/tests/test_browser.py	(revision 9032)
@@ -160,4 +160,6 @@
         self.assertEqual(self.browser.headers['Content-Type'],
                          'text/csv; charset=UTF-8')
+        self.assertTrue ('WAeUP.KofaFaculties.csv' in
+            self.browser.headers['content-disposition'])
         self.assertEqual(self.browser.contents,
             'code,title,title_prefix,users_with_local_roles\r\n'
@@ -169,2 +171,17 @@
                         'exported: faculties' in logcontent)
         return
+
+    def test_skeleton_download(self):
+        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+        self.browser.open(self.datacenter_path)
+        self.browser.getLink("Upload data").click()
+        self.assertTrue(
+            '<a href="skeleton?name=facultyprocessor">facultyimport_000.csv</a>'
+            in self.browser.contents)
+        self.browser.getLink('facultyimport_000.csv').click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.headers['Content-Type'],
+                         'text/csv; charset=UTF-8')
+        self.assertEqual(self.browser.contents,
+            'code,local_roles,title,title_prefix\r\n')
+        return
