diff --git a/scapy/utils.py b/scapy/utils.py
index 006a6d6f6a0dc432cea5639854e687fe1cb7bc39..da74e878c41248003a0d63da2ffd607eaa83c00f 100644
--- a/scapy/utils.py
+++ b/scapy/utils.py
@@ -17,6 +17,7 @@ from data import MTU
 from error import log_runtime,log_loading,log_interactive
 from base_classes import BasePacketList
 
+WINDOWS=sys.platform.startswith("win32")
 
 ###########
 ## Tools ##
@@ -277,7 +278,7 @@ def ltoa(x):
 def itom(x):
     return (0xffffffff00000000L>>x)&0xffffffffL
 
-def do_graph(graph,prog=None,format="svg",target=None, type=None,string=None,options=None):
+def do_graph(graph,prog=None,format=None,target=None,type=None,string=None,options=None):
     """do_graph(graph, prog=conf.prog.dot, format="svg",
          target="| conf.prog.display", options=None, [string=1]):
     string: if not None, simply return the graph string
@@ -287,20 +288,43 @@ def do_graph(graph,prog=None,format="svg",target=None, type=None,string=None,opt
     prog: which graphviz program to use
     options: options to be passed to prog"""
         
-
+    if format is None:
+        if WINDOWS:
+            format = "png" # use common format to make sure a viewer is installed
+        else:
+            format = "svg"
     if string:
         return graph
     if type is not None:
         format=type
     if prog is None:
         prog = conf.prog.dot
+    start_viewer=False
     if target is None:
-        target = "| %s" % conf.prog.display
+        if WINDOWS:
+            tempfile = os.tempnam("", "scapy") + "." + format
+            target = "> %s" % tempfile
+            start_viewer = True
+        else:
+            target = "| %s" % conf.prog.display
     if format is not None:
         format = "-T %s" % format
     w,r = os.popen2("%s %s %s %s" % (prog,options or "", format or "", target))
     w.write(graph)
     w.close()
+    if start_viewer:
+        # Workaround for file not found error: We wait until tempfile is written.
+        waiting_start = time.time()
+        while not os.path.exists(tempfile):
+            time.sleep(0.1)
+            if time.time() - waiting_start > 3:
+                warning("Temporary file '%s' could not be written. Graphic will not be displayed." % tempfile)
+                break
+        else:  
+            if conf.prog.display == conf.prog._default:
+                os.startfile(tempfile)
+            else:
+                subprocess.Popen([conf.prog.display, tempfile])
 
 _TEX_TR = {
     "{":"{\\tt\\char123}",