diff --git a/windows/netreport/setup.py b/windows/netreport/setup.py
index ea5097065a8004267187a2b22c9fd6293f7c26b0..cf77dac7454c82abbcea5eac48332642431cdcad 100644
--- a/windows/netreport/setup.py
+++ b/windows/netreport/setup.py
@@ -3,10 +3,7 @@
 
 import sys
 import os
-try:
-    from setuptools import setup, Extension
-except ImportError:
-    from distutils.core import setup, Extension
+from setuptools import setup, Extension
 
 def get_description():
     README = os.path.abspath(os.path.join(os.path.dirname(__file__), 'README'))
@@ -16,7 +13,7 @@ def get_description():
     finally:
         f.close()
 
-VERSION = "0.1.1"
+VERSION = "0.1.2"
 
 if sys.platform.startswith("cygwin"):
 
@@ -41,30 +38,31 @@ else:
 
 def main():
     setup_args = dict(
-        name='netdrive.report',
+        name='netdrive',
         version=VERSION,
-        download_url='http://',
         description='A tool used to report the usage of net drive in the Windows',
         long_description=get_description(),
         keywords=['netdrive',],
-        scripts=['src/netreport.py'],
+        py_modules=['src/netreport'],
         author='Nexedi',
         author_email='jondy.zhao@nexedi.com',
         maintainer='Jondy Zhao',
         maintainer_email='jondy.zhao@nexedi.com',
-        url='http://',
         license='GPLv3',
         zip_safe=False,
         install_requires=[
             'lxml', 
-            'slapos.core', 
+            'slapos.core',
+            'setuptools',
+            'zc.buildout', # plays with buildout
+            'zc.recipe.egg', # for scripts generation
             ],
-        entry_points = {
-            'console_scripts': [
-                'netdrive-reporter = netreport:main',
-                ],
-            }
-        )
+      entry_points={
+        'console_scripts': [
+          'netdrive-reporter = netreport:main',
+          ],
+        }
+    )
     if extensions is not None:
         setup_args["ext_modules"] = extensions
     setup(**setup_args)
diff --git a/windows/netreport/src/netreport.py b/windows/netreport/src/netreport.py
index ec48941be4722b30bbcd8b80e261fb9dea37c00b..78eddb7c2304de1dc0520a54437068eb3523f9c2 100644
--- a/windows/netreport/src/netreport.py
+++ b/windows/netreport/src/netreport.py
@@ -52,7 +52,10 @@ def parseArgumentTuple():
                         default="/etc/slapos/ssl/computer.key")
     parser.add_argument("--report-interval",
                         help="Interval in seconds to send report to master.",
-                        default=300)
+                        default=300.0)
+    parser.add_argument("--report-path",
+                        help="Where to save TioXML report.",
+                        default=300.0)
     parser.add_argument("--data-file",
                         help="File used to save report data.",
                         default="net_drive_usage_report.data")
@@ -80,6 +83,7 @@ class NetDriveUsageReporter(object):
       self._domain_account = None
       self._config_id = None
       self._report_date = None
+      self.report_interval = float(self.report_interval)
       self.initializeDatabase(self.data_file)
 
     def initializeConnection(self):        
@@ -163,12 +167,16 @@ class NetDriveUsageReporter(object):
             self._db.execute("UPDATE config SET report_date=? where _rowid_=?",
                              (today, self._config_id))
 
-    def _postData(self, xml_data):
+    def _postData(self, report):
         """Send a marshalled dictionary of the net drive usage record
         serialized via_getDict.
         """
-        if xml_data is not None:
-            self._slap_computer.reportNetDriveUsage(xml_data)
+        if report is not None:
+            name = "netdrive-report-%s.xml" % datetime.now().isoformat()
+            etree.ElementTree(report).write(
+                os.path.join(self.report_path, name),
+                xml_declaration=True
+                )
 
     def initializeDatabase(self, db_path):
         self._db = sqlite3.connect(db_path, isolation_level=None)
@@ -198,32 +206,45 @@ class NetDriveUsageReporter(object):
     def generateDailyReport(self, config_id, computer_id, domain_account,
                                   report_date, remove=True):
         q = self._db.execute
-        root = etree.Element("report")
-        element = etree.Element("computer")
-        element.text = computer_id
-        root.append(element)
-
-        element = etree.Element("account")
-        element.text = domain_account
-        root.append(element)
-
-        element = etree.Element("date")
-        element.text = report_date
-        root.append(element)
-        
-        element = etree.Element("usage")
-        root.append(element)
-        usage = element
-
-        element = etree.Element("details")
-        root.append(element)
-
-        total = 0
-        for r in q("SELECT duration, usage_bytes FROM net_drive_usage "
+        report = etree.Element("consumption")
+        for r in q("SELECT remote_folder, duration, usage_bytes  FROM net_drive_usage "
                    "WHERE config_id=? AND strftime('%Y-%m-%d', start)=?",
                    (config_id, report_date)):
-            total += r[0] * r[1]
-        usage.text = str(total)
+            movement = etree.Element('movement')
+
+            element = etree.Element("resource")
+            element.text = r[0]
+            movement.append(element)
+
+            element = etree.Element("title")
+            element.text = 'NetDrive Usage %s' % report_date
+            movement.append(element)
+
+            element = etree.Element("reference")
+            element.text = domain_account
+            movement.append(element)
+
+            element = etree.Element("reference")
+            element.text = report_date
+            movement.append(element)
+
+            element = etree.Element("quantity")
+            element.text = str(r[1] * r[2])
+            movement.append(element)
+
+            element = etree.Element("price")
+            element.text = '0.0'
+            movement.append(element)
+
+            element = etree.Element("VAT")
+            movement.append(element)
+
+            element = etree.Element("category")
+            element.text = "NetDrive"
+            movement.append(element)
+
+            report.append(movement)
+
         if remove:
             q("INSERT INTO net_drive_usage_history "
               "SELECT * FROM net_drive_usage "
@@ -232,8 +253,7 @@ class NetDriveUsageReporter(object):
             q("DELETE FROM net_drive_usage "
               "WHERE config_id=? AND strftime('%Y-%m-%d', start)=?",
               (config_id, report_date))
-        if total:
-            return etree.tostring(root, encoding='utf-8', xml_declaration=True)
+        return report
 
 def main():
     reporter = NetDriveUsageReporter(parseArgumentTuple())