diff --git a/scripts/graph.pl b/scripts/graph.pl
index 845a0daae..63247df25 100755
--- a/scripts/graph.pl
+++ b/scripts/graph.pl
@@ -6,7 +6,22 @@ use File::Spec;
 my $traceLevel = 3;
 
 # whether to box the clusters by sub-folder, but always color nodes regardless
-my $clustering = 0;
+my @clusterlist = qw(
+   /xml
+   /export
+   /menus
+   /effects/VST
+   /effects/ladspa
+   /effects/lv2
+   /effects/nyquist
+   /effects/vamp
+);
+my %clusters;
+@clusters{@clusterlist} = ();
+sub clustering
+{
+   return exists( $clusters{ $_[0] } );
+}
 
 # whether to prune redundant arcs implied in transitive closure
 my $pruning = 1;
@@ -285,9 +300,14 @@ open my $fh, ">", $fname or die "Can't open file";
 *STDOUT = $fh;
 
 # header
-my $graphAttr = $clustering ? "labeljust=l labelloc=b" : "";
+my $graphAttr =
+   # $clustering ?
+   "labeljust=l labelloc=b"
+   # : ""
+   ;
 print "strict digraph{ graph [";
 print $graphAttr;
+print " newrank=true";
 #print " mclimit=0.01";
 #print " nslimit=1";
 #print " rank=max";
@@ -303,10 +323,11 @@ print "// Nodes\n";
 my $hue = 0;
 my $saturation = 1.0;
 my $huestep = 1.0 / $nFolders;
-my $cluster = $clustering ? "cluster" : "";
-my $clusterAttr = $clustering ? "style=dashed " : "";
 sub subgraph{
    my ($foldername, $hashref) = @_;
+   my $clustered = clustering( $foldername );
+   my $cluster = $clustered ? "cluster" : "";
+   my $clusterAttr = $clustered ? "style=bold color=\"blue\"" : "";
    print STDERR "subgraph \"$foldername\"\n" if $traceLevel >= 3;
    my $color = "${hue},${saturation},1.0";
    $hue += $huestep;
@@ -347,6 +368,7 @@ while( my ($head, $data) = each( %quotientGraph ) ) {
    foreach my $tail ( @{$$data[0]} ) {
       print "   \"$head\" -> \"$tail\" [";
       # insert arc attributes here as key=value pairs,
+      print "penwidth=2.0";
       # separated by spaces
       print"]\n";
    }