diff --git a/generators/input-validators/check-network-description.rb b/generators/input-validators/check-network-description.rb
index 81437b1d3a679d071f017bf3fc51b856c5a06298..1d6f11d7dd8c6728697e26ba3426e127264fd238 100644
--- a/generators/input-validators/check-network-description.rb
+++ b/generators/input-validators/check-network-description.rb
@@ -189,15 +189,13 @@ def check_network_description(options)
     # FIXME check rates
 
     if options[:dot]
-      generate_dot(netnodes, links, "network_#{site}.dot")
+      generate_dot(netnodes, links, site)
     end
   end
   return ok
 end
 
-def generate_dot(netnodes, links, ofile)
-  fd = File::new(ofile, 'w')
-  fd.puts "graph graphname {"
+def generate_dot(netnodes, links, site)
   mynetnodes = []
   netnodes.each do |n|
     next if n['interface'] == 'InfiniBand' or n['interface'] == 'Myrinet' or HPC_SWITCHES.include?(n['nickname'])
@@ -239,17 +237,31 @@ def generate_dot(netnodes, links, ofile)
 
   # remove duplicate reverse links between switches. We keep only the one where the target is the second node.
   links.delete_if { |l| ['router', 'switch'].include?(l['target_kind']) and l['target'] == l['nicknames'].first }
-
+  fd = File::new("network_#{site}.dot", 'w')
+  fd.puts "graph graphname {"
+  router = mynetnodes.select { |n| n['kind'] == 'router' }.first['nickname']
+  fd.puts <<-EOF
+  root="#{router}";
+  overlap=false;
+  splines=true;
+  ranksep=0.6;
+        EOF
   # output remaining netnodes
   mynetnodes.each do |n|
-    fd.puts "\"#{n['nickname']}\";"
+    if n['kind'] == 'node'
+      fd.puts "\"#{n['nickname']}\";"
+    else
+      fd.puts "\"#{n['nickname']}\" [shape=box];"
+    end
   end
   # finally output links
-  links.uniq.each do |l|
+  links.each do |l|
     if l['rate'] == 1*10**9
       r = '1G'
     elsif l['rate'] == 10*10**9
       r = '10G'
+    elsif l['rate'] == 40*10**9
+      r = '40G'
     else
       raise "Invalid rate: #{l['rate']}"
     end
@@ -257,6 +269,8 @@ def generate_dot(netnodes, links, ofile)
   end
   fd.puts "}"
   fd.close
+  system("twopi -Tpdf network_#{site}.dot -onetwork_#{site}.pdf")
+  system("twopi -Tpng network_#{site}.dot -onetwork_#{site}.png")
 end