diff --git a/data/hover_collapse.svg b/data/hover_collapse.svg
new file mode 100644
--- /dev/null
+++ b/data/hover_collapse.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="35"
+   height="17.5"
+   id="svg3346"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="hover_collapse.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="911"
+     inkscape:window-height="817"
+     id="namedview15"
+     showgrid="false"
+     inkscape:zoom="3.56"
+     inkscape:cx="2.9494382"
+     inkscape:cy="25"
+     inkscape:window-x="737"
+     inkscape:window-y="160"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs3348">
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Send"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+         id="path4223"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4217"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         id="path4193"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Send-0"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+         id="path4223-2"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata3351">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="matrix(0.35,0,0,0.35,-9.8,-350.82674)"
+     id="layer1">
+    <rect
+       width="93"
+       height="43"
+       ry="0"
+       x="31.5"
+       y="1005.8621"
+       id="rect4164"
+       style="color:#000000;fill:none;stroke:#ff0000;stroke-width:7.00000047999999975;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:7.00000047999999975, 14.00000095000000044;stroke-dashoffset:9.80000066999999930;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  </g>
+</svg>
diff --git a/data/hover_evaluate.svg b/data/hover_evaluate.svg
new file mode 100644
--- /dev/null
+++ b/data/hover_evaluate.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="35"
+   height="17.5"
+   id="svg5999"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="icon_evaluate.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1441"
+     inkscape:window-height="1051"
+     id="namedview2999"
+     showgrid="false"
+     inkscape:zoom="3.56"
+     inkscape:cx="-80.842697"
+     inkscape:cy="25"
+     inkscape:window-x="0"
+     inkscape:window-y="14"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs6001">
+    <marker
+       style="overflow:visible"
+       id="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         id="path4217"
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2MendB"
+       orient="auto"
+       refY="0"
+       refX="0"
+       inkscape:stockid="Arrow2MendB">
+      <path
+         inkscape:connector-curvature="0"
+         style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.625;fill:#ff0000;fill-rule:evenodd"
+         id="path3019"
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2MendBQ"
+       orient="auto"
+       refY="0"
+       refX="0"
+       inkscape:stockid="Arrow2MendBQ">
+      <path
+         inkscape:connector-curvature="0"
+         style="stroke-linejoin:round;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;fill:#000000"
+         id="path3820"
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2MendBQO"
+       orient="auto"
+       refY="0"
+       refX="0"
+       inkscape:stockid="Arrow2MendBQO">
+      <path
+         inkscape:connector-curvature="0"
+         style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.625;fill:#ff0000;fill-rule:evenodd"
+         id="path3894"
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata6004">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     style="stroke:#ff0000;stroke-opacity:1"
+     id="layer1"
+     transform="matrix(0.35,0,0,0.35,-84.109376,-19.205165)">
+    <path
+       inkscape:connector-curvature="0"
+       style="stroke-linejoin:miter;marker-end:url(#Arrow2MendBQO);stroke-opacity:1;stroke:#ff0000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:7.00000047999999975;fill:none"
+       id="path4184-6"
+       d="m 244.89904,79.939158 85.05631,0" />
+  </g>
+</svg>
diff --git a/data/icon_collapse.svg b/data/icon_collapse.svg
new file mode 100644
--- /dev/null
+++ b/data/icon_collapse.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="35"
+   height="17.5"
+   id="svg3346"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="icon_collapse.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="958"
+     inkscape:window-height="1064"
+     id="namedview15"
+     showgrid="false"
+     inkscape:zoom="3.56"
+     inkscape:cx="2.9494382"
+     inkscape:cy="25"
+     inkscape:window-x="960"
+     inkscape:window-y="14"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg3346" />
+  <defs
+     id="defs3348">
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Send"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+         id="path4223"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4217"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         id="path4193"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Send-0"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-0.3,0,0,-0.3,0.69,0)"
+         id="path4223-2"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata3351">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="matrix(0.35,0,0,0.35,-9.8,-350.82674)"
+     id="layer1">
+    <rect
+       width="93"
+       height="43"
+       ry="0"
+       x="31.5"
+       y="1005.8621"
+       id="rect4164"
+       style="color:#000000;fill:none;stroke:#000000;stroke-width:7.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:7.00000048, 14.00000095;stroke-dashoffset:9.80000067;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  </g>
+</svg>
diff --git a/data/icon_evaluate.svg b/data/icon_evaluate.svg
new file mode 100644
--- /dev/null
+++ b/data/icon_evaluate.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="35"
+   height="17.5"
+   id="svg5999"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="hover_evaluate.svg">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1441"
+     inkscape:window-height="1051"
+     id="namedview2999"
+     showgrid="false"
+     inkscape:zoom="3.56"
+     inkscape:cx="-80.842697"
+     inkscape:cy="25"
+     inkscape:window-x="0"
+     inkscape:window-y="14"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg5999" />
+  <defs
+     id="defs6001">
+    <marker
+       style="overflow:visible"
+       id="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         id="path4217"
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2MendB"
+       orient="auto"
+       refY="0"
+       refX="0"
+       inkscape:stockid="Arrow2MendB">
+      <path
+         inkscape:connector-curvature="0"
+         style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.625;fill:#ff0000;fill-rule:evenodd"
+         id="path3019"
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2MendBQ"
+       orient="auto"
+       refY="0"
+       refX="0"
+       inkscape:stockid="Arrow2MendBQ">
+      <path
+         inkscape:connector-curvature="0"
+         style="stroke-linejoin:round;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;fill:#000000"
+         id="path3820"
+         transform="scale(-0.6,-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata6004">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     style=""
+     id="layer1"
+     transform="matrix(0.35,0,0,0.35,-84.109376,-19.205165)">
+    <path
+       inkscape:connector-curvature="0"
+       style="stroke-linejoin:miter;marker-end:url(#Arrow2MendBQ);stroke-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-width:7.00000047999999975;fill:none"
+       id="path4184-6"
+       d="m 244.89904,79.939158 85.05631,0" />
+  </g>
+</svg>
diff --git a/data/main.ui b/data/main.ui
--- a/data/main.ui
+++ b/data/main.ui
@@ -39,6 +39,11 @@
     <property name="can_focus">False</property>
     <property name="stock">gtk-save</property>
   </object>
+  <object class="GtkImage" id="image10">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-undo</property>
+  </object>
   <object class="GtkImage" id="image2">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -69,6 +74,16 @@
     <property name="can_focus">False</property>
     <property name="stock">gtk-justify-left</property>
   </object>
+  <object class="GtkImage" id="image8">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-media-rewind</property>
+  </object>
+  <object class="GtkImage" id="image9">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-media-forward</property>
+  </object>
   <object class="GtkWindow" id="legenddialog">
     <property name="can_focus">False</property>
     <property name="title" translatable="yes">ghc-vis Legend</property>
@@ -103,7 +118,6 @@
             <child>
               <object class="GtkButton" id="cancelbutton">
                 <property name="label">gtk-cancel</property>
-                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
@@ -118,7 +132,6 @@
             <child>
               <object class="GtkButton" id="savebutton">
                 <property name="label">gtk-save</property>
-                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="has_focus">True</property>
@@ -167,7 +180,6 @@
             <property name="can_focus">False</property>
             <child>
               <object class="GtkMenuItem" id="menuitem1">
-                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_File</property>
@@ -179,7 +191,6 @@
                     <child>
                       <object class="GtkImageMenuItem" id="clear">
                         <property name="label" translatable="yes">Clear (:clear, c)</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="image">image3</property>
@@ -189,7 +200,6 @@
                     <child>
                       <object class="GtkImageMenuItem" id="export">
                         <property name="label" translatable="yes">Export (:export)</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="image">image2</property>
@@ -198,7 +208,6 @@
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                       </object>
@@ -206,7 +215,6 @@
                     <child>
                       <object class="GtkImageMenuItem" id="quit">
                         <property name="label">gtk-quit</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
@@ -219,7 +227,6 @@
             </child>
             <child>
               <object class="GtkMenuItem" id="menuitem3">
-                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_View</property>
@@ -229,9 +236,17 @@
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
+                      <object class="GtkImageMenuItem" id="restore">
+                        <property name="label" translatable="yes">Restore collapsed nodes (:restore, C)</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="image">image10</property>
+                        <property name="use_stock">False</property>
+                      </object>
+                    </child>
+                    <child>
                       <object class="GtkImageMenuItem" id="switch">
                         <property name="label" translatable="yes">Switch (:switch, v)</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="image">image4</property>
@@ -241,7 +256,6 @@
                     <child>
                       <object class="GtkImageMenuItem" id="update">
                         <property name="label" translatable="yes">Update (:update, u)</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="image">image5</property>
@@ -253,8 +267,39 @@
               </object>
             </child>
             <child>
+              <object class="GtkMenuItem" id="menuitem2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">_History</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu4">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="timeback">
+                        <property name="label" translatable="yes">Back (:timeback, ,)</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="image">image8</property>
+                        <property name="use_stock">False</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="timeforward">
+                        <property name="label" translatable="yes">Forward (:timeforward, .)</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="image">image9</property>
+                        <property name="use_stock">False</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
               <object class="GtkMenuItem" id="menuitem4">
-                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Help</property>
@@ -266,7 +311,6 @@
                     <child>
                       <object class="GtkImageMenuItem" id="legend">
                         <property name="label" translatable="yes">Legend</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="image">image7</property>
@@ -276,7 +320,6 @@
                     <child>
                       <object class="GtkImageMenuItem" id="about">
                         <property name="label">gtk-about</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
