diff --git a/doxybuild.py b/doxybuild.py
index 445de4b..82bdea6 100644
--- a/doxybuild.py
+++ b/doxybuild.py
@@ -89,14 +89,14 @@
         print "Can't write target file %s"%targetfile
         raise
 
-def run_doxygen(doxygen_path, config_file, working_dir):
+def run_doxygen(doxygen_path, config_file, working_dir, is_silent):
     config_file = os.path.abspath( config_file )
     doxygen_path = doxygen_path
     old_cwd = os.getcwd()
     try:
         os.chdir( working_dir )
         cmd = [doxygen_path, config_file]
-        print ' '.join( cmd )
+        print 'Running:', ' '.join( cmd )
         try:
             import subprocess
         except:
@@ -104,40 +104,27 @@
                 print 'Documentation generation failed'
                 return False
         else:
-            try:
-                subprocess.check_call( cmd )
-            except subprocess.CalledProcessError:
+            if is_silent:
+                process = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
+            else:
+                process = subprocess.Popen( cmd )
+            stdout, _ = process.communicate()
+            if process.returncode:
+                print 'Documentation generation failed:'
+                print stdout
                 return False
         return True
     finally:
         os.chdir( old_cwd )
 
-def main():
-    usage = """%prog
-    Generates doxygen documentation in build/doxygen.
-    Optionaly makes a tarball of the documentation to dist/.
-
-    Must be started in the project top directory.    
-    """
-    from optparse import OptionParser
-    parser = OptionParser(usage=usage)
-    parser.allow_interspersed_args = False
-    parser.add_option('--with-dot', dest="with_dot", action='store_true', default=False,
-        help="""Enable usage of DOT to generate collaboration diagram""")
-    parser.add_option('--dot', dest="dot_path", action='store', default=find_program('dot'),
-        help="""Path to GraphViz dot tool. Must be full qualified path. [Default: %default]""")
-    parser.add_option('--doxygen', dest="doxygen_path", action='store', default=find_program('doxygen'),
-        help="""Path to Doxygen tool. [Default: %default]""")
-    parser.add_option('--with-html-help', dest="with_html_help", action='store_true', default=False,
-        help="""Enable generation of Microsoft HTML HELP""")
-    parser.add_option('--no-uml-look', dest="with_uml_look", action='store_false', default=True,
-        help="""Generates DOT graph without UML look [Default: False]""")
-    parser.add_option('--open', dest="open", action='store_true', default=False,
-        help="""Open the HTML index in the web browser after generation""")
-    parser.add_option('--tarball', dest="make_tarball", action='store_true', default=False,
-        help="""Generates a tarball of the documentation in dist/ directory""")
-    parser.enable_interspersed_args()
-    options, args = parser.parse_args()
+def build_doc( options,  make_release=False ):
+    if make_release:
+        options.make_tarball = True
+        options.with_dot = True
+        options.with_html_help = True
+        options.with_uml_look = True
+        options.open = False
+        options.silent = True
 
     version = open('version','rt').read().strip()
     output_dir = '../build/doxygen' # relative to doc/doxyfile location.
@@ -167,10 +154,9 @@
         os.makedirs( full_output_dir )
 
     do_subst_in_file( 'doc/doxyfile', 'doc/doxyfile.in', subst_keys )
-    ok = run_doxygen( options.doxygen_path, 'doc/doxyfile', 'doc' )
-    print open(os.path.join('doc', warning_log_path), 'rb').read()
-    if not ok:
-        print 'Doxygen generation failed'
+    ok = run_doxygen( options.doxygen_path, 'doc/doxyfile', 'doc', is_silent=options.silent )
+    if not options.silent:
+        print open(os.path.join('doc', warning_log_path), 'rb').read()
     index_path = os.path.abspath(os.path.join(subst_keys['%HTML_OUTPUT%'], 'index.html'))
     print 'Generated documentation can be found in:'
     print index_path
@@ -187,5 +173,35 @@
         tarball_basedir = os.path.join( full_output_dir, html_output_dirname )
         make_tarball( tarball_path, tarball_sources, tarball_basedir, html_output_dirname )
 
+def main():
+    usage = """%prog
+    Generates doxygen documentation in build/doxygen.
+    Optionaly makes a tarball of the documentation to dist/.
+
+    Must be started in the project top directory.    
+    """
+    from optparse import OptionParser
+    parser = OptionParser(usage=usage)
+    parser.allow_interspersed_args = False
+    parser.add_option('--with-dot', dest="with_dot", action='store_true', default=False,
+        help="""Enable usage of DOT to generate collaboration diagram""")
+    parser.add_option('--dot', dest="dot_path", action='store', default=find_program('dot'),
+        help="""Path to GraphViz dot tool. Must be full qualified path. [Default: %default]""")
+    parser.add_option('--doxygen', dest="doxygen_path", action='store', default=find_program('doxygen'),
+        help="""Path to Doxygen tool. [Default: %default]""")
+    parser.add_option('--with-html-help', dest="with_html_help", action='store_true', default=False,
+        help="""Enable generation of Microsoft HTML HELP""")
+    parser.add_option('--no-uml-look', dest="with_uml_look", action='store_false', default=True,
+        help="""Generates DOT graph without UML look [Default: False]""")
+    parser.add_option('--open', dest="open", action='store_true', default=False,
+        help="""Open the HTML index in the web browser after generation""")
+    parser.add_option('--tarball', dest="make_tarball", action='store_true', default=False,
+        help="""Generates a tarball of the documentation in dist/ directory""")
+    parser.add_option('-s', '--silent', dest="silent", action='store_true', default=False,
+        help="""Hides doxygen output""")
+    parser.enable_interspersed_args()
+    options, args = parser.parse_args()
+    build_doc( options )
+
 if __name__ == '__main__':
     main()
