diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 8bf395dc59b37345d09e6741ea1f4a481b76d10f..59e69c36b16e704eda2b4921120e4381374e5262 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -733,7 +733,7 @@ class Database(http.Controller):
                 ('Content-Type', 'application/octet-stream; charset=binary'),
                 ('Content-Disposition', content_disposition(filename)),
             ]
-            dump_stream = openerp.service.db.dump_db_stream(backup_db, backup_format)
+            dump_stream = openerp.service.db.dump_db(backup_db, None, backup_format)
             response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True)
             response.set_cookie('fileToken', token)
             return response
diff --git a/openerp/service/db.py b/openerp/service/db.py
index a0a4b5e2707bd1e4ab947fcf0fbb2aa884efaba3..0dbc50e2747108de93eef54dbae3c03ca5400f4b 100644
--- a/openerp/service/db.py
+++ b/openerp/service/db.py
@@ -168,7 +168,10 @@ def dump_db_manifest(cr):
     return manifest
 
 def dump_db(db_name, stream, backup_format='zip'):
-    """Dump database `db` into file-like object `stream`"""
+    """Dump database `db` into file-like object `stream` if stream is None
+    return a file object with the dump """
+
+    _logger.info('DUMP DB: %s format %s', db_name, backup_format)
 
     cmd = ['pg_dump', '--no-owner']
     if openerp.tools.config['db_user']:
@@ -191,20 +194,20 @@ def dump_db(db_name, stream, backup_format='zip'):
                     json.dump(manifest, fh, indent=4)
             cmd.insert(-1, '--file=' + os.path.join(dump_dir, 'dump.sql'))
             openerp.tools.exec_pg_command(*cmd)
-            openerp.tools.osutil.zip_dir(dump_dir, stream, include_dir=False)
+            if stream:
+                openerp.tools.osutil.zip_dir(dump_dir, stream, include_dir=False)
+            else:
+                t=tempfile.TemporaryFile()
+                openerp.tools.osutil.zip_dir(dump_dir, t, include_dir=False)
+                t.seek(0)
+                return t
     else:
         cmd.insert(-1, '--format=c')
-        print cmd
         stdin, stdout = openerp.tools.exec_pg_command_pipe(*cmd)
-        shutil.copyfileobj(stdout, stream)
-
-    _logger.info('DUMP DB successful: %s', db_name)
-
-def dump_db_stream(db_name, backup_format='zip'):
-    t=tempfile.TemporaryFile()
-    dump_db(db_name, t, backup_format)
-    t.seek(0)
-    return t
+        if stream:
+            shutil.copyfileobj(stdout, stream)
+        else:
+            return stdout
 
 def exp_restore(db_name, data, copy=False):
     data_file = tempfile.NamedTemporaryFile(delete=False)