diff --git a/data/welcome.svg b/data/welcome.svg
--- a/data/welcome.svg
+++ b/data/welcome.svg
@@ -8,1480 +8,1314 @@
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="919.96094"
-   height="889.92102"
-   id="svg3450"
-   version="1.1"
-   inkscape:version="0.48.3.1 r9886"
-   sodipodi:docname="welcome.svg">
-  <defs
-     id="defs3452">
-    <g
-       id="g3824">
-      <symbol
-         id="glyph0-0"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3827"
-           d="m 1.4375,5.125 0,-25.578125 14.5,0 0,25.578125 z m 1.640625,-1.609375 11.25,0 0,-22.328125 -11.25,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-1"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3830"
-           d="m 2.734375,-22.03125 2.609375,0 0,22.03125 -2.609375,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-2"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3833"
-           d="m 3.40625,-3.59375 2.984375,0 0,3.59375 -2.984375,0 z m 0,-11.40625 2.984375,0 0,3.59375 -2.984375,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-3"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3836"
-           d=""
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-4"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3839"
-           d="m 8.984375,-22 c -1.261719,2.167969 -2.199219,4.3125 -2.8125,6.4375 C 5.554688,-13.4375 5.25,-11.285156 5.25,-9.109375 c 0,2.1875 0.304688,4.351563 0.921875,6.484375 0.625,2.136719 1.5625,4.285156 2.8125,6.453125 l -2.265625,0 C 5.3125,1.609375 4.253906,-0.570312 3.546875,-2.71875 2.847656,-4.863281 2.5,-6.992188 2.5,-9.109375 c 0,-2.101563 0.347656,-4.21875 1.046875,-6.34375 C 4.242188,-17.585938 5.300781,-19.769531 6.71875,-22 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-5"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3842"
-           d="m 15.515625,-20.453125 0,2.796875 c -1.085937,-0.519531 -2.109375,-0.90625 -3.078125,-1.15625 -0.960938,-0.257812 -1.886719,-0.390625 -2.78125,-0.390625 -1.554688,0 -2.757812,0.304687 -3.609375,0.90625 -0.84375,0.605469 -1.265625,1.464844 -1.265625,2.578125 0,0.9375 0.28125,1.648438 0.84375,2.125 0.5625,0.46875 1.628906,0.851562 3.203125,1.140625 l 1.71875,0.359375 c 2.132813,0.40625 3.707031,1.125 4.71875,2.15625 1.019531,1.023438 1.53125,2.390625 1.53125,4.109375 0,2.042969 -0.6875,3.59375 -2.0625,4.65625 -1.375,1.054687 -3.390625,1.578125 -6.046875,1.578125 -1,0 -2.0625,-0.117188 -3.1875,-0.34375 -1.125,-0.21875 -2.292969,-0.550781 -3.5,-1 L 2,-3.875 c 1.15625,0.648438 2.289062,1.136719 3.40625,1.46875 1.113281,0.335938 2.207031,0.5 3.28125,0.5 1.632812,0 2.894531,-0.320312 3.78125,-0.96875 0.894531,-0.644531 1.34375,-1.5625 1.34375,-2.75 0,-1.03125 -0.324219,-1.835938 -0.96875,-2.421875 -0.636719,-0.59375 -1.679688,-1.035156 -3.125,-1.328125 l -1.75,-0.34375 c -2.136719,-0.414062 -3.683594,-1.078125 -4.640625,-1.984375 -0.949219,-0.90625 -1.421875,-2.164063 -1.421875,-3.78125 0,-1.875 0.65625,-3.347656 1.96875,-4.421875 1.320312,-1.082031 3.140625,-1.625 5.453125,-1.625 0.988281,0 2,0.09375 3.03125,0.28125 1.03125,0.179688 2.082031,0.445312 3.15625,0.796875 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-6"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3845"
-           d="m 14.828125,-12.765625 -4.125,0 -1.1875,4.734375 4.15625,0 z m -2.125,-8.046875 -1.46875,5.875 4.125,0 1.484375,-5.875 2.265625,0 -1.453125,5.875 4.421875,0 0,2.171875 -4.96875,0 -1.171875,4.734375 4.515625,0 0,2.171875 -5.0625,0 L 13.921875,0 11.65625,0 l 1.453125,-5.859375 -4.140625,0 L 7.5,0 5.21875,0 l 1.484375,-5.859375 -4.46875,0 0,-2.171875 4.984375,0 1.1875,-4.734375 -4.546875,0 0,-2.171875 5.109375,0 1.4375,-5.875 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-7"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3848"
-           d="m 3.59375,-2.40625 4.671875,0 0,-16.125 -5.078125,1.015625 0,-2.609375 5.046875,-1.015625 2.875,0 0,18.734375 4.671875,0 0,2.40625 -12.1875,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-8"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3851"
-           d="m 2.328125,-22 2.265625,0 c 1.414062,2.230469 2.472656,4.414062 3.171875,6.546875 0.707031,2.125 1.0625,4.242187 1.0625,6.34375 0,2.117187 -0.355469,4.246094 -1.0625,6.390625 C 7.066406,-0.570312 6.007812,1.609375 4.59375,3.828125 l -2.265625,0 C 3.578125,1.660156 4.507812,-0.488281 5.125,-2.625 5.75,-4.757812 6.0625,-6.921875 6.0625,-9.109375 6.0625,-11.285156 5.75,-13.4375 5.125,-15.5625 4.507812,-17.6875 3.578125,-19.832031 2.328125,-22 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-9"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3854"
-           d="m 5.5625,-2.40625 9.984375,0 0,2.40625 L 2.125,0 l 0,-2.40625 c 1.082031,-1.125 2.5625,-2.628906 4.4375,-4.515625 1.875,-1.894531 3.050781,-3.117187 3.53125,-3.671875 0.914062,-1.03125 1.554688,-1.898438 1.921875,-2.609375 0.363281,-0.71875 0.546875,-1.421875 0.546875,-2.109375 0,-1.125 -0.398438,-2.035156 -1.1875,-2.734375 -0.78125,-0.707031 -1.808594,-1.0625 -3.078125,-1.0625 -0.898437,0 -1.84375,0.15625 -2.84375,0.46875 -0.992187,0.304687 -2.054687,0.773437 -3.1875,1.40625 l 0,-2.890625 C 3.421875,-20.582031 4.5,-20.929688 5.5,-21.171875 c 1,-0.238281 1.910156,-0.359375 2.734375,-0.359375 2.195313,0 3.945313,0.554688 5.25,1.65625 1.300781,1.09375 1.953125,2.558594 1.953125,4.390625 0,0.867187 -0.167969,1.6875 -0.5,2.46875 -0.324219,0.773437 -0.914062,1.6875 -1.765625,2.75 -0.242187,0.273437 -0.996094,1.0625 -2.265625,2.375 -1.261719,1.304687 -3.042969,3.132813 -5.34375,5.484375 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-10"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3857"
-           d="m 11.765625,-11.40625 c 1.375,0.304688 2.441406,0.917969 3.203125,1.84375 0.769531,0.917969 1.15625,2.058594 1.15625,3.421875 0,2.085937 -0.71875,3.699219 -2.15625,4.84375 -1.429688,1.136719 -3.464844,1.703125 -6.109375,1.703125 -0.886719,0 -1.804687,-0.089844 -2.75,-0.265625 -0.9375,-0.1640625 -1.90625,-0.425781 -2.90625,-0.78125 l 0,-2.765625 C 3.003906,-2.9375 3.875,-2.582031 4.8125,-2.34375 5.757812,-2.113281 6.75,-2 7.78125,-2 c 1.789062,0 3.15625,-0.351562 4.09375,-1.0625 0.9375,-0.707031 1.40625,-1.734375 1.40625,-3.078125 0,-1.25 -0.4375,-2.222656 -1.3125,-2.921875 -0.875,-0.707031 -2.089844,-1.0625 -3.640625,-1.0625 l -2.46875,0 0,-2.34375 2.578125,0 c 1.40625,0 2.476562,-0.28125 3.21875,-0.84375 0.75,-0.5625 1.125,-1.375 1.125,-2.4375 0,-1.082031 -0.386719,-1.910156 -1.15625,-2.484375 -0.761719,-0.582031 -1.859375,-0.875 -3.296875,-0.875 -0.78125,0 -1.625,0.08594 -2.53125,0.25 -0.898437,0.167969 -1.882813,0.433594 -2.953125,0.796875 l 0,-2.5625 c 1.082031,-0.300781 2.097656,-0.523438 3.046875,-0.671875 0.957031,-0.15625 1.851563,-0.234375 2.6875,-0.234375 2.175781,0 3.894531,0.496094 5.15625,1.484375 1.269531,0.992187 1.90625,2.324219 1.90625,4 0,1.179687 -0.339844,2.171875 -1.015625,2.984375 -0.667969,0.804688 -1.621094,1.355469 -2.859375,1.65625 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-11"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3860"
-           d="m 2.5,-22.03125 6,0 0,2.015625 -3.40625,0 0,21.8125 3.40625,0 0,2.03125 -6,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-12"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3863"
-           d="m 8.828125,-22.03125 0,25.859375 -6.015625,0 0,-2.03125 3.390625,0 0,-21.8125 -3.390625,0 0,-2.015625 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-13"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3866"
-           d="m 14.125,-7.921875 c 0,-1.914063 -0.398438,-3.414063 -1.1875,-4.5 -0.792969,-1.09375 -1.875,-1.640625 -3.25,-1.640625 -1.375,0 -2.460938,0.546875 -3.25,1.640625 -0.792969,1.085937 -1.1875,2.585937 -1.1875,4.5 0,1.917969 0.394531,3.421875 1.1875,4.515625 0.789062,1.09375 1.875,1.640625 3.25,1.640625 1.375,0 2.457031,-0.546875 3.25,-1.640625 C 13.726562,-4.5 14.125,-6.003906 14.125,-7.921875 z m -8.875,-5.53125 c 0.550781,-0.945313 1.242188,-1.644531 2.078125,-2.09375 0.832031,-0.457031 1.832031,-0.6875 3,-0.6875 1.925781,0 3.488281,0.765625 4.6875,2.296875 1.207031,1.523438 1.8125,3.527344 1.8125,6.015625 0,2.5 -0.605469,4.515625 -1.8125,6.046875 -1.199219,1.523438 -2.761719,2.28125 -4.6875,2.28125 -1.167969,0 -2.167969,-0.230469 -3,-0.6875 C 6.492188,-0.738281 5.800781,-1.4375 5.25,-2.375 l 0,2.375 -2.609375,0 0,-22.03125 2.609375,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-14"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3869"
-           d="m 9.21875,-19.265625 c -1.46875,0 -2.578125,0.730469 -3.328125,2.1875 -0.742187,1.449219 -1.109375,3.625 -1.109375,6.53125 0,2.898437 0.367188,5.070313 1.109375,6.515625 0.75,1.449219 1.859375,2.171875 3.328125,2.171875 1.476562,0 2.585938,-0.722656 3.328125,-2.171875 0.75,-1.445312 1.125,-3.617188 1.125,-6.515625 0,-2.90625 -0.375,-5.082031 -1.125,-6.53125 -0.742187,-1.457031 -1.851563,-2.1875 -3.328125,-2.1875 z m 0,-2.265625 c 2.363281,0 4.171875,0.9375 5.421875,2.8125 1.257813,1.875 1.890625,4.601562 1.890625,8.171875 0,3.554687 -0.632812,6.265625 -1.890625,8.140625 -1.25,1.875 -3.058594,2.8125 -5.421875,2.8125 -2.367188,0 -4.179688,-0.9375 -5.4375,-2.8125 -1.25,-1.875 -1.875,-4.585938 -1.875,-8.140625 0,-3.570313 0.625,-6.296875 1.875,-8.171875 1.257812,-1.875 3.070312,-2.8125 5.4375,-2.8125 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-15"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3872"
-           d="m 10.953125,-18.65625 -7.21875,11.296875 7.21875,0 z m -0.75,-2.484375 3.609375,0 0,13.78125 3.015625,0 0,2.375 -3.015625,0 0,4.984375 -2.859375,0 0,-4.984375 -9.53125,0 0,-2.765625 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-16"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3875"
-           d="M 15.921875,-15.859375 10.1875,-8.140625 16.21875,0 13.140625,0 8.53125,-6.234375 3.90625,0 0.828125,0 7,-8.296875 l -5.640625,-7.5625 3.078125,0 4.203125,5.65625 4.203125,-5.65625 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-17"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3878"
-           d="m 5.3125,-20.359375 0,4.5 5.359375,0 0,2.03125 -5.359375,0 0,8.609375 c 0,1.292969 0.175781,2.121094 0.53125,2.484375 C 6.195312,-2.367188 6.914062,-2.1875 8,-2.1875 l 2.671875,0 0,2.1875 L 8,0 C 5.988281,0 4.597656,-0.375 3.828125,-1.125 3.066406,-1.875 2.6875,-3.238281 2.6875,-5.21875 l 0,-8.609375 -1.90625,0 0,-2.03125 1.90625,0 0,-4.5 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-18"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3881"
-           d="m 3.40625,-3.59375 2.984375,0 0,2.4375 L 4.0625,3.375 l -1.828125,0 1.171875,-4.53125 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-19"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path3884"
-           d="M 9.328125,1.46875 C 8.597656,3.363281 7.878906,4.597656 7.171875,5.171875 6.472656,5.742188 5.539062,6.03125 4.375,6.03125 l -2.078125,0 0,-2.171875 1.53125,0 C 4.546875,3.859375 5.101562,3.6875 5.5,3.34375 5.894531,3 6.332031,2.195312 6.8125,0.9375 L 7.28125,-0.25 0.859375,-15.859375 l 2.765625,0 4.953125,12.40625 4.953125,-12.40625 2.765625,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-    </g>
-    <g
-       id="g4592">
-      <symbol
-         id="glyph0-0-3"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4595"
-           d="m 1.296875,4.59375 0,-22.921875 13,0 0,22.921875 z M 2.75,3.15625 l 10.09375,0 0,-20.03125 -10.09375,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph0-1-8"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4598"
-           d="m 3.046875,-3.21875 2.671875,0 0,3.21875 -2.671875,0 z m 0,-10.21875 2.671875,0 0,3.21875 -2.671875,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph1-0"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4601"
-           d="m 1.140625,4.0625 0,-20.28125 11.5,0 0,20.28125 z M 2.4375,2.78125 l 8.921875,0 0,-17.703125 -8.921875,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph1-1"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4604"
-           d="m 7.859375,-14.53125 -3.078125,8.34375 6.171875,0 z m -1.28125,-2.234375 2.578125,0 L 15.546875,0 13.1875,0 l -1.53125,-4.296875 -7.5625,0 L 2.578125,0 0.1875,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph1-2"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4607"
-           d="m 4.53125,-14.90625 0,6.296875 2.84375,0 c 1.0625,0 1.878906,-0.269531 2.453125,-0.8125 0.570313,-0.550781 0.859375,-1.332031 0.859375,-2.34375 0,-1 -0.289062,-1.769531 -0.859375,-2.3125 C 9.253906,-14.628906 8.4375,-14.90625 7.375,-14.90625 z M 2.25,-16.765625 l 5.125,0 c 1.882812,0 3.304688,0.429687 4.265625,1.28125 0.957031,0.84375 1.4375,2.085937 1.4375,3.71875 0,1.65625 -0.480469,2.914063 -1.4375,3.765625 -0.960937,0.84375 -2.382813,1.265625 -4.265625,1.265625 l -2.84375,0 L 4.53125,0 2.25,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph2-0"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4610"
-           d="m 1.140625,4.0625 0,-20.28125 11.5,0 0,20.28125 z M 2.4375,2.78125 l 8.921875,0 0,-17.703125 -8.921875,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph2-1"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4613"
-           d="m 12.3125,-16.21875 0,2.21875 c -0.867188,-0.414062 -1.683594,-0.722656 -2.453125,-0.921875 -0.761719,-0.207031 -1.496094,-0.3125 -2.203125,-0.3125 -1.230469,0 -2.183594,0.242187 -2.859375,0.71875 -0.667969,0.480469 -1,1.164063 -1,2.046875 0,0.742188 0.21875,1.304688 0.65625,1.6875 C 4.898438,-10.40625 5.75,-10.101562 7,-9.875 l 1.359375,0.28125 c 1.695313,0.324219 2.945313,0.890625 3.75,1.703125 0.800781,0.8125 1.203125,1.902344 1.203125,3.265625 0,1.625 -0.546875,2.859375 -1.640625,3.703125 -1.085937,0.8359375 -2.679687,1.25 -4.78125,1.25 -0.792969,0 -1.636719,-0.09375 -2.53125,-0.28125 -0.898437,-0.175781 -1.824219,-0.4375 -2.78125,-0.78125 l 0,-2.34375 c 0.925781,0.523437 1.828125,0.914063 2.703125,1.171875 0.882812,0.261719 1.753906,0.390625 2.609375,0.390625 1.300781,0 2.300781,-0.253906 3,-0.765625 0.707031,-0.507812 1.0625,-1.234375 1.0625,-2.171875 0,-0.820313 -0.257813,-1.46875 -0.765625,-1.9375 -0.5,-0.46875 -1.328125,-0.816406 -2.484375,-1.046875 l -1.375,-0.265625 C 4.628906,-8.035156 3.398438,-8.5625 2.640625,-9.28125 c -0.75,-0.71875 -1.125,-1.71875 -1.125,-3 0,-1.488281 0.519531,-2.660156 1.5625,-3.515625 1.050781,-0.851563 2.492187,-1.28125 4.328125,-1.28125 0.78125,0 1.578125,0.07422 2.390625,0.21875 0.820313,0.148437 1.660156,0.359375 2.515625,0.640625 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph2-2"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4616"
-           d="m 11.765625,-10.125 -3.28125,0 -0.9375,3.75 3.296875,0 z m -1.6875,-6.390625 -1.171875,4.671875 3.28125,0 1.171875,-4.671875 1.796875,0 L 14,-11.84375 l 3.515625,0 0,1.71875 -3.953125,0 -0.921875,3.75 3.578125,0 0,1.71875 -4.015625,0 L 11.046875,0 9.25,0 l 1.15625,-4.65625 -3.296875,0 L 5.953125,0 4.140625,0 5.3125,-4.65625 l -3.53125,0 0,-1.71875 3.953125,0 0.9375,-3.75 -3.609375,0 0,-1.71875 4.046875,0 L 8.25,-16.515625 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph2-3"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4619"
-           d=""
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph2-4"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4622"
-           d="m 2.859375,-1.90625 3.703125,0 0,-12.796875 -4.03125,0.8125 0,-2.0625 4,-0.8125 2.28125,0 0,14.859375 3.703125,0 0,1.90625 -9.65625,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph2-5"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4625"
-           d="m 4.40625,-1.90625 7.921875,0 0,1.90625 -10.640625,0 0,-1.90625 C 2.539062,-2.800781 3.710938,-4 5.203125,-5.5 6.691406,-7 7.625,-7.96875 8,-8.40625 c 0.726562,-0.8125 1.238281,-1.5 1.53125,-2.0625 0.289062,-0.570312 0.4375,-1.128906 0.4375,-1.671875 0,-0.894531 -0.3125,-1.617187 -0.9375,-2.171875 -0.625,-0.5625 -1.445312,-0.84375 -2.453125,-0.84375 -0.710937,0 -1.460937,0.125 -2.25,0.375 -0.792969,0.242188 -1.636719,0.609375 -2.53125,1.109375 l 0,-2.28125 c 0.914063,-0.375 1.769531,-0.65625 2.5625,-0.84375 0.789063,-0.1875 1.515625,-0.28125 2.171875,-0.28125 1.738281,0 3.125,0.4375 4.15625,1.3125 1.03125,0.867187 1.546875,2.027344 1.546875,3.484375 0,0.6875 -0.132813,1.339844 -0.390625,1.953125 -0.25,0.617187 -0.71875,1.34375 -1.40625,2.1875 -0.1875,0.21875 -0.78125,0.851563 -1.78125,1.890625 -1,1.03125 -2.417969,2.480469 -4.25,4.34375 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph2-6"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4628"
-           d="m 9.328125,-9.046875 c 1.09375,0.242187 1.941406,0.730469 2.546875,1.46875 0.613281,0.730469 0.921875,1.632813 0.921875,2.703125 0,1.65625 -0.574219,2.9375 -1.71875,3.84375 -1.136719,0.90625 -2.75,1.359375 -4.84375,1.359375 -0.710937,0 -1.4375,-0.074219 -2.1875,-0.21875 C 3.304688,-0.0234375 2.539062,-0.226562 1.75,-0.5 l 0,-2.203125 c 0.632812,0.375 1.320312,0.65625 2.0625,0.84375 0.75,0.1875 1.535156,0.28125 2.359375,0.28125 1.414063,0 2.492187,-0.28125 3.234375,-0.84375 0.75,-0.5625 1.125,-1.378906 1.125,-2.453125 0,-0.988281 -0.351562,-1.757812 -1.046875,-2.3125 -0.6875,-0.5625 -1.648437,-0.84375 -2.875,-0.84375 l -1.953125,0 0,-1.859375 2.03125,0 c 1.113281,0 1.96875,-0.222656 2.5625,-0.671875 0.59375,-0.445312 0.890625,-1.085938 0.890625,-1.921875 0,-0.863281 -0.308594,-1.523437 -0.921875,-1.984375 -0.605469,-0.457031 -1.476562,-0.6875 -2.609375,-0.6875 -0.625,0 -1.296875,0.07031 -2.015625,0.203125 -0.710938,0.136719 -1.492188,0.34375 -2.34375,0.625 l 0,-2.03125 c 0.863281,-0.238281 1.671875,-0.414063 2.421875,-0.53125 0.757813,-0.125 1.472656,-0.1875 2.140625,-0.1875 1.71875,0 3.078125,0.398437 4.078125,1.1875 1.007813,0.78125 1.515625,1.839844 1.515625,3.171875 0,0.929688 -0.273438,1.714844 -0.8125,2.359375 -0.53125,0.636719 -1.289062,1.074219 -2.265625,1.3125 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph2-7"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4631"
-           d="m 8.6875,-14.796875 -5.71875,8.953125 5.71875,0 z m -0.59375,-1.96875 2.859375,0 0,10.921875 2.390625,0 0,1.890625 -2.390625,0 0,3.953125 -2.265625,0 0,-3.953125 -7.5625,0 0,-2.1875 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph3-0"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4634"
-           d="m 1.203125,4.25 0,-21.171875 12,0 0,21.171875 z m 1.34375,-1.34375 9.3125,0 0,-18.484375 -9.3125,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph3-1"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4637"
-           d="m 2.0625,-18.234375 4.96875,0 0,1.671875 -2.8125,0 0,18.046875 2.8125,0 0,1.6875 -4.96875,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph3-2"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4640"
-           d="m 7.296875,-18.234375 0,21.40625 -4.96875,0 0,-1.6875 2.8125,0 0,-18.046875 -2.8125,0 0,-1.671875 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph3-3"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4643"
-           d="m 7.4375,-18.21875 c -1.042969,1.804688 -1.820312,3.585938 -2.328125,5.34375 -0.511719,1.75 -0.765625,3.53125 -0.765625,5.34375 0,1.804688 0.253906,3.589844 0.765625,5.359375 0.519531,1.773437 1.296875,3.550781 2.328125,5.34375 l -1.875,0 C 4.394531,1.328125 3.519531,-0.476562 2.9375,-2.25 2.351562,-4.019531 2.0625,-5.78125 2.0625,-7.53125 c 0,-1.75 0.285156,-3.503906 0.859375,-5.265625 C 3.503906,-14.566406 4.382812,-16.375 5.5625,-18.21875 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph3-4"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4646"
-           d="m 1.921875,-18.21875 1.875,0 c 1.175781,1.84375 2.050781,3.652344 2.625,5.421875 0.582031,1.761719 0.875,3.515625 0.875,5.265625 0,1.75 -0.292969,3.511719 -0.875,5.28125 -0.574219,1.773438 -1.449219,3.578125 -2.625,5.421875 l -1.875,0 C 2.960938,1.378906 3.738281,-0.398438 4.25,-2.171875 4.757812,-3.941406 5.015625,-5.726562 5.015625,-7.53125 5.015625,-9.34375 4.757812,-11.125 4.25,-12.875 3.738281,-14.632812 2.960938,-16.414062 1.921875,-18.21875 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph4-0"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4649"
-           d="m 1.140625,4.0625 0,-20.28125 11.5,0 0,20.28125 z M 2.4375,2.78125 l 8.921875,0 0,-17.703125 -8.921875,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph4-1"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4652"
-           d="m 4.53125,-8 0,6.140625 3.640625,0 c 1.21875,0 2.117187,-0.25 2.703125,-0.75 0.59375,-0.507813 0.890625,-1.285156 0.890625,-2.328125 0,-1.050781 -0.296875,-1.820312 -0.890625,-2.3125 C 10.289062,-7.75 9.390625,-8 8.171875,-8 z m 0,-6.90625 0,5.0625 3.359375,0 c 1.101563,0 1.925781,-0.207031 2.46875,-0.625 0.539063,-0.414062 0.8125,-1.050781 0.8125,-1.90625 0,-0.84375 -0.273437,-1.472656 -0.8125,-1.890625 -0.542969,-0.425781 -1.367187,-0.640625 -2.46875,-0.640625 z M 2.25,-16.765625 l 5.796875,0 c 1.726563,0 3.0625,0.359375 4,1.078125 0.9375,0.71875 1.40625,1.742188 1.40625,3.0625 0,1.03125 -0.242187,1.851562 -0.71875,2.453125 -0.480469,0.605469 -1.183594,0.980469 -2.109375,1.125 1.113281,0.242187 1.976562,0.742187 2.59375,1.5 0.625,0.761719 0.9375,1.714844 0.9375,2.859375 0,1.492188 -0.511719,2.648438 -1.53125,3.46875 C 11.601562,-0.40625 10.15625,0 8.28125,0 L 2.25,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph4-2"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4655"
-           d="m 14.8125,-15.46875 0,2.390625 c -0.761719,-0.71875 -1.574219,-1.25 -2.4375,-1.59375 -0.867188,-0.351563 -1.789062,-0.53125 -2.765625,-0.53125 -1.917969,0 -3.386719,0.589844 -4.40625,1.765625 -1.011719,1.167969 -1.515625,2.859375 -1.515625,5.078125 0,2.210937 0.503906,3.902344 1.515625,5.078125 1.019531,1.167969 2.488281,1.75 4.40625,1.75 0.976563,0 1.898437,-0.175781 2.765625,-0.53125 0.863281,-0.351562 1.675781,-0.882812 2.4375,-1.59375 l 0,2.359375 c -0.792969,0.542969 -1.632812,0.949219 -2.515625,1.21875 -0.886719,0.269531 -1.824219,0.40625 -2.8125,0.40625 -2.542969,0 -4.542969,-0.773437 -6,-2.328125 -1.460937,-1.550781 -2.1875,-3.671875 -2.1875,-6.359375 0,-2.695313 0.726563,-4.820313 2.1875,-6.375 1.457031,-1.5625 3.457031,-2.34375 6,-2.34375 1,0 1.941406,0.136719 2.828125,0.40625 0.882812,0.273437 1.71875,0.671875 2.5,1.203125 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph4-3"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4658"
-           d="m 9.0625,-15.234375 c -1.648438,0 -2.953125,0.617187 -3.921875,1.84375 -0.96875,1.230469 -1.453125,2.90625 -1.453125,5.03125 0,2.105469 0.484375,3.773437 1.453125,5 0.96875,1.230469 2.273437,1.84375 3.921875,1.84375 1.644531,0 2.945312,-0.613281 3.90625,-1.84375 0.96875,-1.226563 1.453125,-2.894531 1.453125,-5 0,-2.125 -0.484375,-3.800781 -1.453125,-5.03125 -0.960938,-1.226563 -2.261719,-1.84375 -3.90625,-1.84375 z m 0,-1.84375 c 2.351562,0 4.234375,0.792969 5.640625,2.375 1.40625,1.574219 2.109375,3.6875 2.109375,6.34375 0,2.636719 -0.703125,4.746094 -2.109375,6.328125 -1.40625,1.574219 -3.289063,2.359375 -5.640625,2.359375 -2.355469,0 -4.242188,-0.785156 -5.65625,-2.359375 C 2,-3.601562 1.296875,-5.710938 1.296875,-8.359375 c 0,-2.65625 0.703125,-4.769531 2.109375,-6.34375 1.414062,-1.582031 3.300781,-2.375 5.65625,-2.375 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph5-0"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4661"
-           d="m 1.25,4.421875 0,-22.046875 12.5,0 0,22.046875 z m 1.40625,-1.390625 9.703125,0 0,-19.25 -9.703125,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph5-1"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4664"
-           d="M 8.046875,1.265625 C 7.410156,2.898438 6.789062,3.960938 6.1875,4.453125 c -0.605469,0.5 -1.414062,0.75 -2.421875,0.75 l -1.78125,0 0,-1.875 1.3125,0 c 0.613281,0 1.09375,-0.152344 1.4375,-0.453125 C 5.078125,2.582031 5.457031,1.894531 5.875,0.8125 L 6.28125,-0.21875 0.75,-13.671875 l 2.375,0 4.265625,10.6875 4.28125,-10.6875 2.375,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph5-2"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4667"
-           d="M 13.71875,-13.671875 8.78125,-7.015625 13.984375,0 11.328125,0 7.34375,-5.375 3.375,0 0.71875,0 l 5.3125,-7.15625 -4.859375,-6.515625 2.65625,0 3.625,4.875 3.625,-4.875 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph6-0"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4670"
-           d="m 1.140625,4.0625 0,-20.28125 11.5,0 0,20.28125 z M 2.4375,2.78125 l 8.921875,0 0,-17.703125 -8.921875,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph6-1"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4673"
-           d="m 2.171875,-17.46875 2.0625,0 0,17.46875 -2.0625,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph6-2"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4676"
-           d="m 4.40625,-1.90625 7.921875,0 0,1.90625 -10.640625,0 0,-1.90625 C 2.539062,-2.800781 3.710938,-4 5.203125,-5.5 6.691406,-7 7.625,-7.96875 8,-8.40625 c 0.726562,-0.8125 1.238281,-1.5 1.53125,-2.0625 0.289062,-0.570312 0.4375,-1.128906 0.4375,-1.671875 0,-0.894531 -0.3125,-1.617187 -0.9375,-2.171875 -0.625,-0.5625 -1.445312,-0.84375 -2.453125,-0.84375 -0.710937,0 -1.460937,0.125 -2.25,0.375 -0.792969,0.242188 -1.636719,0.609375 -2.53125,1.109375 l 0,-2.28125 c 0.914063,-0.375 1.769531,-0.65625 2.5625,-0.84375 0.789063,-0.1875 1.515625,-0.28125 2.171875,-0.28125 1.738281,0 3.125,0.4375 4.15625,1.3125 1.03125,0.867187 1.546875,2.027344 1.546875,3.484375 0,0.6875 -0.132813,1.339844 -0.390625,1.953125 -0.25,0.617187 -0.71875,1.34375 -1.40625,2.1875 -0.1875,0.21875 -0.78125,0.851563 -1.78125,1.890625 -1,1.03125 -2.417969,2.480469 -4.25,4.34375 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph7-0"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4679"
-           d="m 1.203125,4.25 0,-21.171875 12,0 0,21.171875 z m 1.34375,-1.34375 9.3125,0 0,-18.484375 -9.3125,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-      <symbol
-         id="glyph7-1"
-         overflow="visible"
-         style="overflow:visible">
-        <path
-           id="path4682"
-           d="m 2.265625,-18.234375 2.15625,0 0,18.234375 -2.15625,0 z"
-           style="stroke:none"
-           inkscape:connector-curvature="0" />
-      </symbol>
-    </g>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.35"
-     inkscape:cx="435.83443"
-     inkscape:cy="33.42821"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="1278"
-     inkscape:window-height="1008"
-     inkscape:window-x="0"
-     inkscape:window-y="14"
-     inkscape:window-maximized="0"
-     fit-margin-top="20"
-     fit-margin-left="20"
-     fit-margin-right="20"
-     fit-margin-bottom="20" />
-  <metadata
-     id="metadata3455">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(53.377808,-160.09879)">
-    <text
-       xml:space="preserve"
-       style="font-size:144px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
-       x="127.14285"
-       y="289.50504"
-       id="text3464"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         id="tspan3466"
-         x="127.14285"
-         y="289.50504">ghc-vis</tspan></text>
-    <g
-       id="surface287"
-       transform="matrix(0.95750438,0,0,0.95750438,7.1095031,538.67303)">
-      <g
-         id="g3887"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use3889"
-           y="43.740131"
-           x="3.644531"
-           xlink:href="#glyph0-1"
-           width="1"
-           height="1" />
-        <use
-           id="use3891"
-           y="43.740131"
-           x="11.745329"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-        <use
-           id="use3893"
-           y="43.740131"
-           x="21.56879"
-           xlink:href="#glyph0-3"
-           width="1"
-           height="1" />
-      </g>
-      <path
-         id="path3895"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,43.735763)"
-         d="m -8.30078e-4,-18.561456 0,46.560687 c 0,2.762506 2.237335078,4.999841 4.999841078,4.999841 l 233.242869,0 c 2.75982,0 4.99984,-2.237335 4.99984,-4.999841 l 0,-46.560687 c 0,-2.762506 -2.24002,-4.999842 -4.99984,-4.999842 l -233.242869,0 c -2.762506,0 -4.999841078,2.237336 -4.999841078,4.999842 z"
-         style="fill:#7fff7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3897"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,43.735763)"
-         d="m -8.30078e-4,4.717548 243.242550078,0"
-         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g3899"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use3901"
-           y="43.740131"
-           x="63.964844"
-           xlink:href="#glyph0-4"
-           width="1"
-           height="1" />
-        <use
-           id="use3903"
-           y="43.740131"
-           x="75.340126"
-           xlink:href="#glyph0-5"
-           width="1"
-           height="1" />
-        <use
-           id="use3905"
-           y="43.740131"
-           x="93.848099"
-           xlink:href="#glyph0-6"
-           width="1"
-           height="1" />
-        <use
-           id="use3907"
-           y="43.740131"
-           x="118.27863"
-           xlink:href="#glyph0-3"
-           width="1"
-           height="1" />
-        <use
-           id="use3909"
-           y="43.740131"
-           x="127.54684"
-           xlink:href="#glyph0-7"
-           width="1"
-           height="1" />
-        <use
-           id="use3911"
-           y="43.740131"
-           x="146.09753"
-           xlink:href="#glyph0-8"
-           width="1"
-           height="1" />
-        <use
-           id="use3913"
-           y="43.740131"
-           x="157.47281"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-        <use
-           id="use3915"
-           y="43.740131"
-           x="167.29628"
-           xlink:href="#glyph0-4"
-           width="1"
-           height="1" />
-        <use
-           id="use3917"
-           y="43.740131"
-           x="178.67157"
-           xlink:href="#glyph0-5"
-           width="1"
-           height="1" />
-        <use
-           id="use3919"
-           y="43.740131"
-           x="197.17953"
-           xlink:href="#glyph0-6"
-           width="1"
-           height="1" />
-        <use
-           id="use3921"
-           y="43.740131"
-           x="221.61006"
-           xlink:href="#glyph0-3"
-           width="1"
-           height="1" />
-        <use
-           id="use3923"
-           y="43.740131"
-           x="230.87828"
-           xlink:href="#glyph0-9"
-           width="1"
-           height="1" />
-        <use
-           id="use3925"
-           y="43.740131"
-           x="249.42897"
-           xlink:href="#glyph0-8"
-           width="1"
-           height="1" />
-        <use
-           id="use3927"
-           y="43.740131"
-           x="260.80426"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-        <use
-           id="use3929"
-           y="43.740131"
-           x="270.62772"
-           xlink:href="#glyph0-4"
-           width="1"
-           height="1" />
-        <use
-           id="use3931"
-           y="43.740131"
-           x="282.00299"
-           xlink:href="#glyph0-5"
-           width="1"
-           height="1" />
-        <use
-           id="use3933"
-           y="43.740131"
-           x="300.51096"
-           xlink:href="#glyph0-6"
-           width="1"
-           height="1" />
-        <use
-           id="use3935"
-           y="43.740131"
-           x="324.9415"
-           xlink:href="#glyph0-3"
-           width="1"
-           height="1" />
-        <use
-           id="use3937"
-           y="43.740131"
-           x="334.20972"
-           xlink:href="#glyph0-10"
-           width="1"
-           height="1" />
-        <use
-           id="use3939"
-           y="43.740131"
-           x="352.76041"
-           xlink:href="#glyph0-8"
-           width="1"
-           height="1" />
-        <use
-           id="use3941"
-           y="43.740131"
-           x="364.13568"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-        <use
-           id="use3943"
-           y="43.740131"
-           x="373.95914"
-           xlink:href="#glyph0-11"
-           width="1"
-           height="1" />
-        <use
-           id="use3945"
-           y="43.740131"
-           x="385.33444"
-           xlink:href="#glyph0-12"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g3947"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use3949"
-           y="81.322166"
-           x="211.80859"
-           xlink:href="#glyph0-13"
-           width="1"
-           height="1" />
-        <use
-           id="use3951"
-           y="81.322166"
-           x="230.31656"
-           xlink:href="#glyph0-14"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g3953"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use3955"
-           y="177.2245"
-           x="3.644531"
-           xlink:href="#glyph0-1"
-           width="1"
-           height="1" />
-        <use
-           id="use3957"
-           y="177.2245"
-           x="11.745329"
-           xlink:href="#glyph0-9"
-           width="1"
-           height="1" />
-        <use
-           id="use3959"
-           y="177.2245"
-           x="30.296013"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-        <use
-           id="use3961"
-           y="177.2245"
-           x="40.119473"
-           xlink:href="#glyph0-3"
-           width="1"
-           height="1" />
-      </g>
-      <path
-         id="path3963"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,177.22096)"
-         d="m -8.30078e-4,-18.562018 0,56.563049 c 0,2.759827 2.237335078,4.999842 4.999841078,4.999842 l 111.298719,0 c 2.76251,0 4.99984,-2.240015 4.99984,-4.999842 l 0,-56.563049 c 0,-2.762506 -2.23733,-4.999841 -4.99984,-4.999841 l -111.298719,0 c -2.762506,0 -4.999841078,2.237335 -4.999841078,4.999841 z"
-         style="fill:#7fff7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3965"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,177.22096)"
-         d="m -8.30078e-4,14.719348 121.298400078,0"
-         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g3967"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use3969"
-           y="177.2245"
-           x="63.964844"
-           xlink:href="#glyph0-4"
-           width="1"
-           height="1" />
-        <use
-           id="use3971"
-           y="177.2245"
-           x="75.340126"
-           xlink:href="#glyph0-5"
-           width="1"
-           height="1" />
-        <use
-           id="use3973"
-           y="177.2245"
-           x="93.848099"
-           xlink:href="#glyph0-6"
-           width="1"
-           height="1" />
-        <use
-           id="use3975"
-           y="177.2245"
-           x="118.27863"
-           xlink:href="#glyph0-3"
-           width="1"
-           height="1" />
-        <use
-           id="use3977"
-           y="177.2245"
-           x="127.54684"
-           xlink:href="#glyph0-15"
-           width="1"
-           height="1" />
-        <use
-           id="use3979"
-           y="177.2245"
-           x="146.09753"
-           xlink:href="#glyph0-8"
-           width="1"
-           height="1" />
-        <use
-           id="use3981"
-           y="177.2245"
-           x="157.47281"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-      </g>
-      <path
-         id="path3983"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,177.22096)"
-         d="m 80.878168,-18.562018 0,23.281684 c 0,2.759826 2.237335,4.999841 4.999841,4.999841 l 25.419881,0 c 2.7625,0 4.99984,-2.240015 4.99984,-4.999841 l 0,-23.281684 c 0,-2.762506 -2.23734,-4.999841 -4.99984,-4.999841 l -25.419881,0 c -2.762506,0 -4.999841,2.237335 -4.999841,4.999841 z"
-         style="fill:#7f7fff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g3985"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use3987"
-           y="177.2245"
-           x="178.23047"
-           xlink:href="#glyph0-13"
-           width="1"
-           height="1" />
-        <use
-           id="use3989"
-           y="177.2245"
-           x="196.73843"
-           xlink:href="#glyph0-14"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g3991"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use3993"
-           y="229.38857"
-           x="122.92188"
-           xlink:href="#glyph0-13"
-           width="1"
-           height="1" />
-        <use
-           id="use3995"
-           y="229.38857"
-           x="141.42986"
-           xlink:href="#glyph0-7"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g3997"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use3999"
-           y="325.28702"
-           x="3.644531"
-           xlink:href="#glyph0-16"
-           width="1"
-           height="1" />
-        <use
-           id="use4001"
-           y="325.28702"
-           x="20.899656"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-        <use
-           id="use4003"
-           y="325.28702"
-           x="30.72312"
-           xlink:href="#glyph0-3"
-           width="1"
-           height="1" />
-      </g>
-      <path
-         id="path4005"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,325.28474)"
-         d="m -8.30078e-4,-18.562897 0,23.281684 c 0,2.762506 2.237335078,4.999841 4.999841078,4.999841 l 20.567407,0 c 2.759827,0 4.999842,-2.237335 4.999842,-4.999841 l 0,-23.281684 c 0,-2.759826 -2.240015,-4.999841 -4.999842,-4.999841 l -20.567407,0 c -2.762506,0 -4.999841078,2.240015 -4.999841078,4.999841 z"
-         style="fill:#ff7f7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g4007"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4009"
-           y="325.28702"
-           x="60.320312"
-           xlink:href="#glyph0-17"
-           width="1"
-           height="1" />
-        <use
-           id="use4011"
-           y="325.28702"
-           x="71.752548"
-           xlink:href="#glyph0-14"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g4013"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4015"
-           y="325.28702"
-           x="101.23828"
-           xlink:href="#glyph0-4"
-           width="1"
-           height="1" />
-      </g>
-      <path
-         id="path4017"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,325.28474)"
-         d="m 43.36864,-18.562897 0,23.281684 c 0,2.762506 2.237335,4.999841 4.999841,4.999841 l 25.41988,0 c 2.762506,0 4.999841,-2.237335 4.999841,-4.999841 l 0,-23.281684 c 0,-2.759826 -2.237335,-4.999841 -4.999841,-4.999841 l -25.41988,0 c -2.762506,0 -4.999841,2.240015 -4.999841,4.999841 z"
-         style="fill:#7f7fff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g4019"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4021"
-           y="325.28702"
-           x="123.54688"
-           xlink:href="#glyph0-13"
-           width="1"
-           height="1" />
-        <use
-           id="use4023"
-           y="325.28702"
-           x="142.05486"
-           xlink:href="#glyph0-7"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g4025"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4027"
-           y="325.28702"
-           x="171.53906"
-           xlink:href="#glyph0-18"
-           width="1"
-           height="1" />
-      </g>
-      <path
-         id="path4029"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,325.28474)"
-         d="m 90.146362,-18.562897 0,23.281684 c 0,2.762506 2.237336,4.999841 4.999842,4.999841 l 25.419876,0 c 2.76251,0 4.99984,-2.237335 4.99984,-4.999841 l 0,-23.281684 c 0,-2.759826 -2.23733,-4.999841 -4.99984,-4.999841 l -25.419876,0 c -2.762506,0 -4.999842,2.240015 -4.999842,4.999841 z"
-         style="fill:#7f7fff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g4031"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4033"
-           y="325.28702"
-           x="191.74219"
-           xlink:href="#glyph0-13"
-           width="1"
-           height="1" />
-        <use
-           id="use4035"
-           y="325.28702"
-           x="210.25015"
-           xlink:href="#glyph0-14"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g4037"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4039"
-           y="325.28702"
-           x="239.73438"
-           xlink:href="#glyph0-8"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g4041"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4043"
-           y="417.54092"
-           x="3.644531"
-           xlink:href="#glyph0-19"
-           width="1"
-           height="1" />
-        <use
-           id="use4045"
-           y="417.54092"
-           x="18.778358"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-        <use
-           id="use4047"
-           y="417.54092"
-           x="28.601822"
-           xlink:href="#glyph0-3"
-           width="1"
-           height="1" />
-      </g>
-      <path
-         id="path4049"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,417.53986)"
-         d="m -8.30078e-4,-18.563733 0,56.563049 c 0,2.762507 2.237335078,4.999842 4.999841078,4.999842 l 62.763281,0 c 2.762507,0 4.999842,-2.237335 4.999842,-4.999842 l 0,-56.563049 c 0,-2.759827 -2.237335,-4.999841 -4.999842,-4.999841 l -62.763281,0 c -2.762506,0 -4.999841078,2.240014 -4.999841078,4.999841 z"
-         style="fill:#7fff7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path4051"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,417.53986)"
-         d="m -8.30078e-4,14.717633 72.762964078,0"
-         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g4053"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4055"
-           y="417.54092"
-           x="63.964844"
-           xlink:href="#glyph0-4"
-           width="1"
-           height="1" />
-        <use
-           id="use4057"
-           y="417.54092"
-           x="75.340126"
-           xlink:href="#glyph0-8"
-           width="1"
-           height="1" />
-        <use
-           id="use4059"
-           y="417.54092"
-           x="86.715416"
-           xlink:href="#glyph0-2"
-           width="1"
-           height="1" />
-      </g>
-      <path
-         id="path4061"
-         transform="matrix(1.457859,0,0,1.457859,53.03246,417.53986)"
-         d="m 32.342731,-18.563733 0,23.281683 c 0,2.762507 2.237335,4.999842 4.999841,4.999842 l 25.419879,0 c 2.762506,0 4.999841,-2.237335 4.999841,-4.999842 l 0,-23.281683 c 0,-2.759827 -2.237335,-4.999841 -4.999841,-4.999841 l -25.419879,0 c -2.762506,0 -4.999841,2.240014 -4.999841,4.999841 z"
-         style="fill:#7f7fff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
-         inkscape:connector-curvature="0" />
-      <g
-         id="g4063"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4065"
-           y="417.54092"
-           x="107.47266"
-           xlink:href="#glyph0-13"
-           width="1"
-           height="1" />
-        <use
-           id="use4067"
-           y="417.54092"
-           x="125.98063"
-           xlink:href="#glyph0-9"
-           width="1"
-           height="1" />
-      </g>
-      <g
-         id="g4069"
-         style="fill:#000000;fill-opacity:1">
-        <use
-           id="use4071"
-           y="469.70499"
-           x="87.542969"
-           xlink:href="#glyph0-13"
-           width="1"
-           height="1" />
-        <use
-           id="use4073"
-           y="469.70499"
-           x="106.05094"
-           xlink:href="#glyph0-9"
-           width="1"
-           height="1" />
-      </g>
-    </g>
-    <text
-       xml:space="preserve"
-       style="font-size:72px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
-       x="406.8136"
-       y="408.48969"
-       id="text3468-5"
-       sodipodi:linespacing="125%"><tspan
-         sodipodi:role="line"
-         x="406.8136"
-         y="408.48969"
-         id="tspan3472-8">Type :view x in GHCi</tspan><tspan
-         sodipodi:role="line"
-         x="406.8136"
-         y="498.48969"
-         id="tspan5130">to visualize expression x</tspan></text>
-    <g
-       transform="matrix(1.25,0,0,-1.25,439.73215,1037.3623)"
-       id="g4843">
-      <g
-         id="g4845"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 110.125,-23.82 c 0,9.644 -11.727,17.461 -26.191,17.461 -14.465,0 -26.188,-7.817 -26.188,-17.461 0,-9.645 11.723,-17.461 26.188,-17.461 14.464,0 26.191,7.816 26.191,17.461"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4847" />
-      </g>
-      <g
-         id="g4849"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 110.125,-130.52 c 0,13.93 -11.727,25.219 -26.191,25.219 -14.465,0 -26.188,-11.289 -26.188,-25.219 0,-13.929 11.723,-25.218 26.188,-25.218 14.464,0 26.191,11.289 26.191,25.218"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4851" />
-      </g>
-      <text
-         transform="matrix(1,0,0,-1,79.570312,287.62471)"
-         id="text4853">
-        <tspan
-           style="font-size:25.9445858px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans"
-           x="0"
-           y="0"
-           id="tspan4855">:</tspan>
-      </text>
-      <g
-         id="g4857"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 105.273,-217.82 c 0,13.929 -22.582,25.218 -50.437,25.218 -27.859,0 -50.441,-11.289 -50.441,-25.218 0,-13.93 22.582,-25.219 50.441,-25.219 27.855,0 50.437,11.289 50.437,25.219"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4859" />
-      </g>
-      <text
-         transform="matrix(1,0,0,-1,26.703125,200.02351)"
-         id="text4861">
-        <tspan
-           style="font-size:23.21299934px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans"
-           x="0 14.693829 34.099895 41.45842"
-           y="0"
-           sodipodi:role="line"
-           id="tspan4863">S# 1</tspan>
-      </text>
-      <g
-         id="g4865"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 175.113,-217.82 c 0,13.929 -11.722,25.218 -26.187,25.218 -14.465,0 -26.192,-11.289 -26.192,-25.218 0,-13.93 11.727,-25.219 26.192,-25.219 14.465,0 26.187,11.289 26.187,25.219"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4867" />
-      </g>
-      <text
-         transform="matrix(1,0,0,-1,144.55859,200.32393)"
-         id="text4869">
-        <tspan
-           style="font-size:25.9445858px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans"
-           x="0"
-           y="0"
-           id="tspan4871">:</tspan>
-      </text>
-      <g
-         id="g4873"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 170.266,-392.422 c 0,13.93 -22.582,25.223 -50.442,25.223 -27.855,0 -50.437,-11.293 -50.437,-25.223 0,-13.926 22.582,-25.219 50.437,-25.219 27.86,0 50.442,11.293 50.442,25.219"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4875" />
-      </g>
-      <text
-         transform="matrix(1,0,0,-1,91.695313,25.421945)"
-         id="text4877">
-        <tspan
-           style="font-size:23.21299934px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans"
-           x="0 14.693829 34.099895 41.45842"
-           y="0"
-           sodipodi:role="line"
-           id="tspan4879">S# 1</tspan>
-      </text>
-      <g
-         id="g4881"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 275.023,-305.121 c 0,13.93 -28.66,25.223 -64.019,25.223 -35.356,0 -64.02,-11.293 -64.02,-25.223 0,-13.926 28.664,-25.219 64.02,-25.219 35.359,0 64.019,11.293 64.019,25.219"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4883" />
-      </g>
-      <text
-         transform="matrix(1,0,0,-1,173.66016,112.83297)"
-         id="text4885">
-        <tspan
-           style="font-size:24.19260597px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans"
-           x="0 14.733297 30.023024 45.336945 60.626671"
-           y="0"
-           sodipodi:role="line"
-           id="tspan4887">Thunk</tspan>
-      </text>
-      <g
-         id="g4889"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 288.605,-392.422 c 0,13.93 -22.582,25.223 -50.441,25.223 -27.855,0 -50.437,-11.293 -50.437,-25.223 0,-13.926 22.582,-25.219 50.437,-25.219 27.859,0 50.441,11.293 50.441,25.219"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4891" />
-      </g>
-      <text
-         transform="matrix(1,0,0,-1,210.03516,25.421945)"
-         id="text4893">
-        <tspan
-           style="font-size:23.21299934px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans"
-           x="0 14.693829 34.099895 41.45842"
-           y="0"
-           sodipodi:role="line"
-           id="tspan4895">S# 0</tspan>
-      </text>
-      <g
-         id="g4897"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 83.934,-41.281 c 0,-14.547 0,-35.891 0,-54.321"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4899" />
-      </g>
-      <path
-         inkscape:connector-curvature="0"
-         d="m 87.816,328.398 -3.882,-9.699 -2.911,9.699 6.793,0 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         id="path4901" />
-      <g
-         id="g4903"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 87.816,-95.602 -3.882,-9.699 -2.911,9.699 6.793,0 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4905" />
-      </g>
-      <text
-         transform="matrix(1,0,0,-1,84.421875,344.52158)"
-         id="text4907">
-        <tspan
-           style="font-size:22.93732834px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans"
-           x="0 8.9455585 23.510763 30.758959 45.324162 52.595295 59.866428"
-           y="0"
-           sodipodi:role="line"
-           id="tspan4909">[1,1..]</tspan>
-      </text>
-      <g
-         id="g4911"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 76.176,-154.77 c -2.91,-8.73 -6.789,-19.402 -9.699,-29.101"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4913" />
-      </g>
-      <path
-         inkscape:connector-curvature="0"
-         d="m 69.387,239.16 -5.821,-7.762 -0.972,9.704 6.793,-1.942 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         id="path4915" />
-      <g
-         id="g4917"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 69.387,-184.84 -5.821,-7.762 -0.972,9.704 6.793,-1.942 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4919" />
-      </g>
-      <g
-         id="g4921"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 99.453,-150.891 c 8.731,-11.64 19.402,-26.187 28.133,-38.8"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4923" />
-      </g>
-      <path
-         inkscape:connector-curvature="0"
-         d="m 130.496,236.25 2.91,-9.699 -8.73,5.82 5.82,3.879 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         id="path4925" />
-      <g
-         id="g4927"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 130.496,-187.75 2.91,-9.699 -8.73,5.82 5.82,3.879 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4929" />
-      </g>
-      <g
-         id="g4931"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 145.047,-243.039 c -2.91,-10.672 -4.852,-24.25 -6.793,-36.859 -3.879,-26.192 -8.731,-55.293 -12.609,-77.602"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4933" />
-      </g>
-      <path
-         inkscape:connector-curvature="0"
-         d="m 128.555,66.5 -4.852,-9.699 -1.937,10.668 6.789,-0.969 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         id="path4935" />
-      <g
-         id="g4937"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 128.555,-357.5 -4.852,-9.699 -1.937,10.668 6.789,-0.969 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4939" />
-      </g>
-      <g
-         id="g4941"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 163.477,-239.16 c 7.757,-9.699 16.488,-22.309 24.25,-33.949"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4943" />
-      </g>
-      <path
-         inkscape:connector-curvature="0"
-         d="m 190.637,152.828 2.91,-9.699 -7.762,5.82 4.852,3.879 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         id="path4945" />
-      <g
-         id="g4947"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 190.637,-271.172 2.91,-9.699 -7.762,5.82 4.852,3.879 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4949" />
-      </g>
-      <g
-         id="g4951"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 186.754,-328.398 c -11.641,-10.672 -24.25,-23.282 -35.891,-34.922"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4953" />
-      </g>
-      <path
-         inkscape:connector-curvature="0"
-         d="m 152.805,58.738 -9.7,-4.847 4.848,9.699 4.852,-4.852 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         id="path4955" />
-      <g
-         id="g4957"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 152.805,-365.262 -9.7,-4.847 4.848,9.699 4.852,-4.852 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4959" />
-      </g>
-      <g
-         id="g4961"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 218.766,-330.34 c 2.91,-8.73 5.82,-18.43 8.73,-27.16"
-           style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4963" />
-      </g>
-      <path
-         inkscape:connector-curvature="0"
-         d="m 230.406,67.469 0,-10.668 -5.82,7.758 5.82,2.91 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         id="path4965" />
-      <g
-         id="g4967"
-         transform="translate(0,424)">
-        <path
-           inkscape:connector-curvature="0"
-           d="m 230.406,-356.531 0,-10.668 -5.82,7.758 5.82,2.91 z"
-           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-           id="path4969" />
-      </g>
+   version="1.1"
+   width="899.96094"
+   height="768.12683"
+   viewBox="0 0 719.96875 614.50146"
+   id="svg2">
+  <metadata
+     id="metadata312">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs4">
+    <g
+       id="g6">
+      <symbol
+         id="glyph0-0"
+         style="overflow:visible">
+        <path
+           d="m 2,-15 1.890625,0 0,15 L 2,0 z m 0,0"
+           id="path9"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-1"
+         style="overflow:visible">
+        <path
+           d="m 2,-2.15625 1.890625,0 0,2.15625 L 2,0 z M 2,-10 l 1.890625,0 0,2.15625 -1.890625,0 z m 0,0"
+           id="path12"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-2"
+         style="overflow:visible">
+        <path
+           d=""
+           id="path15"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-3"
+         style="overflow:visible">
+        <path
+           d="m 6.46875,-15 c -0.875,1.523438 -1.527344,3.023438 -1.953125,4.5 -0.417969,1.480469 -0.625,2.976562 -0.625,4.484375 0,1.523437 0.210937,3.027344 0.640625,4.515625 0.425781,1.4921875 1.070312,2.988281 1.9375,4.5 L 4.90625,3 C 3.9375,1.445312 3.207031,-0.0703125 2.71875,-1.5625 2.238281,-3.050781 2,-4.535156 2,-6.015625 2,-7.472656 2.238281,-8.945312 2.71875,-10.4375 3.207031,-11.925781 3.9375,-13.445312 4.90625,-15 z m 0,0"
+           id="path18"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-4"
+         style="overflow:visible">
+        <path
+           d="m 10.203125,-13.3125 0,1.796875 C 9.460938,-11.847656 8.765625,-12.09375 8.109375,-12.25 7.460938,-12.414062 6.828125,-12.5 6.203125,-12.5 5.148438,-12.5 4.332031,-12.304688 3.75,-11.921875 3.175781,-11.546875 2.890625,-11 2.890625,-10.28125 c 0,0.605469 0.1875,1.058594 0.5625,1.359375 0.382813,0.304687 1.101563,0.546875 2.15625,0.734375 l 1.1875,0.21875 c 1.4375,0.25 2.492187,0.703125 3.171875,1.359375 0.6875,0.65625 1.03125,1.53125 1.03125,2.625 0,1.304687 -0.464844,2.292969 -1.390625,2.96875 C 8.679688,-0.335938 7.320312,0 5.53125,0 4.851562,0 4.128906,-0.0703125 3.359375,-0.21875 2.597656,-0.363281 1.8125,-0.582031 1,-0.875 L 1,-2.75 c 0.800781,0.417969 1.582031,0.730469 2.34375,0.9375 0.769531,0.210938 1.523438,0.3125 2.265625,0.3125 1.113281,0 1.972656,-0.203125 2.578125,-0.609375 0.613281,-0.40625 0.921875,-0.992187 0.921875,-1.765625 0,-0.65625 -0.21875,-1.164062 -0.65625,-1.53125 -0.429687,-0.375 -1.136719,-0.65625 -2.125,-0.84375 l -1.1875,-0.21875 c -1.449219,-0.269531 -2.5,-0.691406 -3.15625,-1.265625 C 1.328125,-8.316406 1,-9.117188 1,-10.140625 1,-11.335938 1.445312,-12.28125 2.34375,-12.96875 3.238281,-13.65625 4.460938,-14 6.015625,-14 c 0.675781,0 1.359375,0.05859 2.046875,0.171875 0.695312,0.117187 1.410156,0.289063 2.140625,0.515625 z m 0,0"
+           id="path21"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-5"
+         style="overflow:visible">
+        <path
+           d="m 10.9375,-8.671875 -2.984375,0 L 7.09375,-5.5 l 3,0 z M 9.40625,-14 l -1.078125,3.859375 3,0 L 12.40625,-14 l 1.625,0 -1.046875,3.859375 3.015625,0 0,1.46875 -3.421875,0 L 11.75,-5.5 l 3.25,0 0,1.5 -3.65625,0 -1.0625,4 -1.640625,0 1.0625,-4 -3,0 -1.0625,4 L 4,0 5.0625,-4 2,-4 l 0,-1.5 3.4375,0 0.859375,-3.171875 -3.296875,0 0,-1.46875 3.703125,0 L 7.734375,-14 z m 0,0"
+           id="path24"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-6"
+         style="overflow:visible">
+        <path
+           d="m 3,-1.625 3.109375,0 0,-10.65625 L 2.5,-11.609375 2.5,-13.328125 6.09375,-14 8,-14 l 0,12.375 3,0 L 11,0 3,0 z m 0,0"
+           id="path27"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-7"
+         style="overflow:visible">
+        <path
+           d="m 1.421875,-15 1.5625,0 c 0.96875,1.554688 1.691406,3.074219 2.171875,4.5625 0.488281,1.492188 0.734375,2.964844 0.734375,4.421875 0,1.480469 -0.246094,2.964844 -0.734375,4.453125 C 4.675781,-0.0703125 3.953125,1.445312 2.984375,3 l -1.5625,0 C 2.285156,1.488281 2.929688,-0.0078125 3.359375,-1.5 3.785156,-2.988281 4,-4.492188 4,-6.015625 4,-7.523438 3.785156,-9.019531 3.359375,-10.5 2.929688,-11.976562 2.285156,-13.476562 1.421875,-15 z m 0,0"
+           id="path30"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-8"
+         style="overflow:visible">
+        <path
+           d="M 3.34375,-1.5 10,-1.5 10,0 1,0 1,-1.5 c 0.738281,-0.738281 1.75,-1.726562 3.03125,-2.96875 1.28125,-1.25 2.082031,-2.054688 2.40625,-2.421875 0.625,-0.675781 1.054688,-1.25 1.296875,-1.71875 0.25,-0.476563 0.375,-0.941406 0.375,-1.390625 0,-0.738281 -0.273437,-1.335938 -0.8125,-1.796875 -0.542969,-0.46875 -1.25,-0.703125 -2.125,-0.703125 -0.625,0 -1.28125,0.105469 -1.96875,0.3125 C 2.515625,-11.988281 1.78125,-11.679688 1,-11.265625 L 1,-13.125 c 0.78125,-0.289062 1.515625,-0.507812 2.203125,-0.65625 C 3.890625,-13.925781 4.519531,-14 5.09375,-14 c 1.488281,0 2.675781,0.359375 3.5625,1.078125 0.894531,0.71875 1.34375,1.679687 1.34375,2.875 0,0.5625 -0.109375,1.101563 -0.328125,1.609375 -0.21875,0.5 -0.621094,1.101562 -1.203125,1.796875 C 8.3125,-6.460938 7.804688,-5.945312 6.953125,-5.09375 6.097656,-4.238281 4.894531,-3.039062 3.34375,-1.5 z m 0,0"
+           id="path33"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-9"
+         style="overflow:visible">
+        <path
+           d="m 8.28125,-7.8125 c 0.851562,0.199219 1.519531,0.605469 2,1.21875 C 10.757812,-5.988281 11,-5.234375 11,-4.328125 c 0,1.367187 -0.492188,2.429687 -1.46875,3.1875 C 8.550781,-0.378906 7.160156,0 5.359375,0 4.742188,0 4.113281,-0.0507812 3.46875,-0.15625 2.832031,-0.269531 2.175781,-0.4375 1.5,-0.65625 l 0,-1.796875 c 0.539062,0.324219 1.132812,0.5625 1.78125,0.71875 C 3.9375,-1.578125 4.613281,-1.5 5.3125,-1.5 c 1.238281,0 2.179688,-0.238281 2.828125,-0.71875 0.644531,-0.476562 0.96875,-1.171875 0.96875,-2.078125 0,-0.84375 -0.296875,-1.503906 -0.890625,-1.984375 C 7.632812,-6.757812 6.816406,-7 5.765625,-7 l -1.671875,0 0,-1.5 1.828125,0 c 1,0 1.757813,-0.164062 2.28125,-0.5 C 8.734375,-9.34375 9,-9.832031 9,-10.46875 9,-11.125 8.726562,-11.625 8.1875,-11.96875 7.644531,-12.320312 6.863281,-12.5 5.84375,-12.5 c -0.554688,0 -1.152344,0.05469 -1.796875,0.15625 -0.636719,0.105469 -1.335937,0.261719 -2.09375,0.46875 l 0,-1.5625 c 0.757813,-0.1875 1.46875,-0.328125 2.125,-0.421875 C 4.742188,-13.953125 5.375,-14 5.96875,-14 c 1.519531,0 2.71875,0.304688 3.59375,0.90625 0.882812,0.59375 1.328125,1.414062 1.328125,2.453125 0,0.710937 -0.230469,1.3125 -0.6875,1.8125 C 9.753906,-8.335938 9.113281,-8 8.28125,-7.8125 z m 0,0"
+           id="path36"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-10"
+         style="overflow:visible">
+        <path
+           d="m 2,-15 4.234375,0 0,1.5 -2.34375,0 0,14.5 2.34375,0 0,1.5 L 2,2.5 z m 0,0"
+           id="path39"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-11"
+         style="overflow:visible">
+        <path
+           d="m 5.890625,-15 0,17.5 -4.234375,0 0,-1.5 L 4,1 l 0,-14.5 -2.34375,0 0,-1.5 z m 0,0"
+           id="path42"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-12"
+         style="overflow:visible">
+        <path
+           d="M 10.984375,-11 7.015625,-5.640625 11.1875,0 9.0625,0 5.875,-4.328125 2.703125,0 l -2.125,0 4.25,-5.75 L 0.9375,-11 3.0625,-11 5.953125,-7.078125 8.859375,-11 z m 0,0"
+           id="path45"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-13"
+         style="overflow:visible">
+        <path
+           d="M 7,-12.375 2.078125,-5 7,-5 z M 6.484375,-14 l 2.40625,0 0,9 L 11,-5 l 0,1.609375 -2.109375,0 L 8.890625,0 7,0 l 0,-3.390625 -6.5,0 0,-1.859375 z m 0,0"
+           id="path48"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-14"
+         style="overflow:visible">
+        <path
+           d="m 4,-14 0,3 4,0 0,1.5 -4,0 0,5.9375 c 0,0.886719 0.128906,1.453125 0.390625,1.703125 0.269531,0.25 0.8125,0.375 1.625,0.375 L 8,-1.484375 8,0 6.03125,0 C 4.539062,0 3.515625,-0.253906 2.953125,-0.765625 c -0.5625,-0.519531 -0.84375,-1.457031 -0.84375,-2.8125 L 2.109375,-9.5 1,-9.5 1,-11 l 1.109375,0 0,-3 z m 0,0"
+           id="path51"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-15"
+         style="overflow:visible">
+        <path
+           d="m 3.890625,-7 0,5.5 3.125,0 c 1.050781,0 1.828125,-0.222656 2.328125,-0.671875 0.507812,-0.457031 0.765625,-1.148437 0.765625,-2.078125 0,-0.9375 -0.257813,-1.628906 -0.765625,-2.078125 C 8.84375,-6.773438 8.066406,-7 7.015625,-7 z m 0,-5.5 0,4 3.09375,0 C 7.992188,-8.5 8.75,-8.660156 9.25,-8.984375 9.75,-9.316406 10,-9.820312 10,-10.5 10,-11.175781 9.75,-11.675781 9.25,-12 8.75,-12.332031 7.992188,-12.5 6.984375,-12.5 z M 2,-14 l 5.109375,0 c 1.53125,0 2.707031,0.289062 3.53125,0.859375 0.832031,0.574219 1.25,1.386719 1.25,2.4375 0,0.8125 -0.203125,1.464844 -0.609375,1.953125 -0.398438,0.492188 -0.992188,0.792969 -1.78125,0.90625 0.789062,0.210938 1.40625,0.640625 1.84375,1.296875 C 11.78125,-5.890625 12,-5.066406 12,-4.078125 12,-2.773438 11.570312,-1.769531 10.71875,-1.0625 9.863281,-0.351562 8.644531,0 7.0625,0 L 2,0 z m 0,0"
+           id="path54"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-16"
+         style="overflow:visible">
+        <path
+           d="m 13,-12.71875 0,1.921875 c -0.6875,-0.570313 -1.429688,-1 -2.21875,-1.28125 C 10,-12.359375 9.164062,-12.5 8.28125,-12.5 c -1.742188,0 -3.074219,0.476562 -4,1.421875 C 3.351562,-10.140625 2.890625,-8.78125 2.890625,-7 c 0,1.78125 0.460937,3.148438 1.390625,4.09375 0.925781,0.9375 2.257812,1.40625 4,1.40625 0.882812,0 1.71875,-0.140625 2.5,-0.421875 0.789062,-0.289063 1.53125,-0.71875 2.21875,-1.28125 l 0,1.90625 C 12.300781,-0.859375 11.554688,-0.53125 10.765625,-0.3125 9.972656,-0.101562 9.144531,0 8.28125,0 6.019531,0 4.238281,-0.625 2.9375,-1.875 1.644531,-3.125 1,-4.832031 1,-7 1,-9.164062 1.644531,-10.875 2.9375,-12.125 4.238281,-13.375 6.019531,-14 8.28125,-14 c 0.875,0 1.707031,0.109375 2.5,0.328125 0.789062,0.210937 1.53125,0.527344 2.21875,0.953125 z m 0,0"
+           id="path57"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-17"
+         style="overflow:visible">
+        <path
+           d="m 7.4375,-12.5 c -1.386719,0 -2.492188,0.496094 -3.3125,1.484375 C 3.300781,-10.035156 2.890625,-8.695312 2.890625,-7 c 0,1.699219 0.410156,3.042969 1.234375,4.03125 C 4.945312,-1.988281 6.054688,-1.5 7.453125,-1.5 c 1.394531,0 2.5,-0.488281 3.3125,-1.46875 C 11.585938,-3.957031 12,-5.300781 12,-7 12,-8.695312 11.585938,-10.035156 10.765625,-11.015625 9.953125,-12.003906 8.84375,-12.5 7.4375,-12.5 z M 7.453125,-14 c 1.957031,0 3.519531,0.636719 4.6875,1.90625 1.164063,1.273438 1.75,2.96875 1.75,5.09375 0,2.125 -0.585937,3.824219 -1.75,5.09375 C 10.972656,-0.632812 9.40625,0 7.4375,0 5.488281,0 3.925781,-0.628906 2.75,-1.890625 1.582031,-3.160156 1,-4.863281 1,-7 1,-9.125 1.582031,-10.820312 2.75,-12.09375 3.925781,-13.363281 5.492188,-14 7.453125,-14 z m 0,0"
+           id="path60"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-18"
+         style="overflow:visible">
+        <path
+           d="m 2,-3 1.890625,0 0,1.75 L 2.421875,2 1.203125,2 2,-1.25 z m 0,0"
+           id="path63"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-19"
+         style="overflow:visible">
+        <path
+           d="m 8,-15 0,1.5 -1.5625,0 c -0.585938,0 -0.992188,0.121094 -1.21875,0.359375 C 5,-12.910156 4.890625,-12.488281 4.890625,-11.875 l 0,0.875 L 7,-11 l 0,1.5 -2.109375,0 0,9.5 L 3,0 l 0,-9.5 -2,0 0,-1.5 2,0 0,-0.71875 c 0,-1.144531 0.269531,-1.976562 0.8125,-2.5 C 4.351562,-14.738281 5.207031,-15 6.375,-15 z m 0,0"
+           id="path66"
+           style="stroke:none" />
+      </symbol>
+      <symbol
+         id="glyph0-20"
+         style="overflow:visible">
+        <path
+           d="M 6.859375,0.890625 C 6.347656,2.179688 5.851562,3.019531 5.375,3.40625 4.894531,3.800781 4.25,4 3.4375,4 L 2,4 2,2.53125 l 1.0625,0 c 0.488281,0 0.867188,-0.121094 1.140625,-0.359375 C 4.484375,1.941406 4.789062,1.394531 5.125,0.53125 L 5.4375,-0.296875 1.015625,-11 2.921875,-11 6.34375,-2.484375 9.765625,-11 l 1.890625,0 z m 0,0"
+           id="path69"
+           style="stroke:none" />
+      </symbol>
+    </g>
+  </defs>
+  <g
+     transform="translate(33.958741,300.70406)"
+     id="surface553">
+    <g
+       id="g72"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use74"
+         x="2.5"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-0" />
+      <use
+         id="use76"
+         x="8.0566406"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-1" />
+      <use
+         id="use78"
+         x="14.794922"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-2" />
+    </g>
+    <path
+       d="m -0.00195312,-18.5625 0,46.5625 c 0,2.761719 2.23828112,5 5.00000012,5 l 233.242183,0 c 2.76172,0 5,-2.238281 5,-5 l 0,-46.5625 c 0,-2.761719 -2.23828,-5 -5,-5 l -233.242183,0 c -2.761719,0 -5.00000012,2.238281 -5.00000012,5 z m 0,0"
+       transform="translate(36.376953,30)"
+       id="path80"
+       style="fill:#7fff7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <path
+       d="m -0.00195312,4.71875 243.24218312,0"
+       transform="translate(36.376953,30)"
+       id="path82"
+       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g84"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use86"
+         x="43.875"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-3" />
+      <use
+         id="use88"
+         x="51.677734"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-4" />
+      <use
+         id="use90"
+         x="64.373047"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-5" />
+      <use
+         id="use92"
+         x="81.130859"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-2" />
+      <use
+         id="use94"
+         x="87.488281"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-6" />
+      <use
+         id="use96"
+         x="100.21289"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-7" />
+      <use
+         id="use98"
+         x="108.01562"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-1" />
+      <use
+         id="use100"
+         x="114.75391"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-3" />
+      <use
+         id="use102"
+         x="122.55664"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-4" />
+      <use
+         id="use104"
+         x="135.25195"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-5" />
+      <use
+         id="use106"
+         x="152.00977"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-2" />
+      <use
+         id="use108"
+         x="158.36719"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-8" />
+      <use
+         id="use110"
+         x="171.0918"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-7" />
+      <use
+         id="use112"
+         x="178.89453"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-1" />
+      <use
+         id="use114"
+         x="185.63281"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-3" />
+      <use
+         id="use116"
+         x="193.43555"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-4" />
+      <use
+         id="use118"
+         x="206.13086"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-5" />
+      <use
+         id="use120"
+         x="222.88867"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-2" />
+      <use
+         id="use122"
+         x="229.24609"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-9" />
+      <use
+         id="use124"
+         x="241.9707"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-7" />
+      <use
+         id="use126"
+         x="249.77344"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-1" />
+      <use
+         id="use128"
+         x="256.51172"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-10" />
+      <use
+         id="use130"
+         x="264.31445"
+         y="30.001953"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-11" />
+    </g>
+    <g
+       id="g132"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use134"
+         x="145.71484"
+         y="55.783203"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-12" />
+      <use
+         id="use136"
+         x="157.55078"
+         y="55.783203"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-6" />
+    </g>
+    <g
+       id="g138"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use140"
+         x="2.5"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-0" />
+      <use
+         id="use142"
+         x="8.0566406"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-8" />
+      <use
+         id="use144"
+         x="20.78125"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-1" />
+      <use
+         id="use146"
+         x="27.519531"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-2" />
+    </g>
+    <path
+       d="m -0.00195312,-18.5625 0,56.5625 c 0,2.761719 2.23828112,5 5.00000012,5 l 110.437503,0 c 2.76172,0 5,-2.238281 5,-5 l 0,-56.5625 c 0,-2.761719 -2.23828,-5 -5,-5 l -110.437503,0 c -2.761719,0 -5.00000012,2.238281 -5.00000012,5 z m 0,0"
+       transform="translate(36.376953,121.5625)"
+       id="path148"
+       style="fill:#7fff7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <path
+       d="m -0.00195312,14.71875 120.43750312,0"
+       transform="translate(36.376953,121.5625)"
+       id="path150"
+       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g152"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use154"
+         x="43.875"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-3" />
+      <use
+         id="use156"
+         x="51.677734"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-4" />
+      <use
+         id="use158"
+         x="64.373047"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-5" />
+      <use
+         id="use160"
+         x="81.130859"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-2" />
+      <use
+         id="use162"
+         x="87.488281"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-13" />
+      <use
+         id="use164"
+         x="100.21289"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-7" />
+      <use
+         id="use166"
+         x="108.01562"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-1" />
+    </g>
+    <path
+       d="m 80.876953,-18.5625 0,23.28125 c 0,2.761719 2.238281,5 5,5 l 24.558597,0 c 2.76172,0 5,-2.238281 5,-5 l 0,-23.28125 c 0,-2.761719 -2.23828,-5 -5,-5 l -24.558597,0 c -2.761719,0 -5,2.238281 -5,5 z m 0,0"
+       transform="translate(36.376953,121.5625)"
+       id="path168"
+       style="fill:#7f7fff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g170"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use172"
+         x="122.25391"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-12" />
+      <use
+         id="use174"
+         x="134.08984"
+         y="121.56445"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-6" />
+    </g>
+    <g
+       id="g176"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use178"
+         x="84.3125"
+         y="157.3457"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-12" />
+      <use
+         id="use180"
+         x="96.148438"
+         y="157.3457"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-8" />
+    </g>
+    <g
+       id="g182"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use184"
+         x="2.5"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-12" />
+      <use
+         id="use186"
+         x="14.335938"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-1" />
+      <use
+         id="use188"
+         x="21.074219"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-2" />
+    </g>
+    <path
+       d="m -0.00195312,-18.5625 0,23.28125 c 0,2.761719 2.23828112,5 5.00000012,5 l 20.566406,0 c 2.761719,0 5,-2.238281 5,-5 l 0,-23.28125 c 0,-2.761719 -2.238281,-5 -5,-5 l -20.566406,0 c -2.761719,0 -5.00000012,2.238281 -5.00000012,5 z m 0,0"
+       transform="translate(36.376953,223.125)"
+       id="path190"
+       style="fill:#ff7f7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g192"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use194"
+         x="41.375"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-14" />
+      <use
+         id="use196"
+         x="49.216797"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-6" />
+    </g>
+    <g
+       id="g198"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use200"
+         x="69.441406"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-15" />
+      <use
+         id="use202"
+         x="82.818359"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-16" />
+      <use
+         id="use204"
+         x="96.783203"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-17" />
+      <use
+         id="use206"
+         x="112.52539"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-3" />
+    </g>
+    <path
+       d="m 86.451172,-18.5625 0,23.28125 c 0,2.761719 2.238281,5 5,5 l 24.562498,0 c 2.75781,0 5,-2.238281 5,-5 l 0,-23.28125 c 0,-2.761719 -2.24219,-5 -5,-5 l -24.562498,0 c -2.761719,0 -5,2.238281 -5,5 z m 0,0"
+       transform="translate(36.376953,223.125)"
+       id="path208"
+       style="fill:#7f7fff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g210"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use212"
+         x="127.82812"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-12" />
+      <use
+         id="use214"
+         x="139.66406"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-8" />
+    </g>
+    <g
+       id="g216"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use218"
+         x="159.89062"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-18" />
+    </g>
+    <path
+       d="m 132.37305,-18.5625 0,23.28125 c 0,2.761719 2.23828,5 5,5 l 24.5625,0 c 2.75781,0 5,-2.238281 5,-5 l 0,-23.28125 c 0,-2.761719 -2.24219,-5 -5,-5 l -24.5625,0 c -2.76172,0 -5,2.238281 -5,5 z m 0,0"
+       transform="translate(36.376953,223.125)"
+       id="path220"
+       style="fill:#7f7fff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g222"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use224"
+         x="173.75"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-12" />
+      <use
+         id="use226"
+         x="185.58594"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-6" />
+    </g>
+    <g
+       id="g228"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use230"
+         x="205.8125"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-18" />
+    </g>
+    <path
+       d="m 178.29492,-18.5625 0,23.28125 c 0,2.761719 2.23828,5 5,5 l 19.76563,0 c 2.76172,0 5,-2.238281 5,-5 l 0,-23.28125 c 0,-2.761719 -2.23828,-5 -5,-5 l -19.76563,0 c -2.76172,0 -5,2.238281 -5,5 z m 0,0"
+       transform="translate(36.376953,223.125)"
+       id="path232"
+       style="fill:#ffff7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g234"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use236"
+         x="219.67188"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-19" />
+      <use
+         id="use238"
+         x="226.71289"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-6" />
+    </g>
+    <g
+       id="g240"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use242"
+         x="246.9375"
+         y="223.12695"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-7" />
+    </g>
+    <g
+       id="g244"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use246"
+         x="2.5"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-20" />
+      <use
+         id="use248"
+         x="12.898438"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-1" />
+      <use
+         id="use250"
+         x="19.636719"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-2" />
+    </g>
+    <path
+       d="m -0.00195312,-18.5625 0,23.28125 c 0,2.761719 2.23828112,5 5.00000012,5 l 20.566406,0 c 2.761719,0 5,-2.238281 5,-5 l 0,-23.28125 c 0,-2.761719 -2.238281,-5 -5,-5 l -20.566406,0 c -2.761719,0 -5.00000012,2.238281 -5.00000012,5 z m 0,0"
+       transform="translate(36.376953,286.40625)"
+       id="path252"
+       style="fill:#ff7f7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g254"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use256"
+         x="41.375"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-14" />
+      <use
+         id="use258"
+         x="49.216797"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-8" />
+    </g>
+    <g
+       id="g260"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use262"
+         x="69.441406"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-15" />
+      <use
+         id="use264"
+         x="82.818359"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-16" />
+      <use
+         id="use266"
+         x="96.783203"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-17" />
+      <use
+         id="use268"
+         x="112.52539"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-3" />
+      <use
+         id="use270"
+         x="120.32812"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-15" />
+      <use
+         id="use272"
+         x="133.70508"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-16" />
+      <use
+         id="use274"
+         x="147.66992"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-17" />
+      <use
+         id="use276"
+         x="163.41211"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-3" />
+      <use
+         id="use278"
+         x="171.21484"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-3" />
+      <use
+         id="use280"
+         x="179.01758"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-7" />
+      <use
+         id="use282"
+         x="186.82031"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-18" />
+    </g>
+    <path
+       d="m 159.30273,-18.5625 0,23.28125 c 0,2.761719 2.23829,5 5,5 l 19.76563,0 c 2.76172,0 5,-2.238281 5,-5 l 0,-23.28125 c 0,-2.761719 -2.23828,-5 -5,-5 l -19.76563,0 c -2.76171,0 -5,2.238281 -5,5 z m 0,0"
+       transform="translate(36.376953,286.40625)"
+       id="path284"
+       style="fill:#ffff7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g286"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use288"
+         x="200.67969"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-19" />
+      <use
+         id="use290"
+         x="207.7207"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-8" />
+    </g>
+    <g
+       id="g292"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use294"
+         x="227.94531"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-18" />
+    </g>
+    <path
+       d="m 200.42773,-18.5625 0,23.28125 c 0,2.761719 2.23829,5 5,5 l 19.76563,0 c 2.76172,0 5,-2.238281 5,-5 l 0,-23.28125 c 0,-2.761719 -2.23828,-5 -5,-5 l -19.76563,0 c -2.76171,0 -5,2.238281 -5,5 z m 0,0"
+       transform="translate(36.376953,286.40625)"
+       id="path296"
+       style="fill:#ffff7f;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+    <g
+       id="g298"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use300"
+         x="241.80469"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-19" />
+      <use
+         id="use302"
+         x="248.8457"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-9" />
+    </g>
+    <g
+       id="g304"
+       style="fill:#000000;fill-opacity:1">
+      <use
+         id="use306"
+         x="269.07031"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-7" />
+      <use
+         id="use308"
+         x="276.87305"
+         y="286.4082"
+         width="289"
+         height="309"
+         xlink:href="#glyph0-7" />
+    </g>
+  </g>
+  <text
+     x="136.41679"
+     y="95.524994"
+     id="text3464"
+     xml:space="preserve"
+     style="font-size:115.19999695px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"><tspan
+       x="136.41679"
+       y="95.524994"
+       id="tspan3466">ghc-vis</tspan></text>
+  <text
+     x="360.15311"
+     y="190.71274"
+     id="text3468-5"
+     xml:space="preserve"
+     style="font-size:57.59999847px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"><tspan
+       x="360.15311"
+       y="190.71274"
+       id="tspan3472-8">Type :view x in GHCi</tspan><tspan
+       x="360.15311"
+       y="262.71274"
+       id="tspan5130">to visualize expression x</tspan></text>
+  <g
+     transform="matrix(1,0,0,-1,356.03874,612.02846)"
+     id="g3099">
+    <g
+       transform="translate(0,336)"
+       id="g3101">
+      <path
+         d="m 26.078,-108.828 0,35.887 70.813,0 0,-35.887 -70.813,0 z"
+         id="path3103"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3105">
+      <path
+         d="m 50.328,-108.828 0,35.887"
+         id="path3107"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3109">
+      <path
+         d="m 73.609,-108.828 0,35.887"
+         id="path3111"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <text
+       transform="matrix(1,0,0,-1,33.355469,238.77705)"
+       id="text3113">
+      <tspan
+         x="0"
+         y="0"
+         id="tspan3115"
+         style="font-size:25.9445858px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">:</tspan>
+    </text>
+    <g
+       transform="translate(0,336)"
+       id="g3117">
+      <path
+         d="m 3.77,-182.551 0,35.891 81.48,0 0,-35.891 -81.48,0 z"
+         id="path3119"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3121">
+      <path
+         d="m 54.211,-182.551 0,35.891"
+         id="path3123"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <text
+       transform="matrix(1,0,0,-1,12.015625,164.73768)"
+       id="text3125">
+      <tspan
+         x="0 14.634792"
+         y="0"
+         id="tspan3127"
+         style="font-size:23.08326721px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">S#</tspan>
+    </text>
+    <text
+       transform="matrix(1,0,0,-1,61.96875,164.88647)"
+       id="text3129">
+      <tspan
+         x="0"
+         y="0"
+         id="tspan3131"
+         style="font-size:24.42534065px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">1</tspan>
+    </text>
+    <g
+       transform="translate(0,336)"
+       id="g3133">
+      <path
+         d="m 101.738,-182.551 0,35.891 70.813,0 0,-35.891 -70.813,0 z"
+         id="path3135"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3137">
+      <path
+         d="m 125.988,-182.551 0,35.891"
+         id="path3139"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3141">
+      <path
+         d="m 149.27,-182.551 0,35.891"
+         id="path3143"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <text
+       transform="matrix(1,0,0,-1,109.01563,165.0544)"
+       id="text3145">
+      <tspan
+         x="0"
+         y="0"
+         id="tspan3147"
+         style="font-size:25.9445858px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">:</tspan>
+    </text>
+    <g
+       transform="translate(0,336)"
+       id="g3149">
+      <path
+         d="m 107.559,-329.988 0,35.886 80.511,0 0,-35.886 -80.511,0 z"
+         id="path3151"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3153">
+      <path
+         d="m 157.031,-329.988 0,35.886"
+         id="path3155"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <text
+       transform="matrix(1,0,0,-1,114.83594,17.300177)"
+       id="text3157">
+      <tspan
+         x="0 14.634792"
+         y="0"
+         id="tspan3159"
+         style="font-size:23.08326721px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">S#</tspan>
+    </text>
+    <text
+       transform="matrix(1,0,0,-1,164.78906,17.448968)"
+       id="text3161">
+      <tspan
+         x="0"
+         y="0"
+         id="tspan3163"
+         style="font-size:24.42534065px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">1</tspan>
+    </text>
+    <g
+       transform="translate(0,336)"
+       id="g3165">
+      <path
+         d="m 146.359,-256.27 0,35.891 136.77,0 0,-35.891 -136.77,0 z"
+         id="path3167"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3169">
+      <path
+         d="m 236.57,-256.27 0,35.891"
+         id="path3171"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3173">
+      <path
+         d="m 259.852,-256.27 0,35.891"
+         id="path3175"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <text
+       transform="matrix(1,0,0,-1,153.63672,91.141559)"
+       id="text3177">
+      <tspan
+         x="0 14.733297 30.023024 45.336945 60.626671"
+         y="0"
+         id="tspan3179"
+         style="font-size:24.19260597px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">Thunk</tspan>
+    </text>
+    <g
+       transform="translate(0,336)"
+       id="g3181">
+      <path
+         d="m 231.719,-329.988 0,35.886 80.511,0 0,-35.886 -80.511,0 z"
+         id="path3183"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3185">
+      <path
+         d="m 281.191,-329.988 0,35.886"
+         id="path3187"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <text
+       transform="matrix(1,0,0,-1,238.99609,17.300177)"
+       id="text3189">
+      <tspan
+         x="0 14.634792"
+         y="0"
+         id="tspan3191"
+         style="font-size:23.08326721px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">S#</tspan>
+    </text>
+    <text
+       transform="matrix(1,0,0,-1,288.94922,17.448968)"
+       id="text3193">
+      <tspan
+         x="0"
+         y="0"
+         id="tspan3195"
+         style="font-size:24.42534065px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">0</tspan>
+    </text>
+    <g
+       transform="translate(0,336)"
+       id="g3197">
+      <path
+         d="m 61,-8.922 c 0,-6.789 0,-32.976 0,-54.316"
+         id="path3199"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       d="M 64.879,272.762 61,263.059 l -2.91,9.703 6.789,0 z"
+       id="path3201"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <g
+       transform="translate(0,336)"
+       id="g3203">
+      <path
+         d="M 64.879,-63.238 61,-72.941 l -2.91,9.703 6.789,0 z"
+         id="path3205"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <text
+       transform="matrix(1,0,0,-1,61.484375,288.88095)"
+       id="text3207">
+      <tspan
+         x="0 8.9455585 23.510763 30.758959 45.324162 52.595295 59.866428"
+         y="0"
+         id="tspan3209"
+         style="font-size:22.93732834px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">[1,1..]</tspan>
+    </text>
+    <g
+       transform="translate(0,336)"
+       id="g3211">
+      <path
+         d="m 61.969,-109.801 c 0,-9.699 -1.938,-19.398 -4.848,-28.129"
+         id="path3213"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       d="m 60.031,197.102 -6.793,-7.762 0,9.699 6.793,-1.937 z"
+       id="path3215"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <g
+       transform="translate(0,336)"
+       id="g3217">
+      <path
+         d="m 60.031,-138.898 -6.793,-7.762 0,9.699 6.793,-1.937 z"
+         id="path3219"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3221">
+      <path
+         d="m 85.25,-109.801 c 0,-11.64 6.789,-22.308 14.551,-30.07"
+         id="path3223"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       d="m 101.738,198.07 4.852,-8.73 -8.731,3.879 3.879,4.851 z"
+       id="path3225"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <g
+       transform="translate(0,336)"
+       id="g3227">
+      <path
+         d="m 101.738,-137.93 4.852,-8.73 -8.731,3.879 3.879,4.851 z"
+         id="path3229"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3231">
+      <path
+         d="m 137.629,-183.52 c 0,-32.98 -2.91,-40.742 0,-73.718 0.973,-8.731 1.941,-18.434 3.883,-27.16"
+         id="path3233"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       d="m 144.422,51.602 -0.973,-9.704 -4.847,8.731 5.82,0.973 z"
+       id="path3235"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <g
+       transform="translate(0,336)"
+       id="g3237">
+      <path
+         d="m 144.422,-284.398 -0.973,-9.704 -4.847,8.731 5.82,0.973 z"
+         id="path3239"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3241">
+      <path
+         d="m 160.91,-183.52 c 0,-11.64 6.789,-22.308 14.551,-31.039"
+         id="path3243"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       d="m 178.371,124.352 4.848,-8.731 -9.699,3.879 4.851,4.852 z"
+       id="path3245"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <g
+       transform="translate(0,336)"
+       id="g3247">
+      <path
+         d="m 178.371,-211.648 4.848,-8.731 -9.699,3.879 4.851,4.852 z"
+         id="path3249"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3251">
+      <path
+         d="m 248.211,-257.238 c 0,-25.223 -25.223,-39.774 -50.441,-46.563"
+         id="path3253"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       d="m 197.77,28.32 -9.7,0.969 7.758,5.82 1.942,-6.789 z"
+       id="path3255"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <g
+       transform="translate(0,336)"
+       id="g3257">
+      <path
+         d="m 197.77,-307.68 -9.7,0.969 7.758,5.82 1.942,-6.789 z"
+         id="path3259"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       transform="translate(0,336)"
+       id="g3261">
+      <path
+         d="m 271.488,-257.238 c 0,-8.731 0,-18.434 0,-27.16"
+         id="path3263"
+         style="fill:none;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <path
+       d="m 275.371,51.602 -3.883,-9.704 -2.91,9.704 6.793,0 z"
+       id="path3265"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <g
+       transform="translate(0,336)"
+       id="g3267">
+      <path
+         d="m 275.371,-284.398 -3.883,-9.704 -2.91,9.704 6.793,0 z"
+         id="path3269"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" />
     </g>
   </g>
 </svg>
diff --git a/ghc-vis.cabal b/ghc-vis.cabal
--- a/ghc-vis.cabal
+++ b/ghc-vis.cabal
@@ -1,14 +1,14 @@
 name:               ghc-vis
-version:            0.6.1.1
+version:            0.7
 license:            BSD3
 license-file:       LICENSE
 category:           GHC, Debug, Development
 cabal-version:      >= 1.10
 build-type:         Custom
-author:             Dennis Felsing <dennis@felsin9.de>
+author:             Dennis Felsing, Joachim Breitner
 maintainer:         Dennis Felsing <dennis@felsin9.de>
 homepage:           http://felsin9.de/nnis/ghc-vis
-copyright:          Dennis Felsing 2012
+copyright:          Dennis Felsing 2012-2013
 synopsis:           Live visualization of data structures in GHCi
 description:        Visualize live data structures in GHCi. Evaluation is not
                     forced and you can interact with the visualized data
@@ -20,8 +20,8 @@
                     how it can be used with GHCi's debugger:
                     <http://felsin9.de/nnis/ghc-vis/#combined-debugger>
 
-tested-with: GHC == 7.4.1, GHC == 7.4.2, GHC == 7.6.1
-data-files: ghci data/main.ui data/welcome.svg data/legend_graph.svg data/legend_list.svg
+tested-with: GHC == 7.4.1, GHC == 7.4.2, GHC == 7.6.1, GHC == 7.6.2, GHC == 7.6.3
+data-files: ghci data/main.ui data/welcome.svg data/legend_graph.svg data/legend_list.svg data/icon_collapse.svg data/icon_evaluate.svg data/hover_collapse.svg data/hover_evaluate.svg
 Extra-source-files: nonghci-test.hs
 
 flag graph
@@ -32,13 +32,13 @@
   Default: True
   Description: "Full ghc-vis window: decorations, buttons, legend"
 
-flag sdl
-  Default: False
-  Description: "SDL window"
+--flag sdl
+--  Default: False
+--  Description: "SDL window"
 
 Library
-  Exposed-modules: GHC.Vis
-  Other-modules: GHC.Vis.Internal GHC.Vis.Types GHC.Vis.View.List GHC.Vis.View.Common Paths_ghc_vis
+  Exposed-modules: GHC.Vis GHC.Vis.Internal 
+  Other-modules: GHC.Vis.Types GHC.Vis.View.List GHC.Vis.View.Common Paths_ghc_vis
   Default-Language: Haskell2010
   Build-depends: base >= 4.5 && < 4.7,
                  mtl >= 2.0 && < 2.2,
@@ -48,8 +48,9 @@
                  transformers == 0.3.*,
                  containers >= 0.4 && < 0.6,
                  gtk == 0.12.*,
+                 svgcairo == 0.12.*,
                  cairo == 0.12.*,
-                 ghc-heap-view == 0.4.*
+                 ghc-heap-view == 0.5.*
   Hs-source-dirs: src/
   Ghc-options: -Wall -fno-warn-unused-do-bind
 
@@ -60,12 +61,11 @@
       Cpp-options: -DGRAPH_VIEW
 
   if flag(full)
-      Build-depends: svgcairo >= 0.12
       Cpp-options: -DFULL_WINDOW
 
-  if flag(sdl)
-      Build-depends: SDL == 0.6.*
-      Cpp-options: -DSDL_WINDOW
+  --if flag(sdl)
+  --    Build-depends: SDL == 0.6.*
+  --    Cpp-options: -DSDL_WINDOW
 
 source-repository head
     type:     git
diff --git a/ghci b/ghci
--- a/ghci
+++ b/ghci
@@ -6,6 +6,9 @@
 :def switch \_ -> return $ "GHC.Vis.switch"
 :def update \_ -> return $ "GHC.Vis.update"
 :def clear  \_ -> return $ "GHC.Vis.clear"
+:def restore \_ -> return $ "GHC.Vis.restore"
+:def timeBack \_ -> return $ "GHC.Vis.history (+1)"
+:def timeForward \_ -> return $ "GHC.Vis.history (\\x -> x - 1)"
 :def export \x -> return $ "GHC.Vis.export " ++ show x
 
 -- Evaluate one step and update values in ghc-vis
diff --git a/src/GHC/Vis.hs b/src/GHC/Vis.hs
--- a/src/GHC/Vis.hs
+++ b/src/GHC/Vis.hs
@@ -44,6 +44,8 @@
   switch,
   update,
   clear,
+  restore,
+  history,
   export
   )
   where
@@ -66,6 +68,8 @@
 import Data.Char
 import Data.IORef
 
+import qualified Data.IntMap as M
+
 import System.Timeout
 import System.Mem
 
@@ -81,7 +85,7 @@
 import qualified GHC.Vis.View.Graph as Graph
 #endif
 
-import Graphics.Rendering.Cairo
+import Graphics.Rendering.Cairo hiding (restore)
 
 #ifdef FULL_WINDOW
 import Graphics.Rendering.Cairo.SVG
@@ -176,6 +180,14 @@
 clear :: IO ()
 clear = put ClearSignal
 
+-- | Reset the hidden boxes
+restore :: IO ()
+restore = put RestoreSignal
+
+-- | Change position in history
+history :: (Int -> Int) -> IO ()
+history = put . HistorySignal
+
 -- | Export the current visualization view to a file, format depends on the
 --   file ending. Currently supported: svg, png, pdf, ps
 export :: String -> IO ()
@@ -396,9 +408,18 @@
     when (E.eventKeyName e `elem` ["c"]) $
       put ClearSignal
 
+    when (E.eventKeyName e `elem` ["C"]) $
+      put RestoreSignal
+
     when (E.eventKeyName e `elem` ["u"]) $
       put UpdateSignal
 
+    when (E.eventKeyName e `elem` ["comma", "bracketleft"]) $
+      put $ HistorySignal (+1)
+
+    when (E.eventKeyName e `elem` ["period", "bracketright"]) $
+      put $ HistorySignal (\x -> x - 1)
+
     widgetQueueDraw canvas
     return True
 
@@ -445,7 +466,7 @@
                     return ())
 
       boxes <- readMVar visBoxes
-      performGC -- TODO: Else Blackholes appear. Do we want this?
+      performGC -- Else Blackholes appear. Do we want this?
                 -- Blackholes stop our current thread and only resume after
                 -- they have been replaced with their result, thereby leading
                 -- to an additional element in the HeapMap we don't want.
@@ -463,7 +484,7 @@
 #ifdef GRAPH_VIEW
   where doSwitch = isGraphvizInstalled >>= \gvi -> if gvi
           then modifyIORef visState (\s -> s {T.view = succN (T.view s), zoomRatio = 1, position = (0, 0)})
-          else putStrLn "Cannot switch view: Graphviz not installed"
+          else putStrLn "Cannot switch view: The Graphviz binary (dot) is not installed"
 
         succN GraphView = ListView
         succN ListView = GraphView
@@ -488,27 +509,46 @@
             timeout signalTimeout (putMVar visSignal UpdateSignal)
             react canvas legendCanvas)
     Just signal -> do
-      case signal of
-        NewSignal x n  -> modifyMVar_ visBoxes (
-          \y -> return $ if (x,n) `elem` y then y else y ++ [(x,n)])
-        ClearSignal    -> modifyMVar_ visBoxes (\_ -> return [])
-        UpdateSignal   -> return ()
-        SwitchSignal   -> doSwitch
-        ExportSignal d f -> catch (runCorrect exportView >>= \e -> e d f)
-          (\e -> do let err = show (e :: IOException)
-                    hPutStrLn stderr $ "Couldn't export to file \"" ++ f ++ "\": " ++ err
-                    return ())
+      doUpdate <- case signal of
+        NewSignal x n  -> do
+          modifyMVar_ visBoxes (\y -> return $ if ([n], x) `elem` y then y else y ++ [([n], x)])
+          return True
+        ClearSignal    -> do
+          modifyMVar_ visBoxes $ const $ return []
+          modifyMVar_ visHidden $ const $ return []
+          modifyMVar_ visHeapHistory $ const $ return (0, [(HeapGraph M.empty, [])])
+          return False
+        RestoreSignal -> do
+          modifyMVar_ visHidden $ const $ return []
+          return False
+        RedrawSignal   -> return False
+        UpdateSignal   -> return True
+        SwitchSignal   -> doSwitch >> return False
+        HistorySignal f -> do
+          modifyMVar_ visHeapHistory (\(i,xs) -> return (max 0 (min (length xs - 1) (f i)), xs))
+          return False
+        ExportSignal d f -> do
+          catch (runCorrect exportView >>= \e -> e d f)
+            (\e -> do let err = show (e :: IOException)
+                      hPutStrLn stderr $ "Couldn't export to file \"" ++ f ++ "\": " ++ err
+                      return ())
+          return False
 
       boxes <- readMVar visBoxes
-      performGC -- TODO: Else Blackholes appear. Do we want this?
-                -- Blackholes stop our current thread and only resume after
-                -- they have been replaced with their result, thereby leading
-                -- to an additional element in the HeapMap we don't want.
-                -- Example for bad behaviour that would happen then:
-                -- λ> let xs = [1..42] :: [Int]
-                -- λ> let x = 17 :: Int
-                -- λ> let ys = [ y | y <- xs, y >= x ]
 
+      when doUpdate $ do
+        performGC -- Else Blackholes appear. Do we want this?
+                  -- Blackholes stop our current thread and only resume after
+                  -- they have been replaced with their result, thereby leading
+                  -- to an additional element in the HeapMap we don't want.
+                  -- Example for bad behaviour that would happen then:
+                  -- λ> let xs = [1..42] :: [Int]
+                  -- λ> let x = 17 :: Int
+                  -- λ> let ys = [ y | y <- xs, y >= x ]
+
+        x <- multiBuildHeapGraph 10 boxes
+        modifyMVar_ visHeapHistory (\(i,xs) -> return (i,x:xs))
+
       runCorrect updateObjects >>= \f -> f boxes
 
       postGUISync $ widgetQueueDraw canvas
@@ -518,7 +558,7 @@
 #ifdef GRAPH_VIEW
   where doSwitch = isGraphvizInstalled >>= \gvi -> if gvi
           then modifyIORef visState (\s -> s {T.view = succN (T.view s), zoomRatio = 1, position = (0, 0)})
-          else putStrLn "Cannot switch view: Graphviz not installed"
+          else putStrLn "Cannot switch view: The Graphviz binary (dot) is not installed"
 
         succN GraphView = ListView
         succN ListView = GraphView
@@ -533,8 +573,6 @@
 
 zoomImage :: WidgetClass w1 => w1 -> State -> Double -> T.Point -> IO T.Point
 zoomImage _canvas s newZoomRatio _mousePos@(_x', _y') = do
-  -- TODO: Mouse must stay at same spot
-
   --E.Rectangle _ _ rw' rh' <- widgetGetAllocation canvas
   --let (rw, rh) = (fromIntegral rw', fromIntegral rh')
   --let (x,y) = (x' - rw / 2, y' - rh / 2)
@@ -550,9 +588,8 @@
 visMainThread = do
   initGUI
 
-  mainUIFile <- My.getDataFileName "data/main.ui"
   builder <- builderNew
-  builderAddFromFile builder mainUIFile
+  builderAddFromFile builder =<< My.getDataFileName "data/main.ui"
 
   let get :: forall cls . GObjectClass cls
           => (GObject -> cls)
@@ -581,13 +618,16 @@
   onDelete aboutDialog  $ const $ widgetHide aboutDialog  >> return True
   onDelete legendDialog $ const $ widgetHide legendDialog >> return True
 
-  get castToMenuItem "clear"  >>= \item -> onActivateLeaf item clear
-  get castToMenuItem "switch" >>= \item -> onActivateLeaf item switch
-  get castToMenuItem "update" >>= \item -> onActivateLeaf item update
-  get castToMenuItem "export" >>= \item -> onActivateLeaf item $ widgetShow saveDialog
-  get castToMenuItem "quit"   >>= \item -> onActivateLeaf item $ widgetDestroy window
-  get castToMenuItem "about"  >>= \item -> onActivateLeaf item $ widgetShow aboutDialog
-  get castToMenuItem "legend" >>= \item -> onActivateLeaf item $ widgetShow legendDialog
+  get castToMenuItem "clear"       >>= \item -> onActivateLeaf item clear
+  get castToMenuItem "switch"      >>= \item -> onActivateLeaf item switch
+  get castToMenuItem "restore"     >>= \item -> onActivateLeaf item restore
+  get castToMenuItem "update"      >>= \item -> onActivateLeaf item update
+  get castToMenuItem "export"      >>= \item -> onActivateLeaf item $ widgetShow saveDialog
+  get castToMenuItem "quit"        >>= \item -> onActivateLeaf item $ widgetDestroy window
+  get castToMenuItem "about"       >>= \item -> onActivateLeaf item $ widgetShow aboutDialog
+  get castToMenuItem "legend"      >>= \item -> onActivateLeaf item $ widgetShow legendDialog
+  get castToMenuItem "timeback"    >>= \item -> onActivateLeaf item $ history (+1)
+  get castToMenuItem "timeforward" >>= \item -> onActivateLeaf item $ history (\x -> x - 1)
 
   widgetModifyBg canvas StateNormal backgroundColor
   widgetModifyBg legendCanvas StateNormal backgroundColor
diff --git a/src/GHC/Vis/Internal.hs b/src/GHC/Vis/Internal.hs
--- a/src/GHC/Vis/Internal.hs
+++ b/src/GHC/Vis/Internal.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, MagicHash, DeriveDataTypeable, NoMonomorphismRestriction, RankNTypes #-}
+{-# LANGUAGE CPP, MagicHash, DeriveDataTypeable, NoMonomorphismRestriction, RankNTypes, RecordWildCards #-}
 
 {- |
    Module      : GHC.Vis.Internal
@@ -8,11 +8,8 @@
 
  -}
 module GHC.Vis.Internal (
-  walkHeap,
-  parseBoxes,
-  parseBoxesHeap,
-  pointersToFollow2,
-  showClosure
+  parseClosure,
+  showClosureFields
   )
   where
 
@@ -21,96 +18,80 @@
 #endif
 
 import GHC.Vis.Types
-import GHC.HeapView hiding (name, pkg, modl, fun, arrWords)
 
+import GHC.HeapView hiding (pkg, modl, fun, arrWords)
+
 import Control.Monad
 import Control.Monad.State hiding (State, fix)
 
 import Data.Word
 import Data.Char
 import Data.List hiding (insert)
+import qualified Data.IntMap as M
 
 import Text.Printf
 import Unsafe.Coerce
 
-import Control.Monad.Trans.Maybe
-
 import System.IO.Unsafe
 
--- | Maximum depth which walkHeap recurses to. Prevents users from evaluating
---   data structures which are too big and would take very long to visualize.
-maxHeapWalkDepth :: Int
-maxHeapWalkDepth = 100
-
--- | Walk the heap for a list of objects to be visualized and their
---   corresponding names.
-parseBoxes :: [(Box, String)] -> IO [[VisObject]]
-parseBoxes bs = do
-  r <- generalParseBoxes evalState bs
-  case r of
-    Just x -> return x
-    _ -> do
-      putStrLn "Failure, trying again"
-      parseBoxes bs
+-- TODO: Remove
+instance Eq Box where
+  a == b = unsafePerformIO $ areBoxesEqual a b
 
--- | Walk the heap for a list of objects to be visualized and their
---   corresponding names. Also return the resulting 'HeapMap' and another
---   'HeapMap' that does not contain BCO pointers.
-parseBoxesHeap :: [(Box, String)] -> IO ([[VisObject]], PState)
-parseBoxesHeap bs = do
-  r <- generalParseBoxes runState bs
-  case r of
-    (Just x, y) -> return (x,y)
-    _ -> parseBoxesHeap bs
+-- | Parse a closure to a list of VisObjects
+parseClosure :: HeapGraphIndex -> PrintState [VisObject]
+parseClosure i = do
+  o <- correctObject i
+  case o of
+    Link n -> return [Link n] -- Don't build infinite heaps
+    _      -> do HeapGraph m <- gets heapGraph
+                 l <- parseInternal i $ hgeClosure $ m M.! i
+                 return $ insertObjects o l
 
-generalParseBoxes ::
-     (PrintState (Maybe [[VisObject]]) -> PState -> b)
-  -> [(Box, String)] -> IO b
-generalParseBoxes f bs = do
-  h <- walkHeapSimply bs
-  h2 <- walkHeapWithBCO bs
-  return $ f (g bs) $ PState 0 0 0 h h2
-  where g bs' = runMaybeT $ go bs'
-        go ((b',_):b's) = do h <- lift $ gets heapMap'
-                             (_,c) <- lookupT b' h
-                             r <- parseClosure b' c
-                             rs <- go b's
-                             return $ simplify r : rs
-        go [] = return []
+correctObject :: HeapGraphIndex -> PrintState VisObject
+correctObject i = do
+  name <- getName i
+  bindings <- gets bindings
 
-lookupT :: Eq a => a -> [(a,b)] -> MaybeT PrintState b
-lookupT b' h = MaybeT $ return $ lookup b' h
+  if null name
+  then if i `elem` bindings then
+                 (do name' <- setName i
+                     return $ Named name' [])
+                 else return $ Unnamed ""
+  else return $ Link name
 
--- Pulls together multiple Unnamed objects to one
-simplify :: [VisObject] -> [VisObject]
-simplify [] = []
-simplify [Named a bs] = [Named a $ simplify bs]
-simplify [a] = [a]
-simplify (Unnamed a : Unnamed b : xs) = simplify $ Unnamed (a ++ b) : xs
-simplify (Named a bs : xs) = Named a (simplify bs) : simplify xs
-simplify (a:xs) = a : simplify xs
+setName :: HeapGraphIndex -> PrintState String
+setName i = do
+  n <- getName i
+  if null n
+  then do
+    s@(PState ti fi xi _ (HeapGraph m)) <- get
+    let Just hge@(HeapGraphEntry{hgeClosure = c}) = M.lookup i m
+    let (name,newState) = case bindingLetter c of
+          't' -> ('t' : show ti, s{tCounter' = ti + 1})
+          'f' -> ('f' : show fi, s{fCounter' = fi + 1})
+          'x' -> ('x' : show xi, s{xCounter' = xi + 1})
+          _   -> error "Invalid letter"
 
-parseClosure :: Box -> Closure -> MaybeT PrintState [VisObject]
-parseClosure b c = do
-  o <- correctObject b
-  case o of
-    Link n -> return [Link n] -- Don't build infinite heaps
-    _      -> do i <- parseInternal b c
-                 return $ insertObjects o i
+    let m' = M.insert i (hge{hgeData = name}) m
+    put $ newState{heapGraph = HeapGraph m'}
+    return name
+  else return n
 
-correctObject :: Box -> MaybeT PrintState VisObject
-correctObject box = do
-  r <- lift $ countReferences box
-  n <- getName box
+  where
+    bindingLetter c = case c of
+        ThunkClosure {..} -> 't'
+        SelectorClosure {..} -> 't'
+        APClosure {..} -> 't'
+        PAPClosure {..} -> 'f'
+        BCOClosure {..} -> 't'
+        FunClosure {..} -> 'f'
+        _ -> 'x'
 
-  case n of
-    Just name -> return $ Link name
-    Nothing -> if r > 1 then
-                 (do setName box
-                     mbName <- getName box
-                     name <- MaybeT $ return mbName
-                     return $ Named name [])
-                 else return $ Unnamed ""
+getName :: HeapGraphIndex -> PrintState String
+getName i = do
+  HeapGraph m <- gets heapGraph
+  return $ hgeData $ m M.! i
 
 insertObjects :: VisObject -> [VisObject] -> [VisObject]
 insertObjects _ xs@(Function _ : _) = xs
@@ -120,144 +101,7 @@
 insertObjects (Unnamed _) xs = xs
 insertObjects _ _ = error "unexpected arguments"
 
--- | Recursively walk down the heap objects and return the resulting map. This
---   function recognizes loops and avoids them. Big data structures might still
---   be very slow.
-walkHeap :: [(Box, String)] -> IO HeapMap
-walkHeap = walkHeapGeneral Just pointersToFollow
-
--- | walkHeap, but without Top level names
-walkHeapSimply :: [(Box, String)] -> IO HeapMap
-walkHeapSimply = walkHeapGeneral (const Nothing) pointersToFollow
-
-walkHeapWithBCO :: [(Box, String)] -> IO HeapMap
-walkHeapWithBCO = walkHeapGeneral (const Nothing) pointersToFollow2
-
-walkHeapGeneral :: (String -> Maybe String) -> (Closure -> IO [Box]) -> [(Box, String)] -> IO HeapMap
-walkHeapGeneral topF p2fF bs = foldM (topNodes topF) [dummy] bs >>= \s -> foldM (startWalk p2fF) s bs
-  where topNodes hn l (b,n) = do -- Adds the top nodes without looking at their pointers
-          c' <- getBoxedClosureData b
-          return $ insert (b, (hn n, c')) l
-        startWalk p2f l (b,_) = do -- Ignores that the top nodes are already in the heap map
-          c' <- getBoxedClosureData b
-          p  <- p2f c'
-          foldM (step maxHeapWalkDepth p2f) l p
-        step depth p2f l b = case lookup b l of
-          Just _  -> return l
-          Nothing -> do
-            c' <- getBoxedClosureData b
-            p  <- p2f c'
-            if depth == 0 && not (null p)
-            then do
-              putStrLn "Warning: Maximum data structure depth reached, output is truncated"
-              return $ insert (b, (Nothing, maxDepthClosure)) l
-            else foldM (step (depth - 1) p2f) (insert (b, (Nothing, c')) l) p
-        dummy = (asBox (1 :: Integer),
-          (Nothing, ConsClosure (StgInfoTable 0 0 CONSTR 0) (map fst bs) [] "" "" ""))
-        maxDepthClosure = ConsClosure (StgInfoTable 0 0 CONSTR 0) [] [] "" "" "..."
-
--- We're not inspecting the BCOs and instead later looks which of its recursive
--- children are still in the heap. Only those should be visualized.
-pointersToFollow :: Closure -> IO [Box]
-pointersToFollow BCOClosure{} = return []
-
-pointersToFollow (MutArrClosure _ _ _ bPtrs) =
-  do cPtrs <- mapM getBoxedClosureData bPtrs
-     return $ fix $ zip bPtrs cPtrs
-  where fix ((_,ConsClosure _ _ _ _ "ByteCodeInstr" "BreakInfo"):_:_:xs) = fix xs
-        fix ((_,ConsClosure _ _ _ _ "ByteCodeInstr" "BreakInfo"):_:xs) = fix xs
-        fix ((_,ConsClosure _ _ _ _ "ByteCodeInstr" "BreakInfo"):xs) = fix xs
-        fix ((x,_):xs) = x : fix xs
-        fix [] = []
-
-pointersToFollow x = return $ allPtrs x
-
--- | Follows 'GHC.HeapView.BCOClosure's, but not the debugging data structures
---   (ByteCodeInstr.BreakInfo) of GHC.
-pointersToFollow2 :: Closure -> IO [Box]
-pointersToFollow2 (MutArrClosure _ _ _ bPtrs) =
-  do cPtrs <- mapM getBoxedClosureData bPtrs
-     return $ fix $ zip bPtrs cPtrs
-  where fix ((_,ConsClosure _ _ _ _ "ByteCodeInstr" "BreakInfo"):_:_:xs) = fix xs
-        fix ((_,ConsClosure _ _ _ _ "ByteCodeInstr" "BreakInfo"):_:xs) = fix xs
-        fix ((_,ConsClosure _ _ _ _ "ByteCodeInstr" "BreakInfo"):xs) = fix xs
-        fix ((x,_):xs) = x : fix xs
-        fix [] = []
-
-pointersToFollow2 x = return $ allPtrs x
-
--- walkHeap, but with a maximum depth
---walkHeapDepth :: [(Box, String)] -> IO HeapMap
---walkHeapDepth bs = foldM topNodes [dummy bs] bs >>= \s -> foldM goStart s bs
---  where topNodes l (b,n) = do -- Adds the top nodes without looking at their pointers
---            c' <- getBoxedClosureData b
---            return $ insert (b, (Just n, c')) l
---        goStart l (b,_) = do -- Ignores that the top nodes are already in the heap map
---          c' <- getBoxedClosureData b
---          p  <- pointersToFollow c'
---          foldM (\l b -> go l b 30) l p
---        go l _ 0 = return l
---        go l b x = case lookup b l of
---          Just _  -> return l
---          Nothing -> do
---            c' <- getBoxedClosureData b
---            p  <- pointersToFollow c'
---            foldM (\l b -> go l b (x-1)) (insert (b, (Nothing, c')) l) p
-
--- Additional map operations
-insert :: (Box, HeapEntry) -> HeapMap -> HeapMap
-insert (b,x) xs = case find (\(c,_) -> c == b) xs of
-  Just _  -> xs
-  Nothing -> (b,x):xs
-
-adjust :: (HeapEntry -> HeapEntry) -> Box -> HeapMap -> Maybe HeapMap
-adjust f b h = do i <- findIndex (\(y,_) -> y == b) h
-                  let (h1,(_,x):h2) = splitAt i h
-                  return $ h1 ++ ((b,f x) : h2)
-
-setName :: Box -> MaybeT PrintState ()
-setName b = do PState ti fi bi h h2 <- lift get
-               (_,c) <- lookupT b h2
-               let (n, ti',fi',bi') = case c of
-                     ThunkClosure{} -> ('t' : show ti, ti+1, fi, bi)
-                     APClosure{}    -> ('t' : show ti, ti+1, fi, bi)
-                     FunClosure{}   -> ('f' : show fi, ti, fi+1, bi)
-                     PAPClosure{}   -> ('f' : show fi, ti, fi+1, bi)
-                     _              -> ('b' : show bi, ti, fi, bi+1)
-                   set (Nothing, closure) = (Just n, closure)
-                   set _ = error "unexpected pattern"
-               h' <- MaybeT $ return $ adjust set b h
-               h2' <- MaybeT $ return $ adjust set b h2
-               lift $ put $ PState ti' fi' bi' h' h2'
-
-setVisited :: Box -> MaybeT PrintState ()
-setVisited b = do PState ti fi bi h h2 <- lift get
-                  let set (Nothing, closure) = (Just "visited", closure)
-                      set _ = error "unexpected pattern"
-                  h2' <- MaybeT $ return $ adjust set b h2
-                  lift $ put $ PState ti fi bi h h2'
-
-getName :: Box -> MaybeT PrintState (Maybe String)
-getName b = do h <- lift $ gets heapMap'
-               (name,_) <- lookupT b h
-               return name
-
-getSetName :: Box -> MaybeT PrintState String
-getSetName b = do mn <- getName b
-                  case mn of
-                    Nothing   -> do setName b
-                                    name <- getName b
-                                    MaybeT $ return name
-                    Just name -> return name
-
--- How often is a box referenced in the entire heap map
-countReferences :: Box -> PrintState Int
-countReferences b = do
-  h <- gets heapMap'
-  return $ sum $ map countR h
- where countR (_,(_,c)) = length $ filter (== b) $ allPtrs c
-
-parseInternal :: Box -> Closure -> MaybeT PrintState [VisObject]
+parseInternal :: HeapGraphIndex -> GenClosure (Maybe HeapGraphIndex) -> PrintState [VisObject]
 parseInternal _ (ConsClosure _ [] [dataArg] _pkg modl name) =
  return [Unnamed $ case (modl, name) of
     k | k `elem` [ ("GHC.Word", "W#")
@@ -284,8 +128,6 @@
     _ -> printf "%s %d" (infixFix name) dataArg
   ]
 
--- Empty ByteStrings point to a nullForeignPtr, evaluating it leads to an
--- Prelude.undefined exception
 parseInternal _ (ConsClosure (StgInfoTable 1 3 _ _) _ [_,0,0] _ "Data.ByteString.Internal" "PS")
   = return [Unnamed "ByteString 0 0"]
 
@@ -332,15 +174,15 @@
 
 -- Reversed order of ptrs
 parseInternal b (ThunkClosure _ bPtrs args) = do
-  name <- getSetName b
+  name <- setName b
   cPtrs <- mapM contParse $ reverse bPtrs
   let tPtrs = intercalate [Unnamed ","] cPtrs
       sPtrs = if null tPtrs then [Unnamed ""] else Unnamed "(" : tPtrs ++ [Unnamed ")"]
       sArgs = Unnamed $ if null args then "" else show args
   return $ Thunk (infixFix name) : sPtrs ++ [sArgs]
 
-parseInternal b (FunClosure _ bPtrs args) = do
-  name <- getSetName b
+parseInternal i (FunClosure _ bPtrs args) = do
+  name <- setName i
   cPtrs <- mapM contParse $ reverse bPtrs
   let tPtrs = intercalate [Unnamed ","] cPtrs
       sPtrs = if null tPtrs then [Unnamed ""] else Unnamed "(" : tPtrs ++ [Unnamed ")"]
@@ -349,7 +191,8 @@
 
 -- bPtrs here can currently point to Nothing, because else we might get infinite heaps
 parseInternal _ (MutArrClosure _ _ _ bPtrs)
-  = do cPtrs <- mutArrContParse bPtrs
+  -- = do cPtrs <- mutArrContParse2 bPtrs
+  = do cPtrs <- mapM contParse bPtrs
        let tPtrs = intercalate [Unnamed ","] cPtrs
        return $ if null tPtrs then [Unnamed ""] else Unnamed "(" : tPtrs ++ [Unnamed ")"]
 
@@ -357,45 +200,30 @@
   = do c <- contParse b
        return $ Unnamed "MutVar " : c
 
-parseInternal b (BCOClosure _ _ _ bPtr _ _ _)
-  = do cPtrs <- bcoContParse [bPtr]
+parseInternal _ (BCOClosure _ _ _ bPtr _ _ _)
+  -- = do cPtrs <- bcoContParse2 [bPtr]
+  = do cPtrs <- mapM contParse [bPtr]
        let tPtrs = intercalate [Unnamed ","] cPtrs
-       r <- lift $ countReferences b
-       return $ if null tPtrs then if r > 1 then [Unnamed "BCO"] else [Unnamed ""] else (if r > 1 then Unnamed "BCO(" else Unnamed "(") : tPtrs ++ [Unnamed ")"]
-  -- = do case lookup b h of
-  --        Nothing -> c <- getBoxedClosureData bPtr
-  --        Just (_,c) -> p  <- parseClosure bPtr c
-  -- = do vs <- contParse bPtr
-  --      let ls = filter isExternal $ filter isLink vs
-
-  --          isLink (Link _) = True
-  --          isLink _ = False
-
-  --          isExternal (Link n) = all (notHasName n) vs
-
-  --          notHasName n (Named m _) = n /= m
-  --          notHasName n (Function m) = n /= m
-  --          notHasName _ _ = True
-  --      return vs
+       return $ Unnamed "BCO" : tPtrs
 
-parseInternal b (APClosure _ _ _ fun pl) = do
-  name <- getSetName b
+parseInternal i (APClosure _ _ _ fun pl) = do
+  name <- setName i
   fPtr <- contParse fun
   pPtrs <- mapM contParse $ reverse pl
   let tPtrs = intercalate [Unnamed ","] pPtrs
       sPtrs = if null tPtrs then [Unnamed ""] else Unnamed "[" : tPtrs ++ [Unnamed "]"]
   return $ Thunk (infixFix name) : fPtr ++ sPtrs
 
-parseInternal b (PAPClosure _ _ _ fun pl) = do
-  name <- getSetName b
+parseInternal i (PAPClosure _ _ _ fun pl) = do
+  name <- setName i
   fPtr <- contParse fun
   pPtrs <- mapM contParse $ reverse pl
   let tPtrs = intercalate [Unnamed ","] pPtrs
       sPtrs = if null tPtrs then [Unnamed ""] else Unnamed "[" : tPtrs ++ [Unnamed "]"]
   return $ Function (infixFix name) : fPtr ++ sPtrs
 
-parseInternal b (APStackClosure _ fun pl) = do
-  name <- getSetName b
+parseInternal i (APStackClosure _ fun pl) = do
+  name <- setName i
   fPtr <- contParse fun
   pPtrs <- mapM contParse $ reverse pl
   let tPtrs = intercalate [Unnamed ","] pPtrs
@@ -408,10 +236,9 @@
         cValue <- liftM mbParens $ contParse qValue
         return $ Unnamed "MVar#(" : cHead ++ [Unnamed ","] ++ cTail ++ [Unnamed ","] ++ cValue ++ [Unnamed ")"]
 
-contParse :: Box -> MaybeT PrintState [VisObject]
-contParse b = do h <- lift $ gets heapMap
-                 (_,c) <- lookupT b h
-                 parseClosure b c
+contParse :: Maybe HeapGraphIndex -> PrintState [VisObject]
+contParse Nothing = return []
+contParse (Just i) = parseClosure i
 
 -- It turned out that bcoContParse actually does go into an infinite loop, for
 -- example for this:
@@ -420,28 +247,28 @@
 -- :view foldr'
 -- We fix this by giving visited closures a dummy name, so we recognize when we
 -- get into a loop.
-bcoContParse :: [Box] -> MaybeT PrintState [[VisObject]]
-bcoContParse [] = return []
-bcoContParse (b:bs) = gets heapMap >>= \h -> case lookup b h of
-  Nothing    -> do let ptf = unsafePerformIO $ getBoxedClosureData b >>= pointersToFollow2
-                   r <- lift $ countReferences b
-                   n <- getName b
-                   case n of
-                     Just _ -> bcoContParse bs
-                     Nothing -> do
-                       when (r > 1) $ setVisited b
-                       bcoContParse $ ptf ++ bs
-  Just (_,c) -> do p  <- parseClosure b c
-                   ps <- bcoContParse bs
-                   return $ p : ps
+--bcoContParse :: [Box] -> MaybeT PrintState [[VisObject]]
+--bcoContParse [] = return []
+--bcoContParse (b:bs) = gets heapMap >>= \h -> case lookup b h of
+--  Nothing    -> do let ptf = unsafePerformIO $ getBoxedClosureData b >>= pointersToFollow2
+--                   r <- lift $ countReferences b
+--                   n <- getName b
+--                   case n of
+--                     Just _ -> bcoContParse bs
+--                     Nothing -> do
+--                       when (r > 1) $ setVisited b
+--                       bcoContParse $ ptf ++ bs
+--  Just (_,c) -> do p  <- parseClosure b c
+--                   ps <- bcoContParse bs
+--                   return $ p : ps
 
-mutArrContParse :: [Box] -> MaybeT PrintState [[VisObject]]
-mutArrContParse [] = return []
-mutArrContParse (b:bs) = gets heapMap >>= \h -> case lookup b h of
-  Nothing -> mutArrContParse bs
-  Just (_,c) -> do p  <- parseClosure b c
-                   ps <- mutArrContParse bs
-                   return $ p : ps
+--mutArrContParse :: [Box] -> MaybeT PrintState [[VisObject]]
+--mutArrContParse [] = return []
+--mutArrContParse (b:bs) = gets heapMap >>= \h -> case lookup b h of
+--  Nothing -> mutArrContParse bs
+--  Just (_,c) -> do p  <- parseClosure b c
+--                   ps <- mutArrContParse bs
+--                   return $ p : ps
 
 -- TODO: Doesn't work quite right, for example with (1,"fo")
 mbParens :: [VisObject] -> [VisObject]
@@ -463,16 +290,19 @@
 --                go (Named _ os) = any go os
 --                go _ = False
 
+--showClosure :: Closure -> String
+--showClosure = unwords . showClosureFields
+
 -- | Textual representation of Heap objects, used in the graph visualization.
-showClosure :: Closure -> String
-showClosure (ConsClosure _ _ [dataArg] _ modl name) =
+showClosureFields :: GenClosure t -> [String]
+showClosureFields (ConsClosure _ _ [dataArg] _ modl name) =
  case (modl, name) of
     k | k `elem` [ ("GHC.Word", "W#")
                  , ("GHC.Word", "W8#")
                  , ("GHC.Word", "W16#")
                  , ("GHC.Word", "W32#")
                  , ("GHC.Word", "W64#")
-                 ] -> name ++ " " ++ show dataArg
+                 ] -> [name, show dataArg]
 
     k | k `elem` [ ("GHC.Integer.Type", "S#")
                  , ("GHC.Types", "I#")
@@ -480,80 +310,80 @@
                  , ("GHC.Int", "I16#")
                  , ("GHC.Int", "I32#")
                  , ("GHC.Int", "I64#")
-                 ] -> name ++ " " ++ show ((fromIntegral :: Word -> Int) dataArg)
+                 ] -> [name, show ((fromIntegral :: Word -> Int) dataArg)]
 
-    ("GHC.Types", "C#") -> show . chr $ fromIntegral dataArg
+    ("GHC.Types", "C#") -> ["C#", [chr $ fromIntegral dataArg]]
 
-    ("GHC.Types", "D#") -> printf "D# %0.5f" (unsafeCoerce dataArg :: Double)
-    ("GHC.Types", "F#") -> printf "F# %0.5f" (unsafeCoerce dataArg :: Double)
+    ("GHC.Types", "D#") -> ["D#", printf "%0.5f" (unsafeCoerce dataArg :: Double)]
+    ("GHC.Types", "F#") -> ["F#", printf "%0.5f" (unsafeCoerce dataArg :: Double)]
 
     -- :m +GHC.Arr
     -- let b = array ((1,1),(3,2)) [((1,1),42),((1,2),23),((2,1),999),((2,2),1000),((3,1),1001),((3,2),1002)]
     -- b
     -- :view b
-    _ -> printf "%s %d" name dataArg
+    _ -> [name, show dataArg]
 
-showClosure (ConsClosure (StgInfoTable 1 3 _ 0) _ [_,0,0] _ "Data.ByteString.Internal" "PS")
-  = "ByteString 0 0"
+showClosureFields (ConsClosure (StgInfoTable 1 3 _ 0) _ [_,0,0] _ "Data.ByteString.Internal" "PS")
+  = ["ByteString","0","0"]
 
-showClosure (ConsClosure (StgInfoTable 1 3 _ 0) [_] [_,start,end] _ "Data.ByteString.Internal" "PS")
-  = printf "ByteString %d %d" start end
+showClosureFields (ConsClosure (StgInfoTable 1 3 _ 0) [_] [_,start,end] _ "Data.ByteString.Internal" "PS")
+  = ["ByteString",printf "%d" start,printf "%d" end]
 
-showClosure (ConsClosure (StgInfoTable 2 3 _ 1) [_,_] [_,start,end] _ "Data.ByteString.Lazy.Internal" "Chunk")
-  = printf "Chunk %d %d" start end
+showClosureFields (ConsClosure (StgInfoTable 2 3 _ 1) [_,_] [_,start,end] _ "Data.ByteString.Lazy.Internal" "Chunk")
+  = ["Chunk",printf "%d" start,printf "%d" end]
 
-showClosure (ConsClosure _ _ dArgs _ _ name)
-  = unwords $ name : map show dArgs
+showClosureFields (ConsClosure _ _ dArgs _ _ name)
+  = name : map show dArgs
 
 -- Reversed order of ptrs
-showClosure ThunkClosure{}
-  = "Thunk"
+showClosureFields ThunkClosure{}
+  = ["Thunk"]
 
-showClosure SelectorClosure{}
-  = "Selector"
+showClosureFields SelectorClosure{}
+  = ["Selector"]
 
 -- Probably should delete these from Graph
-showClosure IndClosure{}
-  = "Ind"
+showClosureFields IndClosure{}
+  = ["Ind"]
 
-showClosure BlackholeClosure{}
-  = "Blackhole"
+showClosureFields BlackholeClosure{}
+  = ["Blackhole"]
 
-showClosure APClosure{}
-  = "AP"
+showClosureFields APClosure{}
+  = ["AP"]
 
-showClosure PAPClosure{}
-  = "PAP"
+showClosureFields PAPClosure{}
+  = ["PAP"]
 
-showClosure APStackClosure{}
-  = "APStack"
+showClosureFields APStackClosure{}
+  = ["APStack"]
 
-showClosure BCOClosure{}
-  = "BCO"
+showClosureFields BCOClosure{}
+  = ["BCO"]
 
-showClosure (ArrWordsClosure _ _ arrWords)
-  = intercalate ",\n" $ map (printf "0x%x") arrWords
+showClosureFields (ArrWordsClosure _ _ arrWords)
+  = map (printf "0x%x") arrWords
 
-showClosure MutArrClosure{}
-  = "MutArr"
+showClosureFields MutArrClosure{}
+  = ["MutArr"]
 
-showClosure MutVarClosure{}
-  = "MutVar"
+showClosureFields MutVarClosure{}
+  = ["MutVar"]
 
-showClosure MVarClosure{}
-  = "MVar#"
+showClosureFields MVarClosure{}
+  = ["MVar#"]
 
-showClosure FunClosure{}
-  = "Fun"
+showClosureFields FunClosure{}
+  = ["Fun"]
 
-showClosure BlockingQueueClosure{}
-  = "BlockingQueue"
+showClosureFields BlockingQueueClosure{}
+  = ["BlockingQueue"]
 
-showClosure (OtherClosure (StgInfoTable _ _ cTipe _) _ _)
-  = show cTipe
+showClosureFields (OtherClosure (StgInfoTable _ _ cTipe _) _ _)
+  = [show cTipe]
 
-showClosure (UnsupportedClosure (StgInfoTable _ _ cTipe _))
-  = show cTipe
+showClosureFields (UnsupportedClosure (StgInfoTable _ _ cTipe _))
+  = [show cTipe]
 
 --showClosure c = "Missing pattern for " ++ show c
 
diff --git a/src/GHC/Vis/Types.hs b/src/GHC/Vis/Types.hs
--- a/src/GHC/Vis/Types.hs
+++ b/src/GHC/Vis/Types.hs
@@ -13,8 +13,8 @@
   View(..),
   ViewType(..),
   State(..),
-  HeapEntry,
-  HeapMap,
+  Identifier,
+  NamedBox,
   PState(..),
   PrintState,
   VisObject(..)
@@ -36,9 +36,12 @@
 
 -- | Signals that are sent to the GUI to signal changes
 data Signal = NewSignal Box String -- ^ Add a new Box to be visualized
-            | UpdateSignal         -- ^ Redraw
+            | UpdateSignal         -- ^ Update the view
+            | RedrawSignal         -- ^ Redraw
             | ClearSignal          -- ^ Remove all Boxes
+            | RestoreSignal        -- ^ Reset all hidden boxes
             | SwitchSignal         -- ^ Switch to alternative view
+            | HistorySignal (Int -> Int) -- ^ Change position in history
             | ExportSignal DrawFunction String -- ^ Export the view to a file
 
 -- | All functions a view has to provide
@@ -46,7 +49,7 @@
   { redraw        :: WidgetClass w => w -> IO ()
   , click         :: IO ()
   , move          :: WidgetClass w => w -> IO ()
-  , updateObjects :: [(Box, String)] -> IO ()
+  , updateObjects :: [NamedBox] -> IO ()
   , exportView    :: DrawFunction -> String -> IO ()
   }
 
@@ -65,23 +68,19 @@
   , wasDragged :: Bool     -- ^ Whether the mouse was actually dragged
   }
 
--- | An entry in a 'HeapMap', consisting of an identifier and a parsed GHC heap entry
-type HeapEntry =
-  ( Maybe String
-  , Closure
-  )
--- | A map of heap objects.
---   We're using a slow, eq-based list instead of a proper map because
---   StableNames' hash values aren't stable enough
-type HeapMap   = [(Box, HeapEntry)]
+-- | Identifier of a closure
+type Identifier = [String]
 
--- | The second HeapMap includes BCO pointers, needed for list visualization
+-- | A box and its identifier
+type NamedBox = (Identifier, Box)
+
+-- | Internal state of the list view generator
 data PState = PState
-  { tCounter :: Integer
-  , fCounter :: Integer
-  , bCounter :: Integer
-  , heapMap  :: HeapMap
-  , heapMap' :: HeapMap
+  { tCounter' :: Integer
+  , fCounter' :: Integer
+  , xCounter' :: Integer
+  , bindings  :: [HeapGraphIndex]
+  , heapGraph :: HeapGraph String
   }
 
 -- | The state of a printing operation
diff --git a/src/GHC/Vis/View/Common.hs b/src/GHC/Vis/View/Common.hs
--- a/src/GHC/Vis/View/Common.hs
+++ b/src/GHC/Vis/View/Common.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, ScopedTypeVariables #-}
+{-# LANGUAGE CPP, ScopedTypeVariables, RecordWildCards #-}
 {- |
    Module      : GHC.Vis.View.Common
    Copyright   : (c) Dennis Felsing
@@ -11,6 +11,12 @@
   visRunning,
   visState,
   visBoxes,
+  visHidden,
+  visHeapHistory,
+  getHeapGraph,
+  inHistoryMode,
+  parseBoxes,
+  parseBoxesHeap,
   evaluate
   )
   where
@@ -23,8 +29,15 @@
 import Control.DeepSeq
 import Control.Exception hiding (evaluate)
 
+import Control.Monad.State hiding (State, fix)
+
+import qualified Data.IntMap as M
+
 import Data.IORef
 
+import Data.Maybe (catMaybes)
+import Data.List
+
 import System.IO.Unsafe
 
 import GHC.Vis.Internal
@@ -44,29 +57,75 @@
 visState = unsafePerformIO $ newIORef $ State (0, 0) ListView 1 (0, 0) False False
 
 -- | All the visualized boxes
-visBoxes :: MVar [(Box, String)]
-visBoxes = unsafePerformIO (newMVar [] :: IO (MVar [(Box, String)]))
+visBoxes :: MVar [NamedBox]
+visBoxes = unsafePerformIO (newMVar [] :: IO (MVar [NamedBox]))
 
+-- | Hidden boxes
+visHidden :: MVar [Box]
+visHidden = unsafePerformIO (newMVar [] :: IO (MVar [Box]))
+
+-- | All heap graphs since the last clear command
+visHeapHistory :: MVar (Int, [(HeapGraph Identifier, [(Identifier, HeapGraphIndex)])])
+visHeapHistory = unsafePerformIO (newMVar (0, [(HeapGraph M.empty, [])]) :: IO (MVar (Int, [(HeapGraph Identifier, [(Identifier, HeapGraphIndex)])])))
+
+-- | Get the currently selected heap graph
+getHeapGraph :: IO (HeapGraph Identifier, [(Identifier, HeapGraphIndex)])
+getHeapGraph = do
+  (pos, xs) <- readMVar visHeapHistory
+  return $ xs !! pos
+
+-- | Whether we're currently looking at an older heap graph or the most recent one
+inHistoryMode :: IO Bool
+inHistoryMode = liftM ((> 0) . fst) $ readMVar visHeapHistory
+
 -- | Evaluate an object identified by a String.
 evaluate :: String -> IO ()
-evaluate identifier = do (_,hm) <- printAll
-                         (show (map go hm) `deepseq` return ()) `catch`
+evaluate identifier = do (_,HeapGraph m) <- printAll
+                         (show (M.map go m) `deepseq` return ()) `catch`
                            \(e :: SomeException) -> putStrLn $ "Caught exception while evaluating: " ++ show e
-  where go (Box a,(Just n, y)) | n == identifier = seq a (Just n, y)
-                                 | otherwise = (Just n, y)
-        go (_,(x,y)) = (x,y)
+  where go hge@(HeapGraphEntry (Box a) _ _ n) | n == identifier = seq a hge
+                                              | otherwise = hge
 
---printOne :: a -> IO String
---printOne a = do
---  bs <- readMVar visBoxes
---  case findIndex (\(b,_) -> asBox a == b) bs of
---    Just pos -> do
---      t  <- parseBoxes bs
---      return $ show (t !! pos)
---    Nothing -> return "Add entry first"
+-- | Walk the heap for a list of objects to be visualized and their
+--   corresponding names.
+parseBoxes :: IO [[VisObject]]
+parseBoxes = generalParseBoxes evalState
 
-printAll :: IO (String, HeapMap)
+-- | Walk the heap for a list of objects to be visualized and their
+--   corresponding names. Also return the resulting 'HeapMap' and another
+--   'HeapMap' that does not contain BCO pointers.
+parseBoxesHeap :: IO ([[VisObject]], PState)
+parseBoxesHeap = generalParseBoxes runState
+
+--generalParseBoxes ::
+--     (PrintState (Maybe [[VisObject]]) -> PState -> b)
+--  -> [NamedBox] -> IO b
+generalParseBoxes :: (PrintState [[VisObject]] -> PState -> b) -> IO b
+generalParseBoxes f = do
+  --(hg, starts) <- multiBuildHeapGraph 100 $ map (\(_,x) -> ("",x)) bs
+  (hg@(HeapGraph m), starts) <- getHeapGraph
+  let bindings = boundMultipleTimes hg $ map snd starts
+  let g i = do
+        r <- parseClosure i
+        return $ simplify r
+  return $ f (mapM (g . snd) starts) $ PState 1 1 1 bindings $ HeapGraph $ M.map (\hge -> hge{hgeData = ""}) m
+
+-- | In the given HeapMap, list all indices that are used more than once. The
+-- second parameter adds external references, commonly @[heapGraphRoot]@.
+boundMultipleTimes :: HeapGraph a -> [HeapGraphIndex] -> [HeapGraphIndex]
+boundMultipleTimes (HeapGraph m) roots = map head $ filter (not.null) $ map tail $ group $ sort $
+     roots ++ concatMap (catMaybes . allPtrs . hgeClosure) (M.elems m)
+
+-- Pulls together multiple Unnamed objects to one
+simplify :: [VisObject] -> [VisObject]
+simplify [] = []
+simplify [Named a bs] = [Named a $ simplify bs]
+simplify [a] = [a]
+simplify (Unnamed a : Unnamed b : xs) = simplify $ Unnamed (a ++ b) : xs
+simplify (Named a bs : xs) = Named a (simplify bs) : simplify xs
+simplify (a:xs) = a : simplify xs
+
+printAll :: IO (String, HeapGraph String)
 printAll = do
-  bs <- readMVar visBoxes
-  (t, PState{heapMap = h}) <- parseBoxesHeap bs
+  (t, PState{heapGraph = h}) <- parseBoxesHeap
   return (show t, h)
diff --git a/src/GHC/Vis/View/Graph.hs b/src/GHC/Vis/View/Graph.hs
--- a/src/GHC/Vis/View/Graph.hs
+++ b/src/GHC/Vis/View/Graph.hs
@@ -27,6 +27,7 @@
 import Control.Monad
 import Control.Exception
 
+import Data.Maybe
 import Data.IORef
 import System.IO.Unsafe
 
@@ -39,17 +40,44 @@
 import Graphics.XDot.Viewer
 import Graphics.XDot.Types hiding (size, w, h)
 
+import Graphics.Rendering.Cairo.SVG
+import Paths_ghc_vis as My
+
+hoverIconWidth :: Double
+hoverIconWidth = 35
+
+hoverIconHeight :: Double
+hoverIconHeight = 17.5
+
+hoverIconSpace :: Double
+hoverIconSpace = 5
+
+data Icon = EvaluateIcon
+          | CollapseIcon
+          deriving (Show, Eq)
+
 data State = State
   { boxes      :: [Box]
   , operations :: [(Object Int, Operation)]
-  , totalSize  :: (Double, Double, Double, Double)
-  , bounds     :: [(Object Int, (Double, Double, Double, Double))]
+  , totalSize  :: Rectangle
+  , bounds     :: [(Object Int, Rectangle)]
+  , hoverIconBounds :: [(Object Int, [(Icon, Rectangle)])]
   , hover      :: Object Int
+  , iconHover  :: Maybe (Object Int, Icon)
   }
 
 state :: IORef State
-state = unsafePerformIO $ newIORef $ State [] [] (0, 0, 1, 1) [] None
+state = unsafePerformIO $ newIORef $ State [] [] (0, 0, 1, 1) [] [] None Nothing
 
+iconEvaluateSVG :: SVG
+iconEvaluateSVG = unsafePerformIO $ My.getDataFileName "data/icon_evaluate.svg" >>= svgNewFromFile
+iconCollapseSVG :: SVG
+iconCollapseSVG = unsafePerformIO $ My.getDataFileName "data/icon_collapse.svg" >>= svgNewFromFile
+hoverEvaluateSVG :: SVG
+hoverEvaluateSVG = unsafePerformIO $ My.getDataFileName "data/hover_evaluate.svg" >>= svgNewFromFile
+hoverCollapseSVG :: SVG
+hoverCollapseSVG = unsafePerformIO $ My.getDataFileName "data/hover_collapse.svg" >>= svgNewFromFile
+
 -- | Draw visualization to screen, called on every update or when it's
 --   requested from outside the program.
 redraw :: WidgetClass w => w -> IO ()
@@ -57,9 +85,9 @@
   s <- readIORef state
   Gtk.Rectangle _ _ rw2 rh2 <- widgetGetAllocation canvas
 
-  boundingBoxes <- render canvas (draw s rw2 rh2)
+  (bbs, hibbs) <- render canvas (draw s rw2 rh2)
 
-  modifyIORef state (\s' -> s' {bounds = boundingBoxes})
+  modifyIORef state (\s' -> s' {bounds = bbs, hoverIconBounds = hibbs})
 
 -- | Export the visualization to an SVG file
 export :: DrawFunction -> String -> IO ()
@@ -73,55 +101,98 @@
 
   return ()
 
-draw :: State -> Int -> Int -> Render [(Object Int, Rectangle)]
+draw :: State -> Int -> Int -> Render ([(Object Int, Rectangle)], [(Object Int, [(Icon, Rectangle)])])
 draw s rw2 rh2 = do
-  vS <- liftIO $ readIORef visState
+  if null $ boxes s then return ([], [])
+  else do
+    vS <- liftIO $ readIORef visState
 
-  -- Line widths don't count to size, let's add a bit
-  let rw = 0.97 * fromIntegral rw2
-      rh = 0.97 * fromIntegral rh2
+    -- Line widths don't count to size, let's add a bit
+    let rw = 0.97 * fromIntegral rw2
+        rh = 0.97 * fromIntegral rh2
 
-      ops = operations s
-      size@(_,_,sw,sh) = totalSize s
+        ops = operations s
+        size@(_,_,sw,sh) = totalSize s
 
-  -- Proportional scaling
-      (sx,sy) = (zoomRatio vS * min (rw / sw) (rh / sh), sx)
-      (ox1,oy1) = (0.5 * fromIntegral rw2, 0.5 * fromIntegral rh2)
-      (ox2,oy2) = position vS
-      (ox,oy) = (ox1 + ox2, oy1 + oy2)
+    -- Proportional scaling
+        (sx,sy) = (min 1000 $ zoomRatio vS * min (rw / sw) (rh / sh), sx)
+        (ox1,oy1) = (0.5 * fromIntegral rw2, 0.5 * fromIntegral rh2)
+        (ox2,oy2) = position vS
+        (ox,oy) = (ox1 + ox2, oy1 + oy2)
 
-  translate ox oy
-  scale sx sy
+    translate ox oy
+    scale sx sy
 
-  result <- drawAll (hover s) size ops
+    result <- drawAll (hover s) size ops
 
-  return $ map (\(o, (x,y,w,h)) -> (o,
-    ( x * sx + ox -- Transformations to correct scaling and offset
-    , y * sy + oy
-    , w * sx
-    , h * sy
-    ))) result
+    case hover s of
+      Node n -> do
+        let Just (x,y,w,_h) = lookup (Node n) result
 
+        translate (x + w + hoverIconSpace) y
+        drawHoverMenu $ iconHover s
+      _      -> return True
+
+    let trafo (o, (x,y,w,h)) = (o,
+          ( x * sx + ox -- Transformations to correct scaling and offset
+          , y * sy + oy
+          , w * sx
+          , h * sy
+          ))
+
+    let toHoverIconBounds (o, (x,y,w,_h)) = (o, map trafo
+          [ (EvaluateIcon, (x+w, y, hoverIconWidth + hoverIconSpace, hoverIconHeight))
+          , (CollapseIcon, (x+w, y+hoverIconHeight, hoverIconWidth + hoverIconSpace, hoverIconHeight))
+          ])
+
+    return (map trafo result, map toHoverIconBounds result)
+
 render :: WidgetClass w => w -> Render b -> IO b
 render canvas r = do
   win <- widgetGetDrawWindow canvas
   renderWithDrawable win r
 
+drawHoverMenu :: Maybe (t, Icon) -> Render Bool
+drawHoverMenu x = do
+  svgRender $ case x of
+    Just (_, EvaluateIcon) -> hoverEvaluateSVG
+    _                      -> iconEvaluateSVG
+
+  translate 0 hoverIconHeight
+
+  svgRender $ case x of
+    Just (_, CollapseIcon) -> hoverCollapseSVG
+    _                      -> iconCollapseSVG
+
 -- | Handle a mouse click. If an object was clicked an 'UpdateSignal' is sent
 --   that causes the object to be evaluated and the screen to be updated.
 click :: IO ()
 click = do
   s <- readIORef state
 
-  case hover s of
-    -- This might fail when a click occurs during an update
-    Node t -> unless (length (boxes s) <= t) $ do
-      evaluate2 $ boxes s !! t
-      -- Without forkIO it would hang indefinitely if some action is currently
-      -- executed
-      void $ forkIO $ putMVar visSignal UpdateSignal
+  hm <- inHistoryMode
+  when (not hm) $ case iconHover s of
+    Nothing -> case hover s of
+      -- This might fail when a click occurs during an update
+      Node t -> evaluateClick s t
+      _ -> return ()
+
+    Just (Node t, EvaluateIcon) -> evaluateClick s t
+    Just (Node t, CollapseIcon) -> collapseClick s t
     _ -> return ()
 
+evaluateClick :: State -> Int -> IO ()
+evaluateClick s t = unless (length (boxes s) <= t) $ do
+  evaluate2 $ boxes s !! t
+  -- Without forkIO it would hang indefinitely if some action is currently
+  -- executed
+  void $ forkIO $ putMVar visSignal UpdateSignal
+
+collapseClick :: State -> Int -> IO ()
+collapseClick s t = unless (length (boxes s) <= t) $ do
+  hide $ boxes s !! t
+  void $ forkIO $ putMVar visSignal RedrawSignal
+
 evaluate2 :: Box -> IO ()
 evaluate2 b@(Box a) = do
   c <- getBoxedClosureData b
@@ -143,6 +214,9 @@
   `catch`
     \(e :: SomeException) -> putStrLn $ "Caught exception while evaluating: " ++ show e
 
+hide :: Box -> IO ()
+hide b = modifyMVar_ visHidden (\hs -> return $ b : hs)
+
 -- | Handle a mouse move. Causes an 'UpdateSignal' if the mouse is hovering a
 --   different object now, so the object gets highlighted and the screen
 --   updated.
@@ -152,23 +226,45 @@
   oldS <- readIORef state
   let oldHover = hover oldS
 
-  modifyIORef state $ \s' -> (
-    let (mx, my) = mousePos vs
-        check (o, (x,y,w,h)) =
-          if x <= mx && mx <= x + w &&
-             y <= my && my <= y + h
-          then o else None
+      (mx, my) = mousePos vs
 
-        validOne (None:xs) = validOne xs
-        validOne (x:_) = x
-        validOne _ = None
-    in s' {hover = validOne $ map check (bounds oldS)}
-    )
-  s <- readIORef state
-  unless (oldHover == hover s) $ widgetQueueDraw canvas
+      check (o, (x,y,w,h)) =
+        if x <= mx && mx <= x + w &&
+           y <= my && my <= y + h
+        then o else None
 
+      check2 (o, (x,y,w,h)) =
+        if x <= mx && mx <= x + w &&
+           y <= my && my <= y + h
+        then Just o else Nothing
+
+      validOne (None:xs) = validOne xs
+      validOne (x:_) = x
+      validOne _ = None
+
+      validOne2 (Nothing:xs) = validOne2 xs
+      validOne2 (Just x:_) = Just x
+      validOne2 _ = Nothing
+
+  let iconHov = case oldHover of
+        Node n -> validOne2 $ map check2 $ fromJust $ lookup (Node n) $ hoverIconBounds oldS
+        _      -> Nothing
+
+  case iconHov of
+    Just i -> do
+      let ih = Just (oldHover, i)
+      modifyIORef state $ \s' -> s' {iconHover = ih}
+      unless (iconHover oldS == ih) $ widgetQueueDraw canvas
+
+    Nothing -> do
+      let h = validOne $ map check $ bounds oldS
+      modifyIORef state $ \s' -> s' {hover = h, iconHover = Nothing}
+      unless (oldHover == h && iconHover oldS == Nothing) $ widgetQueueDraw canvas
+
 -- | Something might have changed on the heap, update the view.
-updateObjects :: [(Box, String)] -> IO ()
-updateObjects bs = do
-  (ops, bs', size) <- xDotParse bs
+updateObjects :: [NamedBox] -> IO ()
+updateObjects _boxes = do
+  hidden <- readMVar visHidden
+  (ops, bs', _ , size) <- xDotParse $ hidden
+
   modifyIORef state (\s -> s {operations = ops, boxes = bs', totalSize = size, hover = None})
diff --git a/src/GHC/Vis/View/Graph/Parser.hs b/src/GHC/Vis/View/Graph/Parser.hs
--- a/src/GHC/Vis/View/Graph/Parser.hs
+++ b/src/GHC/Vis/View/Graph/Parser.hs
@@ -12,21 +12,24 @@
 )
 where
 
-import Data.List
+import Data.Monoid
 
-import Control.Monad
+import qualified Data.Foldable as F
+import qualified Data.IntMap as M
+import qualified Data.IntSet as S
 
 import qualified Data.Text.Lazy as B
 
-import Data.Graph.Inductive hiding (nodes, edges)
+import Data.Graph.Inductive hiding (edges, newNodes)
 
-import Data.GraphViz hiding (Ellipse, Polygon, parse)
+import Data.GraphViz hiding (toNode, Ellipse, Polygon, parse)
 import Data.GraphViz.Attributes.Complete
 import Data.GraphViz.Commands.IO
 
 import GHC.HeapView hiding (name)
-import GHC.Vis.Internal
+import GHC.Vis.Internal (showClosureFields)
 import GHC.Vis.Types
+import GHC.Vis.View.Common
 
 import Graphics.XDot.Types hiding (name, h, Style, Color)
 import Graphics.XDot.Parser
@@ -45,87 +48,122 @@
 edgeFontSize :: Double
 edgeFontSize = 24
 
-foldlMaybe :: (a -> b -> Maybe a) -> a -> [b] -> Maybe a
-foldlMaybe f a bs =
-   foldr (\b g x -> f x b >>= g) Just bs a
+graphvizCommand :: GraphvizCommand
+graphvizCommand = Dot
 
--- | Take the objects to be visualized and run them through @dot@ and extract
---   the drawing operations that have to be exectued to show the graph of the
---   heap map.
-xDotParse :: [(Box, String)] -> IO ([(Object Node, Operation)], [Box], Rectangle)
-xDotParse as = do
-  hm <- walkHeap as
+-- | A generic algorithm to restrict a graph to the subgraph reachable by certain nodes
+reachableSubgraph :: DynGraph gr => [Node] => gr a b => gr a b
+reachableSubgraph roots graph = flip delNodes graph $
+    filter (`S.notMember` reachableNodes) $
+    nodes graph
+  where
+    trGraph = trc graph
+    reachableNodes = S.unions $ map (S.fromList . suc trGraph) roots
 
-  let nodes = zip [0..] $ map (\(_,(_,c)) -> c) rhm
-      edges = do
-        mbe <- foldM mbEdges [] nodes
-        return $ foldlMaybe toLEdge [] mbe
-      -- Reversing it fixes the ordering of nodes in the graph. Should run
-      -- through allPtrs and sort by order inside of all allPtrs lists.
-      --
-      -- When building the graph directly out of [Box] instead of going
-      -- through the HeapMap, then the order of nodes might not be right for
-      -- non-trivial graphs.
-      --
-      -- In some cases it's impossible to get the order right. Maybe there is
-      -- a way in graphviz to specify outgoing edge orientation after all?
-      rhm = reverse hm
 
-      toLEdge xs (0, Just t) = if length rhm <= t
-        then Nothing -- This might be able to happen, let's make sure it doesn't
-        else case rhm !! t of
-          (_,(Just name, _)) -> Just $ (0,t,name):xs
-          (_,(Nothing, _))   -> Just $ (0,t,""):xs
-      toLEdge xs (f, Just t) = Just $ (f,t,""):xs
-      toLEdge xs _ = Just xs
+-- | Converts a 'HeapGraph' to a fgl 'Gr', taking into account special
+-- representations for BCOs.
+convertGraph :: HeapGraph Identifier -> Gr ([String], Int) (String, Int)
+convertGraph hg = appEndo (removeGarbage <> addNames <> addEdges <> addNodes) empty
+  where
+    HeapGraph hgm = hg
 
-      mbEdges xs (p,BCOClosure _ _ _ bPtr _ _ _) = do
-        children <- bcoChildren [bPtr]
-        return $ map (\b -> (p, Just b)) children ++ xs
-      -- Using allPtrs and then filtering the closures not available in the
-      -- heap map out emulates pointersToFollow without being in IO
-      mbEdges xs (p,c) = return $ map (\b -> (p, boxPos b)) (allPtrs c) ++ xs
+    -- Adds nodes for every closure in the map
+    -- Special treatment for BCOs: Use the disassembler
+    addNodes = mconcat [
+        Endo (insNode (i, toNode hge))
+        | (i,hge) <- M.toList hgm
+        ]
 
-      boxPos :: Box -> Maybe Int
-      boxPos b = elemIndex b $ map fst rhm
+    deref = fmap $ hgeClosure . (M.!) hgm
 
-      bcoChildren :: [Box] -> IO [Int]
-      bcoChildren [] = return []
-      bcoChildren (b:bs) = case boxPos b of
-        Nothing  -> do c <- getBoxedClosureData b
-                       ptf <- pointersToFollow2 c
-                       bcoChildren (ptf ++ bs)
-        Just pos -> do children <- bcoChildren bs
-                       return $ pos : children
+    toNode hge | Just byteCode <- disassembleBCO deref (hgeClosure hge)
+        -- Does not look nice this way, far too wide
+        -- = (map show byteCode, 0)
+        = (["BCO"], length (concatMap F.toList byteCode))
+               | otherwise
+        = (showClosureFields (hgeClosure hge), length $ allPtrs (hgeClosure hge))
 
-  es' <- edges
+    -- Adds edges between the closurs, treating BCOs specially
+    addEdges = mconcat [
+        Endo (insEdge (i, t, ("",n)))
+        | (i, hge) <- M.toList hgm
+        , (t,n) <- toEdges hge
+        ]
+    toEdges hge = [ (t, n) | (Just t, n) <- zip myPtrs [0..] ]
+        where myPtrs | Just byteCode <- disassembleBCO deref (hgeClosure hge)
+                     = concatMap F.toList byteCode
+                     | otherwise
+                     = allPtrs (hgeClosure hge)
 
-  case es' of
-    Nothing -> xDotParse as
-    Just es -> do
-      -- Convert a heap map, our internal data structure, to a graph that can be
-      -- converted to a dot graph.
-      let buildGraph :: Gr Closure String
-          buildGraph = insEdges es $ insNodes nodes empty
+    -- Adds the nodes and edges for the names
+    -- addNameList = zip [-1,-2..] -- Displays from right to left
+    addNameList = zip [-1,-2..] $ reverse
+        [ (i,name)
+        | (i, hge) <- M.toList hgm
+        , name <- hgeData hge
+        ]
+    addNames = mconcat $ map addName addNameList
+    addName (n,(i,name)) = Endo (insEdge (n, i, (name, 0))) <> Endo (insNode (n, ([""],0)))
 
-      xDot <- graphvizWithHandle Dot (defaultVis $ toViewableGraph buildGraph) XDot hGetDot
-      return (getOperations xDot, getBoxes hm, getSize xDot)
+    -- Removes nodes not reachable by a named closure
+    removeGarbage = Endo (reachableSubgraph (map fst addNameList))
 
-getBoxes :: HeapMap -> [Box]
-getBoxes hm = map (\(b,(_,_)) -> b) $ reverse hm
+removeOld :: Eq a => [a] -> Maybe a -> Maybe a
+removeOld keys (Just x)
+  | x `elem` keys = Just x
+  | otherwise     = Nothing
+removeOld _ x = x
 
--- Probably have to do some kind of fold over the graph to remove for example
--- unwanted pointers
-toViewableGraph :: Gr Closure String -> Gr String String
-toViewableGraph cg = emap id $ nmap showClosure cg
+-- | Take the objects to be visualized and run them through @dot@ and extract
+--   the drawing operations that have to be exectued to show the graph of the
+--   heap map.
+xDotParse :: [Box] -> IO ([(Object Node, Operation)], [Box], [(Object Node, Rectangle)], Rectangle)
+xDotParse hidden = do
+  --(hg, _) <- multiBuildHeapGraph 100 as
+  (HeapGraph hg'', _) <- getHeapGraph
+  let hg' = M.filter (\(HeapGraphEntry b _ _ _) -> not $ b `elem` hidden) hg''
+  let hg = HeapGraph $ M.map (\hge -> hge{hgeClosure = fmap (removeOld $ M.keys hg') (hgeClosure hge)}) hg'
+  --let hg = HeapGraph $ traverse removeOld hg'
 
-defaultVis :: (Graph gr) => gr String String -> DotGraph Node
+  xDot <- graphvizWithHandle graphvizCommand (defaultVis $ convertGraph hg) XDot hGetDot
+
+  return (getOperations xDot, getBoxes (HeapGraph hg''), getDimensions xDot, getSize xDot)
+
+getBoxes :: HeapGraph a -> [Box]
+getBoxes (HeapGraph hg) = map (\(HeapGraphEntry b _ _ _) -> b) $ M.elems hg
+
+defaultVis :: (Graph gr) => gr ([String], Int) (String, Int) -> DotGraph Node
 defaultVis = graphToDot nonClusteredParams
   -- Somehow (X11Color Transparency) is white, use (RGBA 0 0 0 0) instead
   -- Ordering OutEdges is not strong enough to force edge ordering, might not look good anyway
   { globalAttributes = [GraphAttrs [BgColor [toWC $ RGBA 0 0 0 0], FontName fontName, FontSize graphFontSize]]
-  , fmtNode = \ (_,l) -> [toLabel l, FontName fontName, FontSize nodeFontSize]
+  , fmtNode = \(x,(l,i)) -> if x >= 0 then [
+        --xLabel (B.pack "foo"),
+        nodeLabel l i,
+        Shape Record, FontName fontName, FontSize nodeFontSize]
+      -- x < 0: Invisible marker nodes
+      else [Shape PointShape, Style [SItem Invisible []]]
   --, fmtNode = \ (_,l) -> [toLabel l, FontName fontName, FontSize nodeFontSize, Style [SItem Filled []], FillColor [RGBA 255 255 255 255], Color [RGBA 0 0 0 255]]
   --, fmtNode = \ (_,l) -> [toLabel l, FontName fontName, FontSize nodeFontSize, Shape PlainText]
-  , fmtEdge = \ (_,_,l) -> [toLabel l, FontName fontName, FontSize edgeFontSize]
+  , fmtEdge = \ (_,_,(l,i)) -> [
+        TailPort (LabelledPort (PN (B.pack (show i))) Nothing),
+        toLabel l,
+        FontName fontName, FontSize edgeFontSize]
   }
+  where
+    {-
+    All pointer origins below the constructor:
+    nodeLabel l 0 = Label $ RecordLabel [FieldLabel (B.pack l) | l <- ls]
+    nodeLabel l i = Label $ RecordLabel [
+            FlipFields [
+                FlipFields [FieldLabel (B.pack l) | l <- ls] ++
+                FlipFields [PortName (PN (B.pack (show j))) | j <- [0..i-1]]
+            ]]
+    -}
+    {-
+    All pointer following the constructor on the right:
+    -}
+    nodeLabel ls i = Label $ RecordLabel $
+                [FieldLabel (B.pack l) | l <- ls] ++
+                [ PortName (PN (B.pack (show j))) | j <- [0..i-1]]
diff --git a/src/GHC/Vis/View/List.hs b/src/GHC/Vis/View/List.hs
--- a/src/GHC/Vis/View/List.hs
+++ b/src/GHC/Vis/View/List.hs
@@ -29,9 +29,9 @@
 import Control.Monad
 
 import Data.IORef
+import Data.List
 import System.IO.Unsafe
 
-import GHC.Vis.Internal
 import GHC.Vis.Types hiding (State, View(..))
 import GHC.Vis.View.Common
 
@@ -43,12 +43,13 @@
   { objects :: [(Box, String, [VisObject])]
   , bounds  :: [(String, Rectangle)]
   , hover   :: Maybe String
+  , totalSize :: Rectangle
   }
 
 type RGB = (Double, Double, Double)
 
 state :: IORef State
-state = unsafePerformIO $ newIORef $ State [] [] Nothing
+state = unsafePerformIO $ newIORef $ State [] [] Nothing (0, 0, 1, 1)
 
 layout' :: IORef (Maybe PangoLayout)
 layout' = unsafePerformIO $ newIORef Nothing
@@ -96,8 +97,8 @@
   s <- readIORef state
   Gtk.Rectangle _ _ rw2 rh2 <- widgetGetAllocation canvas
 
-  boundingBoxes <- render canvas (draw s rw2 rh2)
-  modifyIORef state (\s' -> s' {bounds = boundingBoxes})
+  (size, boundingBoxes) <- render canvas (draw s rw2 rh2)
+  modifyIORef state (\s' -> s' {totalSize = size, bounds = boundingBoxes})
 
 #ifdef SDL_WINDOW
 getState :: IO State
@@ -113,15 +114,14 @@
 export drawFn file = do
   s <- readIORef state
 
-  drawFn file (fromIntegral xSize) (fromIntegral ySize)
-    (\surface -> renderWith surface (draw s xSize ySize))
+  let (_, _, xSize, ySize) = totalSize s
 
-  return ()
+  drawFn file xSize ySize
+    (\surface -> renderWith surface (draw s 0 0))
 
-  where xSize = 500 :: Int
-        ySize = 500 :: Int
+  return ()
 
-draw :: State -> Int -> Int -> Render [(String, Rectangle)]
+draw :: State -> Int -> Int -> Render (Rectangle, [(String, Rectangle)])
 draw s rw2 rh2 = do
   let os = objects s
       objs  = map (\(_,_,x) -> x) os
@@ -151,12 +151,13 @@
       (ox,oy) = (ox2 - (zoomRatio vS - 1) * rw / 2, oy2 - (zoomRatio vS - 1) * rh / 2)
 
   translate ox oy
-  scale sx sy
+  unless (rw2 == 0 || rh2 == 0) $
+    scale sx sy
 
   let rpos = scanl (\a b -> a + b + 30) 30 pos
   result <- mapM (drawEntry s maxNameWidth 0) (zip3 objs rpos names)
 
-  return $ map (\(o, (x,y,w,h)) -> (o, (x*sx+ox,y*sy+oy,w*sx,h*sy))) $ concat result
+  return ((0, 0, sw, sh), map (\(o, (x,y,w,h)) -> (o, (x*sx+ox,y*sy+oy,w*sx,h*sy))) $ concat result)
 
 render :: WidgetClass w => w -> Render b -> IO b
 render canvas r = do
@@ -169,7 +170,8 @@
 click = do
   s <- readIORef state
 
-  case hover s of
+  hm <- inHistoryMode
+  when (not hm) $ case hover s of
      Just t -> do
        evaluate t
        -- Without forkIO it would hang indefinitely if some action is currently
@@ -198,10 +200,13 @@
   unless (oldHover == hover s) $ widgetQueueDraw canvas
 
 -- | Something might have changed on the heap, update the view.
-updateObjects :: [(Box, String)] -> IO ()
+updateObjects :: [NamedBox] -> IO ()
 updateObjects boxes = do
-  os <- parseBoxes boxes
-  let objs = zipWith (\(x,y) z -> (x,y,z)) boxes os
+  os <- parseBoxes
+  --(h, is) <- multiBuildHeapGraph 100 $ map fst boxes
+  -- This is wrong
+  --let os = visHeapGraph (zipWith (\(b,i) (b',n) -> (i,n)) is boxes) h
+  let objs = zipWith (\(y,x) z -> (x,intercalate ", " y,z)) boxes os
   modifyIORef state (\s -> s {objects = objs, hover = Nothing})
 
 drawEntry :: State -> Double -> Double -> ([VisObject], Double, String) -> Render [(String, Rectangle)]
