Index: doc/CMakeLists.txt
===================================================================
--- doc/CMakeLists.txt	(revision 578)
+++ doc/CMakeLists.txt	(revision 538)
@@ -15,10 +15,5 @@
       COMMAND rm -rf gen-images
       COMMAND mkdir gen-images
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/bipartite_matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_matching.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/bipartite_partitions.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_partitions.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/connected_components.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/edge_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/edge_biconnected_components.eps
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/grid_graph.png ${CMAKE_CURRENT_SOURCE_DIR}/images/grid_graph.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/node_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/node_biconnected_components.eps
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_0.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_0.eps
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_1.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_1.eps
@@ -26,5 +21,4 @@
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_3.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_3.eps
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_4.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_4.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/strongly_connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/strongly_connected_components.eps
       COMMAND rm -rf html
       COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
@@ -34,10 +28,4 @@
       COMMAND if exist gen-images rmdir /s /q gen-images
       COMMAND mkdir gen-images
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/bipartite_matching.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_matching.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/bipartite_partitions.png ${CMAKE_CURRENT_SOURCE_DIR}/images/bipartite_partitions.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/connected_components.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/edge_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/edge_biconnected_components.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/grid_graph.png ${CMAKE_CURRENT_SOURCE_DIR}/images/grid_graph.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/node_biconnected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/node_biconnected_components.eps
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_0.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_0.eps
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_1.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_1.eps
@@ -45,5 +33,4 @@
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_3.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_3.eps
       COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_4.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_4.eps
-      COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/strongly_connected_components.png ${CMAKE_CURRENT_SOURCE_DIR}/images/strongly_connected_components.eps
       COMMAND if exist html rmdir /s /q html
       COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
Index: doc/Makefile.am
===================================================================
--- doc/Makefile.am	(revision 579)
+++ doc/Makefile.am	(revision 337)
@@ -22,15 +22,6 @@
 	nodeshape_4.eps
 
-DOC_EPS_IMAGES27 = \
-	bipartite_matching.eps \
-	bipartite_partitions.eps \
-	connected_components.eps \
-	edge_biconnected_components.eps \
-	node_biconnected_components.eps \
-	strongly_connected_components.eps
-
 DOC_EPS_IMAGES = \
-	$(DOC_EPS_IMAGES18) \
-	$(DOC_EPS_IMAGES27)
+	$(DOC_EPS_IMAGES18)
 
 DOC_PNG_IMAGES = \
@@ -48,15 +39,4 @@
 	if test ${gs_found} = yes; then \
 	  $(GS_COMMAND) -sDEVICE=pngalpha -r18 -sOutputFile=$@ $<; \
-	else \
-	  echo; \
-	  echo "Ghostscript not found."; \
-	  echo; \
-	  exit 1; \
-	fi
-
-$(DOC_EPS_IMAGES27:%.eps=doc/gen-images/%.png): doc/gen-images/%.png: doc/images/%.eps
-	-mkdir doc/gen-images
-	if test ${gs_found} = yes; then \
-	  $(GS_COMMAND) -sDEVICE=pngalpha -r27 -sOutputFile=$@ $<; \
 	else \
 	  echo; \
Index: doc/groups.dox
===================================================================
--- doc/groups.dox	(revision 578)
+++ doc/groups.dox	(revision 556)
@@ -408,5 +408,5 @@
 
 /**
-@defgroup graph_properties Connectivity and Other Graph Properties
+@defgroup graph_prop Connectivity and Other Graph Properties
 @ingroup algs
 \brief Algorithms for discovering the graph properties
Index: c/images/bipartite_matching.eps
===================================================================
--- doc/images/bipartite_matching.eps	(revision 578)
+++ 	(revision )
@@ -1,586 +1,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 15 18 829 570
-%%HiResBoundingBox: 15.1913 18.4493 828.078 569.438
-%%Creator: Karbon14 EPS Exportfilter 0.5
-%%CreationDate: (04/15/06 15:20:26)
-%%For: (Balazs Dezso) ()
-%%Title: ()
-
-/N {newpath} def
-/C {closepath} def
-/m {moveto} def
-/c {curveto} def
-/l {lineto} def
-/s {stroke} def
-/f {fill} def
-/w {setlinewidth} def
-/d {setdash} def
-/r {setrgbcolor} def
-/S {gsave} def
-/R {grestore} def
-
-N
-251.402 32.047 m
-532.945 293.946 814.484 555.844 814.484 555.844 c
-[] 0 d 1 0 0 r 3.92814 w s
-
-N
-749.012 32.047 m
-742.465 293.946 735.918 555.844 735.918 555.844 c
-[] 0 d 0 0 0 r 1.96407 w s
-
-N
-539.492 32.047 m
-637.703 293.946 735.918 555.844 735.918 555.844 c
-[] 0 d 0 0 0 r 1.96407 w s
-
-N
-172.832 32.047 m
-454.375 293.946 735.918 555.844 735.918 555.844 c
-[] 0 d 0 0 0 r 1.96407 w s
-
-N
-107.355 32.047 m
-421.637 293.946 735.918 555.844 735.918 555.844 c
-[] 0 d 1 0 0 r 3.92814 w s
-
-N
-644.25 555.844 m
-696.633 293.946 749.012 32.047 749.012 32.047 c
-[] 0 d 0 0 0 r 1.96407 w s
-
-N
-474.016 555.844 m
-611.516 293.946 749.012 32.047 749.012 32.047 c
-[] 0 d 1 0 0 r 3.92814 w s
-
-N
-683.535 32.047 m
-663.894 293.946 644.25 555.844 644.25 555.844 c
-[] 0 d 0 0 0 r 1.96407 w s
-
-N
-120.453 555.844 m
-401.992 293.946 683.535 32.047 683.535 32.047 c
-[] 0 d 0 0 0 r 1.96407 w s
-
-N
-28.7853 555.844 m
-356.16 293.946 683.535 32.047 683.535 32.047 c
-[] 0 d 1 0 0 r 3.92814 w s
-
-N
-539.492 32.047 m
-546.039 293.946 552.586 555.844 552.586 555.844 c
-[] 0 d 1 0 0 r 3.92814 w s
-
-N
-316.875 32.047 m
-349.613 293.946 382.351 555.844 382.351 555.844 c
-[] 0 d 1 0 0 r 3.92814 w s
-
-N
-107.355 32.047 m
-244.855 293.946 382.351 555.844 382.351 555.844 c
-[] 0 d 0 0 0 r 1.96407 w s
-
-N
-290.687 555.844 m
-375.805 293.946 460.922 32.047 460.922 32.047 c
-[] 0 d 1 0 0 r 3.92814 w s
-
-N
-120.453 555.844 m
-290.687 293.946 460.922 32.047 460.922 32.047 c
-[] 0 d 0 0 0 r 1.96407 w s
-
-N
-172.832 32.047 m
-146.64 293.946 120.453 555.844 120.453 555.844 c
-[] 0 d 1 0 0 r 3.92814 w s
-
-N
-15.6913 555.844 m
-15.6913 555.844 l
-15.6913 548.614 21.5553 542.75 28.7853 542.75 c
-36.0163 542.75 41.8833 548.614 41.8833 555.844 c
-41.8833 563.075 36.0163 568.938 28.7853 568.938 c
-21.5553 568.938 15.6913 563.075 15.6913 555.844 c
-15.6913 555.844 l
-C
-S 0 0 0 r f R
-
-N
-16.8833 555.844 m
-16.8833 555.844 l
-16.8833 549.27 22.2113 543.942 28.7853 543.942 c
-35.3593 543.942 40.6913 549.27 40.6913 555.844 c
-40.6913 562.418 35.3593 567.747 28.7853 567.747 c
-22.2113 567.747 16.8833 562.418 16.8833 555.844 c
-16.8833 555.844 l
-C
-S 1 0.5 1 r f R
-
-N
-107.355 555.844 m
-107.355 555.844 l
-107.355 548.614 113.223 542.75 120.453 542.75 c
-127.683 542.75 133.547 548.614 133.547 555.844 c
-133.547 563.075 127.683 568.938 120.453 568.938 c
-113.223 568.938 107.355 563.075 107.355 555.844 c
-107.355 555.844 l
-C
-S 0 0 0 r f R
-
-N
-108.547 555.844 m
-108.547 555.844 l
-108.547 549.27 113.879 543.942 120.453 543.942 c
-127.027 543.942 132.355 549.27 132.355 555.844 c
-132.355 562.418 127.027 567.747 120.453 567.747 c
-113.879 567.747 108.547 562.418 108.547 555.844 c
-108.547 555.844 l
-C
-S 1 0 1 r f R
-
-N
-199.019 555.844 m
-199.019 555.844 l
-199.019 548.614 204.887 542.75 212.117 542.75 c
-219.348 542.75 225.211 548.614 225.211 555.844 c
-225.211 563.075 219.348 568.938 212.117 568.938 c
-204.887 568.938 199.019 563.075 199.019 555.844 c
-199.019 555.844 l
-C
-S 0 0 0 r f R
-
-N
-200.211 555.844 m
-200.211 555.844 l
-200.211 549.27 205.543 543.942 212.117 543.942 c
-218.691 543.942 224.019 549.27 224.019 555.844 c
-224.019 562.418 218.691 567.747 212.117 567.747 c
-205.543 567.747 200.211 562.418 200.211 555.844 c
-200.211 555.844 l
-C
-S 1 0.5 1 r f R
-
-N
-277.59 555.844 m
-277.59 555.844 l
-277.59 548.614 283.457 542.75 290.687 542.75 c
-297.918 542.75 303.781 548.614 303.781 555.844 c
-303.781 563.075 297.918 568.938 290.687 568.938 c
-283.457 568.938 277.59 563.075 277.59 555.844 c
-277.59 555.844 l
-C
-S 0 0 0 r f R
-
-N
-278.781 555.844 m
-278.781 555.844 l
-278.781 549.27 284.113 543.942 290.687 543.942 c
-297.262 543.942 302.59 549.27 302.59 555.844 c
-302.59 562.418 297.262 567.747 290.687 567.747 c
-284.113 567.747 278.781 562.418 278.781 555.844 c
-278.781 555.844 l
-C
-S 1 0 1 r f R
-
-N
-369.258 555.844 m
-369.258 555.844 l
-369.258 548.614 375.121 542.75 382.351 542.75 c
-389.582 542.75 395.445 548.614 395.445 555.844 c
-395.445 563.075 389.582 568.938 382.351 568.938 c
-375.121 568.938 369.258 563.075 369.258 555.844 c
-369.258 555.844 l
-C
-S 0 0 0 r f R
-
-N
-370.445 555.844 m
-370.445 555.844 l
-370.445 549.27 375.777 543.942 382.351 543.942 c
-388.926 543.942 394.258 549.27 394.258 555.844 c
-394.258 562.418 388.926 567.747 382.351 567.747 c
-375.777 567.747 370.445 562.418 370.445 555.844 c
-370.445 555.844 l
-C
-S 1 0 1 r f R
-
-N
-460.922 555.844 m
-460.922 555.844 l
-460.922 548.614 466.785 542.75 474.016 542.75 c
-481.246 542.75 487.109 548.614 487.109 555.844 c
-487.109 563.075 481.246 568.938 474.016 568.938 c
-466.785 568.938 460.922 563.075 460.922 555.844 c
-460.922 555.844 l
-C
-S 0 0 0 r f R
-
-N
-462.113 555.844 m
-462.113 555.844 l
-462.113 549.27 467.441 543.942 474.016 543.942 c
-480.59 543.942 485.922 549.27 485.922 555.844 c
-485.922 562.418 480.59 567.747 474.016 567.747 c
-467.441 567.747 462.113 562.418 462.113 555.844 c
-462.113 555.844 l
-C
-S 1 0.5 1 r f R
-
-N
-539.492 555.844 m
-539.492 555.844 l
-539.492 548.614 545.355 542.75 552.586 542.75 c
-559.816 542.75 565.68 548.614 565.68 555.844 c
-565.68 563.075 559.816 568.938 552.586 568.938 c
-545.355 568.938 539.492 563.075 539.492 555.844 c
-539.492 555.844 l
-C
-S 0 0 0 r f R
-
-N
-540.683 555.844 m
-540.683 555.844 l
-540.683 549.27 546.012 543.942 552.586 543.942 c
-559.16 543.942 564.492 549.27 564.492 555.844 c
-564.492 562.418 559.16 567.747 552.586 567.747 c
-546.012 567.747 540.683 562.418 540.683 555.844 c
-540.683 555.844 l
-C
-S 1 0 1 r f R
-
-N
-631.156 555.844 m
-631.156 555.844 l
-631.156 548.614 637.019 542.75 644.25 542.75 c
-651.48 542.75 657.348 548.614 657.348 555.844 c
-657.348 563.075 651.48 568.938 644.25 568.938 c
-637.019 568.938 631.156 563.075 631.156 555.844 c
-631.156 555.844 l
-C
-S 0 0 0 r f R
-
-N
-632.348 555.844 m
-632.348 555.844 l
-632.348 549.27 637.676 543.942 644.25 543.942 c
-650.824 543.942 656.156 549.27 656.156 555.844 c
-656.156 562.418 650.824 567.747 644.25 567.747 c
-637.676 567.747 632.348 562.418 632.348 555.844 c
-632.348 555.844 l
-C
-S 1 0.5 1 r f R
-
-N
-722.82 555.844 m
-722.82 555.844 l
-722.82 548.614 728.687 542.75 735.918 542.75 c
-743.149 542.75 749.012 548.614 749.012 555.844 c
-749.012 563.075 743.149 568.938 735.918 568.938 c
-728.687 568.938 722.82 563.075 722.82 555.844 c
-722.82 555.844 l
-C
-S 0 0 0 r f R
-
-N
-724.012 555.844 m
-724.012 555.844 l
-724.012 549.27 729.344 543.942 735.918 543.942 c
-742.492 543.942 747.82 549.27 747.82 555.844 c
-747.82 562.418 742.492 567.747 735.918 567.747 c
-729.344 567.747 724.012 562.418 724.012 555.844 c
-724.012 555.844 l
-C
-S 1 0 1 r f R
-
-N
-801.391 555.844 m
-801.391 555.844 l
-801.391 548.614 807.254 542.75 814.484 542.75 c
-821.715 542.75 827.578 548.614 827.578 555.844 c
-827.578 563.075 821.715 568.938 814.484 568.938 c
-807.254 568.938 801.391 563.075 801.391 555.844 c
-801.391 555.844 l
-C
-S 0 0 0 r f R
-
-N
-802.582 555.844 m
-802.582 555.844 l
-802.582 549.27 807.91 543.942 814.484 543.942 c
-821.059 543.942 826.387 549.27 826.387 555.844 c
-826.387 562.418 821.059 567.747 814.484 567.747 c
-807.91 567.747 802.582 562.418 802.582 555.844 c
-802.582 555.844 l
-C
-S 1 0 1 r f R
-
-N
-15.6913 32.047 m
-15.6913 32.047 l
-15.6913 24.8165 21.5553 18.9493 28.7853 18.9493 c
-36.0163 18.9493 41.8833 24.8165 41.8833 32.047 c
-41.8833 39.2775 36.0163 45.1407 28.7853 45.1407 c
-21.5553 45.1407 15.6913 39.2775 15.6913 32.047 c
-15.6913 32.047 l
-C
-S 0 0 0 r f R
-
-N
-16.8833 32.047 m
-16.8833 32.047 l
-16.8833 25.4728 22.2113 20.1407 28.7853 20.1407 c
-35.3593 20.1407 40.6913 25.4728 40.6913 32.047 c
-40.6913 38.6212 35.3593 43.9493 28.7853 43.9493 c
-22.2113 43.9493 16.8833 38.6212 16.8833 32.047 c
-16.8833 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-94.2623 32.047 m
-94.2623 32.047 l
-94.2623 24.8165 100.125 18.9493 107.355 18.9493 c
-114.586 18.9493 120.453 24.8165 120.453 32.047 c
-120.453 39.2775 114.586 45.1407 107.355 45.1407 c
-100.125 45.1407 94.2623 39.2775 94.2623 32.047 c
-94.2623 32.047 l
-C
-S 0 0 0 r f R
-
-N
-95.4533 32.047 m
-95.4533 32.047 l
-95.4533 25.4728 100.781 20.1407 107.355 20.1407 c
-113.93 20.1407 119.262 25.4728 119.262 32.047 c
-119.262 38.6212 113.93 43.9493 107.355 43.9493 c
-100.781 43.9493 95.4533 38.6212 95.4533 32.047 c
-95.4533 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-159.734 32.047 m
-159.734 32.047 l
-159.734 24.8165 165.601 18.9493 172.832 18.9493 c
-180.062 18.9493 185.926 24.8165 185.926 32.047 c
-185.926 39.2775 180.062 45.1407 172.832 45.1407 c
-165.601 45.1407 159.734 39.2775 159.734 32.047 c
-159.734 32.047 l
-C
-S 0 0 0 r f R
-
-N
-160.926 32.047 m
-160.926 32.047 l
-160.926 25.4728 166.258 20.1407 172.832 20.1407 c
-179.406 20.1407 184.734 25.4728 184.734 32.047 c
-184.734 38.6212 179.406 43.9493 172.832 43.9493 c
-166.258 43.9493 160.926 38.6212 160.926 32.047 c
-160.926 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-238.305 32.047 m
-238.305 32.047 l
-238.305 24.8165 244.172 18.9493 251.402 18.9493 c
-258.633 18.9493 264.496 24.8165 264.496 32.047 c
-264.496 39.2775 258.633 45.1407 251.402 45.1407 c
-244.172 45.1407 238.305 39.2775 238.305 32.047 c
-238.305 32.047 l
-C
-S 0 0 0 r f R
-
-N
-239.496 32.047 m
-239.496 32.047 l
-239.496 25.4728 244.828 20.1407 251.402 20.1407 c
-257.976 20.1407 263.305 25.4728 263.305 32.047 c
-263.305 38.6212 257.976 43.9493 251.402 43.9493 c
-244.828 43.9493 239.496 38.6212 239.496 32.047 c
-239.496 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-303.781 32.047 m
-303.781 32.047 l
-303.781 24.8165 309.644 18.9493 316.875 18.9493 c
-324.105 18.9493 329.973 24.8165 329.973 32.047 c
-329.973 39.2775 324.105 45.1407 316.875 45.1407 c
-309.644 45.1407 303.781 39.2775 303.781 32.047 c
-303.781 32.047 l
-C
-S 0 0 0 r f R
-
-N
-304.973 32.047 m
-304.973 32.047 l
-304.973 25.4728 310.301 20.1407 316.875 20.1407 c
-323.449 20.1407 328.781 25.4728 328.781 32.047 c
-328.781 38.6212 323.449 43.9493 316.875 43.9493 c
-310.301 43.9493 304.973 38.6212 304.973 32.047 c
-304.973 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-382.351 32.047 m
-382.351 32.047 l
-382.351 24.8165 388.215 18.9493 395.445 18.9493 c
-402.676 18.9493 408.543 24.8165 408.543 32.047 c
-408.543 39.2775 402.676 45.1407 395.445 45.1407 c
-388.215 45.1407 382.351 39.2775 382.351 32.047 c
-382.351 32.047 l
-C
-S 0 0 0 r f R
-
-N
-383.543 32.047 m
-383.543 32.047 l
-383.543 25.4728 388.871 20.1407 395.445 20.1407 c
-402.019 20.1407 407.351 25.4728 407.351 32.047 c
-407.351 38.6212 402.019 43.9493 395.445 43.9493 c
-388.871 43.9493 383.543 38.6212 383.543 32.047 c
-383.543 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-447.828 32.047 m
-447.828 32.047 l
-447.828 24.8165 453.691 18.9493 460.922 18.9493 c
-468.152 18.9493 474.016 24.8165 474.016 32.047 c
-474.016 39.2775 468.152 45.1407 460.922 45.1407 c
-453.691 45.1407 447.828 39.2775 447.828 32.047 c
-447.828 32.047 l
-C
-S 0 0 0 r f R
-
-N
-449.016 32.047 m
-449.016 32.047 l
-449.016 25.4728 454.348 20.1407 460.922 20.1407 c
-467.496 20.1407 472.824 25.4728 472.824 32.047 c
-472.824 38.6212 467.496 43.9493 460.922 43.9493 c
-454.348 43.9493 449.016 38.6212 449.016 32.047 c
-449.016 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-526.394 32.047 m
-526.394 32.047 l
-526.394 24.8165 532.262 18.9493 539.492 18.9493 c
-546.723 18.9493 552.586 24.8165 552.586 32.047 c
-552.586 39.2775 546.723 45.1407 539.492 45.1407 c
-532.262 45.1407 526.394 39.2775 526.394 32.047 c
-526.394 32.047 l
-C
-S 0 0 0 r f R
-
-N
-527.586 32.047 m
-527.586 32.047 l
-527.586 25.4728 532.918 20.1407 539.492 20.1407 c
-546.066 20.1407 551.394 25.4728 551.394 32.047 c
-551.394 38.6212 546.066 43.9493 539.492 43.9493 c
-532.918 43.9493 527.586 38.6212 527.586 32.047 c
-527.586 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-591.871 32.047 m
-591.871 32.047 l
-591.871 24.8165 597.734 18.9493 604.965 18.9493 c
-612.195 18.9493 618.062 24.8165 618.062 32.047 c
-618.062 39.2775 612.195 45.1407 604.965 45.1407 c
-597.734 45.1407 591.871 39.2775 591.871 32.047 c
-591.871 32.047 l
-C
-S 0 0 0 r f R
-
-N
-593.062 32.047 m
-593.062 32.047 l
-593.062 25.4728 598.39 20.1407 604.965 20.1407 c
-611.539 20.1407 616.871 25.4728 616.871 32.047 c
-616.871 38.6212 611.539 43.9493 604.965 43.9493 c
-598.39 43.9493 593.062 38.6212 593.062 32.047 c
-593.062 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-N
-670.441 32.047 m
-670.441 32.047 l
-670.441 24.8165 676.305 18.9493 683.535 18.9493 c
-690.766 18.9493 696.633 24.8165 696.633 32.047 c
-696.633 39.2775 690.766 45.1407 683.535 45.1407 c
-676.305 45.1407 670.441 39.2775 670.441 32.047 c
-670.441 32.047 l
-C
-S 0 0 0 r f R
-
-N
-671.633 32.047 m
-671.633 32.047 l
-671.633 25.4728 676.961 20.1407 683.535 20.1407 c
-690.109 20.1407 695.441 25.4728 695.441 32.047 c
-695.441 38.6212 690.109 43.9493 683.535 43.9493 c
-676.961 43.9493 671.633 38.6212 671.633 32.047 c
-671.633 32.047 l
-C
-S 0 0 1 r f R
-
-N
-735.918 32.047 m
-735.918 32.047 l
-735.918 24.8165 741.781 18.9493 749.012 18.9493 c
-756.242 18.9493 762.106 24.8165 762.106 32.047 c
-762.106 39.2775 756.242 45.1407 749.012 45.1407 c
-741.781 45.1407 735.918 39.2775 735.918 32.047 c
-735.918 32.047 l
-C
-S 0 0 0 r f R
-
-N
-737.105 32.047 m
-737.105 32.047 l
-737.105 25.4728 742.437 20.1407 749.012 20.1407 c
-755.586 20.1407 760.914 25.4728 760.914 32.047 c
-760.914 38.6212 755.586 43.9493 749.012 43.9493 c
-742.437 43.9493 737.105 38.6212 737.105 32.047 c
-737.105 32.047 l
-C
-S 0 0 1 r f R
-
-N
-801.391 32.047 m
-801.391 32.047 l
-801.391 24.8165 807.254 18.9493 814.484 18.9493 c
-821.715 18.9493 827.578 24.8165 827.578 32.047 c
-827.578 39.2775 821.715 45.1407 814.484 45.1407 c
-807.254 45.1407 801.391 39.2775 801.391 32.047 c
-801.391 32.047 l
-C
-S 0 0 0 r f R
-
-N
-802.582 32.047 m
-802.582 32.047 l
-802.582 25.4728 807.91 20.1407 814.484 20.1407 c
-821.059 20.1407 826.387 25.4728 826.387 32.047 c
-826.387 38.6212 821.059 43.9493 814.484 43.9493 c
-807.91 43.9493 802.582 38.6212 802.582 32.047 c
-802.582 32.047 l
-C
-S 0.5 0.5 1 r f R
-
-%%EOF
Index: c/images/bipartite_partitions.eps
===================================================================
--- doc/images/bipartite_partitions.eps	(revision 579)
+++ 	(revision )
@@ -1,114 +1,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Creator: LEMON, graphToEps()
-%%CreationDate: Tue Nov 15 16:51:43 2005
-%%BoundingBox: 0 0 842 596
-%%EndComments
-/lb { setlinewidth setrgbcolor newpath moveto
-      4 2 roll 1 index 1 index curveto stroke } bind def
-/l { setlinewidth setrgbcolor newpath moveto lineto stroke } bind def
-/c { newpath dup 3 index add 2 index moveto 0 360 arc closepath } bind def
-/sq { newpath 2 index 1 index add 2 index 2 index add moveto
-      2 index 1 index sub 2 index 2 index add lineto
-      2 index 1 index sub 2 index 2 index sub lineto
-      2 index 1 index add 2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/di { newpath 2 index 1 index add 2 index moveto
-      2 index             2 index 2 index add lineto
-      2 index 1 index sub 2 index             lineto
-      2 index             2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/nc { 0 0 0 setrgbcolor 5 index 5 index 5 index c fill
-     setrgbcolor 1.1 div c fill
-   } bind def
-/nsq { 0 0 0 setrgbcolor 5 index 5 index 5 index sq fill
-     setrgbcolor 1.1 div sq fill
-   } bind def
-/ndi { 0 0 0 setrgbcolor 5 index 5 index 5 index di fill
-     setrgbcolor 1.1 div di fill
-   } bind def
-/arrl 1 def
-/arrw 0.3 def
-/lrl { 2 index mul exch 2 index mul exch rlineto pop} bind def
-/arr { setrgbcolor /y1 exch def /x1 exch def /dy exch def /dx exch def
-       /w exch def /len exch def
-       newpath x1 dy w 2 div mul add y1 dx w 2 div mul sub moveto
-       len w sub arrl sub dx dy lrl
-       arrw dy dx neg lrl
-       dx arrl w add mul dy w 2 div arrw add mul sub
-       dy arrl w add mul dx w 2 div arrw add mul add rlineto
-       dx arrl w add mul neg dy w 2 div arrw add mul sub
-       dy arrl w add mul neg dx w 2 div arrw add mul add rlineto
-       arrw dy dx neg lrl
-       len w sub arrl sub neg dx dy lrl
-       closepath fill } bind def
-/cshow { 2 index 2 index moveto dup stringwidth pop
-         neg 2 div fosi .35 mul neg rmoveto show pop pop} def
-
-gsave
-90 rotate
-0 -842 translate
-71.6378 15 translate
-0.389093 dup scale
-90 rotate
-1197.47 -613.138 translate
-%Edges:
-gsave
-513.857 -446.322 296.569 -487.43 79.2808 -528.539 0 0 0 2 lb
-513.857 -446.322 575.52 -315.655 637.183 -184.989 0 0 0 2 lb
-393.468 566.711 494.771 434.577 596.074 302.442 0 0 0 2 lb
-393.468 566.711 155.625 579.925 -82.2171 593.138 0 0 0 2 lb
-393.468 566.711 251.056 450.726 108.644 334.741 0 0 0 2 lb
-869.153 52.8539 732.613 177.648 596.074 302.442 0 0 0 2 lb
-869.153 52.8539 753.168 -66.0676 637.183 -184.989 0 0 0 2 lb
--82.2171 593.138 -91.0261 346.487 -99.8351 99.8351 0 0 0 2 lb
--663.61 546.157 -753.168 394.936 -842.726 243.715 0 0 0 2 lb
--663.61 546.157 -574.052 437.513 -484.494 328.869 0 0 0 2 lb
--1077.63 161.498 -960.178 202.606 -842.726 243.715 0 0 0 2 lb
--1077.63 161.498 -968.987 66.0674 -860.344 -29.3633 0 0 0 2 lb
--1177.47 -234.906 -1029.18 -381.722 -880.898 -528.539 0 0 0 2 lb
--1177.47 -234.906 -1018.91 -132.135 -860.344 -29.3633 0 0 0 2 lb
--880.898 -528.539 -744.359 -387.595 -607.82 -246.651 0 0 0 2 lb
--499.175 -499.175 -355.295 -475.685 -211.415 -452.194 0 0 0 2 lb
--499.175 -499.175 -553.498 -372.913 -607.82 -246.651 0 0 0 2 lb
--499.175 -499.175 -386.587 -315.087 -274 -131 0 0 0 2 lb
-79.2808 -528.539 -66.0671 -490.366 -211.415 -452.194 0 0 0 2 lb
-637.183 -184.989 421.363 -253.993 205.543 -322.996 0 0 0 2 lb
-205.543 -322.996 162.966 -226.097 120.389 -129.198 0 0 0 2 lb
-399.34 88.0898 259.865 -20.5541 120.389 -129.198 0 0 0 2 lb
-399.34 88.0898 253.992 211.415 108.644 334.741 0 0 0 2 lb
--842.726 243.715 -471.281 171.775 -99.8351 99.8351 0 0 0 2 lb
--842.726 243.715 -558.363 56.3575 -274 -131 0 0 0 2 lb
--860.344 -29.3633 -734.082 -138.007 -607.82 -246.651 0 0 0 2 lb
--211.415 -452.194 -45.513 -290.696 120.389 -129.198 0 0 0 2 lb
--99.8351 99.8351 4.40445 217.288 108.644 334.741 0 0 0 2 lb
--99.8351 99.8351 -292.165 214.352 -484.494 328.869 0 0 0 2 lb
-120.389 -129.198 -76.8055 -130.099 -274 -131 0 0 0 2 lb
-grestore
-%Nodes:
-gsave
--274 -131 20 1 0 0 nc
--607.82 -246.651 20 1 0 0 nc
--484.494 328.869 20 0 0 1 nc
-108.644 334.741 20 0 0 1 nc
-120.389 -129.198 20 0 0 1 nc
--99.8351 99.8351 20 1 0 0 nc
--211.415 -452.194 20 1 0 0 nc
--860.344 -29.3633 20 0 0 1 nc
--842.726 243.715 20 0 0 1 nc
-399.34 88.0898 20 1 0 0 nc
-205.543 -322.996 20 1 0 0 nc
-637.183 -184.989 20 0 0 1 nc
-79.2808 -528.539 20 0 0 1 nc
--499.175 -499.175 20 0 0 1 nc
--880.898 -528.539 20 0 0 1 nc
--1177.47 -234.906 20 1 0 0 nc
--1077.63 161.498 20 1 0 0 nc
--663.61 546.157 20 1 0 0 nc
--82.2171 593.138 20 0 0 1 nc
-596.074 302.442 20 0 0 1 nc
-869.153 52.8539 20 1 0 0 nc
-393.468 566.711 20 1 0 0 nc
-513.857 -446.322 20 1 0 0 nc
-grestore
-grestore
-showpage
Index: c/images/connected_components.eps
===================================================================
--- doc/images/connected_components.eps	(revision 579)
+++ 	(revision )
@@ -1,159 +1,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Nov  4 13:47:12 2005
-%%BoundingBox: 0 0 842 596
-%%EndComments
-/lb { setlinewidth setrgbcolor newpath moveto
-      4 2 roll 1 index 1 index curveto stroke } bind def
-/l { setlinewidth setrgbcolor newpath moveto lineto stroke } bind def
-/c { newpath dup 3 index add 2 index moveto 0 360 arc closepath } bind def
-/sq { newpath 2 index 1 index add 2 index 2 index add moveto
-      2 index 1 index sub 2 index 2 index add lineto
-      2 index 1 index sub 2 index 2 index sub lineto
-      2 index 1 index add 2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/di { newpath 2 index 1 index add 2 index moveto
-      2 index             2 index 2 index add lineto
-      2 index 1 index sub 2 index             lineto
-      2 index             2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/nc { 0 0 0 setrgbcolor 5 index 5 index 5 index c fill
-     setrgbcolor 1.1 div c fill
-   } bind def
-/nsq { 0 0 0 setrgbcolor 5 index 5 index 5 index sq fill
-     setrgbcolor 1.1 div sq fill
-   } bind def
-/ndi { 0 0 0 setrgbcolor 5 index 5 index 5 index di fill
-     setrgbcolor 1.1 div di fill
-   } bind def
-/arrl 1 def
-/arrw 0.3 def
-/lrl { 2 index mul exch 2 index mul exch rlineto pop} bind def
-/arr { setrgbcolor /y1 exch def /x1 exch def /dy exch def /dx exch def
-       /w exch def /len exch def
-       newpath x1 dy w 2 div mul add y1 dx w 2 div mul sub moveto
-       len w sub arrl sub dx dy lrl
-       arrw dy dx neg lrl
-       dx arrl w add mul dy w 2 div arrw add mul sub
-       dy arrl w add mul dx w 2 div arrw add mul add rlineto
-       dx arrl w add mul neg dy w 2 div arrw add mul sub
-       dy arrl w add mul neg dx w 2 div arrw add mul add rlineto
-       arrw dy dx neg lrl
-       len w sub arrl sub neg dx dy lrl
-       closepath fill } bind def
-/cshow { 2 index 2 index moveto dup stringwidth pop
-         neg 2 div fosi .35 mul neg rmoveto show pop pop} def
-
-gsave
-90 rotate
-0 -842 translate
-71.0944 15 translate
-0.434694 dup scale
-90 rotate
-860.856 -588.349 translate
-%Edges:
-gsave
-574.035 177.301 622.149 225.748 670.264 274.195 0 0 0 2 lb
-694.579 115.483 682.421 194.839 670.264 274.195 0 0 0 2 lb
-280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 0 2 lb
-280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 0 2 lb
-212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 0 2 lb
-286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 0 2 lb
-286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 0 2 lb
-438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 0 2 lb
-438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 0 2 lb
-397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 0 2 lb
-366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 0 2 lb
-271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 0 2 lb
-271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 0 2 lb
-277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 0 2 lb
--840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0 0 2 lb
--579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0 2 lb
--579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0 2 lb
--767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0 2 lb
-906.312 201.403 946.592 42.798 986.873 -115.807 0 0 0 2 lb
-906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 0 2 lb
-986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 0 2 lb
--470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0 0 0 2 lb
-422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 0 2 lb
-422.945 521.129 376.371 417.911 329.797 314.692 0 0 0 2 lb
-422.945 521.129 474.554 276.928 526.164 32.7279 0 0 0 2 lb
--5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 0 2 lb
-329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 0 2 lb
--67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 0 2 lb
-762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 0 2 lb
-762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 0 2 lb
-526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 0 2 lb
-730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 0 2 lb
-415.393 -289.516 173.71 -318.468 -67.9734 -347.42 0 0 0 2 lb
--67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 0 2 lb
--67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 0 2 lb
--309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 0 2 lb
--323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 0 2 lb
--26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 0 2 lb
--26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 0 2 lb
--26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 0 2 lb
--26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 0 2 lb
-116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 0 2 lb
--262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 0 2 lb
--262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 0 2 lb
--13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 0 2 lb
--180.397 245.045 -142.256 345.099 -132.697 451.748 0 0 0 2 lb
--180.397 245.045 -170.838 351.694 -132.697 451.748 0 0 0 2 lb
--416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 0 2 lb
--416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 0 2 lb
--132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 0 2 lb
-670.264 274.195 629.188 409.347 588.113 544.499 0 0 0 2 lb
-670.264 274.195 797.466 341.771 924.667 409.347 0 0 0 2 lb
-588.113 544.499 756.39 476.923 924.667 409.347 0 0 0 2 lb
--689.204 -237.261 -614.799 -102.648 -567.302 43.6423 0 0 0 2 lb
--689.204 -237.261 -641.707 -90.9706 -567.302 43.6423 0 0 0 2 lb
-grestore
-%Nodes:
-gsave
--567.302 43.6423 20 0 0 0 nc
--689.204 -237.261 20 0 0 0 nc
-924.667 409.347 20 1 0 0 nc
-588.113 544.499 20 1 0 0 nc
-670.264 274.195 20 1 0 0 nc
--371.2 568.349 20 0 1 0 nc
--132.697 451.748 20 0 1 0 nc
--416.25 345.746 20 0 1 0 nc
--180.397 245.045 20 0 1 0 nc
--13.4452 133.743 20 0 1 0 nc
--262.548 107.243 20 0 1 0 nc
-201.208 38.3422 20 0 1 0 nc
-116.407 -173.66 20 0 1 0 nc
--26.6953 -19.9585 20 0 1 0 nc
--539.894 -262.64 20 0 0 1 nc
--323.543 -433.964 20 0 0 1 nc
--309.657 -57.9033 20 0 0 1 nc
--67.9734 -347.42 20 0 0 1 nc
-415.393 -289.516 20 0 0 1 nc
-730.084 -307.139 20 0 0 1 nc
-526.164 32.7279 20 0 0 1 nc
-762.812 -17.6227 20 0 0 1 nc
--67.9734 319.727 20 0 0 1 nc
-329.797 314.692 20 0 0 1 nc
--5.03507 561.41 20 0 0 1 nc
-422.945 521.129 20 0 0 1 nc
--470.779 158.605 20 0 0 1 nc
-986.873 -115.807 20 0 0 1 nc
-906.312 201.403 20 0 0 1 nc
--767.847 113.289 20 0 0 1 nc
--579.033 445.603 20 0 0 1 nc
--840.856 -246.718 20 0 0 1 nc
-206.221 -205.967 20 1 1 0 nc
-277.311 -252.33 20 1 1 0 nc
-271.13 -175.058 20 1 1 0 nc
-366.947 -110.15 20 1 1 0 nc
-397.855 -196.694 20 1 1 0 nc
-438.037 -88.514 20 1 1 0 nc
-286.584 -48.3327 20 1 1 0 nc
-212.403 -23.6057 20 1 1 0 nc
-280.402 10.3938 20 1 1 0 nc
-694.579 115.483 20 1 0 0 nc
-574.035 177.301 20 1 0 0 nc
-grestore
-grestore
-showpage
Index: c/images/edge_biconnected_components.eps
===================================================================
--- doc/images/edge_biconnected_components.eps	(revision 579)
+++ 	(revision )
@@ -1,159 +1,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Nov  4 13:47:12 2005
-%%BoundingBox: 0 0 842 596
-%%EndComments
-/lb { setlinewidth setrgbcolor newpath moveto
-      4 2 roll 1 index 1 index curveto stroke } bind def
-/l { setlinewidth setrgbcolor newpath moveto lineto stroke } bind def
-/c { newpath dup 3 index add 2 index moveto 0 360 arc closepath } bind def
-/sq { newpath 2 index 1 index add 2 index 2 index add moveto
-      2 index 1 index sub 2 index 2 index add lineto
-      2 index 1 index sub 2 index 2 index sub lineto
-      2 index 1 index add 2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/di { newpath 2 index 1 index add 2 index moveto
-      2 index             2 index 2 index add lineto
-      2 index 1 index sub 2 index             lineto
-      2 index             2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/nc { 0 0 0 setrgbcolor 5 index 5 index 5 index c fill
-     setrgbcolor 1.1 div c fill
-   } bind def
-/nsq { 0 0 0 setrgbcolor 5 index 5 index 5 index sq fill
-     setrgbcolor 1.1 div sq fill
-   } bind def
-/ndi { 0 0 0 setrgbcolor 5 index 5 index 5 index di fill
-     setrgbcolor 1.1 div di fill
-   } bind def
-/arrl 1 def
-/arrw 0.3 def
-/lrl { 2 index mul exch 2 index mul exch rlineto pop} bind def
-/arr { setrgbcolor /y1 exch def /x1 exch def /dy exch def /dx exch def
-       /w exch def /len exch def
-       newpath x1 dy w 2 div mul add y1 dx w 2 div mul sub moveto
-       len w sub arrl sub dx dy lrl
-       arrw dy dx neg lrl
-       dx arrl w add mul dy w 2 div arrw add mul sub
-       dy arrl w add mul dx w 2 div arrw add mul add rlineto
-       dx arrl w add mul neg dy w 2 div arrw add mul sub
-       dy arrl w add mul neg dx w 2 div arrw add mul add rlineto
-       arrw dy dx neg lrl
-       len w sub arrl sub neg dx dy lrl
-       closepath fill } bind def
-/cshow { 2 index 2 index moveto dup stringwidth pop
-         neg 2 div fosi .35 mul neg rmoveto show pop pop} def
-
-gsave
-90 rotate
-0 -842 translate
-71.0944 15 translate
-0.434694 dup scale
-90 rotate
-860.856 -588.349 translate
-%Edges:
-gsave
-574.035 177.301 622.149 225.748 670.264 274.195 1 0 0 2 lb
-694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 2 lb
-280.402 10.3938 246.402 -6.60595 212.403 -23.6057 0 0 1 2 lb
-280.402 10.3938 283.493 -18.9695 286.584 -48.3327 0 0 1 2 lb
-212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 0 0 1 2 lb
-286.584 -48.3327 326.765 -79.2414 366.947 -110.15 0 0 1 2 lb
-286.584 -48.3327 278.857 -111.695 271.13 -175.058 0 0 1 2 lb
-438.037 -88.514 417.946 -142.604 397.855 -196.694 0 0 1 2 lb
-438.037 -88.514 402.492 -99.332 366.947 -110.15 0 0 1 2 lb
-397.855 -196.694 382.401 -153.422 366.947 -110.15 0 0 1 2 lb
-366.947 -110.15 319.038 -142.604 271.13 -175.058 0 0 1 2 lb
-271.13 -175.058 274.221 -213.694 277.311 -252.33 0 0 1 2 lb
-271.13 -175.058 238.675 -190.512 206.221 -205.967 0 0 1 2 lb
-277.311 -252.33 241.766 -229.149 206.221 -205.967 0 0 1 2 lb
--840.856 -246.718 -804.351 -66.7145 -767.847 113.289 1 0 0 2 lb
--579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 1 2 lb
--579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 1 2 lb
--767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 1 2 lb
-906.312 201.403 946.592 42.798 986.873 -115.807 0 0 1 2 lb
-906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0 1 2 lb
-986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0 1 2 lb
--470.779 158.605 -390.218 50.3508 -309.657 -57.9033 1 0 0 2 lb
-422.945 521.129 208.955 541.269 -5.03507 561.41 0 0 1 2 lb
-422.945 521.129 376.371 417.911 329.797 314.692 0 0 1 2 lb
-422.945 521.129 474.554 276.928 526.164 32.7279 0 0 1 2 lb
--5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0 0 1 2 lb
-329.797 314.692 130.912 317.209 -67.9734 319.727 0 0 1 2 lb
--67.9734 319.727 229.095 176.227 526.164 32.7279 0 0 1 2 lb
-762.812 -17.6227 644.488 7.5526 526.164 32.7279 0 0 1 2 lb
-762.812 -17.6227 746.448 -162.381 730.084 -307.139 0 0 1 2 lb
-526.164 32.7279 470.779 -128.394 415.393 -289.516 0 0 1 2 lb
-730.084 -307.139 572.738 -298.327 415.393 -289.516 0 0 1 2 lb
-415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0 0 2 lb
--67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0 0 1 2 lb
--67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0 0 1 2 lb
--309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0 0 1 2 lb
--323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0 0 1 2 lb
--26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 0 0 1 2 lb
--26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 0 0 1 2 lb
--26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 0 0 1 2 lb
--26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 0 0 1 2 lb
-116.407 -173.66 158.808 -67.6589 201.208 38.3422 0 0 1 2 lb
--262.548 107.243 -137.997 120.493 -13.4452 133.743 0 0 1 2 lb
--262.548 107.243 -221.472 176.144 -180.397 245.045 0 0 1 2 lb
--13.4452 133.743 -96.9211 189.394 -180.397 245.045 0 0 1 2 lb
--180.397 245.045 -142.256 345.099 -132.697 451.748 0 0 1 2 lb
--180.397 245.045 -170.838 351.694 -132.697 451.748 0 0 1 2 lb
--416.25 345.746 -274.474 398.747 -132.697 451.748 0 0 1 2 lb
--416.25 345.746 -393.725 457.048 -371.2 568.349 0 0 1 2 lb
--132.697 451.748 -251.948 510.048 -371.2 568.349 0 0 1 2 lb
-670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 2 lb
-670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 2 lb
-588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 2 lb
--689.204 -237.261 -614.799 -102.648 -567.302 43.6423 0 0 1 2 lb
--689.204 -237.261 -641.707 -90.9706 -567.302 43.6423 0 0 1 2 lb
-grestore
-%Nodes:
-gsave
--567.302 43.6423 20 0 0 0 nc
--689.204 -237.261 20 0 0 0 nc
-924.667 409.347 20 0 0 1 nc
-588.113 544.499 20 0 0 1 nc
-670.264 274.195 20 0 0 1 nc
--371.2 568.349 20 1 1 0 nc
--132.697 451.748 20 1 1 0 nc
--416.25 345.746 20 1 1 0 nc
--180.397 245.045 20 1 1 0 nc
--13.4452 133.743 20 1 1 0 nc
--262.548 107.243 20 1 1 0 nc
-201.208 38.3422 20 1 1 0 nc
-116.407 -173.66 20 1 1 0 nc
--26.6953 -19.9585 20 1 1 0 nc
--539.894 -262.64 20 0 0.5 0 nc
--323.543 -433.964 20 0 0.5 0 nc
--309.657 -57.9033 20 0 0.5 0 nc
--67.9734 -347.42 20 0 0.5 0 nc
-415.393 -289.516 20 0.5 0 0 nc
-730.084 -307.139 20 0.5 0 0 nc
-526.164 32.7279 20 0.5 0 0 nc
-762.812 -17.6227 20 0.5 0 0 nc
--67.9734 319.727 20 0.5 0 0 nc
-329.797 314.692 20 0.5 0 0 nc
--5.03507 561.41 20 0.5 0 0 nc
-422.945 521.129 20 0.5 0 0 nc
--470.779 158.605 20 0 1 1 nc
-986.873 -115.807 20 0.5 0 0 nc
-906.312 201.403 20 0.5 0 0 nc
--767.847 113.289 20 0 1 1 nc
--579.033 445.603 20 0 1 1 nc
--840.856 -246.718 20 1 0 1 nc
-206.221 -205.967 20 0 0 0.5 nc
-277.311 -252.33 20 0 0 0.5 nc
-271.13 -175.058 20 0 0 0.5 nc
-366.947 -110.15 20 0 0 0.5 nc
-397.855 -196.694 20 0 0 0.5 nc
-438.037 -88.514 20 0 0 0.5 nc
-286.584 -48.3327 20 0 0 0.5 nc
-212.403 -23.6057 20 0 0 0.5 nc
-280.402 10.3938 20 0 0 0.5 nc
-694.579 115.483 20 1 0 0 nc
-574.035 177.301 20 0 1 0 nc
-grestore
-grestore
-showpage
Index: c/images/node_biconnected_components.eps
===================================================================
--- doc/images/node_biconnected_components.eps	(revision 579)
+++ 	(revision )
@@ -1,159 +1,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Nov  4 13:47:12 2005
-%%BoundingBox: 0 0 842 596
-%%EndComments
-/lb { setlinewidth setrgbcolor newpath moveto
-      4 2 roll 1 index 1 index curveto stroke } bind def
-/l { setlinewidth setrgbcolor newpath moveto lineto stroke } bind def
-/c { newpath dup 3 index add 2 index moveto 0 360 arc closepath } bind def
-/sq { newpath 2 index 1 index add 2 index 2 index add moveto
-      2 index 1 index sub 2 index 2 index add lineto
-      2 index 1 index sub 2 index 2 index sub lineto
-      2 index 1 index add 2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/di { newpath 2 index 1 index add 2 index moveto
-      2 index             2 index 2 index add lineto
-      2 index 1 index sub 2 index             lineto
-      2 index             2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/nc { 0 0 0 setrgbcolor 5 index 5 index 5 index c fill
-     setrgbcolor 1.1 div c fill
-   } bind def
-/nsq { 0 0 0 setrgbcolor 5 index 5 index 5 index sq fill
-     setrgbcolor 1.1 div sq fill
-   } bind def
-/ndi { 0 0 0 setrgbcolor 5 index 5 index 5 index di fill
-     setrgbcolor 1.1 div di fill
-   } bind def
-/arrl 1 def
-/arrw 0.3 def
-/lrl { 2 index mul exch 2 index mul exch rlineto pop} bind def
-/arr { setrgbcolor /y1 exch def /x1 exch def /dy exch def /dx exch def
-       /w exch def /len exch def
-       newpath x1 dy w 2 div mul add y1 dx w 2 div mul sub moveto
-       len w sub arrl sub dx dy lrl
-       arrw dy dx neg lrl
-       dx arrl w add mul dy w 2 div arrw add mul sub
-       dy arrl w add mul dx w 2 div arrw add mul add rlineto
-       dx arrl w add mul neg dy w 2 div arrw add mul sub
-       dy arrl w add mul neg dx w 2 div arrw add mul add rlineto
-       arrw dy dx neg lrl
-       len w sub arrl sub neg dx dy lrl
-       closepath fill } bind def
-/cshow { 2 index 2 index moveto dup stringwidth pop
-         neg 2 div fosi .35 mul neg rmoveto show pop pop} def
-
-gsave
-90 rotate
-0 -842 translate
-71.0944 15 translate
-0.434694 dup scale
-90 rotate
-860.856 -588.349 translate
-%Edges:
-gsave
-574.035 177.301 622.149 225.748 670.264 274.195 0 1 0 5 lb
-694.579 115.483 682.421 194.839 670.264 274.195 1 0 0 5 lb
-280.402 10.3938 246.402 -6.60595 212.403 -23.6057 1 1 0.5 5 lb
-280.402 10.3938 283.493 -18.9695 286.584 -48.3327 1 1 0.5 5 lb
-212.403 -23.6057 249.493 -35.9692 286.584 -48.3327 1 1 0.5 5 lb
-286.584 -48.3327 326.765 -79.2414 366.947 -110.15 1 0.5 1 5 lb
-286.584 -48.3327 278.857 -111.695 271.13 -175.058 1 0.5 1 5 lb
-438.037 -88.514 417.946 -142.604 397.855 -196.694 0.5 0.5 1 5 lb
-438.037 -88.514 402.492 -99.332 366.947 -110.15 0.5 0.5 1 5 lb
-397.855 -196.694 382.401 -153.422 366.947 -110.15 0.5 0.5 1 5 lb
-366.947 -110.15 319.038 -142.604 271.13 -175.058 1 0.5 1 5 lb
-271.13 -175.058 274.221 -213.694 277.311 -252.33 0.5 1 1 5 lb
-271.13 -175.058 238.675 -190.512 206.221 -205.967 0.5 1 1 5 lb
-277.311 -252.33 241.766 -229.149 206.221 -205.967 0.5 1 1 5 lb
--840.856 -246.718 -804.351 -66.7145 -767.847 113.289 0 0.5 0 5 lb
--579.033 445.603 -673.44 279.446 -767.847 113.289 0 0 0.5 5 lb
--579.033 445.603 -524.906 302.104 -470.779 158.605 0 0 0.5 5 lb
--767.847 113.289 -619.313 135.947 -470.779 158.605 0 0 0.5 5 lb
-906.312 201.403 946.592 42.798 986.873 -115.807 0 0.5 0.5 5 lb
-906.312 201.403 834.562 91.8901 762.812 -17.6227 0 0.5 0.5 5 lb
-986.873 -115.807 874.842 -66.7148 762.812 -17.6227 0 0.5 0.5 5 lb
--470.779 158.605 -390.218 50.3508 -309.657 -57.9033 0.5 0.5 0 5 lb
-422.945 521.129 208.955 541.269 -5.03507 561.41 0.5 0 0.5 5 lb
-422.945 521.129 376.371 417.911 329.797 314.692 0.5 0 0.5 5 lb
-422.945 521.129 474.554 276.928 526.164 32.7279 0.5 0 0.5 5 lb
--5.03507 561.41 -36.5042 440.568 -67.9734 319.727 0.5 0 0.5 5 lb
-329.797 314.692 130.912 317.209 -67.9734 319.727 0.5 0 0.5 5 lb
--67.9734 319.727 229.095 176.227 526.164 32.7279 0.5 0 0.5 5 lb
-762.812 -17.6227 644.488 7.5526 526.164 32.7279 0.5 0.5 0.5 5 lb
-762.812 -17.6227 746.448 -162.381 730.084 -307.139 0.5 0.5 0.5 5 lb
-526.164 32.7279 470.779 -128.394 415.393 -289.516 0.5 0.5 0.5 5 lb
-730.084 -307.139 572.738 -298.327 415.393 -289.516 0.5 0.5 0.5 5 lb
-415.393 -289.516 173.71 -318.468 -67.9734 -347.42 1 0.5 0.5 5 lb
--67.9734 -347.42 -188.815 -202.662 -309.657 -57.9033 0.5 1 0.5 5 lb
--67.9734 -347.42 -195.758 -390.692 -323.543 -433.964 0.5 1 0.5 5 lb
--309.657 -57.9033 -424.775 -160.272 -539.894 -262.64 0.5 1 0.5 5 lb
--323.543 -433.964 -431.719 -348.302 -539.894 -262.64 0.5 1 0.5 5 lb
--26.6953 -19.9585 44.8558 -96.8093 116.407 -173.66 1 1 0 5 lb
--26.6953 -19.9585 87.2563 9.19185 201.208 38.3422 1 1 0 5 lb
--26.6953 -19.9585 -144.622 43.6422 -262.548 107.243 1 0 1 5 lb
--26.6953 -19.9585 -20.0703 56.8923 -13.4452 133.743 1 0 1 5 lb
-116.407 -173.66 158.808 -67.6589 201.208 38.3422 1 1 0 5 lb
--262.548 107.243 -137.997 120.493 -13.4452 133.743 1 0 1 5 lb
--262.548 107.243 -221.472 176.144 -180.397 245.045 1 0 1 5 lb
--13.4452 133.743 -96.9211 189.394 -180.397 245.045 1 0 1 5 lb
--180.397 245.045 -140.307 344.649 -132.697 451.748 0 1 1 5 lb
--180.397 245.045 -172.787 352.144 -132.697 451.748 0 1 1 5 lb
--416.25 345.746 -274.474 398.747 -132.697 451.748 0.5 0 0 5 lb
--416.25 345.746 -393.725 457.048 -371.2 568.349 0.5 0 0 5 lb
--132.697 451.748 -251.948 510.048 -371.2 568.349 0.5 0 0 5 lb
-670.264 274.195 629.188 409.347 588.113 544.499 0 0 1 5 lb
-670.264 274.195 797.466 341.771 924.667 409.347 0 0 1 5 lb
-588.113 544.499 756.39 476.923 924.667 409.347 0 0 1 5 lb
--689.204 -237.261 -612.964 -103.444 -567.302 43.6423 0 0 0 5 lb
--689.204 -237.261 -643.542 -90.1744 -567.302 43.6423 0 0 0 5 lb
-grestore
-%Nodes:
-gsave
--567.302 43.6423 20 0 0 1 nc
--689.204 -237.261 20 0 0 1 nc
-924.667 409.347 20 0 0 1 nc
-588.113 544.499 20 0 0 1 nc
-670.264 274.195 20 1 0 0 nc
--371.2 568.349 20 0 0 1 nc
--132.697 451.748 20 1 0 0 nc
--416.25 345.746 20 0 0 1 nc
--180.397 245.045 20 1 0 0 nc
--13.4452 133.743 20 0 0 1 nc
--262.548 107.243 20 0 0 1 nc
-201.208 38.3422 20 0 0 1 nc
-116.407 -173.66 20 0 0 1 nc
--26.6953 -19.9585 20 1 0 0 nc
--539.894 -262.64 20 0 0 1 nc
--323.543 -433.964 20 0 0 1 nc
--309.657 -57.9033 20 1 0 0 nc
--67.9734 -347.42 20 1 0 0 nc
-415.393 -289.516 20 1 0 0 nc
-730.084 -307.139 20 0 0 1 nc
-526.164 32.7279 20 1 0 0 nc
-762.812 -17.6227 20 1 0 0 nc
--67.9734 319.727 20 0 0 1 nc
-329.797 314.692 20 0 0 1 nc
--5.03507 561.41 20 0 0 1 nc
-422.945 521.129 20 0 0 1 nc
--470.779 158.605 20 1 0 0 nc
-986.873 -115.807 20 0 0 1 nc
-906.312 201.403 20 0 0 1 nc
--767.847 113.289 20 1 0 0 nc
--579.033 445.603 20 0 0 1 nc
--840.856 -246.718 20 0 0 1 nc
-206.221 -205.967 20 0 0 1 nc
-277.311 -252.33 20 0 0 1 nc
-271.13 -175.058 20 1 0 0 nc
-366.947 -110.15 20 1 0 0 nc
-397.855 -196.694 20 0 0 1 nc
-438.037 -88.514 20 0 0 1 nc
-286.584 -48.3327 20 1 0 0 nc
-212.403 -23.6057 20 0 0 1 nc
-280.402 10.3938 20 0 0 1 nc
-694.579 115.483 20 0 0 1 nc
-574.035 177.301 20 0 0 1 nc
-grestore
-grestore
-showpage
Index: c/images/strongly_connected_components.eps
===================================================================
--- doc/images/strongly_connected_components.eps	(revision 579)
+++ 	(revision )
@@ -1,180 +1,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Creator: LEMON, graphToEps()
-%%CreationDate: Fri Nov  4 13:47:12 2005
-%%BoundingBox: 0 0 842 596
-%%EndComments
-/lb { setlinewidth setrgbcolor newpath moveto
-      4 2 roll 1 index 1 index curveto stroke } bind def
-/l { setlinewidth setrgbcolor newpath moveto lineto stroke } bind def
-/c { newpath dup 3 index add 2 index moveto 0 360 arc closepath } bind def
-/sq { newpath 2 index 1 index add 2 index 2 index add moveto
-      2 index 1 index sub 2 index 2 index add lineto
-      2 index 1 index sub 2 index 2 index sub lineto
-      2 index 1 index add 2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/di { newpath 2 index 1 index add 2 index moveto
-      2 index             2 index 2 index add lineto
-      2 index 1 index sub 2 index             lineto
-      2 index             2 index 2 index sub lineto
-      closepath pop pop pop} bind def
-/nc { 0 0 0 setrgbcolor 5 index 5 index 5 index c fill
-     setrgbcolor 1.1 div c fill
-   } bind def
-/nsq { 0 0 0 setrgbcolor 5 index 5 index 5 index sq fill
-     setrgbcolor 1.1 div sq fill
-   } bind def
-/ndi { 0 0 0 setrgbcolor 5 index 5 index 5 index di fill
-     setrgbcolor 1.1 div di fill
-   } bind def
-/arrl 10 def
-/arrw 3 def
-/lrl { 2 index mul exch 2 index mul exch rlineto pop} bind def
-/arr { setrgbcolor /y1 exch def /x1 exch def /dy exch def /dx exch def
-       /w exch def /len exch def
-       newpath x1 dy w 2 div mul add y1 dx w 2 div mul sub moveto
-       len w sub arrl sub dx dy lrl
-       arrw dy dx neg lrl
-       dx arrl w add mul dy w 2 div arrw add mul sub
-       dy arrl w add mul dx w 2 div arrw add mul add rlineto
-       dx arrl w add mul neg dy w 2 div arrw add mul sub
-       dy arrl w add mul neg dx w 2 div arrw add mul add rlineto
-       arrw dy dx neg lrl
-       len w sub arrl sub neg dx dy lrl
-       closepath fill } bind def
-/cshow { 2 index 2 index moveto dup stringwidth pop
-         neg 2 div fosi .35 mul neg rmoveto show pop pop} def
-
-gsave
-90 rotate
-0 -842 translate
-77.1122 15 translate
-0.585745 dup scale
-90 rotate
-695.963 -397.916 translate
-%Edges:
-gsave
-2 setlinewidth 0 0 1 setrgbcolor newpath
-218.178 27.2723 moveto
-192.373 -40.1551 188.622 -49.9556 169.228 -100.631 curveto stroke
-newpath 164.939 -111.838 moveto 165.492 -99.2013 lineto 172.964 -102.061 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
-44.8044 15.5841 moveto
-119.293 20.6059 129.775 21.3125 186.25 25.1199 curveto stroke
-newpath 198.223 25.927 moveto 186.519 21.1289 lineto 185.981 29.1108 lineto closepath fill
-2 setlinewidth 1 0 0 setrgbcolor newpath
-218.178 27.2723 moveto
-285.395 -87.4449 290.763 -96.6058 348.102 -194.464 curveto stroke
-newpath 354.169 -204.818 moveto 344.651 -196.487 lineto 351.554 -192.442 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
-157.79 -130.517 moveto
-108.71 -67.0521 102.27 -58.7243 64.3804 -9.72954 curveto stroke
-newpath 57.0394 -0.236898 moveto 67.5446 -7.28254 lineto 61.2162 -12.1765 lineto closepath fill
-2 setlinewidth 1 0 0 setrgbcolor newpath
--105.193 -261.035 moveto
--35.6576 -132.801 -30.5923 -123.459 29.5506 -12.5464 curveto stroke
-newpath 35.2708 -1.99743 moveto 33.0669 -14.4531 lineto 26.0343 -10.6397 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--465.576 -42.8564 moveto
--559.078 -25.5413 -569.47 -23.6169 -644.498 -9.72286 curveto stroke
-newpath -656.297 -7.5378 moveto -643.77 -5.78973 lineto -645.226 -13.656 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--574.666 -153.893 moveto
--528.842 -107.252 -521.515 -99.794 -488.002 -65.683 curveto stroke
-newpath -479.592 -57.123 moveto -485.149 -68.4863 lineto -490.856 -62.8797 lineto closepath fill
-2 setlinewidth 1 0 0 setrgbcolor newpath
--490.901 120.777 moveto
--480.122 51.1328 -478.519 40.7713 -470.47 -11.2329 curveto stroke
-newpath -468.635 -23.0917 moveto -474.423 -11.8447 lineto -466.517 -10.6212 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--675.963 -3.89604 moveto
--632.116 -68.8235 -626.228 -77.5422 -592.575 -127.374 curveto stroke
-newpath -585.859 -137.319 moveto -595.89 -129.612 lineto -589.26 -125.135 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--490.901 120.777 moveto
--435.445 215.844 -430.107 224.995 -384.3 303.522 curveto stroke
-newpath -378.253 313.887 moveto -380.845 301.507 lineto -387.755 305.537 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--266.879 114.933 moveto
--367.067 117.547 -377.642 117.822 -458.912 119.943 curveto stroke
-newpath -470.908 120.255 moveto -458.807 123.941 lineto -459.016 115.944 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--368.176 331.163 moveto
--322.511 233.685 -318.018 224.095 -280.454 143.911 curveto stroke
-newpath -275.364 133.044 moveto -284.076 142.214 lineto -276.832 145.608 lineto closepath fill
-2 setlinewidth 1 0 0 setrgbcolor newpath
--266.879 114.933 moveto
--224.004 235.52 -220.448 245.52 -184.094 347.765 curveto stroke
-newpath -180.074 359.072 moveto -180.325 346.425 lineto -187.863 349.105 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--251.294 -335.059 moveto
--189.25 -303.624 -179.902 -298.887 -133.738 -275.498 curveto stroke
-newpath -123.034 -270.074 moveto -131.93 -279.066 lineto -135.546 -271.93 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--389.604 -136.361 moveto
--327.15 -226.083 -321.098 -234.777 -269.576 -308.795 curveto stroke
-newpath -262.72 -318.644 moveto -272.859 -311.081 lineto -266.293 -306.51 lineto closepath fill
-2 setlinewidth 1 0 0 setrgbcolor newpath
-5.84406 175.322 moveto
--76.0754 267.926 -83.1051 275.873 -152.172 353.948 curveto stroke
-newpath -160.122 362.936 moveto -149.176 356.598 lineto -155.168 351.298 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
-169.478 311.683 moveto
-96.8003 251.119 88.6819 244.353 30.4273 195.808 curveto stroke
-newpath 21.2086 188.126 moveto 27.8666 198.881 lineto 32.988 192.735 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
-342.851 111.037 moveto
-263.766 202.563 256.831 210.589 190.4 287.47 curveto stroke
-newpath 182.554 296.55 moveto 193.427 290.085 lineto 187.373 284.855 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
-5.84406 175.322 moveto
-163.16 145.314 173.605 143.321 311.418 117.033 curveto stroke
-newpath 323.205 114.784 moveto 310.668 113.104 lineto 312.167 120.962 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
-342.851 111.037 moveto
-497.255 2.58683 505.964 -3.53033 643.932 -100.436 curveto stroke
-newpath 653.752 -107.334 moveto 641.633 -103.71 lineto 646.231 -97.163 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
-364.28 -222.074 moveto
-354.298 -66.9063 353.616 -56.2971 344.905 79.1029 curveto stroke
-newpath 344.135 91.0781 moveto 348.897 79.3597 lineto 340.914 78.8461 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
-670.118 -118.829 moveto
-528.037 -166.793 517.967 -170.192 394.599 -211.839 curveto stroke
-newpath 383.229 -215.677 moveto 393.32 -208.049 lineto 395.878 -215.629 lineto closepath fill
-2 setlinewidth 1 0 0 setrgbcolor newpath
--105.193 -261.035 moveto
-118.401 -242.479 129.015 -241.598 332.39 -224.721 curveto stroke
-newpath 344.348 -223.728 moveto 332.72 -228.707 lineto 332.059 -220.734 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--105.193 -261.035 moveto
--160.867 -161.176 -166.028 -151.918 -212.336 -68.858 curveto stroke
-newpath -218.179 -58.3769 moveto -208.842 -66.9102 lineto -215.829 -70.8058 lineto closepath fill
-2 setlinewidth 0 0 1 setrgbcolor newpath
--227.918 -40.9084 moveto
--298.35 -82.4884 -307.42 -87.8432 -362.048 -120.093 curveto stroke
-newpath -372.381 -126.193 moveto -364.081 -116.648 lineto -360.014 -123.537 lineto closepath fill
-grestore
-%Nodes:
-gsave
--389.604 -136.361 20 0 1 0 nc
--227.918 -40.9084 20 0 1 0 nc
--105.193 -261.035 20 0 1 0 nc
-364.28 -222.074 20 1 1 0 nc
-670.118 -118.829 20 1 1 0 nc
-342.851 111.037 20 1 1 0 nc
-5.84406 175.322 20 1 1 0 nc
-169.478 311.683 20 1 1 0 nc
--173.374 377.916 20 1 0 1 nc
--251.294 -335.059 20 0 1 0 nc
--266.879 114.933 20 0 0 0 nc
--368.176 331.163 20 0 0 0 nc
--490.901 120.777 20 0 0 0 nc
--574.666 -153.893 20 1 0 0 nc
--675.963 -3.89604 20 1 0 0 nc
--465.576 -42.8564 20 1 0 0 nc
-44.8044 15.5841 20 0 0 1 nc
-157.79 -130.517 20 0 0 1 nc
-218.178 27.2723 20 0 0 1 nc
-grestore
-grestore
-showpage
Index: lemon/adaptors.h
===================================================================
--- lemon/adaptors.h	(revision 571)
+++ lemon/adaptors.h	(revision 550)
@@ -2193,7 +2193,4 @@
     typedef typename ItemSetTraits<DGR, Edge>::ItemNotifier EdgeNotifier;
     EdgeNotifier& notifier(Edge) const { return _digraph->notifier(Edge()); }
-    
-    typedef EdgeNotifier ArcNotifier;
-    ArcNotifier& notifier(Arc) const { return _digraph->notifier(Edge()); }
 
   protected:
Index: lemon/bin_heap.h
===================================================================
--- lemon/bin_heap.h	(revision 576)
+++ lemon/bin_heap.h	(revision 550)
@@ -74,7 +74,7 @@
     /// \c PRE_HEAP (<tt>-1</tt>) to any element to be put in the heap.
     enum State {
-      IN_HEAP = 0,    ///< = 0.
-      PRE_HEAP = -1,  ///< = -1.
-      POST_HEAP = -2  ///< = -2.
+      IN_HEAP = 0,    ///< \e
+      PRE_HEAP = -1,  ///< \e
+      POST_HEAP = -2  ///< \e
     };
 
Index: lemon/bits/graph_adaptor_extender.h
===================================================================
--- lemon/bits/graph_adaptor_extender.h	(revision 572)
+++ lemon/bits/graph_adaptor_extender.h	(revision 455)
@@ -22,4 +22,6 @@
 #include <lemon/core.h>
 #include <lemon/error.h>
+
+#include <lemon/bits/default_map.h>
 
 namespace lemon {
Index: lemon/bits/map_extender.h
===================================================================
--- lemon/bits/map_extender.h	(revision 572)
+++ lemon/bits/map_extender.h	(revision 440)
@@ -48,6 +48,4 @@
     typedef typename Parent::Key Key;
     typedef typename Parent::Value Value;
-    typedef typename Parent::Reference Reference;
-    typedef typename Parent::ConstReference ConstReference;
 
     class MapIt;
@@ -190,6 +188,4 @@
     typedef typename Parent::Key Key;
     typedef typename Parent::Value Value;
-    typedef typename Parent::Reference Reference;
-    typedef typename Parent::ConstReference ConstReference;
 
     class MapIt;
Index: lemon/cbc.cc
===================================================================
--- lemon/cbc.cc	(revision 568)
+++ lemon/cbc.cc	(revision 559)
@@ -56,13 +56,10 @@
     _osi_solver = 0;
     _cbc_model = 0;
-    messageLevel(MESSAGE_NOTHING);
   }
 
   CbcMip::CbcMip(const CbcMip& other) {
     _prob = new CoinModel(*other._prob);
-    _prob->setProblemName("LEMON");
     _osi_solver = 0;
     _cbc_model = 0;
-    messageLevel(MESSAGE_NOTHING);
   }
 
@@ -274,6 +271,22 @@
     _cbc_model= new CbcModel(*_osi_solver);
 
-    _osi_solver->messageHandler()->setLogLevel(_message_level);
-    _cbc_model->setLogLevel(_message_level);
+    switch (_message_level) {
+    case MESSAGE_NO_OUTPUT:
+      _osi_solver->messageHandler()->setLogLevel(0);
+      _cbc_model->setLogLevel(0);
+      break;
+    case MESSAGE_ERROR_MESSAGE:
+      _osi_solver->messageHandler()->setLogLevel(1);
+      _cbc_model->setLogLevel(1);
+      break;
+    case MESSAGE_NORMAL_OUTPUT:
+      _osi_solver->messageHandler()->setLogLevel(2);
+      _cbc_model->setLogLevel(2);
+      break;
+    case MESSAGE_FULL_OUTPUT:
+      _osi_solver->messageHandler()->setLogLevel(3);
+      _cbc_model->setLogLevel(3);
+      break;
+    }
 
     _cbc_model->initialSolve();
@@ -441,22 +454,6 @@
   }
 
-  void CbcMip::_messageLevel(MessageLevel level) {
-    switch (level) {
-    case MESSAGE_NOTHING:
-      _message_level = 0;
-      break;
-    case MESSAGE_ERROR:
-      _message_level = 1;
-      break;
-    case MESSAGE_WARNING:
-      _message_level = 1;
-      break;
-    case MESSAGE_NORMAL:
-      _message_level = 2;
-      break;
-    case MESSAGE_VERBOSE:
-      _message_level = 3;
-      break;
-    }
+  void CbcMip::messageLevel(MessageLevel m) {
+    _message_level = m;
   }
 
Index: lemon/cbc.h
===================================================================
--- lemon/cbc.h	(revision 568)
+++ lemon/cbc.h	(revision 559)
@@ -116,10 +116,31 @@
     virtual void _clear();
 
-    virtual void _messageLevel(MessageLevel level);
-    void _applyMessageLevel();
+  public:
 
-    int _message_level;
+    ///Enum for \c messageLevel() parameter
+    enum MessageLevel {
+      /// no output (default value)
+      MESSAGE_NO_OUTPUT = 0,
+      /// error messages only
+      MESSAGE_ERROR_MESSAGE = 1,
+      /// normal output
+      MESSAGE_NORMAL_OUTPUT = 2,
+      /// full output (includes informational messages)
+      MESSAGE_FULL_OUTPUT = 3
+    };
 
-    
+  private:
+
+    MessageLevel _message_level;
+
+  public:
+
+    ///Set the verbosity of the messages
+
+    ///Set the verbosity of the messages
+    ///
+    ///\param m is the level of the messages output by the solver routines.
+    void messageLevel(MessageLevel m);
+
 
   };
Index: lemon/circulation.h
===================================================================
--- lemon/circulation.h	(revision 573)
+++ lemon/circulation.h	(revision 550)
@@ -454,11 +454,11 @@
 
       for(NodeIt n(_g);n!=INVALID;++n) {
-        (*_excess)[n] = (*_delta)[n];
+        _excess->set(n, (*_delta)[n]);
       }
 
       for (ArcIt e(_g);e!=INVALID;++e) {
         _flow->set(e, (*_lo)[e]);
-        (*_excess)[_g.target(e)] += (*_flow)[e];
-        (*_excess)[_g.source(e)] -= (*_flow)[e];
+        _excess->set(_g.target(e), (*_excess)[_g.target(e)] + (*_flow)[e]);
+        _excess->set(_g.source(e), (*_excess)[_g.source(e)] - (*_flow)[e]);
       }
 
@@ -483,5 +483,5 @@
 
       for(NodeIt n(_g);n!=INVALID;++n) {
-        (*_excess)[n] = (*_delta)[n];
+        _excess->set(n, (*_delta)[n]);
       }
 
@@ -489,15 +489,15 @@
         if (!_tol.positive((*_excess)[_g.target(e)] + (*_up)[e])) {
           _flow->set(e, (*_up)[e]);
-          (*_excess)[_g.target(e)] += (*_up)[e];
-          (*_excess)[_g.source(e)] -= (*_up)[e];
+          _excess->set(_g.target(e), (*_excess)[_g.target(e)] + (*_up)[e]);
+          _excess->set(_g.source(e), (*_excess)[_g.source(e)] - (*_up)[e]);
         } else if (_tol.positive((*_excess)[_g.target(e)] + (*_lo)[e])) {
           _flow->set(e, (*_lo)[e]);
-          (*_excess)[_g.target(e)] += (*_lo)[e];
-          (*_excess)[_g.source(e)] -= (*_lo)[e];
+          _excess->set(_g.target(e), (*_excess)[_g.target(e)] + (*_lo)[e]);
+          _excess->set(_g.source(e), (*_excess)[_g.source(e)] - (*_lo)[e]);
         } else {
           Value fc = -(*_excess)[_g.target(e)];
           _flow->set(e, fc);
-          (*_excess)[_g.target(e)] = 0;
-          (*_excess)[_g.source(e)] -= fc;
+          _excess->set(_g.target(e), 0);
+          _excess->set(_g.source(e), (*_excess)[_g.source(e)] - fc);
         }
       }
@@ -538,8 +538,8 @@
             if(!_tol.less(fc, exc)) {
               _flow->set(e, (*_flow)[e] + exc);
-              (*_excess)[v] += exc;
+              _excess->set(v, (*_excess)[v] + exc);
               if(!_level->active(v) && _tol.positive((*_excess)[v]))
                 _level->activate(v);
-              (*_excess)[act] = 0;
+              _excess->set(act,0);
               _level->deactivate(act);
               goto next_l;
@@ -547,5 +547,5 @@
             else {
               _flow->set(e, (*_up)[e]);
-              (*_excess)[v] += fc;
+              _excess->set(v, (*_excess)[v] + fc);
               if(!_level->active(v) && _tol.positive((*_excess)[v]))
                 _level->activate(v);
@@ -562,8 +562,8 @@
             if(!_tol.less(fc, exc)) {
               _flow->set(e, (*_flow)[e] - exc);
-              (*_excess)[v] += exc;
+              _excess->set(v, (*_excess)[v] + exc);
               if(!_level->active(v) && _tol.positive((*_excess)[v]))
                 _level->activate(v);
-              (*_excess)[act] = 0;
+              _excess->set(act,0);
               _level->deactivate(act);
               goto next_l;
@@ -571,5 +571,5 @@
             else {
               _flow->set(e, (*_lo)[e]);
-              (*_excess)[v] += fc;
+              _excess->set(v, (*_excess)[v] + fc);
               if(!_level->active(v) && _tol.positive((*_excess)[v]))
                 _level->activate(v);
@@ -580,5 +580,5 @@
         }
 
-        (*_excess)[act] = exc;
+        _excess->set(act, exc);
         if(!_tol.positive(exc)) _level->deactivate(act);
         else if(mlevel==_node_num) {
Index: lemon/clp.cc
===================================================================
--- lemon/clp.cc	(revision 568)
+++ lemon/clp.cc	(revision 528)
@@ -25,5 +25,5 @@
     _prob = new ClpSimplex();
     _init_temporals();
-    messageLevel(MESSAGE_NOTHING);
+    messageLevel(MESSAGE_NO_OUTPUT);
   }
 
@@ -33,5 +33,5 @@
     cols = other.cols;
     _init_temporals();
-    messageLevel(MESSAGE_NOTHING);
+    messageLevel(MESSAGE_NO_OUTPUT);
   }
 
@@ -431,22 +431,6 @@
   }
 
-  void ClpLp::_messageLevel(MessageLevel level) {
-    switch (level) {
-    case MESSAGE_NOTHING:
-      _prob->setLogLevel(0);
-      break;
-    case MESSAGE_ERROR:
-      _prob->setLogLevel(1);
-      break;
-    case MESSAGE_WARNING:
-      _prob->setLogLevel(2);
-      break;
-    case MESSAGE_NORMAL:
-      _prob->setLogLevel(3);
-      break;
-    case MESSAGE_VERBOSE:
-      _prob->setLogLevel(4);
-      break;
-    }
+  void ClpLp::messageLevel(MessageLevel m) {
+    _prob->setLogLevel(static_cast<int>(m));
   }
 
Index: lemon/clp.h
===================================================================
--- lemon/clp.h	(revision 568)
+++ lemon/clp.h	(revision 528)
@@ -137,6 +137,4 @@
     virtual void _clear();
 
-    virtual void _messageLevel(MessageLevel);
-    
   public:
 
@@ -156,4 +154,24 @@
     int clpCol(Col c) const { return cols(id(c)); }
 
+    ///Enum for \c messageLevel() parameter
+    enum MessageLevel {
+      /// no output (default value)
+      MESSAGE_NO_OUTPUT = 0,
+      /// print final solution
+      MESSAGE_FINAL_SOLUTION = 1,
+      /// print factorization
+      MESSAGE_FACTORIZATION = 2,
+      /// normal output
+      MESSAGE_NORMAL_OUTPUT = 3,
+      /// verbose output
+      MESSAGE_VERBOSE_OUTPUT = 4
+    };
+    ///Set the verbosity of the messages
+
+    ///Set the verbosity of the messages
+    ///
+    ///\param m is the level of the messages output by the solver routines.
+    void messageLevel(MessageLevel m);
+
   };
 
Index: lemon/concepts/digraph.h
===================================================================
--- lemon/concepts/digraph.h	(revision 572)
+++ lemon/concepts/digraph.h	(revision 514)
@@ -422,9 +422,10 @@
       Node oppositeNode(const Node&, const Arc&) const { return INVALID; }
 
-      /// \brief Reference map of the nodes to type \c T.
-      ///
-      /// Reference map of the nodes to type \c T.
+      /// \brief Read write map of the nodes to type \c T.
+      ///
+      /// ReadWrite map of the nodes to type \c T.
+      /// \sa Reference
       template<class T>
-      class NodeMap : public ReferenceMap<Node, T, T&, const T&> {
+      class NodeMap : public ReadWriteMap< Node, T > {
       public:
 
@@ -436,6 +437,5 @@
       private:
         ///Copy constructor
-        NodeMap(const NodeMap& nm) : 
-          ReferenceMap<Node, T, T&, const T&>(nm) { }
+        NodeMap(const NodeMap& nm) : ReadWriteMap< Node, T >(nm) { }
         ///Assignment operator
         template <typename CMap>
@@ -446,9 +446,10 @@
       };
 
-      /// \brief Reference map of the arcs to type \c T.
+      /// \brief Read write map of the arcs to type \c T.
       ///
       /// Reference map of the arcs to type \c T.
+      /// \sa Reference
       template<class T>
-      class ArcMap : public ReferenceMap<Arc, T, T&, const T&> {
+      class ArcMap : public ReadWriteMap<Arc,T> {
       public:
 
@@ -459,6 +460,5 @@
       private:
         ///Copy constructor
-        ArcMap(const ArcMap& em) :
-          ReferenceMap<Arc, T, T&, const T&>(em) { }
+        ArcMap(const ArcMap& em) : ReadWriteMap<Arc,T>(em) { }
         ///Assignment operator
         template <typename CMap>
@@ -472,5 +472,4 @@
       struct Constraints {
         void constraints() {
-          checkConcept<BaseDigraphComponent, _Digraph>();
           checkConcept<IterableDigraphComponent<>, _Digraph>();
           checkConcept<IDableDigraphComponent<>, _Digraph>();
Index: lemon/concepts/graph.h
===================================================================
--- lemon/concepts/graph.h	(revision 572)
+++ lemon/concepts/graph.h	(revision 550)
@@ -498,9 +498,10 @@
       };
 
-      /// \brief Reference map of the nodes to type \c T.
-      ///
-      /// Reference map of the nodes to type \c T.
+      /// \brief Read write map of the nodes to type \c T.
+      ///
+      /// ReadWrite map of the nodes to type \c T.
+      /// \sa Reference
       template<class T>
-      class NodeMap : public ReferenceMap<Node, T, T&, const T&>
+      class NodeMap : public ReadWriteMap< Node, T >
       {
       public:
@@ -513,6 +514,5 @@
       private:
         ///Copy constructor
-        NodeMap(const NodeMap& nm) :
-          ReferenceMap<Node, T, T&, const T&>(nm) { }
+        NodeMap(const NodeMap& nm) : ReadWriteMap< Node, T >(nm) { }
         ///Assignment operator
         template <typename CMap>
@@ -523,9 +523,10 @@
       };
 
-      /// \brief Reference map of the arcs to type \c T.
-      ///
-      /// Reference map of the arcs to type \c T.
+      /// \brief Read write map of the directed arcs to type \c T.
+      ///
+      /// Reference map of the directed arcs to type \c T.
+      /// \sa Reference
       template<class T>
-      class ArcMap : public ReferenceMap<Arc, T, T&, const T&>
+      class ArcMap : public ReadWriteMap<Arc,T>
       {
       public:
@@ -537,6 +538,5 @@
       private:
         ///Copy constructor
-        ArcMap(const ArcMap& em) :
-          ReferenceMap<Arc, T, T&, const T&>(em) { }
+        ArcMap(const ArcMap& em) : ReadWriteMap<Arc,T>(em) { }
         ///Assignment operator
         template <typename CMap>
@@ -547,9 +547,10 @@
       };
 
-      /// Reference map of the edges to type \c T.
-
-      /// Reference map of the edges to type \c T.
+      /// Read write map of the edges to type \c T.
+
+      /// Reference map of the arcs to type \c T.
+      /// \sa Reference
       template<class T>
-      class EdgeMap : public ReferenceMap<Edge, T, T&, const T&>
+      class EdgeMap : public ReadWriteMap<Edge,T>
       {
       public:
@@ -561,6 +562,5 @@
       private:
         ///Copy constructor
-        EdgeMap(const EdgeMap& em) :
-          ReferenceMap<Edge, T, T&, const T&>(em) {}
+        EdgeMap(const EdgeMap& em) : ReadWriteMap<Edge,T>(em) {}
         ///Assignment operator
         template <typename CMap>
@@ -749,5 +749,4 @@
       struct Constraints {
         void constraints() {
-          checkConcept<BaseGraphComponent, _Graph>();
           checkConcept<IterableGraphComponent<>, _Graph>();
           checkConcept<IDableGraphComponent<>, _Graph>();
Index: lemon/concepts/graph_components.h
===================================================================
--- lemon/concepts/graph_components.h	(revision 576)
+++ lemon/concepts/graph_components.h	(revision 550)
@@ -32,14 +32,15 @@
   namespace concepts {
 
-    /// \brief Concept class for \c Node, \c Arc and \c Edge types.
-    ///
-    /// This class describes the concept of \c Node, \c Arc and \c Edge
-    /// subtypes of digraph and graph types.
+    /// \brief Skeleton class for graph Node and Arc types
+    ///
+    /// This class describes the interface of Node and Arc (and Edge
+    /// in undirected graphs) subtypes of graph types.
     ///
     /// \note This class is a template class so that we can use it to
-    /// create graph skeleton classes. The reason for this is that \c Node
-    /// and \c Arc (or \c Edge) types should \e not derive from the same 
-    /// base class. For \c Node you should instantiate it with character
-    /// \c 'n', for \c Arc with \c 'a' and for \c Edge with \c 'e'.
+    /// create graph skeleton classes. The reason for this is than Node
+    /// and Arc types should \em not derive from the same base class.
+    /// For Node you should instantiate it with character 'n' and for Arc
+    /// with 'a'.
+
 #ifndef DOXYGEN
     template <char sel = '0'>
@@ -49,47 +50,43 @@
       /// \brief Default constructor.
       ///
-      /// Default constructor.
       /// \warning The default constructor is not required to set
       /// the item to some well-defined value. So you should consider it
       /// as uninitialized.
       GraphItem() {}
-
       /// \brief Copy constructor.
       ///
       /// Copy constructor.
+      ///
       GraphItem(const GraphItem &) {}
-
-      /// \brief Constructor for conversion from \c INVALID.
-      ///
-      /// Constructor for conversion from \c INVALID.
-      /// It initializes the item to be invalid.
+      /// \brief Invalid constructor \& conversion.
+      ///
+      /// This constructor initializes the item to be invalid.
       /// \sa Invalid for more details.
       GraphItem(Invalid) {}
-
-      /// \brief Assignment operator.
-      ///
-      /// Assignment operator for the item.
-      GraphItem& operator=(const GraphItem&) { return *this; }
-
+      /// \brief Assign operator for nodes.
+      ///
+      /// The nodes are assignable.
+      ///
+      GraphItem& operator=(GraphItem const&) { return *this; }
       /// \brief Equality operator.
       ///
-      /// Equality operator.
-      bool operator==(const GraphItem&) const { return false; }
-
+      /// Two iterators are equal if and only if they represents the
+      /// same node in the graph or both are invalid.
+      bool operator==(GraphItem) const { return false; }
       /// \brief Inequality operator.
       ///
-      /// Inequality operator.
-      bool operator!=(const GraphItem&) const { return false; }
-
-      /// \brief Ordering operator.
-      ///
-      /// This operator defines an ordering of the items.
-      /// It makes possible to use graph item types as key types in 
-      /// associative containers (e.g. \c std::map).
+      /// \sa operator==(const Node& n)
+      ///
+      bool operator!=(GraphItem) const { return false; }
+
+      /// \brief Artificial ordering operator.
+      ///
+      /// To allow the use of graph descriptors as key type in std::map or
+      /// similar associative container we require this.
       ///
       /// \note This operator only have to define some strict ordering of
       /// the items; this order has nothing to do with the iteration
       /// ordering of the items.
-      bool operator<(const GraphItem&) const { return false; }
+      bool operator<(GraphItem) const { return false; }
 
       template<typename _GraphItem>
@@ -103,4 +100,5 @@
 
           bool b;
+          //          b = (ia == ib) && (ia != ib) && (ia < ib);
           b = (ia == ib) && (ia != ib);
           b = (ia == INVALID) && (ib != INVALID);
@@ -113,10 +111,11 @@
     };
 
-    /// \brief Base skeleton class for directed graphs.
-    ///
-    /// This class describes the base interface of directed graph types.
-    /// All digraph %concepts have to conform to this class.
-    /// It just provides types for nodes and arcs and functions 
-    /// to get the source and the target nodes of arcs.
+    /// \brief An empty base directed graph class.
+    ///
+    /// This class provides the minimal set of features needed for a
+    /// directed graph structure. All digraph concepts have to
+    /// conform to this base directed graph. It just provides types
+    /// for nodes and arcs and functions to get the source and the
+    /// target of the arcs.
     class BaseDigraphComponent {
     public:
@@ -126,25 +125,29 @@
       /// \brief Node class of the digraph.
       ///
-      /// This class represents the nodes of the digraph.
+      /// This class represents the Nodes of the digraph.
+      ///
       typedef GraphItem<'n'> Node;
 
       /// \brief Arc class of the digraph.
       ///
-      /// This class represents the arcs of the digraph.
-      typedef GraphItem<'a'> Arc;
-
-      /// \brief Return the source node of an arc.
-      ///
-      /// This function returns the source node of an arc.
-      Node source(const Arc&) const { return INVALID; }
-
-      /// \brief Return the target node of an arc.
-      ///
-      /// This function returns the target node of an arc.
-      Node target(const Arc&) const { return INVALID; }
-
-      /// \brief Return the opposite node on the given arc.
-      ///
-      /// This function returns the opposite node on the given arc.
+      /// This class represents the Arcs of the digraph.
+      ///
+      typedef GraphItem<'e'> Arc;
+
+      /// \brief Gives back the target node of an arc.
+      ///
+      /// Gives back the target node of an arc.
+      ///
+      Node target(const Arc&) const { return INVALID;}
+
+      /// \brief Gives back the source node of an arc.
+      ///
+      /// Gives back the source node of an arc.
+      ///
+      Node source(const Arc&) const { return INVALID;}
+
+      /// \brief Gives back the opposite node on the given arc.
+      ///
+      /// Gives back the opposite node on the given arc.
       Node oppositeNode(const Node&, const Arc&) const {
         return INVALID;
@@ -172,55 +175,50 @@
     };
 
-    /// \brief Base skeleton class for undirected graphs.
-    ///
-    /// This class describes the base interface of undirected graph types.
-    /// All graph %concepts have to conform to this class.
-    /// It extends the interface of \ref BaseDigraphComponent with an
-    /// \c Edge type and functions to get the end nodes of edges,
-    /// to convert from arcs to edges and to get both direction of edges.
+    /// \brief An empty base undirected graph class.
+    ///
+    /// This class provides the minimal set of features needed for an
+    /// undirected graph structure. All undirected graph concepts have
+    /// to conform to this base graph. It just provides types for
+    /// nodes, arcs and edges and functions to get the
+    /// source and the target of the arcs and edges,
+    /// conversion from arcs to edges and function to get
+    /// both direction of the edges.
     class BaseGraphComponent : public BaseDigraphComponent {
     public:
       typedef BaseDigraphComponent::Node Node;
       typedef BaseDigraphComponent::Arc Arc;
-
-      /// \brief Undirected edge class of the graph.
-      ///
-      /// This class represents the undirected edges of the graph.
-      /// Undirected graphs can be used as directed graphs, each edge is
-      /// represented by two opposite directed arcs.
-      class Edge : public GraphItem<'e'> {
+      /// \brief Undirected arc class of the graph.
+      ///
+      /// This class represents the edges of the graph.
+      /// The undirected graphs can be used as a directed graph which
+      /// for each arc contains the opposite arc too so the graph is
+      /// bidirected. The edge represents two opposite
+      /// directed arcs.
+      class Edge : public GraphItem<'u'> {
       public:
-        typedef GraphItem<'e'> Parent;
-
+        typedef GraphItem<'u'> Parent;
         /// \brief Default constructor.
         ///
-        /// Default constructor.
         /// \warning The default constructor is not required to set
         /// the item to some well-defined value. So you should consider it
         /// as uninitialized.
         Edge() {}
-
         /// \brief Copy constructor.
         ///
         /// Copy constructor.
+        ///
         Edge(const Edge &) : Parent() {}
-
-        /// \brief Constructor for conversion from \c INVALID.
-        ///
-        /// Constructor for conversion from \c INVALID.
-        /// It initializes the item to be invalid.
+        /// \brief Invalid constructor \& conversion.
+        ///
+        /// This constructor initializes the item to be invalid.
         /// \sa Invalid for more details.
         Edge(Invalid) {}
-
-        /// \brief Constructor for conversion from an arc.
-        ///
-        /// Constructor for conversion from an arc.
+        /// \brief Converter from arc to edge.
+        ///
         /// Besides the core graph item functionality each arc should
         /// be convertible to the represented edge.
         Edge(const Arc&) {}
-
-        /// \brief Assign an arc to an edge.
-        ///
-        /// This function assigns an arc to an edge.
+        /// \brief Assign arc to edge.
+        ///
         /// Besides the core graph item functionality each arc should
         /// be convertible to the represented edge.
@@ -228,27 +226,5 @@
       };
 
-      /// \brief Return one end node of an edge.
-      ///
-      /// This function returns one end node of an edge.
-      Node u(const Edge&) const { return INVALID; }
-
-      /// \brief Return the other end node of an edge.
-      ///
-      /// This function returns the other end node of an edge.
-      Node v(const Edge&) const { return INVALID; }
-
-      /// \brief Return a directed arc related to an edge.
-      ///
-      /// This function returns a directed arc from its direction and the
-      /// represented edge.
-      Arc direct(const Edge&, bool) const { return INVALID; }
-
-      /// \brief Return a directed arc related to an edge.
-      ///
-      /// This function returns a directed arc from its source node and the
-      /// represented edge.
-      Arc direct(const Edge&, const Node&) const { return INVALID; }
-
-      /// \brief Return the direction of the arc.
+      /// \brief Returns the direction of the arc.
       ///
       /// Returns the direction of the arc. Each arc represents an
@@ -257,9 +233,31 @@
       bool direction(const Arc&) const { return true; }
 
-      /// \brief Return the opposite arc.
-      ///
-      /// This function returns the opposite arc, i.e. the arc representing
-      /// the same edge and has opposite direction.
-      Arc oppositeArc(const Arc&) const { return INVALID; }
+      /// \brief Returns the directed arc.
+      ///
+      /// Returns the directed arc from its direction and the
+      /// represented edge.
+      Arc direct(const Edge&, bool) const { return INVALID;}
+
+      /// \brief Returns the directed arc.
+      ///
+      /// Returns the directed arc from its source and the
+      /// represented edge.
+      Arc direct(const Edge&, const Node&) const { return INVALID;}
+
+      /// \brief Returns the opposite arc.
+      ///
+      /// Returns the opposite arc. It is the arc representing the
+      /// same edge and has opposite direction.
+      Arc oppositeArc(const Arc&) const { return INVALID;}
+
+      /// \brief Gives back one ending of an edge.
+      ///
+      /// Gives back one ending of an edge.
+      Node u(const Edge&) const { return INVALID;}
+
+      /// \brief Gives back the other ending of an edge.
+      ///
+      /// Gives back the other ending of an edge.
+      Node v(const Edge&) const { return INVALID;}
 
       template <typename _Graph>
@@ -271,5 +269,5 @@
         void constraints() {
           checkConcept<BaseDigraphComponent, _Graph>();
-          checkConcept<GraphItem<'e'>, Edge>();
+          checkConcept<GraphItem<'u'>, Edge>();
           {
             Node n;
@@ -279,5 +277,4 @@
             n = graph.v(ue);
             e = graph.direct(ue, true);
-            e = graph.direct(ue, false);
             e = graph.direct(ue, n);
             e = graph.oppositeArc(e);
@@ -293,10 +290,10 @@
     };
 
-    /// \brief Skeleton class for \e idable directed graphs.
-    ///
-    /// This class describes the interface of \e idable directed graphs.
-    /// It extends \ref BaseDigraphComponent with the core ID functions.
-    /// The ids of the items must be unique and immutable.
-    /// This concept is part of the Digraph concept.
+    /// \brief An empty idable base digraph class.
+    ///
+    /// This class provides beside the core digraph features
+    /// core id functions for the digraph structure.
+    /// The most of the base digraphs should conform to this concept.
+    /// The id's are unique and immutable.
     template <typename BAS = BaseDigraphComponent>
     class IDableDigraphComponent : public BAS {
@@ -307,41 +304,43 @@
       typedef typename Base::Arc Arc;
 
-      /// \brief Return a unique integer id for the given node.
-      ///
-      /// This function returns a unique integer id for the given node.
-      int id(const Node&) const { return -1; }
-
-      /// \brief Return the node by its unique id.
-      ///
-      /// This function returns the node by its unique id.
-      /// If the digraph does not contain a node with the given id,
-      /// then the result of the function is undefined.
-      Node nodeFromId(int) const { return INVALID; }
-
-      /// \brief Return a unique integer id for the given arc.
-      ///
-      /// This function returns a unique integer id for the given arc.
-      int id(const Arc&) const { return -1; }
-
-      /// \brief Return the arc by its unique id.
-      ///
-      /// This function returns the arc by its unique id.
-      /// If the digraph does not contain an arc with the given id,
-      /// then the result of the function is undefined.
-      Arc arcFromId(int) const { return INVALID; }
-
-      /// \brief Return an integer greater or equal to the maximum
-      /// node id.
-      ///
-      /// This function returns an integer greater or equal to the
-      /// maximum node id.
-      int maxNodeId() const { return -1; }
-
-      /// \brief Return an integer greater or equal to the maximum
-      /// arc id.
-      ///
-      /// This function returns an integer greater or equal to the
-      /// maximum arc id.
-      int maxArcId() const { return -1; }
+      /// \brief Gives back an unique integer id for the Node.
+      ///
+      /// Gives back an unique integer id for the Node.
+      ///
+      int id(const Node&) const { return -1;}
+
+      /// \brief Gives back the node by the unique id.
+      ///
+      /// Gives back the node by the unique id.
+      /// If the digraph does not contain node with the given id
+      /// then the result of the function is undetermined.
+      Node nodeFromId(int) const { return INVALID;}
+
+      /// \brief Gives back an unique integer id for the Arc.
+      ///
+      /// Gives back an unique integer id for the Arc.
+      ///
+      int id(const Arc&) const { return -1;}
+
+      /// \brief Gives back the arc by the unique id.
+      ///
+      /// Gives back the arc by the unique id.
+      /// If the digraph does not contain arc with the given id
+      /// then the result of the function is undetermined.
+      Arc arcFromId(int) const { return INVALID;}
+
+      /// \brief Gives back an integer greater or equal to the maximum
+      /// Node id.
+      ///
+      /// Gives back an integer greater or equal to the maximum Node
+      /// id.
+      int maxNodeId() const { return -1;}
+
+      /// \brief Gives back an integer greater or equal to the maximum
+      /// Arc id.
+      ///
+      /// Gives back an integer greater or equal to the maximum Arc
+      /// id.
+      int maxArcId() const { return -1;}
 
       template <typename _Digraph>
@@ -369,11 +368,10 @@
     };
 
-    /// \brief Skeleton class for \e idable undirected graphs.
-    ///
-    /// This class describes the interface of \e idable undirected
-    /// graphs. It extends \ref IDableDigraphComponent with the core ID
-    /// functions of undirected graphs.
-    /// The ids of the items must be unique and immutable.
-    /// This concept is part of the Graph concept.
+    /// \brief An empty idable base undirected graph class.
+    ///
+    /// This class provides beside the core undirected graph features
+    /// core id functions for the undirected graph structure.  The
+    /// most of the base undirected graphs should conform to this
+    /// concept.  The id's are unique and immutable.
     template <typename BAS = BaseGraphComponent>
     class IDableGraphComponent : public IDableDigraphComponent<BAS> {
@@ -385,22 +383,23 @@
       using IDableDigraphComponent<Base>::id;
 
-      /// \brief Return a unique integer id for the given edge.
-      ///
-      /// This function returns a unique integer id for the given edge.
-      int id(const Edge&) const { return -1; }
-
-      /// \brief Return the edge by its unique id.
-      ///
-      /// This function returns the edge by its unique id.
-      /// If the graph does not contain an edge with the given id,
-      /// then the result of the function is undefined.
-      Edge edgeFromId(int) const { return INVALID; }
-
-      /// \brief Return an integer greater or equal to the maximum
-      /// edge id.
-      ///
-      /// This function returns an integer greater or equal to the
-      /// maximum edge id.
-      int maxEdgeId() const { return -1; }
+      /// \brief Gives back an unique integer id for the Edge.
+      ///
+      /// Gives back an unique integer id for the Edge.
+      ///
+      int id(const Edge&) const { return -1;}
+
+      /// \brief Gives back the edge by the unique id.
+      ///
+      /// Gives back the edge by the unique id.  If the
+      /// graph does not contain arc with the given id then the
+      /// result of the function is undetermined.
+      Edge edgeFromId(int) const { return INVALID;}
+
+      /// \brief Gives back an integer greater or equal to the maximum
+      /// Edge id.
+      ///
+      /// Gives back an integer greater or equal to the maximum Edge
+      /// id.
+      int maxEdgeId() const { return -1;}
 
       template <typename _Graph>
@@ -408,4 +407,5 @@
 
         void constraints() {
+          checkConcept<Base, _Graph >();
           checkConcept<IDableDigraphComponent<Base>, _Graph >();
           typename _Graph::Edge edge;
@@ -421,8 +421,8 @@
     };
 
-    /// \brief Concept class for \c NodeIt, \c ArcIt and \c EdgeIt types.
-    ///
-    /// This class describes the concept of \c NodeIt, \c ArcIt and 
-    /// \c EdgeIt subtypes of digraph and graph types.
+    /// \brief Skeleton class for graph NodeIt and ArcIt
+    ///
+    /// Skeleton class for graph NodeIt and ArcIt.
+    ///
     template <typename GR, typename Item>
     class GraphItemIt : public Item {
@@ -430,50 +430,41 @@
       /// \brief Default constructor.
       ///
-      /// Default constructor.
-      /// \warning The default constructor is not required to set
-      /// the iterator to some well-defined value. So you should consider it
-      /// as uninitialized.
+      /// @warning The default constructor sets the iterator
+      /// to an undefined value.
       GraphItemIt() {}
-
       /// \brief Copy constructor.
       ///
       /// Copy constructor.
-      GraphItemIt(const GraphItemIt& it) : Item(it) {}
-
-      /// \brief Constructor that sets the iterator to the first item.
-      ///
-      /// Constructor that sets the iterator to the first item.
+      ///
+      GraphItemIt(const GraphItemIt& ) {}
+      /// \brief Sets the iterator to the first item.
+      ///
+      /// Sets the iterator to the first item of \c the graph.
+      ///
       explicit GraphItemIt(const GR&) {}
-
-      /// \brief Constructor for conversion from \c INVALID.
-      ///
-      /// Constructor for conversion from \c INVALID.
-      /// It initializes the iterator to be invalid.
+      /// \brief Invalid constructor \& conversion.
+      ///
+      /// This constructor initializes the item to be invalid.
       /// \sa Invalid for more details.
       GraphItemIt(Invalid) {}
-
-      /// \brief Assignment operator.
-      ///
-      /// Assignment operator for the iterator.
+      /// \brief Assign operator for items.
+      ///
+      /// The items are assignable.
+      ///
       GraphItemIt& operator=(const GraphItemIt&) { return *this; }
-
-      /// \brief Increment the iterator.
-      ///
-      /// This operator increments the iterator, i.e. assigns it to the
-      /// next item.
+      /// \brief Next item.
+      ///
+      /// Assign the iterator to the next item.
+      ///
       GraphItemIt& operator++() { return *this; }
- 
       /// \brief Equality operator
       ///
-      /// Equality operator.
       /// Two iterators are equal if and only if they point to the
       /// same object or both are invalid.
       bool operator==(const GraphItemIt&) const { return true;}
-
       /// \brief Inequality operator
       ///
-      /// Inequality operator.
-      /// Two iterators are equal if and only if they point to the
-      /// same object or both are invalid.
+      /// \sa operator==(Node n)
+      ///
       bool operator!=(const GraphItemIt&) const { return true;}
 
@@ -481,9 +472,6 @@
       struct Constraints {
         void constraints() {
-          checkConcept<GraphItem<>, _GraphItemIt>();
           _GraphItemIt it1(g);
           _GraphItemIt it2;
-          _GraphItemIt it3 = it1;
-          _GraphItemIt it4 = INVALID;
 
           it2 = ++it1;
@@ -494,18 +482,14 @@
           bi = it2;
         }
-        const GR& g;
-      };
-    };
-
-    /// \brief Concept class for \c InArcIt, \c OutArcIt and 
-    /// \c IncEdgeIt types.
-    ///
-    /// This class describes the concept of \c InArcIt, \c OutArcIt 
-    /// and \c IncEdgeIt subtypes of digraph and graph types.
-    ///
-    /// \note Since these iterator classes do not inherit from the same
-    /// base class, there is an additional template parameter (selector)
-    /// \c sel. For \c InArcIt you should instantiate it with character 
-    /// \c 'i', for \c OutArcIt with \c 'o' and for \c IncEdgeIt with \c 'e'.
+        GR& g;
+      };
+    };
+
+    /// \brief Skeleton class for graph InArcIt and OutArcIt
+    ///
+    /// \note Because InArcIt and OutArcIt may not inherit from the same
+    /// base class, the \c sel is a additional template parameter (selector).
+    /// For InArcIt you should instantiate it with character 'i' and for
+    /// OutArcIt with 'o'.
     template <typename GR,
               typename Item = typename GR::Arc,
@@ -516,43 +500,37 @@
       /// \brief Default constructor.
       ///
-      /// Default constructor.
-      /// \warning The default constructor is not required to set
-      /// the iterator to some well-defined value. So you should consider it
-      /// as uninitialized.
+      /// @warning The default constructor sets the iterator
+      /// to an undefined value.
       GraphIncIt() {}
-
       /// \brief Copy constructor.
       ///
       /// Copy constructor.
-      GraphIncIt(const GraphIncIt& it) : Item(it) {}
-
-      /// \brief Constructor that sets the iterator to the first 
-      /// incoming or outgoing arc.
-      ///
-      /// Constructor that sets the iterator to the first arc 
-      /// incoming to or outgoing from the given node.
+      ///
+      GraphIncIt(GraphIncIt const& gi) : Item(gi) {}
+      /// \brief Sets the iterator to the first arc incoming into or outgoing
+      /// from the node.
+      ///
+      /// Sets the iterator to the first arc incoming into or outgoing
+      /// from the node.
+      ///
       explicit GraphIncIt(const GR&, const Base&) {}
-
-      /// \brief Constructor for conversion from \c INVALID.
-      ///
-      /// Constructor for conversion from \c INVALID.
-      /// It initializes the iterator to be invalid.
+      /// \brief Invalid constructor \& conversion.
+      ///
+      /// This constructor initializes the item to be invalid.
       /// \sa Invalid for more details.
       GraphIncIt(Invalid) {}
-
-      /// \brief Assignment operator.
-      ///
-      /// Assignment operator for the iterator.
-      GraphIncIt& operator=(const GraphIncIt&) { return *this; }
-
-      /// \brief Increment the iterator.
-      ///
-      /// This operator increments the iterator, i.e. assigns it to the
-      /// next arc incoming to or outgoing from the given node.
+      /// \brief Assign operator for iterators.
+      ///
+      /// The iterators are assignable.
+      ///
+      GraphIncIt& operator=(GraphIncIt const&) { return *this; }
+      /// \brief Next item.
+      ///
+      /// Assign the iterator to the next item.
+      ///
       GraphIncIt& operator++() { return *this; }
 
       /// \brief Equality operator
       ///
-      /// Equality operator.
       /// Two iterators are equal if and only if they point to the
       /// same object or both are invalid.
@@ -561,7 +539,6 @@
       /// \brief Inequality operator
       ///
-      /// Inequality operator.
-      /// Two iterators are equal if and only if they point to the
-      /// same object or both are invalid.
+      /// \sa operator==(Node n)
+      ///
       bool operator!=(const GraphIncIt&) const { return true;}
 
@@ -572,6 +549,4 @@
           _GraphIncIt it1(graph, node);
           _GraphIncIt it2;
-          _GraphIncIt it3 = it1;
-          _GraphIncIt it4 = INVALID;
 
           it2 = ++it1;
@@ -580,15 +555,19 @@
           Item e = it1;
           e = it2;
-        }
-        const Base& node;
-        const GR& graph;
-      };
-    };
-
-    /// \brief Skeleton class for iterable directed graphs.
-    ///
-    /// This class describes the interface of iterable directed
-    /// graphs. It extends \ref BaseDigraphComponent with the core
-    /// iterable interface.
+
+        }
+
+        Item arc;
+        Base node;
+        GR graph;
+        _GraphIncIt it;
+      };
+    };
+
+
+    /// \brief An empty iterable digraph class.
+    ///
+    /// This class provides beside the core digraph features
+    /// iterator based iterable interface for the digraph structure.
     /// This concept is part of the Digraph concept.
     template <typename BAS = BaseDigraphComponent>
@@ -603,59 +582,68 @@
       typedef IterableDigraphComponent Digraph;
 
-      /// \name Base Iteration
-      ///
-      /// This interface provides functions for iteration on digraph items.
+      /// \name Base iteration
+      ///
+      /// This interface provides functions for iteration on digraph items
       ///
       /// @{
 
-      /// \brief Return the first node.
-      ///
-      /// This function gives back the first node in the iteration order.
+      /// \brief Gives back the first node in the iterating order.
+      ///
+      /// Gives back the first node in the iterating order.
+      ///
       void first(Node&) const {}
 
-      /// \brief Return the next node.
-      ///
-      /// This function gives back the next node in the iteration order.
+      /// \brief Gives back the next node in the iterating order.
+      ///
+      /// Gives back the next node in the iterating order.
+      ///
       void next(Node&) const {}
 
-      /// \brief Return the first arc.
-      ///
-      /// This function gives back the first arc in the iteration order.
+      /// \brief Gives back the first arc in the iterating order.
+      ///
+      /// Gives back the first arc in the iterating order.
+      ///
       void first(Arc&) const {}
 
-      /// \brief Return the next arc.
-      ///
-      /// This function gives back the next arc in the iteration order.
+      /// \brief Gives back the next arc in the iterating order.
+      ///
+      /// Gives back the next arc in the iterating order.
+      ///
       void next(Arc&) const {}
 
-      /// \brief Return the first arc incomming to the given node.
-      ///
-      /// This function gives back the first arc incomming to the
+
+      /// \brief Gives back the first of the arcs point to the given
+      /// node.
+      ///
+      /// Gives back the first of the arcs point to the given node.
+      ///
+      void firstIn(Arc&, const Node&) const {}
+
+      /// \brief Gives back the next of the arcs points to the given
+      /// node.
+      ///
+      /// Gives back the next of the arcs points to the given node.
+      ///
+      void nextIn(Arc&) const {}
+
+      /// \brief Gives back the first of the arcs start from the
       /// given node.
-      void firstIn(Arc&, const Node&) const {}
-
-      /// \brief Return the next arc incomming to the given node.
-      ///
-      /// This function gives back the next arc incomming to the
-      /// given node.
-      void nextIn(Arc&) const {}
-
-      /// \brief Return the first arc outgoing form the given node.
-      ///
-      /// This function gives back the first arc outgoing form the
-      /// given node.
+      ///
+      /// Gives back the first of the arcs start from the given node.
+      ///
       void firstOut(Arc&, const Node&) const {}
 
-      /// \brief Return the next arc outgoing form the given node.
-      ///
-      /// This function gives back the next arc outgoing form the
-      /// given node.
+      /// \brief Gives back the next of the arcs start from the given
+      /// node.
+      ///
+      /// Gives back the next of the arcs start from the given node.
+      ///
       void nextOut(Arc&) const {}
 
       /// @}
 
-      /// \name Class Based Iteration
-      ///
-      /// This interface provides iterator classes for digraph items.
+      /// \name Class based iteration
+      ///
+      /// This interface provides functions for iteration on digraph items
       ///
       /// @{
@@ -667,7 +655,7 @@
       typedef GraphItemIt<Digraph, Node> NodeIt;
 
-      /// \brief This iterator goes through each arc.
-      ///
-      /// This iterator goes through each arc.
+      /// \brief This iterator goes through each node.
+      ///
+      /// This iterator goes through each node.
       ///
       typedef GraphItemIt<Digraph, Arc> ArcIt;
@@ -675,5 +663,5 @@
       /// \brief This iterator goes trough the incoming arcs of a node.
       ///
-      /// This iterator goes trough the \e incoming arcs of a certain node
+      /// This iterator goes trough the \e inccoming arcs of a certain node
       /// of a digraph.
       typedef GraphIncIt<Digraph, Arc, Node, 'i'> InArcIt;
@@ -687,24 +675,24 @@
       /// \brief The base node of the iterator.
       ///
-      /// This function gives back the base node of the iterator.
-      /// It is always the target node of the pointed arc.
+      /// Gives back the base node of the iterator.
+      /// It is always the target of the pointed arc.
       Node baseNode(const InArcIt&) const { return INVALID; }
 
       /// \brief The running node of the iterator.
       ///
-      /// This function gives back the running node of the iterator.
-      /// It is always the source node of the pointed arc.
+      /// Gives back the running node of the iterator.
+      /// It is always the source of the pointed arc.
       Node runningNode(const InArcIt&) const { return INVALID; }
 
       /// \brief The base node of the iterator.
       ///
-      /// This function gives back the base node of the iterator.
-      /// It is always the source node of the pointed arc.
+      /// Gives back the base node of the iterator.
+      /// It is always the source of the pointed arc.
       Node baseNode(const OutArcIt&) const { return INVALID; }
 
       /// \brief The running node of the iterator.
       ///
-      /// This function gives back the running node of the iterator.
-      /// It is always the target node of the pointed arc.
+      /// Gives back the running node of the iterator.
+      /// It is always the target of the pointed arc.
       Node runningNode(const OutArcIt&) const { return INVALID; }
 
@@ -748,10 +736,10 @@
 
             typename _Digraph::Node n;
-            const typename _Digraph::InArcIt iait(INVALID);
-            const typename _Digraph::OutArcIt oait(INVALID);
-            n = digraph.baseNode(iait);
-            n = digraph.runningNode(iait);
-            n = digraph.baseNode(oait);
-            n = digraph.runningNode(oait);
+            typename _Digraph::InArcIt ieit(INVALID);
+            typename _Digraph::OutArcIt oeit(INVALID);
+            n = digraph.baseNode(ieit);
+            n = digraph.runningNode(ieit);
+            n = digraph.baseNode(oeit);
+            n = digraph.runningNode(oeit);
             ignore_unused_variable_warning(n);
           }
@@ -759,12 +747,12 @@
 
         const _Digraph& digraph;
-      };
-    };
-
-    /// \brief Skeleton class for iterable undirected graphs.
-    ///
-    /// This class describes the interface of iterable undirected
-    /// graphs. It extends \ref IterableDigraphComponent with the core
-    /// iterable interface of undirected graphs.
+
+      };
+    };
+
+    /// \brief An empty iterable undirected graph class.
+    ///
+    /// This class provides beside the core graph features iterator
+    /// based iterable interface for the undirected graph structure.
     /// This concept is part of the Graph concept.
     template <typename BAS = BaseGraphComponent>
@@ -780,8 +768,7 @@
       typedef IterableGraphComponent Graph;
 
-      /// \name Base Iteration
-      ///
-      /// This interface provides functions for iteration on edges.
-      ///
+      /// \name Base iteration
+      ///
+      /// This interface provides functions for iteration on graph items
       /// @{
 
@@ -789,20 +776,26 @@
       using IterableDigraphComponent<Base>::next;
 
-      /// \brief Return the first edge.
-      ///
-      /// This function gives back the first edge in the iteration order.
+      /// \brief Gives back the first edge in the iterating
+      /// order.
+      ///
+      /// Gives back the first edge in the iterating order.
+      ///
       void first(Edge&) const {}
 
-      /// \brief Return the next edge.
-      ///
-      /// This function gives back the next edge in the iteration order.
+      /// \brief Gives back the next edge in the iterating
+      /// order.
+      ///
+      /// Gives back the next edge in the iterating order.
+      ///
       void next(Edge&) const {}
 
-      /// \brief Return the first edge incident to the given node.
-      ///
-      /// This function gives back the first edge incident to the given 
-      /// node. The bool parameter gives back the direction for which the
-      /// source node of the directed arc representing the edge is the 
+
+      /// \brief Gives back the first of the edges from the
       /// given node.
+      ///
+      /// Gives back the first of the edges from the given
+      /// node. The bool parameter gives back that direction which
+      /// gives a good direction of the edge so the source of the
+      /// directed arc is the given node.
       void firstInc(Edge&, bool&, const Node&) const {}
 
@@ -810,6 +803,7 @@
       /// given node.
       ///
-      /// This function gives back the next edge incident to the given 
-      /// node. The bool parameter should be used as \c firstInc() use it.
+      /// Gives back the next of the edges from the given
+      /// node. The bool parameter should be used as the \c firstInc()
+      /// use it.
       void nextInc(Edge&, bool&) const {}
 
@@ -819,30 +813,28 @@
       /// @}
 
-      /// \name Class Based Iteration
-      ///
-      /// This interface provides iterator classes for edges.
+      /// \name Class based iteration
+      ///
+      /// This interface provides functions for iteration on graph items
       ///
       /// @{
 
-      /// \brief This iterator goes through each edge.
-      ///
-      /// This iterator goes through each edge.
+      /// \brief This iterator goes through each node.
+      ///
+      /// This iterator goes through each node.
       typedef GraphItemIt<Graph, Edge> EdgeIt;
-
-      /// \brief This iterator goes trough the incident edges of a
+      /// \brief This iterator goes trough the incident arcs of a
       /// node.
       ///
-      /// This iterator goes trough the incident edges of a certain
+      /// This iterator goes trough the incident arcs of a certain
       /// node of a graph.
-      typedef GraphIncIt<Graph, Edge, Node, 'e'> IncEdgeIt;
-
+      typedef GraphIncIt<Graph, Edge, Node, 'u'> IncEdgeIt;
       /// \brief The base node of the iterator.
       ///
-      /// This function gives back the base node of the iterator.
+      /// Gives back the base node of the iterator.
       Node baseNode(const IncEdgeIt&) const { return INVALID; }
 
       /// \brief The running node of the iterator.
       ///
-      /// This function gives back the running node of the iterator.
+      /// Gives back the running node of the iterator.
       Node runningNode(const IncEdgeIt&) const { return INVALID; }
 
@@ -873,10 +865,10 @@
               typename _Graph::EdgeIt >();
             checkConcept<GraphIncIt<_Graph, typename _Graph::Edge,
-              typename _Graph::Node, 'e'>, typename _Graph::IncEdgeIt>();
+              typename _Graph::Node, 'u'>, typename _Graph::IncEdgeIt>();
 
             typename _Graph::Node n;
-            const typename _Graph::IncEdgeIt ieit(INVALID);
-            n = graph.baseNode(ieit);
-            n = graph.runningNode(ieit);
+            typename _Graph::IncEdgeIt ueit(INVALID);
+            n = graph.baseNode(ueit);
+            n = graph.runningNode(ueit);
           }
         }
@@ -886,12 +878,11 @@
     };
 
-    /// \brief Skeleton class for alterable directed graphs.
-    ///
-    /// This class describes the interface of alterable directed
-    /// graphs. It extends \ref BaseDigraphComponent with the alteration
-    /// notifier interface. It implements
+    /// \brief An empty alteration notifier digraph class.
+    ///
+    /// This class provides beside the core digraph features alteration
+    /// notifier interface for the digraph structure.  This implements
     /// an observer-notifier pattern for each digraph item. More
     /// obsevers can be registered into the notifier and whenever an
-    /// alteration occured in the digraph all the observers will be
+    /// alteration occured in the digraph all the observers will
     /// notified about it.
     template <typename BAS = BaseDigraphComponent>
@@ -904,21 +895,21 @@
 
 
-      /// Node alteration notifier class.
+      /// The node observer registry.
       typedef AlterationNotifier<AlterableDigraphComponent, Node>
       NodeNotifier;
-      /// Arc alteration notifier class.
+      /// The arc observer registry.
       typedef AlterationNotifier<AlterableDigraphComponent, Arc>
       ArcNotifier;
 
-      /// \brief Return the node alteration notifier.
-      ///
-      /// This function gives back the node alteration notifier.
+      /// \brief Gives back the node alteration notifier.
+      ///
+      /// Gives back the node alteration notifier.
       NodeNotifier& notifier(Node) const {
-         return NodeNotifier();
+        return NodeNotifier();
       }
 
-      /// \brief Return the arc alteration notifier.
-      ///
-      /// This function gives back the arc alteration notifier.
+      /// \brief Gives back the arc alteration notifier.
+      ///
+      /// Gives back the arc alteration notifier.
       ArcNotifier& notifier(Arc) const {
         return ArcNotifier();
@@ -940,15 +931,16 @@
 
         const _Digraph& digraph;
-      };
-    };
-
-    /// \brief Skeleton class for alterable undirected graphs.
-    ///
-    /// This class describes the interface of alterable undirected
-    /// graphs. It extends \ref AlterableDigraphComponent with the alteration
-    /// notifier interface of undirected graphs. It implements
-    /// an observer-notifier pattern for the edges. More
+
+      };
+
+    };
+
+    /// \brief An empty alteration notifier undirected graph class.
+    ///
+    /// This class provides beside the core graph features alteration
+    /// notifier interface for the graph structure.  This implements
+    /// an observer-notifier pattern for each graph item. More
     /// obsevers can be registered into the notifier and whenever an
-    /// alteration occured in the graph all the observers will be
+    /// alteration occured in the graph all the observers will
     /// notified about it.
     template <typename BAS = BaseGraphComponent>
@@ -960,11 +952,11 @@
 
 
-      /// Edge alteration notifier class.
+      /// The arc observer registry.
       typedef AlterationNotifier<AlterableGraphComponent, Edge>
       EdgeNotifier;
 
-      /// \brief Return the edge alteration notifier.
-      ///
-      /// This function gives back the edge alteration notifier.
+      /// \brief Gives back the arc alteration notifier.
+      ///
+      /// Gives back the arc alteration notifier.
       EdgeNotifier& notifier(Edge) const {
         return EdgeNotifier();
@@ -974,5 +966,5 @@
       struct Constraints {
         void constraints() {
-          checkConcept<AlterableDigraphComponent<Base>, _Graph>();
+          checkConcept<AlterableGraphComponent<Base>, _Graph>();
           typename _Graph::EdgeNotifier& uen
             = graph.notifier(typename _Graph::Edge());
@@ -984,12 +976,11 @@
     };
 
-    /// \brief Concept class for standard graph maps.
-    ///
-    /// This class describes the concept of standard graph maps, i.e.
-    /// the \c NodeMap, \c ArcMap and \c EdgeMap subtypes of digraph and 
-    /// graph types, which can be used for associating data to graph items.
-    /// The standard graph maps must conform to the ReferenceMap concept.
+    /// \brief Class describing the concept of graph maps
+    ///
+    /// This class describes the common interface of the graph maps
+    /// (NodeMap, ArcMap), that is maps that can be used to
+    /// associate data to graph descriptors (nodes or arcs).
     template <typename GR, typename K, typename V>
-    class GraphMap : public ReferenceMap<K, V, V&, const V&> {
+    class GraphMap : public ReadWriteMap<K, V> {
     public:
 
@@ -1002,11 +993,4 @@
       /// The value type of the map.
       typedef V Value;
-      /// The reference type of the map.
-      typedef Value& Reference;
-      /// The const reference type of the map.
-      typedef const Value& ConstReference;
-
-      // The reference map tag.
-      typedef True ReferenceMapTag;
 
       /// \brief Construct a new map.
@@ -1016,5 +1000,5 @@
       /// \brief Construct a new map with default value.
       ///
-      /// Construct a new map for the graph and initalize the values.
+      /// Construct a new map for the graph and initalise the values.
       GraphMap(const Graph&, const Value&) {}
 
@@ -1025,7 +1009,7 @@
       GraphMap(const GraphMap&) : Parent() {}
 
-      /// \brief Assignment operator.
-      ///
-      /// Assignment operator. It does not mofify the underlying graph,
+      /// \brief Assign operator.
+      ///
+      /// Assign operator. It does not mofify the underlying graph,
       /// it just iterates on the current item set and set the  map
       /// with the value returned by the assigned map.
@@ -1040,22 +1024,21 @@
       struct Constraints {
         void constraints() {
-          checkConcept
-            <ReferenceMap<Key, Value, Value&, const Value&>, _Map>();
-          _Map m1(g);
-          _Map m2(g,t);
-          
-          // Copy constructor
-          // _Map m3(m);
-
-          // Assignment operator
+          checkConcept<ReadWriteMap<Key, Value>, _Map >();
+          // Construction with a graph parameter
+          _Map a(g);
+          // Constructor with a graph and a default value parameter
+          _Map a2(g,t);
+          // Copy constructor.
+          // _Map b(c);
+
           // ReadMap<Key, Value> cmap;
-          // m3 = cmap;
-
-          ignore_unused_variable_warning(m1);
-          ignore_unused_variable_warning(m2);
-          // ignore_unused_variable_warning(m3);
-        }
-
-        const _Map &m;
+          // b = cmap;
+
+          ignore_unused_variable_warning(a);
+          ignore_unused_variable_warning(a2);
+          // ignore_unused_variable_warning(b);
+        }
+
+        const _Map &c;
         const Graph &g;
         const typename GraphMap::Value &t;
@@ -1064,9 +1047,8 @@
     };
 
-    /// \brief Skeleton class for mappable directed graphs.
-    ///
-    /// This class describes the interface of mappable directed graphs.
-    /// It extends \ref BaseDigraphComponent with the standard digraph 
-    /// map classes, namely \c NodeMap and \c ArcMap.
+    /// \brief An empty mappable digraph class.
+    ///
+    /// This class provides beside the core digraph features
+    /// map interface for the digraph structure.
     /// This concept is part of the Digraph concept.
     template <typename BAS = BaseDigraphComponent>
@@ -1080,10 +1062,10 @@
       typedef MappableDigraphComponent Digraph;
 
-      /// \brief Standard graph map for the nodes.
-      ///
-      /// Standard graph map for the nodes.
-      /// It conforms to the ReferenceMap concept.
+      /// \brief ReadWrite map of the nodes.
+      ///
+      /// ReadWrite map of the nodes.
+      ///
       template <typename V>
-      class NodeMap : public GraphMap<MappableDigraphComponent, Node, V> {
+      class NodeMap : public GraphMap<Digraph, Node, V> {
       public:
         typedef GraphMap<MappableDigraphComponent, Node, V> Parent;
@@ -1097,5 +1079,5 @@
         /// \brief Construct a new map with default value.
         ///
-        /// Construct a new map for the digraph and initalize the values.
+        /// Construct a new map for the digraph and initalise the values.
         NodeMap(const MappableDigraphComponent& digraph, const V& value)
           : Parent(digraph, value) {}
@@ -1107,7 +1089,7 @@
         NodeMap(const NodeMap& nm) : Parent(nm) {}
 
-        /// \brief Assignment operator.
-        ///
-        /// Assignment operator.
+        /// \brief Assign operator.
+        ///
+        /// Assign operator.
         template <typename CMap>
         NodeMap& operator=(const CMap&) {
@@ -1118,10 +1100,10 @@
       };
 
-      /// \brief Standard graph map for the arcs.
-      ///
-      /// Standard graph map for the arcs.
-      /// It conforms to the ReferenceMap concept.
+      /// \brief ReadWrite map of the arcs.
+      ///
+      /// ReadWrite map of the arcs.
+      ///
       template <typename V>
-      class ArcMap : public GraphMap<MappableDigraphComponent, Arc, V> {
+      class ArcMap : public GraphMap<Digraph, Arc, V> {
       public:
         typedef GraphMap<MappableDigraphComponent, Arc, V> Parent;
@@ -1135,5 +1117,5 @@
         /// \brief Construct a new map with default value.
         ///
-        /// Construct a new map for the digraph and initalize the values.
+        /// Construct a new map for the digraph and initalise the values.
         ArcMap(const MappableDigraphComponent& digraph, const V& value)
           : Parent(digraph, value) {}
@@ -1145,7 +1127,7 @@
         ArcMap(const ArcMap& nm) : Parent(nm) {}
 
-        /// \brief Assignment operator.
-        ///
-        /// Assignment operator.
+        /// \brief Assign operator.
+        ///
+        /// Assign operator.
         template <typename CMap>
         ArcMap& operator=(const CMap&) {
@@ -1197,13 +1179,12 @@
         }
 
-        const _Digraph& digraph;
-      };
-    };
-
-    /// \brief Skeleton class for mappable undirected graphs.
-    ///
-    /// This class describes the interface of mappable undirected graphs.
-    /// It extends \ref MappableDigraphComponent with the standard graph 
-    /// map class for edges (\c EdgeMap).
+        _Digraph& digraph;
+      };
+    };
+
+    /// \brief An empty mappable base bipartite graph class.
+    ///
+    /// This class provides beside the core graph features
+    /// map interface for the graph structure.
     /// This concept is part of the Graph concept.
     template <typename BAS = BaseGraphComponent>
@@ -1216,10 +1197,10 @@
       typedef MappableGraphComponent Graph;
 
-      /// \brief Standard graph map for the edges.
-      ///
-      /// Standard graph map for the edges.
-      /// It conforms to the ReferenceMap concept.
+      /// \brief ReadWrite map of the edges.
+      ///
+      /// ReadWrite map of the edges.
+      ///
       template <typename V>
-      class EdgeMap : public GraphMap<MappableGraphComponent, Edge, V> {
+      class EdgeMap : public GraphMap<Graph, Edge, V> {
       public:
         typedef GraphMap<MappableGraphComponent, Edge, V> Parent;
@@ -1233,5 +1214,5 @@
         /// \brief Construct a new map with default value.
         ///
-        /// Construct a new map for the graph and initalize the values.
+        /// Construct a new map for the graph and initalise the values.
         EdgeMap(const MappableGraphComponent& graph, const V& value)
           : Parent(graph, value) {}
@@ -1243,7 +1224,7 @@
         EdgeMap(const EdgeMap& nm) : Parent(nm) {}
 
-        /// \brief Assignment operator.
-        ///
-        /// Assignment operator.
+        /// \brief Assign operator.
+        ///
+        /// Assign operator.
         template <typename CMap>
         EdgeMap& operator=(const CMap&) {
@@ -1265,5 +1246,5 @@
 
         void constraints() {
-          checkConcept<MappableDigraphComponent<Base>, _Graph>();
+          checkConcept<MappableGraphComponent<Base>, _Graph>();
 
           { // int map test
@@ -1282,14 +1263,14 @@
         }
 
-        const _Graph& graph;
-      };
-    };
-
-    /// \brief Skeleton class for extendable directed graphs.
-    ///
-    /// This class describes the interface of extendable directed graphs.
-    /// It extends \ref BaseDigraphComponent with functions for adding 
-    /// nodes and arcs to the digraph.
-    /// This concept requires \ref AlterableDigraphComponent.
+        _Graph& graph;
+      };
+    };
+
+    /// \brief An empty extendable digraph class.
+    ///
+    /// This class provides beside the core digraph features digraph
+    /// extendable interface for the digraph structure.  The main
+    /// difference between the base and this interface is that the
+    /// digraph alterations should handled already on this level.
     template <typename BAS = BaseDigraphComponent>
     class ExtendableDigraphComponent : public BAS {
@@ -1300,15 +1281,15 @@
       typedef typename Base::Arc Arc;
 
-      /// \brief Add a new node to the digraph.
-      ///
-      /// This function adds a new node to the digraph.
+      /// \brief Adds a new node to the digraph.
+      ///
+      /// Adds a new node to the digraph.
+      ///
       Node addNode() {
         return INVALID;
       }
 
-      /// \brief Add a new arc connecting the given two nodes.
-      ///
-      /// This function adds a new arc connecting the given two nodes
-      /// of the digraph.
+      /// \brief Adds a new arc connects the given two nodes.
+      ///
+      /// Adds a new arc connects the the given two nodes.
       Arc addArc(const Node&, const Node&) {
         return INVALID;
@@ -1330,10 +1311,11 @@
     };
 
-    /// \brief Skeleton class for extendable undirected graphs.
-    ///
-    /// This class describes the interface of extendable undirected graphs.
-    /// It extends \ref BaseGraphComponent with functions for adding 
-    /// nodes and edges to the graph.
-    /// This concept requires \ref AlterableGraphComponent.
+    /// \brief An empty extendable base undirected graph class.
+    ///
+    /// This class provides beside the core undirected graph features
+    /// core undircted graph extend interface for the graph structure.
+    /// The main difference between the base and this interface is
+    /// that the graph alterations should handled already on this
+    /// level.
     template <typename BAS = BaseGraphComponent>
     class ExtendableGraphComponent : public BAS {
@@ -1344,16 +1326,16 @@
       typedef typename Base::Edge Edge;
 
-      /// \brief Add a new node to the digraph.
-      ///
-      /// This function adds a new node to the digraph.
+      /// \brief Adds a new node to the graph.
+      ///
+      /// Adds a new node to the graph.
+      ///
       Node addNode() {
         return INVALID;
       }
 
-      /// \brief Add a new edge connecting the given two nodes.
-      ///
-      /// This function adds a new edge connecting the given two nodes
-      /// of the graph.
-      Edge addEdge(const Node&, const Node&) {
+      /// \brief Adds a new arc connects the given two nodes.
+      ///
+      /// Adds a new arc connects the the given two nodes.
+      Edge addArc(const Node&, const Node&) {
         return INVALID;
       }
@@ -1374,10 +1356,10 @@
     };
 
-    /// \brief Skeleton class for erasable directed graphs.
-    ///
-    /// This class describes the interface of erasable directed graphs.
-    /// It extends \ref BaseDigraphComponent with functions for removing 
-    /// nodes and arcs from the digraph.
-    /// This concept requires \ref AlterableDigraphComponent.
+    /// \brief An empty erasable digraph class.
+    ///
+    /// This class provides beside the core digraph features core erase
+    /// functions for the digraph structure. The main difference between
+    /// the base and this interface is that the digraph alterations
+    /// should handled already on this level.
     template <typename BAS = BaseDigraphComponent>
     class ErasableDigraphComponent : public BAS {
@@ -1390,11 +1372,12 @@
       /// \brief Erase a node from the digraph.
       ///
-      /// This function erases the given node from the digraph and all arcs 
-      /// connected to the node.
+      /// Erase a node from the digraph. This function should
+      /// erase all arcs connecting to the node.
       void erase(const Node&) {}
 
       /// \brief Erase an arc from the digraph.
       ///
-      /// This function erases the given arc from the digraph.
+      /// Erase an arc from the digraph.
+      ///
       void erase(const Arc&) {}
 
@@ -1403,7 +1386,7 @@
         void constraints() {
           checkConcept<Base, _Digraph>();
-          const typename _Digraph::Node node(INVALID);
+          typename _Digraph::Node node;
           digraph.erase(node);
-          const typename _Digraph::Arc arc(INVALID);
+          typename _Digraph::Arc arc;
           digraph.erase(arc);
         }
@@ -1413,10 +1396,10 @@
     };
 
-    /// \brief Skeleton class for erasable undirected graphs.
-    ///
-    /// This class describes the interface of erasable undirected graphs.
-    /// It extends \ref BaseGraphComponent with functions for removing 
-    /// nodes and edges from the graph.
-    /// This concept requires \ref AlterableGraphComponent.
+    /// \brief An empty erasable base undirected graph class.
+    ///
+    /// This class provides beside the core undirected graph features
+    /// core erase functions for the undirceted graph structure. The
+    /// main difference between the base and this interface is that
+    /// the graph alterations should handled already on this level.
     template <typename BAS = BaseGraphComponent>
     class ErasableGraphComponent : public BAS {
@@ -1429,11 +1412,12 @@
       /// \brief Erase a node from the graph.
       ///
-      /// This function erases the given node from the graph and all edges
-      /// connected to the node.
+      /// Erase a node from the graph. This function should erase
+      /// arcs connecting to the node.
       void erase(const Node&) {}
 
-      /// \brief Erase an edge from the digraph.
-      ///
-      /// This function erases the given edge from the digraph.
+      /// \brief Erase an arc from the graph.
+      ///
+      /// Erase an arc from the graph.
+      ///
       void erase(const Edge&) {}
 
@@ -1442,7 +1426,7 @@
         void constraints() {
           checkConcept<Base, _Graph>();
-          const typename _Graph::Node node(INVALID);
+          typename _Graph::Node node;
           graph.erase(node);
-          const typename _Graph::Edge edge(INVALID);
+          typename _Graph::Edge edge;
           graph.erase(edge);
         }
@@ -1452,10 +1436,10 @@
     };
 
-    /// \brief Skeleton class for clearable directed graphs.
-    ///
-    /// This class describes the interface of clearable directed graphs.
-    /// It extends \ref BaseDigraphComponent with a function for clearing
-    /// the digraph.
-    /// This concept requires \ref AlterableDigraphComponent.
+    /// \brief An empty clearable base digraph class.
+    ///
+    /// This class provides beside the core digraph features core clear
+    /// functions for the digraph structure. The main difference between
+    /// the base and this interface is that the digraph alterations
+    /// should handled already on this level.
     template <typename BAS = BaseDigraphComponent>
     class ClearableDigraphComponent : public BAS {
@@ -1466,5 +1450,6 @@
       /// \brief Erase all nodes and arcs from the digraph.
       ///
-      /// This function erases all nodes and arcs from the digraph.
+      /// Erase all nodes and arcs from the digraph.
+      ///
       void clear() {}
 
@@ -1476,14 +1461,14 @@
         }
 
-        _Digraph& digraph;
-      };
-    };
-
-    /// \brief Skeleton class for clearable undirected graphs.
-    ///
-    /// This class describes the interface of clearable undirected graphs.
-    /// It extends \ref BaseGraphComponent with a function for clearing
-    /// the graph.
-    /// This concept requires \ref AlterableGraphComponent.
+        _Digraph digraph;
+      };
+    };
+
+    /// \brief An empty clearable base undirected graph class.
+    ///
+    /// This class provides beside the core undirected graph features
+    /// core clear functions for the undirected graph structure. The
+    /// main difference between the base and this interface is that
+    /// the graph alterations should handled already on this level.
     template <typename BAS = BaseGraphComponent>
     class ClearableGraphComponent : public ClearableDigraphComponent<BAS> {
@@ -1492,17 +1477,11 @@
       typedef BAS Base;
 
-      /// \brief Erase all nodes and edges from the graph.
-      ///
-      /// This function erases all nodes and edges from the graph.
-      void clear() {}
-
       template <typename _Graph>
       struct Constraints {
         void constraints() {
-          checkConcept<Base, _Graph>();
-          graph.clear();
-        }
-
-        _Graph& graph;
+          checkConcept<ClearableGraphComponent<Base>, _Graph>();
+        }
+
+        _Graph graph;
       };
     };
Index: lemon/concepts/heap.h
===================================================================
--- lemon/concepts/heap.h	(revision 576)
+++ lemon/concepts/heap.h	(revision 550)
@@ -72,7 +72,7 @@
       /// \c PRE_HEAP (<tt>-1</tt>) to any element to be put in the heap.
       enum State {
-        IN_HEAP = 0,    ///< = 0. The "in heap" state constant.
-        PRE_HEAP = -1,  ///< = -1. The "pre heap" state constant.
-        POST_HEAP = -2  ///< = -2. The "post heap" state constant.
+        IN_HEAP = 0,    ///< The "in heap" state constant.
+        PRE_HEAP = -1,  ///< The "pre heap" state constant.
+        POST_HEAP = -2  ///< The "post heap" state constant.
       };
 
Index: lemon/connectivity.h
===================================================================
--- lemon/connectivity.h	(revision 578)
+++ lemon/connectivity.h	(revision 550)
@@ -33,5 +33,5 @@
 #include <functional>
 
-/// \ingroup graph_properties
+/// \ingroup connectivity
 /// \file
 /// \brief Connectivity algorithms
@@ -41,5 +41,5 @@
 namespace lemon {
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Check whether the given undirected graph is connected.
@@ -64,5 +64,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Count the number of connected components of an undirected graph
@@ -106,12 +106,9 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Find the connected components of an undirected graph
   ///
   /// Find the connected components of an undirected graph.
-  ///
-  /// \image html connected_components.png
-  /// \image latex connected_components.eps "Connected components" width=\textwidth
   ///
   /// \param graph The graph. It must be undirected.
@@ -121,4 +118,5 @@
   /// set continuously.
   /// \return The number of components
+  ///
   template <class Graph, class NodeMap>
   int connectedComponents(const Graph &graph, NodeMap &compMap) {
@@ -230,5 +228,5 @@
 
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Check whether the given directed graph is strongly connected.
@@ -288,5 +286,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Count the strongly connected components of a directed graph
@@ -352,5 +350,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Find the strongly connected components of a directed graph
@@ -364,7 +362,4 @@
   /// a lower.
   ///
-  /// \image html strongly_connected_components.png
-  /// \image latex strongly_connected_components.eps "Strongly connected components" width=\textwidth
-  ///
   /// \param digraph The digraph.
   /// \retval compMap A writable node map. The values will be set from 0 to
@@ -373,4 +368,5 @@
   /// will be set continuously.
   /// \return The number of components
+  ///
   template <typename Digraph, typename NodeMap>
   int stronglyConnectedComponents(const Digraph& digraph, NodeMap& compMap) {
@@ -421,5 +417,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Find the cut arcs of the strongly connected components.
@@ -705,5 +701,5 @@
   int countBiNodeConnectedComponents(const Graph& graph);
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Checks the graph is bi-node-connected.
@@ -720,5 +716,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Count the biconnected components.
@@ -755,5 +751,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Find the bi-node-connected components.
@@ -763,7 +759,4 @@
   /// relation on the undirected edges. Two undirected edge are in relationship
   /// when they are on same circle.
-  ///
-  /// \image html node_biconnected_components.png
-  /// \image latex node_biconnected_components.eps "bi-node-connected components" width=\textwidth
   ///
   /// \param graph The graph.
@@ -773,4 +766,5 @@
   /// will be set continuously.
   /// \return The number of components.
+  ///
   template <typename Graph, typename EdgeMap>
   int biNodeConnectedComponents(const Graph& graph,
@@ -800,5 +794,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Find the bi-node-connected cut nodes.
@@ -1030,5 +1024,5 @@
   int countBiEdgeConnectedComponents(const Graph& graph);
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Checks that the graph is bi-edge-connected.
@@ -1045,5 +1039,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Count the bi-edge-connected components.
@@ -1080,5 +1074,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Find the bi-edge-connected components.
@@ -1088,7 +1082,4 @@
   /// relation on the nodes. Two nodes are in relationship when they are
   /// connected at least two edge-disjoint paths.
-  ///
-  /// \image html edge_biconnected_components.png
-  /// \image latex edge_biconnected_components.eps "bi-edge-connected components" width=\textwidth
   ///
   /// \param graph The graph.
@@ -1098,4 +1089,5 @@
   /// will be set continuously.
   /// \return The number of components.
+  ///
   template <typename Graph, typename NodeMap>
   int biEdgeConnectedComponents(const Graph& graph, NodeMap& compMap) {
@@ -1124,5 +1116,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Find the bi-edge-connected cut edges.
@@ -1188,5 +1180,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Sort the nodes of a DAG into topolgical order.
@@ -1227,5 +1219,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Sort the nodes of a DAG into topolgical order.
@@ -1282,5 +1274,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Check that the given directed graph is a DAG.
@@ -1324,5 +1316,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Check that the given undirected graph is acyclic.
@@ -1358,5 +1350,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Check that the given undirected graph is tree.
@@ -1450,5 +1442,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Check if the given undirected graph is bipartite or not
@@ -1487,5 +1479,5 @@
   }
 
-  /// \ingroup graph_properties
+  /// \ingroup connectivity
   ///
   /// \brief Check if the given undirected graph is bipartite or not
@@ -1495,8 +1487,4 @@
   /// During the execution, the \c partMap will be set as the two
   /// partitions of the graph.
-  ///
-  /// \image html bipartite_partitions.png
-  /// \image latex bipartite_partitions.eps "Bipartite partititions" width=\textwidth
-  ///
   /// \param graph The undirected graph.
   /// \retval partMap A writable bool map of nodes. It will be set as the
Index: lemon/core.h
===================================================================
--- lemon/core.h	(revision 573)
+++ lemon/core.h	(revision 550)
@@ -1316,5 +1316,5 @@
     virtual void clear() {
       for(NodeIt n(_g);n!=INVALID;++n) {
-        _head[n] = INVALID;
+        _head.set(n, INVALID);
       }
     }
@@ -1323,11 +1323,11 @@
       Node s = _g.source(arc);
       Node t = _g.target(arc);
-      _left[arc] = INVALID;
-      _right[arc] = INVALID;
+      _left.set(arc, INVALID);
+      _right.set(arc, INVALID);
 
       Arc e = _head[s];
       if (e == INVALID) {
-        _head[s] = arc;
-        _parent[arc] = INVALID;
+        _head.set(s, arc);
+        _parent.set(arc, INVALID);
         return;
       }
@@ -1335,6 +1335,6 @@
         if (t < _g.target(e)) {
           if (_left[e] == INVALID) {
-            _left[e] = arc;
-            _parent[arc] = e;
+            _left.set(e, arc);
+            _parent.set(arc, e);
             splay(arc);
             return;
@@ -1344,6 +1344,6 @@
         } else {
           if (_right[e] == INVALID) {
-            _right[e] = arc;
-            _parent[arc] = e;
+            _right.set(e, arc);
+            _parent.set(arc, e);
             splay(arc);
             return;
@@ -1358,25 +1358,25 @@
       if (_left[arc] == INVALID) {
         if (_right[arc] != INVALID) {
-          _parent[_right[arc]] = _parent[arc];
+          _parent.set(_right[arc], _parent[arc]);
         }
         if (_parent[arc] != INVALID) {
           if (_left[_parent[arc]] == arc) {
-            _left[_parent[arc]] = _right[arc];
+            _left.set(_parent[arc], _right[arc]);
           } else {
-            _right[_parent[arc]] = _right[arc];
+            _right.set(_parent[arc], _right[arc]);
           }
         } else {
-          _head[_g.source(arc)] = _right[arc];
+          _head.set(_g.source(arc), _right[arc]);
         }
       } else if (_right[arc] == INVALID) {
-        _parent[_left[arc]] = _parent[arc];
+        _parent.set(_left[arc], _parent[arc]);
         if (_parent[arc] != INVALID) {
           if (_left[_parent[arc]] == arc) {
-            _left[_parent[arc]] = _left[arc];
+            _left.set(_parent[arc], _left[arc]);
           } else {
-            _right[_parent[arc]] = _left[arc];
+            _right.set(_parent[arc], _left[arc]);
           }
         } else {
-          _head[_g.source(arc)] = _left[arc];
+          _head.set(_g.source(arc), _left[arc]);
         }
       } else {
@@ -1388,36 +1388,36 @@
           }
           Arc s = _parent[e];
-          _right[_parent[e]] = _left[e];
+          _right.set(_parent[e], _left[e]);
           if (_left[e] != INVALID) {
-            _parent[_left[e]] = _parent[e];
+            _parent.set(_left[e], _parent[e]);
           }
 
-          _left[e] = _left[arc];
-          _parent[_left[arc]] = e;
-          _right[e] = _right[arc];
-          _parent[_right[arc]] = e;
-
-          _parent[e] = _parent[arc];
+          _left.set(e, _left[arc]);
+          _parent.set(_left[arc], e);
+          _right.set(e, _right[arc]);
+          _parent.set(_right[arc], e);
+
+          _parent.set(e, _parent[arc]);
           if (_parent[arc] != INVALID) {
             if (_left[_parent[arc]] == arc) {
-              _left[_parent[arc]] = e;
+              _left.set(_parent[arc], e);
             } else {
-              _right[_parent[arc]] = e;
+              _right.set(_parent[arc], e);
             }
           }
           splay(s);
         } else {
-          _right[e] = _right[arc];
-          _parent[_right[arc]] = e;
-          _parent[e] = _parent[arc];
+          _right.set(e, _right[arc]);
+          _parent.set(_right[arc], e);
+          _parent.set(e, _parent[arc]);
 
           if (_parent[arc] != INVALID) {
             if (_left[_parent[arc]] == arc) {
-              _left[_parent[arc]] = e;
+              _left.set(_parent[arc], e);
             } else {
-              _right[_parent[arc]] = e;
+              _right.set(_parent[arc], e);
             }
           } else {
-            _head[_g.source(arc)] = e;
+            _head.set(_g.source(arc), e);
           }
         }
@@ -1431,15 +1431,15 @@
       if (a < m) {
         Arc left = refreshRec(v,a,m-1);
-        _left[me] = left;
-        _parent[left] = me;
+        _left.set(me, left);
+        _parent.set(left, me);
       } else {
-        _left[me] = INVALID;
+        _left.set(me, INVALID);
       }
       if (m < b) {
         Arc right = refreshRec(v,m+1,b);
-        _right[me] = right;
-        _parent[right] = me;
+        _right.set(me, right);
+        _parent.set(right, me);
       } else {
-        _right[me] = INVALID;
+        _right.set(me, INVALID);
       }
       return me;
@@ -1453,8 +1453,8 @@
           std::sort(v.begin(),v.end(),ArcLess(_g));
           Arc head = refreshRec(v,0,v.size()-1);
-          _head[n] = head;
-          _parent[head] = INVALID;
-        }
-        else _head[n] = INVALID;
+          _head.set(n, head);
+          _parent.set(head, INVALID);
+        }
+        else _head.set(n, INVALID);
       }
     }
@@ -1462,17 +1462,17 @@
     void zig(Arc v) {
       Arc w = _parent[v];
-      _parent[v] = _parent[w];
-      _parent[w] = v;
-      _left[w] = _right[v];
-      _right[v] = w;
+      _parent.set(v, _parent[w]);
+      _parent.set(w, v);
+      _left.set(w, _right[v]);
+      _right.set(v, w);
       if (_parent[v] != INVALID) {
         if (_right[_parent[v]] == w) {
-          _right[_parent[v]] = v;
+          _right.set(_parent[v], v);
         } else {
-          _left[_parent[v]] = v;
+          _left.set(_parent[v], v);
         }
       }
       if (_left[w] != INVALID){
-        _parent[_left[w]] = w;
+        _parent.set(_left[w], w);
       }
     }
@@ -1480,17 +1480,17 @@
     void zag(Arc v) {
       Arc w = _parent[v];
-      _parent[v] = _parent[w];
-      _parent[w] = v;
-      _right[w] = _left[v];
-      _left[v] = w;
+      _parent.set(v, _parent[w]);
+      _parent.set(w, v);
+      _right.set(w, _left[v]);
+      _left.set(v, w);
       if (_parent[v] != INVALID){
         if (_left[_parent[v]] == w) {
-          _left[_parent[v]] = v;
+          _left.set(_parent[v], v);
         } else {
-          _right[_parent[v]] = v;
+          _right.set(_parent[v], v);
         }
       }
       if (_right[w] != INVALID){
-        _parent[_right[w]] = w;
+        _parent.set(_right[w], w);
       }
     }
Index: lemon/cplex.cc
===================================================================
--- lemon/cplex.cc	(revision 568)
+++ lemon/cplex.cc	(revision 540)
@@ -73,5 +73,4 @@
     int status;
     _prob = CPXcreateprob(cplexEnv(), &status, "Cplex problem");
-    messageLevel(MESSAGE_NOTHING);
   }
 
@@ -80,5 +79,4 @@
     int status;
     _prob = CPXcreateprob(cplexEnv(), &status, "Cplex problem");
-    messageLevel(MESSAGE_NOTHING);
   }
 
@@ -89,5 +87,4 @@
     rows = cplex.rows;
     cols = cplex.cols;
-    messageLevel(MESSAGE_NOTHING);
   }
 
@@ -440,23 +437,4 @@
     rows.clear();
     cols.clear();
-  }
-
-  void CplexBase::_messageLevel(MessageLevel level) {
-    switch (level) {
-    case MESSAGE_NOTHING:
-      _message_enabled = false;
-      break;
-    case MESSAGE_ERROR:
-    case MESSAGE_WARNING:
-    case MESSAGE_NORMAL:
-    case MESSAGE_VERBOSE:
-      _message_enabled = true;
-      break;
-    }
-  }
-
-  void CplexBase::_applyMessageLevel() {
-    CPXsetintparam(cplexEnv(), CPX_PARAM_SCRIND, 
-                   _message_enabled ? CPX_ON : CPX_OFF);
   }
 
@@ -530,5 +508,4 @@
   CplexLp::SolveExitStatus CplexLp::_solve() {
     _clear_temporals();
-    _applyMessageLevel();
     return convertStatus(CPXlpopt(cplexEnv(), _prob));
   }
@@ -536,5 +513,4 @@
   CplexLp::SolveExitStatus CplexLp::solvePrimal() {
     _clear_temporals();
-    _applyMessageLevel();
     return convertStatus(CPXprimopt(cplexEnv(), _prob));
   }
@@ -542,5 +518,4 @@
   CplexLp::SolveExitStatus CplexLp::solveDual() {
     _clear_temporals();
-    _applyMessageLevel();
     return convertStatus(CPXdualopt(cplexEnv(), _prob));
   }
@@ -548,5 +523,4 @@
   CplexLp::SolveExitStatus CplexLp::solveBarrier() {
     _clear_temporals();
-    _applyMessageLevel();
     return convertStatus(CPXbaropt(cplexEnv(), _prob));
   }
@@ -627,5 +601,5 @@
   }
 
-  // Cplex 7.0 status values
+  //7.5-os cplex statusai (Vigyazat: a 9.0-asei masok!)
   // This table lists the statuses, returned by the CPXgetstat()
   // routine, for solutions to LP problems or mixed integer problems. If
@@ -674,5 +648,5 @@
   //       User pivot used
   //
-  // Pending return values
+  //     Ezeket hova tegyem:
   // ??case CPX_ABORT_DUAL_INFEAS
   // ??case CPX_ABORT_CROSSOVER
@@ -745,4 +719,5 @@
     statusSwitch(cplexEnv(),stat);
     //CPXgetstat(cplexEnv(), _prob);
+    //printf("A primal status: %d, CPX_OPTIMAL=%d \n",stat,CPX_OPTIMAL);
     switch (stat) {
     case 0:
@@ -777,5 +752,5 @@
   }
 
-  // Cplex 9.0 status values
+  //9.0-as cplex verzio statusai
   // CPX_STAT_ABORT_DUAL_OBJ_LIM
   // CPX_STAT_ABORT_IT_LIM
@@ -890,5 +865,4 @@
   CplexMip::SolveExitStatus CplexMip::_solve() {
     int status;
-    _applyMessageLevel();
     status = CPXmipopt (cplexEnv(), _prob);
     if (status==0)
Index: lemon/cplex.h
===================================================================
--- lemon/cplex.h	(revision 568)
+++ lemon/cplex.h	(revision 540)
@@ -145,27 +145,12 @@
     virtual void _clear();
 
-    virtual void _messageLevel(MessageLevel level);
-    void _applyMessageLevel();
-
-    bool _message_enabled;
-
   public:
 
     /// Returns the used \c CplexEnv instance
     const CplexEnv& env() const { return _env; }
-
-    /// \brief Returns the const cpxenv pointer
     ///
-    /// \note The cpxenv might be destructed with the solver.
     const cpxenv* cplexEnv() const { return _env.cplexEnv(); }
 
-    /// \brief Returns the const cpxenv pointer
-    ///
-    /// \note The cpxenv might be destructed with the solver.
-    cpxenv* cplexEnv() { return _env.cplexEnv(); }
-
-    /// Returns the cplex problem object
     cpxlp* cplexLp() { return _prob; }
-    /// Returns the cplex problem object
     const cpxlp* cplexLp() const { return _prob; }
 
Index: lemon/dfs.h
===================================================================
--- lemon/dfs.h	(revision 576)
+++ lemon/dfs.h	(revision 519)
@@ -207,5 +207,5 @@
     typedef Dfs Create;
 
-    ///\name Named Template Parameters
+    ///\name Named template parameters
 
     ///@{
Index: lemon/dijkstra.h
===================================================================
--- lemon/dijkstra.h	(revision 576)
+++ lemon/dijkstra.h	(revision 550)
@@ -287,5 +287,5 @@
     typedef Dijkstra Create;
 
-    ///\name Named Template Parameters
+    ///\name Named template parameters
 
     ///@{
Index: lemon/dimacs.h
===================================================================
--- lemon/dimacs.h	(revision 576)
+++ lemon/dimacs.h	(revision 552)
@@ -38,14 +38,9 @@
   struct DimacsDescriptor
   {
-    ///\brief DIMACS file type enum
-    ///
-    ///DIMACS file type enum.
-    enum Type {
-      NONE,  ///< Undefined type.
-      MIN,   ///< DIMACS file type for minimum cost flow problems.
-      MAX,   ///< DIMACS file type for maximum flow problems.
-      SP,    ///< DIMACS file type for shostest path problems.
-      MAT    ///< DIMACS file type for plain graphs and matching problems.
-    };
+    ///File type enum
+    enum Type
+      {
+        NONE, MIN, MAX, SP, MAT
+      };
     ///The file type
     Type type;
@@ -55,5 +50,5 @@
     int edgeNum;
     int lineShift;
-    ///Constructor. It sets the type to \c NONE.
+    /// Constructor. Sets the type to NONE.
     DimacsDescriptor() : type(NONE) {}
   };
@@ -61,8 +56,8 @@
   ///Discover the type of a DIMACS file
 
-  ///This function starts seeking the beginning of the given file for the
-  ///problem type and size info. 
-  ///The found data is returned in a special struct that can be evaluated
-  ///and passed to the appropriate reader function.
+  ///It starts seeking the beginning of the file for the problem type
+  ///and size info. The found data is returned in a special struct
+  ///that can be evaluated and passed to the appropriate reader
+  ///function.
   DimacsDescriptor dimacsType(std::istream& is)
   {
@@ -102,5 +97,6 @@
 
 
-  /// \brief DIMACS minimum cost flow reader function.
+
+  /// DIMACS minimum cost flow reader function.
   ///
   /// This function reads a minimum cost flow instance from DIMACS format,
@@ -258,5 +254,5 @@
   }
 
-  /// \brief DIMACS maximum flow reader function.
+  /// DIMACS maximum flow reader function.
   ///
   /// This function reads a maximum flow instance from DIMACS format,
@@ -292,5 +288,5 @@
   }
 
-  /// \brief DIMACS shortest path reader function.
+  /// DIMACS shortest path reader function.
   ///
   /// This function reads a shortest path instance from DIMACS format,
@@ -318,5 +314,5 @@
   }
 
-  /// \brief DIMACS capacitated digraph reader function.
+  /// DIMACS capacitated digraph reader function.
   ///
   /// This function reads an arc capacitated digraph instance from
@@ -364,9 +360,9 @@
   }
   
-  /// \brief DIMACS plain (di)graph reader function.
-  ///
-  /// This function reads a plain (di)graph without any designated nodes
-  /// and maps (e.g. a matching instance) from DIMACS format, i.e. from 
-  /// DIMACS files having a line starting with
+  /// DIMACS plain (di)graph reader function.
+  ///
+  /// This function reads a (di)graph without any designated nodes and
+  /// maps from DIMACS format, i.e. from DIMACS files having a line
+  /// starting with
   /// \code
   ///   p mat
Index: lemon/elevator.h
===================================================================
--- lemon/elevator.h	(revision 573)
+++ lemon/elevator.h	(revision 550)
@@ -77,5 +77,5 @@
     void copy(Item i, Vit p)
     {
-      _where[*p=i] = p;
+      _where.set(*p=i,p);
     }
     void copy(Vit s, Vit p)
@@ -85,5 +85,5 @@
           Item i=*s;
           *p=i;
-          _where[i] = p;
+          _where.set(i,p);
         }
     }
@@ -92,6 +92,6 @@
       Item ti=*i;
       Vit ct = _where[ti];
-      _where[ti] = _where[*i=*j];
-      _where[*j] = ct;
+      _where.set(ti,_where[*i=*j]);
+      _where.set(*j,ct);
       *j=ti;
     }
@@ -227,5 +227,5 @@
     {
       Item it = *_last_active[_highest_active];
-      ++_level[it];
+      _level.set(it,_level[it]+1);
       swap(_last_active[_highest_active]--,_last_active[_highest_active+1]);
       --_first[++_highest_active];
@@ -250,5 +250,5 @@
         }
       copy(li,_first[new_level]);
-      _level[li] = new_level;
+      _level.set(li,new_level);
       _highest_active=new_level;
     }
@@ -270,5 +270,5 @@
       copy(li,_first[_max_level]);
       --_last_active[_max_level];
-      _level[li] = _max_level;
+      _level.set(li,_max_level);
 
       while(_highest_active>=0 &&
@@ -300,5 +300,5 @@
     {
       Item it =*_last_active[level];
-      ++_level[it];
+      _level.set(it,_level[it]+1);
       swap(_last_active[level]--, --_first[level+1]);
       if (level+1>_highest_active) ++_highest_active;
@@ -320,5 +320,5 @@
         }
       copy(ai,_first[new_level]);
-      _level[ai] = new_level;
+      _level.set(ai,new_level);
       if (new_level>_highest_active) _highest_active=new_level;
     }
@@ -340,5 +340,5 @@
       copy(ai,_first[_max_level]);
       --_last_active[_max_level];
-      _level[ai] = _max_level;
+      _level.set(ai,_max_level);
 
       if (_highest_active==level) {
@@ -371,5 +371,5 @@
         }
       copy(i,_first[new_level]);
-      _level[i] = new_level;
+      _level.set(i,new_level);
       if(new_level>_highest_active) _highest_active=new_level;
     }
@@ -383,5 +383,5 @@
     ///\pre The item is on the top level.
     void dirtyTopButOne(Item i) {
-      _level[i] = _max_level - 1;
+      _level.set(i,_max_level - 1);
     }
 
@@ -395,5 +395,5 @@
       const Vit tl=_first[_max_level];
       for(Vit i=f;i!=tl;++i)
-        _level[*i] = _max_level;
+        _level.set(*i,_max_level);
       for(int i=l;i<=_max_level;i++)
         {
@@ -434,6 +434,6 @@
         {
           *n=i;
-          _where[i] = n;
-          _level[i] = _max_level;
+          _where.set(i,n);
+          _level.set(i,_max_level);
           ++n;
         }
@@ -444,5 +444,5 @@
     {
       swap(_where[i],_init_num);
-      _level[i] = _init_lev;
+      _level.set(i,_init_lev);
       ++_init_num;
     }
@@ -552,5 +552,5 @@
     ///\pre Item \c i shouldn't be active before.
     void activate(Item i) {
-      _active[i] = true;
+      _active.set(i, true);
 
       int level = _level[i];
@@ -561,14 +561,14 @@
       if (_prev[i] == INVALID || _active[_prev[i]]) return;
       //unlace
-      _next[_prev[i]] = _next[i];
+      _next.set(_prev[i], _next[i]);
       if (_next[i] != INVALID) {
-        _prev[_next[i]] = _prev[i];
+        _prev.set(_next[i], _prev[i]);
       } else {
         _last[level] = _prev[i];
       }
       //lace
-      _next[i] = _first[level];
-      _prev[_first[level]] = i;
-      _prev[i] = INVALID;
+      _next.set(i, _first[level]);
+      _prev.set(_first[level], i);
+      _prev.set(i, INVALID);
       _first[level] = i;
 
@@ -580,5 +580,5 @@
     ///\pre Item \c i must be active before.
     void deactivate(Item i) {
-      _active[i] = false;
+      _active.set(i, false);
       int level = _level[i];
 
@@ -587,14 +587,14 @@
 
       //unlace
-      _prev[_next[i]] = _prev[i];
+      _prev.set(_next[i], _prev[i]);
       if (_prev[i] != INVALID) {
-        _next[_prev[i]] = _next[i];
+        _next.set(_prev[i], _next[i]);
       } else {
         _first[_level[i]] = _next[i];
       }
       //lace
-      _prev[i] = _last[level];
-      _next[_last[level]] = i;
-      _next[i] = INVALID;
+      _prev.set(i, _last[level]);
+      _next.set(_last[level], i);
+      _next.set(i, INVALID);
       _last[level] = i;
 
@@ -686,5 +686,5 @@
       Item i = _first[_highest_active];
       if (_next[i] != INVALID) {
-        _prev[_next[i]] = INVALID;
+        _prev.set(_next[i], INVALID);
         _first[_highest_active] = _next[i];
       } else {
@@ -692,13 +692,13 @@
         _last[_highest_active] = INVALID;
       }
-      _level[i] = ++_highest_active;
+      _level.set(i, ++_highest_active);
       if (_first[_highest_active] == INVALID) {
         _first[_highest_active] = i;
         _last[_highest_active] = i;
-        _prev[i] = INVALID;
-        _next[i] = INVALID;
-      } else {
-        _prev[_first[_highest_active]] = i;
-        _next[i] = _first[_highest_active];
+        _prev.set(i, INVALID);
+        _next.set(i, INVALID);
+      } else {
+        _prev.set(_first[_highest_active], i);
+        _next.set(i, _first[_highest_active]);
         _first[_highest_active] = i;
       }
@@ -715,5 +715,5 @@
       Item i = _first[_highest_active];
       if (_next[i] != INVALID) {
-        _prev[_next[i]] = INVALID;
+        _prev.set(_next[i], INVALID);
         _first[_highest_active] = _next[i];
       } else {
@@ -721,12 +721,12 @@
         _last[_highest_active] = INVALID;
       }
-      _level[i] = _highest_active = new_level;
+      _level.set(i, _highest_active = new_level);
       if (_first[_highest_active] == INVALID) {
         _first[_highest_active] = _last[_highest_active] = i;
-        _prev[i] = INVALID;
-        _next[i] = INVALID;
-      } else {
-        _prev[_first[_highest_active]] = i;
-        _next[i] = _first[_highest_active];
+        _prev.set(i, INVALID);
+        _next.set(i, INVALID);
+      } else {
+        _prev.set(_first[_highest_active], i);
+        _next.set(i, _first[_highest_active]);
         _first[_highest_active] = i;
       }
@@ -739,7 +739,7 @@
     void liftHighestActiveToTop() {
       Item i = _first[_highest_active];
-      _level[i] = _max_level;
+      _level.set(i, _max_level);
       if (_next[i] != INVALID) {
-        _prev[_next[i]] = INVALID;
+        _prev.set(_next[i], INVALID);
         _first[_highest_active] = _next[i];
       } else {
@@ -775,5 +775,5 @@
       Item i = _first[l];
       if (_next[i] != INVALID) {
-        _prev[_next[i]] = INVALID;
+        _prev.set(_next[i], INVALID);
         _first[l] = _next[i];
       } else {
@@ -781,12 +781,12 @@
         _last[l] = INVALID;
       }
-      _level[i] = ++l;
+      _level.set(i, ++l);
       if (_first[l] == INVALID) {
         _first[l] = _last[l] = i;
-        _prev[i] = INVALID;
-        _next[i] = INVALID;
-      } else {
-        _prev[_first[l]] = i;
-        _next[i] = _first[l];
+        _prev.set(i, INVALID);
+        _next.set(i, INVALID);
+      } else {
+        _prev.set(_first[l], i);
+        _next.set(i, _first[l]);
         _first[l] = i;
       }
@@ -804,5 +804,5 @@
       Item i = _first[l];
       if (_next[i] != INVALID) {
-        _prev[_next[i]] = INVALID;
+        _prev.set(_next[i], INVALID);
         _first[l] = _next[i];
       } else {
@@ -810,12 +810,12 @@
         _last[l] = INVALID;
       }
-      _level[i] = l = new_level;
+      _level.set(i, l = new_level);
       if (_first[l] == INVALID) {
         _first[l] = _last[l] = i;
-        _prev[i] = INVALID;
-        _next[i] = INVALID;
-      } else {
-        _prev[_first[l]] = i;
-        _next[i] = _first[l];
+        _prev.set(i, INVALID);
+        _next.set(i, INVALID);
+      } else {
+        _prev.set(_first[l], i);
+        _next.set(i, _first[l]);
         _first[l] = i;
       }
@@ -833,5 +833,5 @@
       Item i = _first[l];
       if (_next[i] != INVALID) {
-        _prev[_next[i]] = INVALID;
+        _prev.set(_next[i], INVALID);
         _first[l] = _next[i];
       } else {
@@ -839,5 +839,5 @@
         _last[l] = INVALID;
       }
-      _level[i] = _max_level;
+      _level.set(i, _max_level);
       if (l == _highest_active) {
         while (_highest_active >= 0 && activeFree(_highest_active))
@@ -857,21 +857,21 @@
     void lift(Item i, int new_level) {
       if (_next[i] != INVALID) {
-        _prev[_next[i]] = _prev[i];
+        _prev.set(_next[i], _prev[i]);
       } else {
         _last[new_level] = _prev[i];
       }
       if (_prev[i] != INVALID) {
-        _next[_prev[i]] = _next[i];
+        _next.set(_prev[i], _next[i]);
       } else {
         _first[new_level] = _next[i];
       }
-      _level[i] = new_level;
+      _level.set(i, new_level);
       if (_first[new_level] == INVALID) {
         _first[new_level] = _last[new_level] = i;
-        _prev[i] = INVALID;
-        _next[i] = INVALID;
-      } else {
-        _prev[_first[new_level]] = i;
-        _next[i] = _first[new_level];
+        _prev.set(i, INVALID);
+        _next.set(i, INVALID);
+      } else {
+        _prev.set(_first[new_level], i);
+        _next.set(i, _first[new_level]);
         _first[new_level] = i;
       }
@@ -889,5 +889,5 @@
     ///\pre The item is on the top level.
     void dirtyTopButOne(Item i) {
-      _level[i] = _max_level - 1;
+      _level.set(i, _max_level - 1);
     }
 
@@ -900,5 +900,5 @@
         Item n = _first[i];
         while (n != INVALID) {
-          _level[n] = _max_level;
+          _level.set(n, _max_level);
           n = _next[n];
         }
@@ -938,6 +938,6 @@
       for(typename ItemSetTraits<GR,Item>::ItemIt i(_graph);
           i != INVALID; ++i) {
-        _level[i] = _max_level;
-        _active[i] = false;
+        _level.set(i, _max_level);
+        _active.set(i, false);
       }
     }
@@ -945,14 +945,14 @@
     ///Add an item to the current level.
     void initAddItem(Item i) {
-      _level[i] = _init_level;
+      _level.set(i, _init_level);
       if (_last[_init_level] == INVALID) {
         _first[_init_level] = i;
         _last[_init_level] = i;
-        _prev[i] = INVALID;
-        _next[i] = INVALID;
-      } else {
-        _prev[i] = _last[_init_level];
-        _next[i] = INVALID;
-        _next[_last[_init_level]] = i;
+        _prev.set(i, INVALID);
+        _next.set(i, INVALID);
+      } else {
+        _prev.set(i, _last[_init_level]);
+        _next.set(i, INVALID);
+        _next.set(_last[_init_level], i);
         _last[_init_level] = i;
       }
Index: lemon/euler.h
===================================================================
--- lemon/euler.h	(revision 578)
+++ lemon/euler.h	(revision 550)
@@ -25,5 +25,5 @@
 #include <list>
 
-/// \ingroup graph_properties
+/// \ingroup graph_prop
 /// \file
 /// \brief Euler tour
@@ -37,5 +37,5 @@
   ///Euler iterator for digraphs.
 
-  /// \ingroup graph_properties
+  /// \ingroup graph_prop
   ///This iterator converts to the \c Arc type of the digraph and using
   ///operator ++, it provides an Euler tour of a \e directed
@@ -124,5 +124,5 @@
   ///Euler iterator for graphs.
 
-  /// \ingroup graph_properties
+  /// \ingroup graph_prop
   ///This iterator converts to the \c Arc (or \c Edge)
   ///type of the digraph and using
@@ -229,5 +229,5 @@
   ///Checks if the graph is Eulerian
 
-  /// \ingroup graph_properties
+  /// \ingroup graph_prop
   ///Checks if the graph is Eulerian. It works for both directed and undirected
   ///graphs.
Index: lemon/full_graph.h
===================================================================
--- lemon/full_graph.h	(revision 574)
+++ lemon/full_graph.h	(revision 440)
@@ -158,6 +158,7 @@
   /// constant space in memory.
   ///
-  /// This class fully conforms to the \ref concepts::Digraph
-  /// "Digraph concept".
+  /// This class conforms to the \ref concepts::Digraph "Digraph" concept
+  /// and it also has an important extra feature that its maps are
+  /// real \ref concepts::ReferenceMap "reference map"s.
   ///
   /// The \c FullDigraph and \c FullGraph classes are very similar,
@@ -527,5 +528,7 @@
   /// space in memory.
   ///
-  /// This class fully conforms to the \ref concepts::Graph "Graph concept".
+  /// This class conforms to the \ref concepts::Graph "Graph" concept
+  /// and it also has an important extra feature that its maps are
+  /// real \ref concepts::ReferenceMap "reference map"s.
   ///
   /// The \c FullGraph and \c FullDigraph classes are very similar,
Index: lemon/glpk.cc
===================================================================
--- lemon/glpk.cc	(revision 568)
+++ lemon/glpk.cc	(revision 558)
@@ -32,5 +32,4 @@
     lp = glp_create_prob();
     glp_create_index(lp);
-    messageLevel(MESSAGE_NOTHING);
   }
 
@@ -41,5 +40,4 @@
     rows = other.rows;
     cols = other.cols;
-    messageLevel(MESSAGE_NOTHING);
   }
 
@@ -529,24 +527,4 @@
   }
 
-  void GlpkBase::_messageLevel(MessageLevel level) {
-    switch (level) {
-    case MESSAGE_NOTHING:
-      _message_level = GLP_MSG_OFF;
-      break;
-    case MESSAGE_ERROR:
-      _message_level = GLP_MSG_ERR;
-      break;
-    case MESSAGE_WARNING:
-      _message_level = GLP_MSG_ERR;
-      break;
-    case MESSAGE_NORMAL:
-      _message_level = GLP_MSG_ON;
-      break;
-    case MESSAGE_VERBOSE:
-      _message_level = GLP_MSG_ALL;
-      break;
-    }
-  }
-
   GlpkBase::FreeEnvHelper GlpkBase::freeEnvHelper;
 
@@ -555,4 +533,5 @@
   GlpkLp::GlpkLp()
     : LpBase(), LpSolver(), GlpkBase() {
+    messageLevel(MESSAGE_NO_OUTPUT);
     presolver(false);
   }
@@ -560,4 +539,5 @@
   GlpkLp::GlpkLp(const GlpkLp& other)
     : LpBase(other), LpSolver(other), GlpkBase(other) {
+    messageLevel(MESSAGE_NO_OUTPUT);
     presolver(false);
   }
@@ -583,5 +563,18 @@
     glp_init_smcp(&smcp);
 
-    smcp.msg_lev = _message_level;
+    switch (_message_level) {
+    case MESSAGE_NO_OUTPUT:
+      smcp.msg_lev = GLP_MSG_OFF;
+      break;
+    case MESSAGE_ERROR_MESSAGE:
+      smcp.msg_lev = GLP_MSG_ERR;
+      break;
+    case MESSAGE_NORMAL_OUTPUT:
+      smcp.msg_lev = GLP_MSG_ON;
+      break;
+    case MESSAGE_FULL_OUTPUT:
+      smcp.msg_lev = GLP_MSG_ALL;
+      break;
+    }
     smcp.presolve = _presolve;
 
@@ -612,5 +605,18 @@
     glp_init_smcp(&smcp);
 
-    smcp.msg_lev = _message_level;
+    switch (_message_level) {
+    case MESSAGE_NO_OUTPUT:
+      smcp.msg_lev = GLP_MSG_OFF;
+      break;
+    case MESSAGE_ERROR_MESSAGE:
+      smcp.msg_lev = GLP_MSG_ERR;
+      break;
+    case MESSAGE_NORMAL_OUTPUT:
+      smcp.msg_lev = GLP_MSG_ON;
+      break;
+    case MESSAGE_FULL_OUTPUT:
+      smcp.msg_lev = GLP_MSG_ALL;
+      break;
+    }
     smcp.meth = GLP_DUAL;
     smcp.presolve = _presolve;
@@ -853,12 +859,18 @@
   }
 
+  void GlpkLp::messageLevel(MessageLevel m) {
+    _message_level = m;
+  }
+
   // GlpkMip members
 
   GlpkMip::GlpkMip()
     : LpBase(), MipSolver(), GlpkBase() {
+    messageLevel(MESSAGE_NO_OUTPUT);
   }
 
   GlpkMip::GlpkMip(const GlpkMip& other)
     : LpBase(), MipSolver(), GlpkBase(other) {
+    messageLevel(MESSAGE_NO_OUTPUT);
   }
 
@@ -889,5 +901,18 @@
     glp_init_smcp(&smcp);
 
-    smcp.msg_lev = _message_level;
+    switch (_message_level) {
+    case MESSAGE_NO_OUTPUT:
+      smcp.msg_lev = GLP_MSG_OFF;
+      break;
+    case MESSAGE_ERROR_MESSAGE:
+      smcp.msg_lev = GLP_MSG_ERR;
+      break;
+    case MESSAGE_NORMAL_OUTPUT:
+      smcp.msg_lev = GLP_MSG_ON;
+      break;
+    case MESSAGE_FULL_OUTPUT:
+      smcp.msg_lev = GLP_MSG_ALL;
+      break;
+    }
     smcp.meth = GLP_DUAL;
 
@@ -914,5 +939,18 @@
     glp_init_iocp(&iocp);
 
-    iocp.msg_lev = _message_level;
+    switch (_message_level) {
+    case MESSAGE_NO_OUTPUT:
+      iocp.msg_lev = GLP_MSG_OFF;
+      break;
+    case MESSAGE_ERROR_MESSAGE:
+      iocp.msg_lev = GLP_MSG_ERR;
+      break;
+    case MESSAGE_NORMAL_OUTPUT:
+      iocp.msg_lev = GLP_MSG_ON;
+      break;
+    case MESSAGE_FULL_OUTPUT:
+      iocp.msg_lev = GLP_MSG_ALL;
+      break;
+    }
 
     if (glp_intopt(lp, &iocp) != 0) return UNSOLVED;
@@ -965,3 +1003,7 @@
   const char* GlpkMip::_solverName() const { return "GlpkMip"; }
 
+  void GlpkMip::messageLevel(MessageLevel m) {
+    _message_level = m;
+  }
+
 } //END OF NAMESPACE LEMON
Index: lemon/glpk.h
===================================================================
--- lemon/glpk.h	(revision 568)
+++ lemon/glpk.h	(revision 557)
@@ -100,6 +100,4 @@
 
     virtual void _clear();
-
-    virtual void _messageLevel(MessageLevel level);
 
   private:
@@ -114,8 +112,4 @@
     
     static FreeEnvHelper freeEnvHelper;
-
-  protected:
-    
-    int _message_level;
     
   public:
@@ -198,4 +192,28 @@
     void presolver(bool presolve);
 
+    ///Enum for \c messageLevel() parameter
+    enum MessageLevel {
+      /// no output (default value)
+      MESSAGE_NO_OUTPUT = 0,
+      /// error messages only
+      MESSAGE_ERROR_MESSAGE = 1,
+      /// normal output
+      MESSAGE_NORMAL_OUTPUT = 2,
+      /// full output (includes informational messages)
+      MESSAGE_FULL_OUTPUT = 3
+    };
+
+  private:
+
+    MessageLevel _message_level;
+
+  public:
+
+    ///Set the verbosity of the messages
+
+    ///Set the verbosity of the messages
+    ///
+    ///\param m is the level of the messages output by the solver routines.
+    void messageLevel(MessageLevel m);
   };
 
@@ -227,4 +245,28 @@
     virtual Value _getSolValue() const;
 
+    ///Enum for \c messageLevel() parameter
+    enum MessageLevel {
+      /// no output (default value)
+      MESSAGE_NO_OUTPUT = 0,
+      /// error messages only
+      MESSAGE_ERROR_MESSAGE = 1,
+      /// normal output
+      MESSAGE_NORMAL_OUTPUT = 2,
+      /// full output (includes informational messages)
+      MESSAGE_FULL_OUTPUT = 3
+    };
+
+  private:
+
+    MessageLevel _message_level;
+
+  public:
+
+    ///Set the verbosity of the messages
+
+    ///Set the verbosity of the messages
+    ///
+    ///\param m is the level of the messages output by the solver routines.
+    void messageLevel(MessageLevel m);
   };
 
Index: lemon/gomory_hu.h
===================================================================
--- lemon/gomory_hu.h	(revision 588)
+++ lemon/gomory_hu.h	(revision 534)
@@ -43,13 +43,15 @@
   /// between these nodes. Moreover the components obtained by removing
   /// this edge from the tree determine the corresponding minimum cut.
+  ///
   /// Therefore once this tree is computed, the minimum cut between any pair
   /// of nodes can easily be obtained.
   /// 
   /// The algorithm calculates \e n-1 distinct minimum cuts (currently with
-  /// the \ref Preflow algorithm), thus it has \f$O(n^3\sqrt{e})\f$ overall
-  /// time complexity. It calculates a rooted Gomory-Hu tree.
-  /// The structure of the tree and the edge weights can be
-  /// obtained using \c predNode(), \c predValue() and \c rootDist().
-  /// The functions \c minCutMap() and \c minCutValue() calculate
+  /// the \ref Preflow algorithm), therefore the algorithm has
+  /// \f$(O(n^3\sqrt{e})\f$ overall time complexity. It calculates a
+  /// rooted Gomory-Hu tree, its structure and the weights can be obtained
+  /// by \c predNode(), \c predValue() and \c rootDist().
+  /// 
+  /// The members \c minCutMap() and \c minCutValue() calculate
   /// the minimum cut and the minimum cut value between any two nodes
   /// in the graph. You can also list (iterate on) the nodes and the
@@ -57,6 +59,6 @@
   ///
   /// \tparam GR The type of the undirected graph the algorithm runs on.
-  /// \tparam CAP The type of the edge map containing the capacities.
-  /// The default map type is \ref concepts::Graph::EdgeMap "GR::EdgeMap<int>".
+  /// \tparam CAP The type of the edge map describing the edge capacities.
+  /// It is \ref concepts::Graph::EdgeMap "GR::EdgeMap<int>" by default.
 #ifdef DOXYGEN
   template <typename GR,
@@ -69,7 +71,7 @@
   public:
 
-    /// The graph type of the algorithm
+    /// The graph type
     typedef GR Graph;
-    /// The capacity map type of the algorithm
+    /// The type of the edge capacity map
     typedef CAP Capacity;
     /// The value type of capacities
@@ -116,5 +118,5 @@
     /// \brief Constructor
     ///
-    /// Constructor.
+    /// Constructor
     /// \param graph The undirected graph the algorithm runs on.
     /// \param capacity The edge capacity map.
@@ -129,5 +131,5 @@
     /// \brief Destructor
     ///
-    /// Destructor.
+    /// Destructor
     ~GomoryHu() {
       destroyStructures();
@@ -142,9 +144,9 @@
       _root = NodeIt(_graph);
       for (NodeIt n(_graph); n != INVALID; ++n) {
-        (*_pred)[n] = _root;
-        (*_order)[n] = -1;
-      }
-      (*_pred)[_root] = INVALID;
-      (*_weight)[_root] = std::numeric_limits<Value>::max(); 
+	_pred->set(n, _root);
+	_order->set(n, -1);
+      }
+      _pred->set(_root, INVALID);
+      _weight->set(_root, std::numeric_limits<Value>::max()); 
     }
 
@@ -163,20 +165,20 @@
 	fa.runMinCut();
 
-	(*_weight)[n] = fa.flowValue();
+	_weight->set(n, fa.flowValue());
 
 	for (NodeIt nn(_graph); nn != INVALID; ++nn) {
 	  if (nn != n && fa.minCut(nn) && (*_pred)[nn] == pn) {
-	    (*_pred)[nn] = n;
+	    _pred->set(nn, n);
 	  }
 	}
 	if ((*_pred)[pn] != INVALID && fa.minCut((*_pred)[pn])) {
-	  (*_pred)[n] = (*_pred)[pn];
-	  (*_pred)[pn] = n;
-	  (*_weight)[n] = (*_weight)[pn];
-	  (*_weight)[pn] = fa.flowValue();
-	}
-      }
-
-      (*_order)[_root] = 0;
+	  _pred->set(n, (*_pred)[pn]);
+	  _pred->set(pn, n);
+	  _weight->set(n, (*_weight)[pn]);
+	  _weight->set(pn, fa.flowValue());	
+	}
+      }
+
+      _order->set(_root, 0);
       int index = 1;
 
@@ -189,5 +191,5 @@
 	}
 	while (!st.empty()) {
-	  (*_order)[st.back()] = index++;
+	  _order->set(st.back(), index++);
 	  st.pop_back();
 	}
@@ -214,5 +216,5 @@
     ///The results of the algorithm can be obtained using these
     ///functions.\n
-    ///\ref run() should be called before using them.\n
+    ///\ref run() "run()" should be called before using them.\n
     ///See also \ref MinCutNodeIt and \ref MinCutEdgeIt.
 
@@ -221,11 +223,17 @@
     /// \brief Return the predecessor node in the Gomory-Hu tree.
     ///
-    /// This function returns the predecessor node of the given node
+    /// This function returns the predecessor node in the Gomory-Hu tree.
+    /// If the node is
+    /// the root of the Gomory-Hu tree, then it returns \c INVALID.
+    Node predNode(const Node& node) {
+      return (*_pred)[node];
+    }
+
+    /// \brief Return the distance from the root node in the Gomory-Hu tree.
+    ///
+    /// This function returns the distance of \c node from the root node
     /// in the Gomory-Hu tree.
-    /// If \c node is the root of the tree, then it returns \c INVALID.
-    ///
-    /// \pre \ref run() must be called before using this function.
-    Node predNode(const Node& node) const {
-      return (*_pred)[node];
+    int rootDist(const Node& node) {
+      return (*_order)[node];
     }
 
@@ -233,32 +241,16 @@
     /// Gomory-Hu tree.
     ///
-    /// This function returns the weight of the predecessor edge of the 
-    /// given node in the Gomory-Hu tree.
-    /// If \c node is the root of the tree, the result is undefined.
-    ///
-    /// \pre \ref run() must be called before using this function.
-    Value predValue(const Node& node) const {
+    /// This function returns the weight of the predecessor edge in the
+    /// Gomory-Hu tree.  If the node is the root, the result is undefined.
+    Value predValue(const Node& node) {
       return (*_weight)[node];
     }
 
-    /// \brief Return the distance from the root node in the Gomory-Hu tree.
-    ///
-    /// This function returns the distance of the given node from the root
-    /// node in the Gomory-Hu tree.
-    ///
-    /// \pre \ref run() must be called before using this function.
-    int rootDist(const Node& node) const {
-      return (*_order)[node];
-    }
-
     /// \brief Return the minimum cut value between two nodes
     ///
-    /// This function returns the minimum cut value between the nodes
-    /// \c s and \c t. 
-    /// It finds the nearest common ancestor of the given nodes in the
-    /// Gomory-Hu tree and calculates the minimum weight edge on the
-    /// paths to the ancestor.
-    ///
-    /// \pre \ref run() must be called before using this function.
+    /// This function returns the minimum cut value between two nodes. The
+    /// algorithm finds the nearest common ancestor in the Gomory-Hu
+    /// tree and calculates the minimum weight edge on the paths to
+    /// the ancestor.
     Value minCutValue(const Node& s, const Node& t) const {
       Node sn = s, tn = t;
@@ -283,21 +275,14 @@
     /// \c s to \c true and the other nodes to \c false.
     ///
-    /// For higher level interfaces see MinCutNodeIt and MinCutEdgeIt.
-    ///
-    /// \param s The base node.
-    /// \param t The node you want to separate from node \c s.
-    /// \param cutMap The cut will be returned in this map.
-    /// It must be a \c bool (or convertible) \ref concepts::ReadWriteMap
-    /// "ReadWriteMap" on the graph nodes.
-    ///
-    /// \return The value of the minimum cut between \c s and \c t.
-    ///
-    /// \pre \ref run() must be called before using this function.
+    /// For higher level interfaces, see MinCutNodeIt and MinCutEdgeIt.
     template <typename CutMap>
-    Value minCutMap(const Node& s, ///< 
+    Value minCutMap(const Node& s, ///< The base node.
                     const Node& t,
-                    ///< 
+                    ///< The node you want to separate from node \c s.
                     CutMap& cutMap
-                    ///< 
+                    ///< The cut will be returned in this map.
+                    /// It must be a \c bool (or convertible) 
+                    /// \ref concepts::ReadWriteMap "ReadWriteMap"
+                    /// on the graph nodes.
                     ) const {
       Node sn = s, tn = t;
@@ -325,7 +310,7 @@
 
       typename Graph::template NodeMap<bool> reached(_graph, false);
-      reached[_root] = true;
+      reached.set(_root, true);
       cutMap.set(_root, !s_root);
-      reached[rn] = true;
+      reached.set(rn, true);
       cutMap.set(rn, s_root);
 
@@ -354,5 +339,5 @@
     
     /// This iterator class lists the nodes of a minimum cut found by
-    /// GomoryHu. Before using it, you must allocate a GomoryHu class
+    /// GomoryHu. Before using it, you must allocate a GomoryHu class,
     /// and call its \ref GomoryHu::run() "run()" method.
     ///
@@ -451,5 +436,5 @@
     
     /// This iterator class lists the edges of a minimum cut found by
-    /// GomoryHu. Before using it, you must allocate a GomoryHu class
+    /// GomoryHu. Before using it, you must allocate a GomoryHu class,
     /// and call its \ref GomoryHu::run() "run()" method.
     ///
@@ -463,6 +448,6 @@
     ///   value+=capacities[e];
     /// \endcode
-    /// The result will be the same as the value returned by
-    /// \ref GomoryHu::minCutValue() "gom.minCutValue(s,t)".
+    /// the result will be the same as it is returned by
+    /// \ref GomoryHu::minCutValue() "gom.minCutValue(s,t)"
     class MinCutEdgeIt
     {
@@ -484,8 +469,4 @@
       
     public:
-      /// Constructor
-
-      /// Constructor.
-      ///
       MinCutEdgeIt(GomoryHu const &gomory,
                    ///< The GomoryHu class. You must call its
@@ -498,5 +479,5 @@
                    ///< If it is \c true (default) then the listed arcs
                    ///  will be oriented from the
-                   ///  nodes of the component containing \c s,
+                   ///  the nodes of the component containing \c s,
                    ///  otherwise they will be oriented in the opposite
                    ///  direction.
Index: lemon/graph_to_eps.h
===================================================================
--- lemon/graph_to_eps.h	(revision 576)
+++ lemon/graph_to_eps.h	(revision 550)
@@ -269,16 +269,20 @@
     ///\image html nodeshape_1.png
     ///\image latex nodeshape_1.eps "SQUARE shape (1)" width=2cm
+    ///
     SQUARE=1,
     /// = 2
     ///\image html nodeshape_2.png
     ///\image latex nodeshape_2.eps "DIAMOND shape (2)" width=2cm
+    ///
     DIAMOND=2,
     /// = 3
     ///\image html nodeshape_3.png
-    ///\image latex nodeshape_3.eps "MALE shape (3)" width=2cm
+    ///\image latex nodeshape_2.eps "MALE shape (4)" width=2cm
+    ///
     MALE=3,
     /// = 4
     ///\image html nodeshape_4.png
-    ///\image latex nodeshape_4.eps "FEMALE shape (4)" width=2cm
+    ///\image latex nodeshape_2.eps "FEMALE shape (4)" width=2cm
+    ///
     FEMALE=4
   };
Index: lemon/grid_graph.h
===================================================================
--- lemon/grid_graph.h	(revision 574)
+++ lemon/grid_graph.h	(revision 550)
@@ -498,5 +498,7 @@
   ///
   /// This graph type fully conforms to the \ref concepts::Graph
-  /// "Graph concept".
+  /// "Graph" concept, and it also has an important extra feature
+  /// that its maps are real \ref concepts::ReferenceMap
+  /// "reference map"s.
   class GridGraph : public ExtendedGridGraphBase {
   public:
Index: lemon/hao_orlin.h
===================================================================
--- lemon/hao_orlin.h	(revision 589)
+++ lemon/hao_orlin.h	(revision 550)
@@ -32,6 +32,6 @@
 /// \brief Implementation of the Hao-Orlin algorithm.
 ///
-/// Implementation of the Hao-Orlin algorithm for finding a minimum cut 
-/// in a digraph.
+/// Implementation of the Hao-Orlin algorithm class for testing network
+/// reliability.
 
 namespace lemon {
@@ -39,32 +39,30 @@
   /// \ingroup min_cut
   ///
-  /// \brief Hao-Orlin algorithm for finding a minimum cut in a digraph.
+  /// \brief %Hao-Orlin algorithm to find a minimum cut in directed graphs.
   ///
-  /// This class implements the Hao-Orlin algorithm for finding a minimum
-  /// value cut in a directed graph \f$D=(V,A)\f$. 
-  /// It takes a fixed node \f$ source \in V \f$ and
+  /// Hao-Orlin calculates a minimum cut in a directed graph
+  /// \f$D=(V,A)\f$. It takes a fixed node \f$ source \in V \f$ and
   /// consists of two phases: in the first phase it determines a
   /// minimum cut with \f$ source \f$ on the source-side (i.e. a set
-  /// \f$ X\subsetneq V \f$ with \f$ source \in X \f$ and minimal outgoing
-  /// capacity) and in the second phase it determines a minimum cut
+  /// \f$ X\subsetneq V \f$ with \f$ source \in X \f$ and minimal
+  /// out-degree) and in the second phase it determines a minimum cut
   /// with \f$ source \f$ on the sink-side (i.e. a set
-  /// \f$ X\subsetneq V \f$ with \f$ source \notin X \f$ and minimal outgoing
-  /// capacity). Obviously, the smaller of these two cuts will be a
+  /// \f$ X\subsetneq V \f$ with \f$ source \notin X \f$ and minimal
+  /// out-degree). Obviously, the smaller of these two cuts will be a
   /// minimum cut of \f$ D \f$. The algorithm is a modified
-  /// preflow push-relabel algorithm. Our implementation calculates
+  /// push-relabel preflow algorithm and our implementation calculates
   /// the minimum cut in \f$ O(n^2\sqrt{m}) \f$ time (we use the
   /// highest-label rule), or in \f$O(nm)\f$ for unit capacities. The
-  /// purpose of such algorithm is e.g. testing network reliability.
+  /// purpose of such algorithm is testing network reliability. For an
+  /// undirected graph you can run just the first phase of the
+  /// algorithm or you can use the algorithm of Nagamochi and Ibaraki
+  /// which solves the undirected problem in
+  /// \f$ O(nm + n^2 \log n) \f$ time: it is implemented in the
+  /// NagamochiIbaraki algorithm class.
   ///
-  /// For an undirected graph you can run just the first phase of the
-  /// algorithm or you can use the algorithm of Nagamochi and Ibaraki,
-  /// which solves the undirected problem in \f$ O(nm + n^2 \log n) \f$ 
-  /// time. It is implemented in the NagamochiIbaraki algorithm class.
-  ///
-  /// \tparam GR The type of the digraph the algorithm runs on.
-  /// \tparam CAP The type of the arc map containing the capacities,
-  /// which can be any numreric type. The default map type is
-  /// \ref concepts::Digraph::ArcMap "GR::ArcMap<int>".
-  /// \tparam TOL Tolerance class for handling inexact computations. The
+  /// \param GR The digraph class the algorithm runs on.
+  /// \param CAP An arc map of capacities which can be any numreric type.
+  /// The default type is \ref concepts::Digraph::ArcMap "GR::ArcMap<int>".
+  /// \param TOL Tolerance class for handling inexact computations. The
   /// default tolerance type is \ref Tolerance "Tolerance<CAP::Value>".
 #ifdef DOXYGEN
@@ -76,18 +74,13 @@
 #endif
   class HaoOrlin {
-  public:
-   
-    /// The digraph type of the algorithm
+  private:
+
     typedef GR Digraph;
-    /// The capacity map type of the algorithm
     typedef CAP CapacityMap;
-    /// The tolerance type of the algorithm
     typedef TOL Tolerance;
 
-  private:
-
     typedef typename CapacityMap::Value Value;
 
-    TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
+    TEMPLATE_GRAPH_TYPEDEFS(Digraph);
 
     const Digraph& _graph;
@@ -169,5 +162,5 @@
 
     void activate(const Node& i) {
-      (*_active)[i] = true;
+      _active->set(i, true);
 
       int bucket = (*_bucket)[i];
@@ -175,19 +168,19 @@
       if ((*_prev)[i] == INVALID || (*_active)[(*_prev)[i]]) return;
       //unlace
-      (*_next)[(*_prev)[i]] = (*_next)[i];
+      _next->set((*_prev)[i], (*_next)[i]);
       if ((*_next)[i] != INVALID) {
-        (*_prev)[(*_next)[i]] = (*_prev)[i];
+        _prev->set((*_next)[i], (*_prev)[i]);
       } else {
         _last[bucket] = (*_prev)[i];
       }
       //lace
-      (*_next)[i] = _first[bucket];
-      (*_prev)[_first[bucket]] = i;
-      (*_prev)[i] = INVALID;
+      _next->set(i, _first[bucket]);
+      _prev->set(_first[bucket], i);
+      _prev->set(i, INVALID);
       _first[bucket] = i;
     }
 
     void deactivate(const Node& i) {
-      (*_active)[i] = false;
+      _active->set(i, false);
       int bucket = (*_bucket)[i];
 
@@ -195,14 +188,14 @@
 
       //unlace
-      (*_prev)[(*_next)[i]] = (*_prev)[i];
+      _prev->set((*_next)[i], (*_prev)[i]);
       if ((*_prev)[i] != INVALID) {
-        (*_next)[(*_prev)[i]] = (*_next)[i];
+        _next->set((*_prev)[i], (*_next)[i]);
       } else {
         _first[bucket] = (*_next)[i];
       }
       //lace
-      (*_prev)[i] = _last[bucket];
-      (*_next)[_last[bucket]] = i;
-      (*_next)[i] = INVALID;
+      _prev->set(i, _last[bucket]);
+      _next->set(_last[bucket], i);
+      _next->set(i, INVALID);
       _last[bucket] = i;
     }
@@ -211,12 +204,12 @@
       (*_bucket)[i] = bucket;
       if (_last[bucket] != INVALID) {
-        (*_prev)[i] = _last[bucket];
-        (*_next)[_last[bucket]] = i;
-        (*_next)[i] = INVALID;
+        _prev->set(i, _last[bucket]);
+        _next->set(_last[bucket], i);
+        _next->set(i, INVALID);
         _last[bucket] = i;
       } else {
-        (*_prev)[i] = INVALID;
+        _prev->set(i, INVALID);
         _first[bucket] = i;
-        (*_next)[i] = INVALID;
+        _next->set(i, INVALID);
         _last[bucket] = i;
       }
@@ -226,10 +219,9 @@
 
       for (NodeIt n(_graph); n != INVALID; ++n) {
-        (*_excess)[n] = 0;
-        (*_source_set)[n] = false;
+        _excess->set(n, 0);
       }
 
       for (ArcIt a(_graph); a != INVALID; ++a) {
-        (*_flow)[a] = 0;
+        _flow->set(a, 0);
       }
 
@@ -241,5 +233,5 @@
         typename Digraph::template NodeMap<bool> reached(_graph, false);
 
-        reached[_source] = true;
+        reached.set(_source, true);
         bool first_set = true;
 
@@ -249,5 +241,5 @@
 
           queue[qlast++] = t;
-          reached[t] = true;
+          reached.set(t, true);
 
           while (qfirst != qlast) {
@@ -266,5 +258,5 @@
               Node u = _graph.source(a);
               if (!reached[u] && _tolerance.positive((*_capacity)[a])) {
-                reached[u] = true;
+                reached.set(u, true);
                 queue[qlast++] = u;
               }
@@ -275,8 +267,8 @@
 
         ++bucket_num;
-        (*_bucket)[_source] = 0;
+        _bucket->set(_source, 0);
         _dormant[0] = true;
       }
-      (*_source_set)[_source] = true;
+      _source_set->set(_source, true);
 
       Node target = _last[_sets.back().back()];
@@ -285,6 +277,6 @@
           if (_tolerance.positive((*_capacity)[a])) {
             Node u = _graph.target(a);
-            (*_flow)[a] = (*_capacity)[a];
-            (*_excess)[u] += (*_capacity)[a];
+            _flow->set(a, (*_capacity)[a]);
+            _excess->set(u, (*_excess)[u] + (*_capacity)[a]);
             if (!(*_active)[u] && u != _source) {
               activate(u);
@@ -327,12 +319,12 @@
               }
               if (!_tolerance.less(rem, excess)) {
-                (*_flow)[a] += excess;
-                (*_excess)[v] += excess;
+                _flow->set(a, (*_flow)[a] + excess);
+                _excess->set(v, (*_excess)[v] + excess);
                 excess = 0;
                 goto no_more_push;
               } else {
                 excess -= rem;
-                (*_excess)[v] += rem;
-                (*_flow)[a] = (*_capacity)[a];
+                _excess->set(v, (*_excess)[v] + rem);
+                _flow->set(a, (*_capacity)[a]);
               }
             } else if (next_bucket > (*_bucket)[v]) {
@@ -351,12 +343,12 @@
               }
               if (!_tolerance.less(rem, excess)) {
-                (*_flow)[a] -= excess;
-                (*_excess)[v] += excess;
+                _flow->set(a, (*_flow)[a] - excess);
+                _excess->set(v, (*_excess)[v] + excess);
                 excess = 0;
                 goto no_more_push;
               } else {
                 excess -= rem;
-                (*_excess)[v] += rem;
-                (*_flow)[a] = 0;
+                _excess->set(v, (*_excess)[v] + rem);
+                _flow->set(a, 0);
               }
             } else if (next_bucket > (*_bucket)[v]) {
@@ -367,5 +359,5 @@
         no_more_push:
 
-          (*_excess)[n] = excess;
+          _excess->set(n, excess);
 
           if (excess != 0) {
@@ -385,5 +377,5 @@
             } else if (next_bucket == _node_num) {
               _first[(*_bucket)[n]] = (*_next)[n];
-              (*_prev)[(*_next)[n]] = INVALID;
+              _prev->set((*_next)[n], INVALID);
 
               std::list<std::list<int> >::iterator new_set =
@@ -391,8 +383,8 @@
 
               new_set->push_front(bucket_num);
-              (*_bucket)[n] = bucket_num;
+              _bucket->set(n, bucket_num);
               _first[bucket_num] = _last[bucket_num] = n;
-              (*_next)[n] = INVALID;
-              (*_prev)[n] = INVALID;
+              _next->set(n, INVALID);
+              _prev->set(n, INVALID);
               _dormant[bucket_num] = true;
               ++bucket_num;
@@ -404,5 +396,5 @@
             } else {
               _first[*_highest] = (*_next)[n];
-              (*_prev)[(*_next)[n]] = INVALID;
+              _prev->set((*_next)[n], INVALID);
 
               while (next_bucket != *_highest) {
@@ -418,8 +410,8 @@
               --_highest;
 
-              (*_bucket)[n] = *_highest;
-              (*_next)[n] = _first[*_highest];
+              _bucket->set(n, *_highest);
+              _next->set(n, _first[*_highest]);
               if (_first[*_highest] != INVALID) {
-                (*_prev)[_first[*_highest]] = n;
+                _prev->set(_first[*_highest], n);
               } else {
                 _last[*_highest] = n;
@@ -443,5 +435,5 @@
           _min_cut = (*_excess)[target];
           for (NodeIt i(_graph); i != INVALID; ++i) {
-            (*_min_cut_map)[i] = true;
+            _min_cut_map->set(i, true);
           }
           for (std::list<int>::iterator it = _sets.back().begin();
@@ -449,5 +441,5 @@
             Node n = _first[*it];
             while (n != INVALID) {
-              (*_min_cut_map)[n] = false;
+              _min_cut_map->set(n, false);
               n = (*_next)[n];
             }
@@ -462,5 +454,5 @@
               new_target = (*_prev)[target];
             } else {
-              (*_prev)[(*_next)[target]] = (*_prev)[target];
+              _prev->set((*_next)[target], (*_prev)[target]);
               new_target = (*_next)[target];
             }
@@ -468,5 +460,5 @@
               _first[(*_bucket)[target]] = (*_next)[target];
             } else {
-              (*_next)[(*_prev)[target]] = (*_next)[target];
+              _next->set((*_prev)[target], (*_next)[target]);
             }
           } else {
@@ -484,7 +476,7 @@
           }
 
-          (*_bucket)[target] = 0;
-
-          (*_source_set)[target] = true;
+          _bucket->set(target, 0);
+
+          _source_set->set(target, true);
           for (OutArcIt a(_graph, target); a != INVALID; ++a) {
             Value rem = (*_capacity)[a] - (*_flow)[a];
@@ -494,6 +486,6 @@
               activate(v);
             }
-            (*_excess)[v] += rem;
-            (*_flow)[a] = (*_capacity)[a];
+            _excess->set(v, (*_excess)[v] + rem);
+            _flow->set(a, (*_capacity)[a]);
           }
 
@@ -505,6 +497,6 @@
               activate(v);
             }
-            (*_excess)[v] += rem;
-            (*_flow)[a] = 0;
+            _excess->set(v, (*_excess)[v] + rem);
+            _flow->set(a, 0);
           }
 
@@ -526,10 +518,9 @@
 
       for (NodeIt n(_graph); n != INVALID; ++n) {
-        (*_excess)[n] = 0;
-        (*_source_set)[n] = false;
+        _excess->set(n, 0);
       }
 
       for (ArcIt a(_graph); a != INVALID; ++a) {
-        (*_flow)[a] = 0;
+        _flow->set(a, 0);
       }
 
@@ -541,5 +532,5 @@
         typename Digraph::template NodeMap<bool> reached(_graph, false);
 
-        reached[_source] = true;
+        reached.set(_source, true);
 
         bool first_set = true;
@@ -550,5 +541,5 @@
 
           queue[qlast++] = t;
-          reached[t] = true;
+          reached.set(t, true);
 
           while (qfirst != qlast) {
@@ -567,5 +558,5 @@
               Node u = _graph.target(a);
               if (!reached[u] && _tolerance.positive((*_capacity)[a])) {
-                reached[u] = true;
+                reached.set(u, true);
                 queue[qlast++] = u;
               }
@@ -576,8 +567,8 @@
 
         ++bucket_num;
-        (*_bucket)[_source] = 0;
+        _bucket->set(_source, 0);
         _dormant[0] = true;
       }
-      (*_source_set)[_source] = true;
+      _source_set->set(_source, true);
 
       Node target = _last[_sets.back().back()];
@@ -586,6 +577,6 @@
           if (_tolerance.positive((*_capacity)[a])) {
             Node u = _graph.source(a);
-            (*_flow)[a] = (*_capacity)[a];
-            (*_excess)[u] += (*_capacity)[a];
+            _flow->set(a, (*_capacity)[a]);
+            _excess->set(u, (*_excess)[u] + (*_capacity)[a]);
             if (!(*_active)[u] && u != _source) {
               activate(u);
@@ -628,12 +619,12 @@
               }
               if (!_tolerance.less(rem, excess)) {
-                (*_flow)[a] += excess;
-                (*_excess)[v] += excess;
+                _flow->set(a, (*_flow)[a] + excess);
+                _excess->set(v, (*_excess)[v] + excess);
                 excess = 0;
                 goto no_more_push;
               } else {
                 excess -= rem;
-                (*_excess)[v] += rem;
-                (*_flow)[a] = (*_capacity)[a];
+                _excess->set(v, (*_excess)[v] + rem);
+                _flow->set(a, (*_capacity)[a]);
               }
             } else if (next_bucket > (*_bucket)[v]) {
@@ -652,12 +643,12 @@
               }
               if (!_tolerance.less(rem, excess)) {
-                (*_flow)[a] -= excess;
-                (*_excess)[v] += excess;
+                _flow->set(a, (*_flow)[a] - excess);
+                _excess->set(v, (*_excess)[v] + excess);
                 excess = 0;
                 goto no_more_push;
               } else {
                 excess -= rem;
-                (*_excess)[v] += rem;
-                (*_flow)[a] = 0;
+                _excess->set(v, (*_excess)[v] + rem);
+                _flow->set(a, 0);
               }
             } else if (next_bucket > (*_bucket)[v]) {
@@ -668,5 +659,5 @@
         no_more_push:
 
-          (*_excess)[n] = excess;
+          _excess->set(n, excess);
 
           if (excess != 0) {
@@ -686,5 +677,5 @@
             } else if (next_bucket == _node_num) {
               _first[(*_bucket)[n]] = (*_next)[n];
-              (*_prev)[(*_next)[n]] = INVALID;
+              _prev->set((*_next)[n], INVALID);
 
               std::list<std::list<int> >::iterator new_set =
@@ -692,8 +683,8 @@
 
               new_set->push_front(bucket_num);
-              (*_bucket)[n] = bucket_num;
+              _bucket->set(n, bucket_num);
               _first[bucket_num] = _last[bucket_num] = n;
-              (*_next)[n] = INVALID;
-              (*_prev)[n] = INVALID;
+              _next->set(n, INVALID);
+              _prev->set(n, INVALID);
               _dormant[bucket_num] = true;
               ++bucket_num;
@@ -705,5 +696,5 @@
             } else {
               _first[*_highest] = (*_next)[n];
-              (*_prev)[(*_next)[n]] = INVALID;
+              _prev->set((*_next)[n], INVALID);
 
               while (next_bucket != *_highest) {
@@ -718,8 +709,8 @@
               --_highest;
 
-              (*_bucket)[n] = *_highest;
-              (*_next)[n] = _first[*_highest];
+              _bucket->set(n, *_highest);
+              _next->set(n, _first[*_highest]);
               if (_first[*_highest] != INVALID) {
-                (*_prev)[_first[*_highest]] = n;
+                _prev->set(_first[*_highest], n);
               } else {
                 _last[*_highest] = n;
@@ -743,5 +734,5 @@
           _min_cut = (*_excess)[target];
           for (NodeIt i(_graph); i != INVALID; ++i) {
-            (*_min_cut_map)[i] = false;
+            _min_cut_map->set(i, false);
           }
           for (std::list<int>::iterator it = _sets.back().begin();
@@ -749,5 +740,5 @@
             Node n = _first[*it];
             while (n != INVALID) {
-              (*_min_cut_map)[n] = true;
+              _min_cut_map->set(n, true);
               n = (*_next)[n];
             }
@@ -762,5 +753,5 @@
               new_target = (*_prev)[target];
             } else {
-              (*_prev)[(*_next)[target]] = (*_prev)[target];
+              _prev->set((*_next)[target], (*_prev)[target]);
               new_target = (*_next)[target];
             }
@@ -768,5 +759,5 @@
               _first[(*_bucket)[target]] = (*_next)[target];
             } else {
-              (*_next)[(*_prev)[target]] = (*_next)[target];
+              _next->set((*_prev)[target], (*_next)[target]);
             }
           } else {
@@ -784,7 +775,7 @@
           }
 
-          (*_bucket)[target] = 0;
-
-          (*_source_set)[target] = true;
+          _bucket->set(target, 0);
+
+          _source_set->set(target, true);
           for (InArcIt a(_graph, target); a != INVALID; ++a) {
             Value rem = (*_capacity)[a] - (*_flow)[a];
@@ -794,6 +785,6 @@
               activate(v);
             }
-            (*_excess)[v] += rem;
-            (*_flow)[a] = (*_capacity)[a];
+            _excess->set(v, (*_excess)[v] + rem);
+            _flow->set(a, (*_capacity)[a]);
           }
 
@@ -805,6 +796,6 @@
               activate(v);
             }
-            (*_excess)[v] += rem;
-            (*_flow)[a] = 0;
+            _excess->set(v, (*_excess)[v] + rem);
+            _flow->set(a, 0);
           }
 
@@ -825,30 +816,29 @@
   public:
 
-    /// \name Execution Control
+    /// \name Execution control
     /// The simplest way to execute the algorithm is to use
     /// one of the member functions called \ref run().
     /// \n
-    /// If you need better control on the execution,
-    /// you have to call one of the \ref init() functions first, then
-    /// \ref calculateOut() and/or \ref calculateIn().
+    /// If you need more control on the execution,
+    /// first you must call \ref init(), then the \ref calculateIn() or
+    /// \ref calculateOut() functions.
 
     /// @{
 
-    /// \brief Initialize the internal data structures.
+    /// \brief Initializes the internal data structures.
     ///
-    /// This function initializes the internal data structures. It creates
-    /// the maps and some bucket structures for the algorithm.
-    /// The first node is used as the source node for the push-relabel
-    /// algorithm.
+    /// Initializes the internal data structures. It creates
+    /// the maps, residual graph adaptors and some bucket structures
+    /// for the algorithm.
     void init() {
       init(NodeIt(_graph));
     }
 
-    /// \brief Initialize the internal data structures.
+    /// \brief Initializes the internal data structures.
     ///
-    /// This function initializes the internal data structures. It creates
-    /// the maps and some bucket structures for the algorithm. 
-    /// The given node is used as the source node for the push-relabel
-    /// algorithm.
+    /// Initializes the internal data structures. It creates
+    /// the maps, residual graph adaptor and some bucket structures
+    /// for the algorithm. Node \c source  is used as the push-relabel
+    /// algorithm's source.
     void init(const Node& source) {
       _source = source;
@@ -890,24 +880,20 @@
 
 
-    /// \brief Calculate a minimum cut with \f$ source \f$ on the
+    /// \brief Calculates a minimum cut with \f$ source \f$ on the
     /// source-side.
     ///
-    /// This function calculates a minimum cut with \f$ source \f$ on the
+    /// Calculates a minimum cut with \f$ source \f$ on the
     /// source-side (i.e. a set \f$ X\subsetneq V \f$ with
-    /// \f$ source \in X \f$ and minimal outgoing capacity).
-    ///
-    /// \pre \ref init() must be called before using this function.
+    /// \f$ source \in X \f$ and minimal out-degree).
     void calculateOut() {
       findMinCutOut();
     }
 
-    /// \brief Calculate a minimum cut with \f$ source \f$ on the
-    /// sink-side.
+    /// \brief Calculates a minimum cut with \f$ source \f$ on the
+    /// target-side.
     ///
-    /// This function calculates a minimum cut with \f$ source \f$ on the
-    /// sink-side (i.e. a set \f$ X\subsetneq V \f$ with
-    /// \f$ source \notin X \f$ and minimal outgoing capacity).
-    ///
-    /// \pre \ref init() must be called before using this function.
+    /// Calculates a minimum cut with \f$ source \f$ on the
+    /// target-side (i.e. a set \f$ X\subsetneq V \f$ with
+    /// \f$ source \in X \f$ and minimal out-degree).
     void calculateIn() {
       findMinCutIn();
@@ -915,8 +901,8 @@
 
 
-    /// \brief Run the algorithm.
+    /// \brief Runs the algorithm.
     ///
-    /// This function runs the algorithm. It finds nodes \c source and
-    /// \c target arbitrarily and then calls \ref init(), \ref calculateOut()
+    /// Runs the algorithm. It finds nodes \c source and \c target
+    /// arbitrarily and then calls \ref init(), \ref calculateOut()
     /// and \ref calculateIn().
     void run() {
@@ -926,9 +912,9 @@
     }
 
-    /// \brief Run the algorithm.
+    /// \brief Runs the algorithm.
     ///
-    /// This function runs the algorithm. It uses the given \c source node, 
-    /// finds a proper \c target node and then calls the \ref init(),
-    /// \ref calculateOut() and \ref calculateIn().
+    /// Runs the algorithm. It uses the given \c source node, finds a
+    /// proper \c target and then calls the \ref init(), \ref
+    /// calculateOut() and \ref calculateIn().
     void run(const Node& s) {
       init(s);
@@ -941,16 +927,14 @@
     /// \name Query Functions
     /// The result of the %HaoOrlin algorithm
-    /// can be obtained using these functions.\n
-    /// \ref run(), \ref calculateOut() or \ref calculateIn() 
-    /// should be called before using them.
+    /// can be obtained using these functions.
+    /// \n
+    /// Before using these functions, either \ref run(), \ref
+    /// calculateOut() or \ref calculateIn() must be called.
 
     /// @{
 
-    /// \brief Return the value of the minimum cut.
+    /// \brief Returns the value of the minimum value cut.
     ///
-    /// This function returns the value of the minimum cut.
-    ///
-    /// \pre \ref run(), \ref calculateOut() or \ref calculateIn() 
-    /// must be called before using this function.
+    /// Returns the value of the minimum value cut.
     Value minCutValue() const {
       return _min_cut;
@@ -958,22 +942,15 @@
 
 
-    /// \brief Return a minimum cut.
+    /// \brief Returns a minimum cut.
     ///
-    /// This function sets \c cutMap to the characteristic vector of a
-    /// minimum value cut: it will give a non-empty set \f$ X\subsetneq V \f$
-    /// with minimal outgoing capacity (i.e. \c cutMap will be \c true exactly
-    /// for the nodes of \f$ X \f$).
-    ///
-    /// \param cutMap A \ref concepts::WriteMap "writable" node map with
-    /// \c bool (or convertible) value type.
-    ///
-    /// \return The value of the minimum cut.
-    ///
-    /// \pre \ref run(), \ref calculateOut() or \ref calculateIn() 
-    /// must be called before using this function.
-    template <typename CutMap>
-    Value minCutMap(CutMap& cutMap) const {
+    /// Sets \c nodeMap to the characteristic vector of a minimum
+    /// value cut: it will give a nonempty set \f$ X\subsetneq V \f$
+    /// with minimal out-degree (i.e. \c nodeMap will be true exactly
+    /// for the nodes of \f$ X \f$).  \pre nodeMap should be a
+    /// bool-valued node-map.
+    template <typename NodeMap>
+    Value minCutMap(NodeMap& nodeMap) const {
       for (NodeIt it(_graph); it != INVALID; ++it) {
-        cutMap.set(it, (*_min_cut_map)[it]);
+        nodeMap.set(it, (*_min_cut_map)[it]);
       }
       return _min_cut;
@@ -984,4 +961,5 @@
   }; //class HaoOrlin
 
+
 } //namespace lemon
 
Index: lemon/hypercube_graph.h
===================================================================
--- lemon/hypercube_graph.h	(revision 574)
+++ lemon/hypercube_graph.h	(revision 550)
@@ -293,5 +293,7 @@
   ///
   /// This graph type fully conforms to the \ref concepts::Graph
-  /// "Graph concept".
+  /// "Graph" concept, and it also has an important extra feature
+  /// that its maps are real \ref concepts::ReferenceMap
+  /// "reference map"s.
   class HypercubeGraph : public ExtendedHypercubeGraphBase {
   public:
Index: lemon/kruskal.h
===================================================================
--- lemon/kruskal.h	(revision 576)
+++ lemon/kruskal.h	(revision 440)
@@ -249,9 +249,9 @@
   /// \ingroup spantree
   ///
-  /// \brief Kruskal's algorithm for finding a minimum cost spanning tree of
+  /// \brief Kruskal algorithm to find a minimum cost spanning tree of
   /// a graph.
   ///
   /// This function runs Kruskal's algorithm to find a minimum cost
-  /// spanning tree of a graph.
+  /// spanning tree.
   /// Due to some C++ hacking, it accepts various input and output types.
   ///
@@ -265,7 +265,7 @@
   /// It can be one of the following choices.
   /// - An STL compatible 'Forward Container' with
-  /// <tt>std::pair<GR::Arc,C></tt> or
-  /// <tt>std::pair<GR::Edge,C></tt> as its <tt>value_type</tt>, where
-  /// \c C is the type of the costs. The pairs indicates the arcs/edges
+  /// <tt>std::pair<GR::Arc,X></tt> or
+  /// <tt>std::pair<GR::Edge,X></tt> as its <tt>value_type</tt>, where
+  /// \c X is the type of the costs. The pairs indicates the arcs/edges
   /// along with the assigned cost. <em>They must be in a
   /// cost-ascending order.</em>
@@ -274,6 +274,6 @@
   ///
   /// \retval out Here we also have a choice.
-  /// - It can be a writable arc/edge map with \c bool value type. After
-  /// running the algorithm it will contain the found minimum cost spanning
+  /// - It can be a writable \c bool arc/edge map. After running the
+  /// algorithm it will contain the found minimum cost spanning
   /// tree: the value of an arc/edge will be set to \c true if it belongs
   /// to the tree, otherwise it will be set to \c false. The value of
@@ -302,6 +302,6 @@
 
 #ifdef DOXYGEN
-  template <typename Graph, typename In, typename Out>
-  Value kruskal(const Graph& g, const In& in, Out& out)
+  template <class Graph, class In, class Out>
+  Value kruskal(GR const& g, const In& in, Out& out)
 #else
   template <class Graph, class In, class Out>
@@ -315,4 +315,6 @@
 
 
+
+
   template <class Graph, class In, class Out>
   inline typename _kruskal_bits::KruskalValueSelector<In>::Value
Index: lemon/lgf_reader.h
===================================================================
--- lemon/lgf_reader.h	(revision 576)
+++ lemon/lgf_reader.h	(revision 590)
@@ -102,21 +102,21 @@
     };
 
-    template <typename _Graph, bool _dir, typename _Map,
+    template <typename _GR, bool _dir, typename _Map,
               typename _Converter = DefaultConverter<typename _Map::Value> >
-    class GraphArcMapStorage : public MapStorageBase<typename _Graph::Edge> {
+    class GraphArcMapStorage : public MapStorageBase<typename _GR::Edge> {
     public:
       typedef _Map Map;
       typedef _Converter Converter;
-      typedef _Graph Graph;
-      typedef typename Graph::Edge Item;
+      typedef _GR GR;
+      typedef typename GR::Edge Item;
       static const bool dir = _dir;
 
     private:
-      const Graph& _graph;
+      const GR& _graph;
       Map& _map;
       Converter _converter;
 
     public:
-      GraphArcMapStorage(const Graph& graph, Map& map,
+      GraphArcMapStorage(const GR& graph, Map& map,
                          const Converter& converter = Converter())
         : _graph(graph), _map(map), _converter(converter) {}
@@ -174,19 +174,19 @@
     };
 
-    template <typename Graph>
+    template <typename GR>
     struct GraphArcLookUpConverter {
-      const Graph& _graph;
-      const std::map<std::string, typename Graph::Edge>& _map;
-
-      GraphArcLookUpConverter(const Graph& graph,
+      const GR& _graph;
+      const std::map<std::string, typename GR::Edge>& _map;
+
+      GraphArcLookUpConverter(const GR& graph,
                               const std::map<std::string,
-                                             typename Graph::Edge>& map)
+                                             typename GR::Edge>& map)
         : _graph(graph), _map(map) {}
 
-      typename Graph::Arc operator()(const std::string& str) {
+      typename GR::Arc operator()(const std::string& str) {
         if (str.empty() || (str[0] != '+' && str[0] != '-')) {
           throw FormatError("Item must start with '+' or '-'");
         }
-        typename std::map<std::string, typename Graph::Edge>
+        typename std::map<std::string, typename GR::Edge>
           ::const_iterator it = _map.find(str.substr(1));
         if (it == _map.end()) {
@@ -388,14 +388,13 @@
   }
 
-  template <typename Digraph>
+  template <typename DGR>
   class DigraphReader;
 
-  template <typename Digraph>
-  DigraphReader<Digraph> digraphReader(Digraph& digraph, 
-                                       std::istream& is = std::cin);
-  template <typename Digraph>
-  DigraphReader<Digraph> digraphReader(Digraph& digraph, const std::string& fn);
-  template <typename Digraph>
-  DigraphReader<Digraph> digraphReader(Digraph& digraph, const char *fn);
+  template <typename TDGR>
+  DigraphReader<TDGR> digraphReader(TDGR& digraph, std::istream& is = std::cin);
+  template <typename TDGR>
+  DigraphReader<TDGR> digraphReader(TDGR& digraph, const std::string& fn);
+  template <typename TDGR>
+  DigraphReader<TDGR> digraphReader(TDGR& digraph, const char *fn);
 
   /// \ingroup lemon_io
@@ -420,5 +419,5 @@
   ///
   ///\code
-  /// DigraphReader<Digraph>(digraph, std::cin).
+  /// DigraphReader<DGR>(digraph, std::cin).
   ///   nodeMap("coordinates", coord_map).
   ///   arcMap("capacity", cap_map).
@@ -449,13 +448,13 @@
   /// a single pass, because the arcs are not constructed when the node
   /// maps are read.
-  template <typename GR>
+  template <typename DGR>
   class DigraphReader {
   public:
 
-    typedef GR Digraph;
+    typedef DGR Digraph;
 
   private:
 
-    TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
+    TEMPLATE_DIGRAPH_TYPEDEFS(DGR);
 
     std::istream* _is;
@@ -463,5 +462,5 @@
     std::string _filename;
 
-    Digraph& _digraph;
+    DGR& _digraph;
 
     std::string _nodes_caption;
@@ -501,5 +500,5 @@
     /// Construct a directed graph reader, which reads from the given
     /// input stream.
-    DigraphReader(Digraph& digraph, std::istream& is = std::cin)
+    DigraphReader(DGR& digraph, std::istream& is = std::cin)
       : _is(&is), local_is(false), _digraph(digraph),
         _use_nodes(false), _use_arcs(false),
@@ -510,5 +509,5 @@
     /// Construct a directed graph reader, which reads from the given
     /// file.
-    DigraphReader(Digraph& digraph, const std::string& fn)
+    DigraphReader(DGR& digraph, const std::string& fn)
       : _is(new std::ifstream(fn.c_str())), local_is(true),
         _filename(fn), _digraph(digraph),
@@ -525,5 +524,5 @@
     /// Construct a directed graph reader, which reads from the given
     /// file.
-    DigraphReader(Digraph& digraph, const char* fn)
+    DigraphReader(DGR& digraph, const char* fn)
       : _is(new std::ifstream(fn)), local_is(true),
         _filename(fn), _digraph(digraph),
@@ -561,11 +560,11 @@
   private:
 
-    template <typename DGR>
-    friend DigraphReader<DGR> digraphReader(DGR& digraph, std::istream& is);
-    template <typename DGR>
-    friend DigraphReader<DGR> digraphReader(DGR& digraph, 
-                                            const std::string& fn);
-    template <typename DGR>
-    friend DigraphReader<DGR> digraphReader(DGR& digraph, const char *fn);
+    template <typename TDGR>
+    friend DigraphReader<TDGR> digraphReader(TDGR& digraph, std::istream& is);
+    template <typename TDGR>
+    friend DigraphReader<TDGR> digraphReader(TDGR& digraph, 
+                                             const std::string& fn);
+    template <typename TDGR>
+    friend DigraphReader<TDGR> digraphReader(TDGR& digraph, const char *fn);
 
     DigraphReader(DigraphReader& other)
@@ -594,5 +593,5 @@
   public:
 
-    /// \name Reading Rules
+    /// \name Reading rules
     /// @{
 
@@ -699,5 +698,5 @@
     /// @}
 
-    /// \name Select Section by Name
+    /// \name Select section by name
     /// @{
 
@@ -728,5 +727,5 @@
     /// @}
 
-    /// \name Using Previously Constructed Node or Arc Set
+    /// \name Using previously constructed node or arc set
     /// @{
 
@@ -1117,5 +1116,5 @@
   public:
 
-    /// \name Execution of the Reader
+    /// \name Execution of the reader
     /// @{
 
@@ -1189,4 +1188,41 @@
 
   };
+  
+  /// \ingroup lemon_io
+  ///
+  /// \brief Return a \ref DigraphReader class
+  ///
+  /// This function just returns a \ref DigraphReader class.
+  ///
+  /// With this function a digraph can be read from an 
+  /// \ref lgf-format "LGF" file or input stream with several maps and
+  /// attributes. For example, there is network flow problem on a
+  /// digraph, i.e. a digraph with a \e capacity map on the arcs and
+  /// \e source and \e target nodes. This digraph can be read with the
+  /// following code:
+  ///
+  ///\code
+  ///ListDigraph digraph;
+  ///ListDigraph::ArcMap<int> cm(digraph);
+  ///ListDigraph::Node src, trg;
+  ///digraphReader(digraph, std::cin).
+  ///  arcMap("capacity", cap).
+  ///  node("source", src).
+  ///  node("target", trg).
+  ///  run();
+  ///\endcode
+  ///
+  /// For a complete documentation, please see the \ref DigraphReader
+  /// class documentation.
+  /// \warning Don't forget to put the \ref DigraphReader::run() "run()"
+  /// to the end of the parameter list.
+  /// \relates DigraphReader
+  /// \sa digraphReader(TDGR& digraph, const std::string& fn)
+  /// \sa digraphReader(TDGR& digraph, const char* fn)
+  template <typename TDGR>
+  DigraphReader<TDGR> digraphReader(TDGR& digraph, std::istream& is) {
+    DigraphReader<TDGR> tmp(digraph, is);
+    return tmp;
+  }
 
   /// \brief Return a \ref DigraphReader class
@@ -1194,7 +1230,8 @@
   /// This function just returns a \ref DigraphReader class.
   /// \relates DigraphReader
-  template <typename Digraph>
-  DigraphReader<Digraph> digraphReader(Digraph& digraph, std::istream& is) {
-    DigraphReader<Digraph> tmp(digraph, is);
+  /// \sa digraphReader(TDGR& digraph, std::istream& is)
+  template <typename TDGR>
+  DigraphReader<TDGR> digraphReader(TDGR& digraph, const std::string& fn) {
+    DigraphReader<TDGR> tmp(digraph, fn);
     return tmp;
   }
@@ -1204,31 +1241,20 @@
   /// This function just returns a \ref DigraphReader class.
   /// \relates DigraphReader
-  template <typename Digraph>
-  DigraphReader<Digraph> digraphReader(Digraph& digraph,
-                                       const std::string& fn) {
-    DigraphReader<Digraph> tmp(digraph, fn);
+  /// \sa digraphReader(TDGR& digraph, std::istream& is)
+  template <typename TDGR>
+  DigraphReader<TDGR> digraphReader(TDGR& digraph, const char* fn) {
+    DigraphReader<TDGR> tmp(digraph, fn);
     return tmp;
   }
 
-  /// \brief Return a \ref DigraphReader class
-  ///
-  /// This function just returns a \ref DigraphReader class.
-  /// \relates DigraphReader
-  template <typename Digraph>
-  DigraphReader<Digraph> digraphReader(Digraph& digraph, const char* fn) {
-    DigraphReader<Digraph> tmp(digraph, fn);
-    return tmp;
-  }
-
-  template <typename Graph>
+  template <typename GR>
   class GraphReader;
  
-  template <typename Graph>
-  GraphReader<Graph> graphReader(Graph& graph, 
-                                 std::istream& is = std::cin);
-  template <typename Graph>
-  GraphReader<Graph> graphReader(Graph& graph, const std::string& fn);
-  template <typename Graph>
-  GraphReader<Graph> graphReader(Graph& graph, const char *fn);
+  template <typename TGR>
+  GraphReader<TGR> graphReader(TGR& graph, std::istream& is = std::cin);
+  template <typename TGR>
+  GraphReader<TGR> graphReader(TGR& graph, const std::string& fn);
+  template <typename TGR>
+  GraphReader<TGR> graphReader(TGR& graph, const char *fn);
 
   /// \ingroup lemon_io
@@ -1255,5 +1281,5 @@
   private:
 
-    TEMPLATE_GRAPH_TYPEDEFS(Graph);
+    TEMPLATE_GRAPH_TYPEDEFS(GR);
 
     std::istream* _is;
@@ -1261,5 +1287,5 @@
     std::string _filename;
 
-    Graph& _graph;
+    GR& _graph;
 
     std::string _nodes_caption;
@@ -1299,5 +1325,5 @@
     /// Construct an undirected graph reader, which reads from the given
     /// input stream.
-    GraphReader(Graph& graph, std::istream& is = std::cin)
+    GraphReader(GR& graph, std::istream& is = std::cin)
       : _is(&is), local_is(false), _graph(graph),
         _use_nodes(false), _use_edges(false),
@@ -1308,5 +1334,5 @@
     /// Construct an undirected graph reader, which reads from the given
     /// file.
-    GraphReader(Graph& graph, const std::string& fn)
+    GraphReader(GR& graph, const std::string& fn)
       : _is(new std::ifstream(fn.c_str())), local_is(true),
         _filename(fn), _graph(graph),
@@ -1323,5 +1349,5 @@
     /// Construct an undirected graph reader, which reads from the given
     /// file.
-    GraphReader(Graph& graph, const char* fn)
+    GraphReader(GR& graph, const char* fn)
       : _is(new std::ifstream(fn)), local_is(true),
         _filename(fn), _graph(graph),
@@ -1358,10 +1384,10 @@
 
   private:
-    template <typename Graph>
-    friend GraphReader<Graph> graphReader(Graph& graph, std::istream& is);
-    template <typename Graph>
-    friend GraphReader<Graph> graphReader(Graph& graph, const std::string& fn); 
-    template <typename Graph>
-    friend GraphReader<Graph> graphReader(Graph& graph, const char *fn);
+    template <typename TGR>
+    friend GraphReader<TGR> graphReader(TGR& graph, std::istream& is);
+    template <typename TGR>
+    friend GraphReader<TGR> graphReader(TGR& graph, const std::string& fn); 
+    template <typename TGR>
+    friend GraphReader<TGR> graphReader(TGR& graph, const char *fn);
 
     GraphReader(GraphReader& other)
@@ -1390,5 +1416,5 @@
   public:
 
-    /// \name Reading Rules
+    /// \name Reading rules
     /// @{
 
@@ -1455,5 +1481,5 @@
       _edge_maps.push_back(std::make_pair('+' + caption, forward_storage));
       _reader_bits::MapStorageBase<Edge>* backward_storage =
-        new _reader_bits::GraphArcMapStorage<Graph, false, Map>(_graph, map);
+        new _reader_bits::GraphArcMapStorage<GR, false, Map>(_graph, map);
       _edge_maps.push_back(std::make_pair('-' + caption, backward_storage));
       return *this;
@@ -1469,9 +1495,9 @@
       checkConcept<concepts::WriteMap<Arc, typename Map::Value>, Map>();
       _reader_bits::MapStorageBase<Edge>* forward_storage =
-        new _reader_bits::GraphArcMapStorage<Graph, true, Map, Converter>
+        new _reader_bits::GraphArcMapStorage<GR, true, Map, Converter>
         (_graph, map, converter);
       _edge_maps.push_back(std::make_pair('+' + caption, forward_storage));
       _reader_bits::MapStorageBase<Edge>* backward_storage =
-        new _reader_bits::GraphArcMapStorage<Graph, false, Map, Converter>
+        new _reader_bits::GraphArcMapStorage<GR, false, Map, Converter>
         (_graph, map, converter);
       _edge_maps.push_back(std::make_pair('-' + caption, backward_storage));
@@ -1531,5 +1557,5 @@
     /// Add an arc reading rule to reader.
     GraphReader& arc(const std::string& caption, Arc& arc) {
-      typedef _reader_bits::GraphArcLookUpConverter<Graph> Converter;
+      typedef _reader_bits::GraphArcLookUpConverter<GR> Converter;
       Converter converter(_graph, _edge_index);
       _reader_bits::ValueStorageBase* storage =
@@ -1541,5 +1567,5 @@
     /// @}
 
-    /// \name Select Section by Name
+    /// \name Select section by name
     /// @{
 
@@ -1570,5 +1596,5 @@
     /// @}
 
-    /// \name Using Previously Constructed Node or Edge Set
+    /// \name Using previously constructed node or edge set
     /// @{
 
@@ -1960,5 +1986,5 @@
   public:
 
-    /// \name Execution of the Reader
+    /// \name Execution of the reader
     /// @{
 
@@ -2034,11 +2060,45 @@
   };
 
+  /// \ingroup lemon_io
+  ///
+  /// \brief Return a \ref GraphReader class
+  ///
+  /// This function just returns a \ref GraphReader class. 
+  ///
+  /// With this function a graph can be read from an 
+  /// \ref lgf-format "LGF" file or input stream with several maps and
+  /// attributes. For example, there is weighted matching problem on a
+  /// graph, i.e. a graph with a \e weight map on the edges. This
+  /// graph can be read with the following code:
+  ///
+  ///\code
+  ///ListGraph graph;
+  ///ListGraph::EdgeMap<int> weight(graph);
+  ///graphReader(graph, std::cin).
+  ///  edgeMap("weight", weight).
+  ///  run();
+  ///\endcode
+  ///
+  /// For a complete documentation, please see the \ref GraphReader
+  /// class documentation.
+  /// \warning Don't forget to put the \ref GraphReader::run() "run()"
+  /// to the end of the parameter list.
+  /// \relates GraphReader
+  /// \sa graphReader(TGR& graph, const std::string& fn)
+  /// \sa graphReader(TGR& graph, const char* fn)
+  template <typename TGR>
+  GraphReader<TGR> graphReader(TGR& graph, std::istream& is) {
+    GraphReader<TGR> tmp(graph, is);
+    return tmp;
+  }
+
   /// \brief Return a \ref GraphReader class
   ///
   /// This function just returns a \ref GraphReader class.
   /// \relates GraphReader
-  template <typename Graph>
-  GraphReader<Graph> graphReader(Graph& graph, std::istream& is) {
-    GraphReader<Graph> tmp(graph, is);
+  /// \sa graphReader(TGR& graph, std::istream& is)
+  template <typename TGR>
+  GraphReader<TGR> graphReader(TGR& graph, const std::string& fn) {
+    GraphReader<TGR> tmp(graph, fn);
     return tmp;
   }
@@ -2048,17 +2108,8 @@
   /// This function just returns a \ref GraphReader class.
   /// \relates GraphReader
-  template <typename Graph>
-  GraphReader<Graph> graphReader(Graph& graph, const std::string& fn) {
-    GraphReader<Graph> tmp(graph, fn);
-    return tmp;
-  }
-
-  /// \brief Return a \ref GraphReader class
-  ///
-  /// This function just returns a \ref GraphReader class.
-  /// \relates GraphReader
-  template <typename Graph>
-  GraphReader<Graph> graphReader(Graph& graph, const char* fn) {
-    GraphReader<Graph> tmp(graph, fn);
+  /// \sa graphReader(TGR& graph, std::istream& is)
+  template <typename TGR>
+  GraphReader<TGR> graphReader(TGR& graph, const char* fn) {
+    GraphReader<TGR> tmp(graph, fn);
     return tmp;
   }
@@ -2159,5 +2210,5 @@
   public:
 
-    /// \name Section Readers
+    /// \name Section readers
     /// @{
 
@@ -2258,5 +2309,5 @@
 
 
-    /// \name Execution of the Reader
+    /// \name Execution of the reader
     /// @{
 
@@ -2317,8 +2368,16 @@
   };
 
+  /// \ingroup lemon_io
+  ///
   /// \brief Return a \ref SectionReader class
   ///
   /// This function just returns a \ref SectionReader class.
+  ///
+  /// Please see SectionReader documentation about the custom section
+  /// input.
+  ///
   /// \relates SectionReader
+  /// \sa sectionReader(const std::string& fn)
+  /// \sa sectionReader(const char *fn)
   inline SectionReader sectionReader(std::istream& is) {
     SectionReader tmp(is);
@@ -2330,4 +2389,5 @@
   /// This function just returns a \ref SectionReader class.
   /// \relates SectionReader
+  /// \sa sectionReader(std::istream& is)
   inline SectionReader sectionReader(const std::string& fn) {
     SectionReader tmp(fn);
@@ -2339,4 +2399,5 @@
   /// This function just returns a \ref SectionReader class.
   /// \relates SectionReader
+  /// \sa sectionReader(std::istream& is)
   inline SectionReader sectionReader(const char* fn) {
     SectionReader tmp(fn);
@@ -2440,5 +2501,5 @@
 
 
-    /// \name Node Sections
+    /// \name Node sections
     /// @{
 
@@ -2466,5 +2527,5 @@
     /// @}
 
-    /// \name Arc/Edge Sections
+    /// \name Arc/Edge sections
     /// @{
 
@@ -2524,5 +2585,5 @@
     /// @}
 
-    /// \name Attribute Sections
+    /// \name Attribute sections
     /// @{
 
@@ -2550,5 +2611,5 @@
     /// @}
 
-    /// \name Extra Sections
+    /// \name Extra sections
     /// @{
 
@@ -2626,5 +2687,5 @@
   public:
 
-    /// \name Execution of the Contents Reader
+    /// \name Execution of the contents reader
     /// @{
 
Index: lemon/lgf_writer.h
===================================================================
--- lemon/lgf_writer.h	(revision 576)
+++ lemon/lgf_writer.h	(revision 590)
@@ -348,17 +348,15 @@
   }
 
-  template <typename Digraph>
+  template <typename DGR>
   class DigraphWriter;
 
-  template <typename Digraph>
-  DigraphWriter<Digraph> digraphWriter(const Digraph& digraph,
-                                       std::ostream& os = std::cout);
-  template <typename Digraph>
-  DigraphWriter<Digraph> digraphWriter(const Digraph& digraph,
-                                       const std::string& fn);
-
-  template <typename Digraph>
-  DigraphWriter<Digraph> digraphWriter(const Digraph& digraph,
-                                       const char* fn);
+  template <typename TDGR>
+  DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 
+                                   std::ostream& os = std::cout);
+  template <typename TDGR>
+  DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, const std::string& fn);
+
+  template <typename TDGR>
+  DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, const char* fn);
 
 
@@ -382,5 +380,5 @@
   ///
   ///\code
-  /// DigraphWriter<Digraph>(digraph, std::cout).
+  /// DigraphWriter<DGR>(digraph, std::cout).
   ///   nodeMap("coordinates", coord_map).
   ///   nodeMap("size", size).
@@ -407,10 +405,10 @@
   /// the \c ostream() function, hence the second pass can append its
   /// output to the output of the first pass.
-  template <typename GR>
+  template <typename DGR>
   class DigraphWriter {
   public:
 
-    typedef GR Digraph;
-    TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
+    typedef DGR Digraph;
+    TEMPLATE_DIGRAPH_TYPEDEFS(DGR);
 
   private:
@@ -420,5 +418,5 @@
     bool local_os;
 
-    const Digraph& _digraph;
+    const DGR& _digraph;
 
     std::string _nodes_caption;
@@ -452,5 +450,5 @@
     /// Construct a directed graph writer, which writes to the given
     /// output stream.
-    DigraphWriter(const Digraph& digraph, std::ostream& os = std::cout)
+    DigraphWriter(const DGR& digraph, std::ostream& os = std::cout)
       : _os(&os), local_os(false), _digraph(digraph),
         _skip_nodes(false), _skip_arcs(false) {}
@@ -460,5 +458,5 @@
     /// Construct a directed graph writer, which writes to the given
     /// output file.
-    DigraphWriter(const Digraph& digraph, const std::string& fn)
+    DigraphWriter(const DGR& digraph, const std::string& fn)
       : _os(new std::ofstream(fn.c_str())), local_os(true), _digraph(digraph),
         _skip_nodes(false), _skip_arcs(false) {
@@ -473,5 +471,5 @@
     /// Construct a directed graph writer, which writes to the given
     /// output file.
-    DigraphWriter(const Digraph& digraph, const char* fn)
+    DigraphWriter(const DGR& digraph, const char* fn)
       : _os(new std::ofstream(fn)), local_os(true), _digraph(digraph),
         _skip_nodes(false), _skip_arcs(false) {
@@ -506,13 +504,13 @@
   private:
 
-    template <typename DGR>
-    friend DigraphWriter<DGR> digraphWriter(const DGR& digraph, 
-                                            std::ostream& os);
-    template <typename DGR>
-    friend DigraphWriter<DGR> digraphWriter(const DGR& digraph,
-                                            const std::string& fn);
-    template <typename DGR>
-    friend DigraphWriter<DGR> digraphWriter(const DGR& digraph,
-                                            const char *fn);
+    template <typename TDGR>
+    friend DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 
+                                             std::ostream& os);
+    template <typename TDGR>
+    friend DigraphWriter<TDGR> digraphWriter(const TDGR& digraph,
+                                             const std::string& fn);
+    template <typename TDGR>
+    friend DigraphWriter<TDGR> digraphWriter(const TDGR& digraph,
+                                             const char *fn);
 
     DigraphWriter(DigraphWriter& other)
@@ -539,5 +537,5 @@
   public:
 
-    /// \name Writing Rules
+    /// \name Writing rules
     /// @{
 
@@ -642,5 +640,5 @@
     }
 
-    /// \name Section Captions
+    /// \name Section captions
     /// @{
 
@@ -669,5 +667,5 @@
     }
 
-    /// \name Skipping Section
+    /// \name Skipping section
     /// @{
 
@@ -725,6 +723,6 @@
 
       if (label == 0) {
-        IdMap<Digraph, Node> id_map(_digraph);
-        _writer_bits::MapLess<IdMap<Digraph, Node> > id_less(id_map);
+        IdMap<DGR, Node> id_map(_digraph);
+        _writer_bits::MapLess<IdMap<DGR, Node> > id_less(id_map);
         std::sort(nodes.begin(), nodes.end(), id_less);
       } else {
@@ -810,6 +808,6 @@
 
       if (label == 0) {
-        IdMap<Digraph, Arc> id_map(_digraph);
-        _writer_bits::MapLess<IdMap<Digraph, Arc> > id_less(id_map);
+        IdMap<DGR, Arc> id_map(_digraph);
+        _writer_bits::MapLess<IdMap<DGR, Arc> > id_less(id_map);
         std::sort(arcs.begin(), arcs.end(), id_less);
       } else {
@@ -886,5 +884,5 @@
   public:
 
-    /// \name Execution of the Writer
+    /// \name Execution of the writer
     /// @{
 
@@ -916,12 +914,51 @@
   };
 
+  /// \ingroup lemon_io
+  ///
+  /// \brief Return a \ref DigraphWriter class
+  ///
+  /// This function just returns a \ref DigraphWriter class. 
+  ///
+  /// With this function a digraph can be write to a file or output
+  /// stream in \ref lgf-format "LGF" format with several maps and
+  /// attributes. For example, with the following code a network flow
+  /// problem can be written to the standard output, i.e. a digraph
+  /// with a \e capacity map on the arcs and \e source and \e target
+  /// nodes:
+  ///
+  ///\code
+  ///ListDigraph digraph;
+  ///ListDigraph::ArcMap<int> cap(digraph);
+  ///ListDigraph::Node src, trg;
+  ///  // Setting the capacity map and source and target nodes
+  ///digraphWriter(digraph, std::cout).
+  ///  arcMap("capacity", cap).
+  ///  node("source", src).
+  ///  node("target", trg).
+  ///  run();
+  ///\endcode
+  ///
+  /// For a complete documentation, please see the \ref DigraphWriter
+  /// class documentation.
+  /// \warning Don't forget to put the \ref DigraphWriter::run() "run()"
+  /// to the end of the parameter list.
+  /// \relates DigraphWriter
+  /// \sa digraphWriter(const TDGR& digraph, const std::string& fn)
+  /// \sa digraphWriter(const TDGR& digraph, const char* fn)
+  template <typename TDGR>
+  DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, std::ostream& os) {
+    DigraphWriter<TDGR> tmp(digraph, os);
+    return tmp;
+  }
+
   /// \brief Return a \ref DigraphWriter class
   ///
   /// This function just returns a \ref DigraphWriter class.
   /// \relates DigraphWriter
-  template <typename Digraph>
-  DigraphWriter<Digraph> digraphWriter(const Digraph& digraph,
-                                       std::ostream& os) {
-    DigraphWriter<Digraph> tmp(digraph, os);
+  /// \sa digraphWriter(const TDGR& digraph, std::ostream& os)
+  template <typename TDGR>
+  DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, 
+                                    const std::string& fn) {
+    DigraphWriter<TDGR> tmp(digraph, fn);
     return tmp;
   }
@@ -931,32 +968,20 @@
   /// This function just returns a \ref DigraphWriter class.
   /// \relates DigraphWriter
-  template <typename Digraph>
-  DigraphWriter<Digraph> digraphWriter(const Digraph& digraph,
-                                       const std::string& fn) {
-    DigraphWriter<Digraph> tmp(digraph, fn);
+  /// \sa digraphWriter(const TDGR& digraph, std::ostream& os)
+  template <typename TDGR>
+  DigraphWriter<TDGR> digraphWriter(const TDGR& digraph, const char* fn) {
+    DigraphWriter<TDGR> tmp(digraph, fn);
     return tmp;
   }
 
-  /// \brief Return a \ref DigraphWriter class
-  ///
-  /// This function just returns a \ref DigraphWriter class.
-  /// \relates DigraphWriter
-  template <typename Digraph>
-  DigraphWriter<Digraph> digraphWriter(const Digraph& digraph,
-                                       const char* fn) {
-    DigraphWriter<Digraph> tmp(digraph, fn);
-    return tmp;
-  }
-
-  template <typename Graph>
+  template <typename GR>
   class GraphWriter;
 
-  template <typename Graph>
-  GraphWriter<Graph> graphWriter(const Graph& graph,
-                                 std::ostream& os = std::cout);
-  template <typename Graph>
-  GraphWriter<Graph> graphWriter(const Graph& graph, const std::string& fn);
-  template <typename Graph>
-  GraphWriter<Graph> graphWriter(const Graph& graph, const char* fn);
+  template <typename TGR>
+  GraphWriter<TGR> graphWriter(const TGR& graph, std::ostream& os = std::cout);
+  template <typename TGR>
+  GraphWriter<TGR> graphWriter(const TGR& graph, const std::string& fn);
+  template <typename TGR>
+  GraphWriter<TGR> graphWriter(const TGR& graph, const char* fn);
 
   /// \ingroup lemon_io
@@ -980,5 +1005,5 @@
 
     typedef GR Graph;
-    TEMPLATE_GRAPH_TYPEDEFS(Graph);
+    TEMPLATE_GRAPH_TYPEDEFS(GR);
 
   private:
@@ -988,5 +1013,5 @@
     bool local_os;
 
-    const Graph& _graph;
+    const GR& _graph;
 
     std::string _nodes_caption;
@@ -1020,5 +1045,5 @@
     /// Construct a directed graph writer, which writes to the given
     /// output stream.
-    GraphWriter(const Graph& graph, std::ostream& os = std::cout)
+    GraphWriter(const GR& graph, std::ostream& os = std::cout)
       : _os(&os), local_os(false), _graph(graph),
         _skip_nodes(false), _skip_edges(false) {}
@@ -1028,5 +1053,5 @@
     /// Construct a directed graph writer, which writes to the given
     /// output file.
-    GraphWriter(const Graph& graph, const std::string& fn)
+    GraphWriter(const GR& graph, const std::string& fn)
       : _os(new std::ofstream(fn.c_str())), local_os(true), _graph(graph),
         _skip_nodes(false), _skip_edges(false) {
@@ -1041,5 +1066,5 @@
     /// Construct a directed graph writer, which writes to the given
     /// output file.
-    GraphWriter(const Graph& graph, const char* fn)
+    GraphWriter(const GR& graph, const char* fn)
       : _os(new std::ofstream(fn)), local_os(true), _graph(graph),
         _skip_nodes(false), _skip_edges(false) {
@@ -1074,13 +1099,11 @@
   private:
 
-    template <typename Graph>
-    friend GraphWriter<Graph> graphWriter(const Graph& graph,
-                                          std::ostream& os);
-    template <typename Graph>
-    friend GraphWriter<Graph> graphWriter(const Graph& graph,
-                                          const std::string& fn);
-    template <typename Graph>
-    friend GraphWriter<Graph> graphWriter(const Graph& graph,
-                                          const char *fn);
+    template <typename TGR>
+    friend GraphWriter<TGR> graphWriter(const TGR& graph, std::ostream& os);
+    template <typename TGR>
+    friend GraphWriter<TGR> graphWriter(const TGR& graph, 
+                                        const std::string& fn);
+    template <typename TGR>
+    friend GraphWriter<TGR> graphWriter(const TGR& graph, const char *fn);
     
     GraphWriter(GraphWriter& other)
@@ -1107,5 +1130,5 @@
   public:
 
-    /// \name Writing Rules
+    /// \name Writing rules
     /// @{
 
@@ -1169,8 +1192,8 @@
       checkConcept<concepts::ReadMap<Arc, typename Map::Value>, Map>();
       _writer_bits::MapStorageBase<Edge>* forward_storage =
-        new _writer_bits::GraphArcMapStorage<Graph, true, Map>(_graph, map);
+        new _writer_bits::GraphArcMapStorage<GR, true, Map>(_graph, map);
       _edge_maps.push_back(std::make_pair('+' + caption, forward_storage));
       _writer_bits::MapStorageBase<Edge>* backward_storage =
-        new _writer_bits::GraphArcMapStorage<Graph, false, Map>(_graph, map);
+        new _writer_bits::GraphArcMapStorage<GR, false, Map>(_graph, map);
       _edge_maps.push_back(std::make_pair('-' + caption, backward_storage));
       return *this;
@@ -1186,9 +1209,9 @@
       checkConcept<concepts::ReadMap<Arc, typename Map::Value>, Map>();
       _writer_bits::MapStorageBase<Edge>* forward_storage =
-        new _writer_bits::GraphArcMapStorage<Graph, true, Map, Converter>
+        new _writer_bits::GraphArcMapStorage<GR, true, Map, Converter>
         (_graph, map, converter);
       _edge_maps.push_back(std::make_pair('+' + caption, forward_storage));
       _writer_bits::MapStorageBase<Edge>* backward_storage =
-        new _writer_bits::GraphArcMapStorage<Graph, false, Map, Converter>
+        new _writer_bits::GraphArcMapStorage<GR, false, Map, Converter>
         (_graph, map, converter);
       _edge_maps.push_back(std::make_pair('-' + caption, backward_storage));
@@ -1248,5 +1271,5 @@
     /// Add an arc writing rule to writer.
     GraphWriter& arc(const std::string& caption, const Arc& arc) {
-      typedef _writer_bits::GraphArcLookUpConverter<Graph> Converter;
+      typedef _writer_bits::GraphArcLookUpConverter<GR> Converter;
       Converter converter(_graph, _edge_index);
       _writer_bits::ValueStorageBase* storage =
@@ -1256,5 +1279,5 @@
     }
 
-    /// \name Section Captions
+    /// \name Section captions
     /// @{
 
@@ -1283,5 +1306,5 @@
     }
 
-    /// \name Skipping Section
+    /// \name Skipping section
     /// @{
 
@@ -1339,6 +1362,6 @@
 
       if (label == 0) {
-        IdMap<Graph, Node> id_map(_graph);
-        _writer_bits::MapLess<IdMap<Graph, Node> > id_less(id_map);
+        IdMap<GR, Node> id_map(_graph);
+        _writer_bits::MapLess<IdMap<GR, Node> > id_less(id_map);
         std::sort(nodes.begin(), nodes.end(), id_less);
       } else {
@@ -1424,6 +1447,6 @@
 
       if (label == 0) {
-        IdMap<Graph, Edge> id_map(_graph);
-        _writer_bits::MapLess<IdMap<Graph, Edge> > id_less(id_map);
+        IdMap<GR, Edge> id_map(_graph);
+        _writer_bits::MapLess<IdMap<GR, Edge> > id_less(id_map);
         std::sort(edges.begin(), edges.end(), id_less);
       } else {
@@ -1500,5 +1523,5 @@
   public:
 
-    /// \name Execution of the Writer
+    /// \name Execution of the writer
     /// @{
 
@@ -1530,12 +1553,46 @@
   };
 
+  /// \ingroup lemon_io
+  ///
+  /// \brief Return a \ref GraphWriter class
+  ///
+  /// This function just returns a \ref GraphWriter class. 
+  ///
+  /// With this function a graph can be write to a file or output
+  /// stream in \ref lgf-format "LGF" format with several maps and
+  /// attributes. For example, with the following code a weighted
+  /// matching problem can be written to the standard output, i.e. a
+  /// graph with a \e weight map on the edges:
+  ///
+  ///\code
+  ///ListGraph graph;
+  ///ListGraph::EdgeMap<int> weight(graph);
+  ///  // Setting the weight map
+  ///graphWriter(graph, std::cout).
+  ///  edgeMap("weight", weight).
+  ///  run();
+  ///\endcode
+  ///
+  /// For a complete documentation, please see the \ref GraphWriter
+  /// class documentation.
+  /// \warning Don't forget to put the \ref GraphWriter::run() "run()"
+  /// to the end of the parameter list.
+  /// \relates GraphWriter
+  /// \sa graphWriter(const TGR& graph, const std::string& fn)
+  /// \sa graphWriter(const TGR& graph, const char* fn)
+  template <typename TGR>
+  GraphWriter<TGR> graphWriter(const TGR& graph, std::ostream& os) {
+    GraphWriter<TGR> tmp(graph, os);
+    return tmp;
+  }
+
   /// \brief Return a \ref GraphWriter class
   ///
   /// This function just returns a \ref GraphWriter class.
   /// \relates GraphWriter
-  template <typename Graph>
-  GraphWriter<Graph> graphWriter(const Graph& graph,
-                                 std::ostream& os) {
-    GraphWriter<Graph> tmp(graph, os);
+  /// \sa graphWriter(const TGR& graph, std::ostream& os)
+  template <typename TGR>
+  GraphWriter<TGR> graphWriter(const TGR& graph, const std::string& fn) {
+    GraphWriter<TGR> tmp(graph, fn);
     return tmp;
   }
@@ -1545,17 +1602,8 @@
   /// This function just returns a \ref GraphWriter class.
   /// \relates GraphWriter
-  template <typename Graph>
-  GraphWriter<Graph> graphWriter(const Graph& graph, const std::string& fn) {
-    GraphWriter<Graph> tmp(graph, fn);
-    return tmp;
-  }
-
-  /// \brief Return a \ref GraphWriter class
-  ///
-  /// This function just returns a \ref GraphWriter class.
-  /// \relates GraphWriter
-  template <typename Graph>
-  GraphWriter<Graph> graphWriter(const Graph& graph, const char* fn) {
-    GraphWriter<Graph> tmp(graph, fn);
+  /// \sa graphWriter(const TGR& graph, std::ostream& os)
+  template <typename TGR>
+  GraphWriter<TGR> graphWriter(const TGR& graph, const char* fn) {
+    GraphWriter<TGR> tmp(graph, fn);
     return tmp;
   }
@@ -1652,5 +1700,5 @@
   public:
 
-    /// \name Section Writers
+    /// \name Section writers
     /// @{
 
@@ -1719,5 +1767,5 @@
 
 
-    /// \name Execution of the Writer
+    /// \name Execution of the writer
     /// @{
 
@@ -1747,8 +1795,16 @@
   };
 
+  /// \ingroup lemon_io
+  ///
   /// \brief Return a \ref SectionWriter class
   ///
   /// This function just returns a \ref SectionWriter class.
+  ///
+  /// Please see SectionWriter documentation about the custom section
+  /// output.
+  ///
   /// \relates SectionWriter
+  /// \sa sectionWriter(const std::string& fn)
+  /// \sa sectionWriter(const char *fn)
   inline SectionWriter sectionWriter(std::ostream& os) {
     SectionWriter tmp(os);
@@ -1760,4 +1816,5 @@
   /// This function just returns a \ref SectionWriter class.
   /// \relates SectionWriter
+  /// \sa sectionWriter(std::ostream& os)
   inline SectionWriter sectionWriter(const std::string& fn) {
     SectionWriter tmp(fn);
@@ -1769,4 +1826,5 @@
   /// This function just returns a \ref SectionWriter class.
   /// \relates SectionWriter
+  /// \sa sectionWriter(std::ostream& os)
   inline SectionWriter sectionWriter(const char* fn) {
     SectionWriter tmp(fn);
Index: lemon/list_graph.h
===================================================================
--- lemon/list_graph.h	(revision 574)
+++ lemon/list_graph.h	(revision 550)
@@ -321,4 +321,7 @@
   ///only in the concept class.
   ///
+  ///An important extra feature of this digraph implementation is that
+  ///its maps are real \ref concepts::ReferenceMap "reference map"s.
+  ///
   ///\sa concepts::Digraph
 
@@ -1174,4 +1177,7 @@
   ///only in the concept class.
   ///
+  ///An important extra feature of this graph implementation is that
+  ///its maps are real \ref concepts::ReferenceMap "reference map"s.
+  ///
   ///\sa concepts::Graph
 
Index: lemon/lp_base.h
===================================================================
--- lemon/lp_base.h	(revision 576)
+++ lemon/lp_base.h	(revision 528)
@@ -53,10 +53,10 @@
     ///Possible outcomes of an LP solving procedure
     enum SolveExitStatus {
-      /// = 0. It means that the problem has been successfully solved: either
+      ///This means that the problem has been successfully solved: either
       ///an optimal solution has been found or infeasibility/unboundedness
       ///has been proved.
       SOLVED = 0,
-      /// = 1. Any other case (including the case when some user specified
-      ///limit has been exceeded).
+      ///Any other case (including the case when some user specified
+      ///limit has been exceeded)
       UNSOLVED = 1
     };
@@ -69,19 +69,4 @@
       MAX
     };
-
-    ///Enum for \c messageLevel() parameter
-    enum MessageLevel {
-      /// No output (default value).
-      MESSAGE_NOTHING,
-      /// Error messages only.
-      MESSAGE_ERROR,
-      /// Warnings.
-      MESSAGE_WARNING,
-      /// Normal output.
-      MESSAGE_NORMAL,
-      /// Verbose output.
-      MESSAGE_VERBOSE
-    };
-    
 
     ///The floating point type used by the solver
@@ -989,6 +974,4 @@
     virtual const char* _solverName() const = 0;
 
-    virtual void _messageLevel(MessageLevel level) = 0;
-
     //Own protected stuff
 
@@ -1006,5 +989,5 @@
     const char* solverName() const {return _solverName();}
 
-    ///\name Build Up and Modify the LP
+    ///\name Build up and modify the LP
 
     ///@{
@@ -1545,7 +1528,4 @@
     void clear() { _clear(); }
 
-    /// Sets the message level of the solver
-    void messageLevel(MessageLevel level) { _messageLevel(level); }
-
     ///@}
 
@@ -1789,13 +1769,13 @@
     /// The problem types for primal and dual problems
     enum ProblemType {
-      /// = 0. Feasible solution hasn't been found (but may exist).
+      ///Feasible solution hasn't been found (but may exist).
       UNDEFINED = 0,
-      /// = 1. The problem has no feasible solution.
+      ///The problem has no feasible solution
       INFEASIBLE = 1,
-      /// = 2. Feasible solution found.
+      ///Feasible solution found
       FEASIBLE = 2,
-      /// = 3. Optimal solution exists and found.
+      ///Optimal solution exists and found
       OPTIMAL = 3,
-      /// = 4. The cost function is unbounded.
+      ///The cost function is unbounded
       UNBOUNDED = 4
     };
@@ -1853,5 +1833,5 @@
     ///@}
 
-    ///\name Obtain the Solution
+    ///\name Obtain the solution
 
     ///@{
@@ -1975,14 +1955,15 @@
     /// The problem types for MIP problems
     enum ProblemType {
-      /// = 0. Feasible solution hasn't been found (but may exist).
+      ///Feasible solution hasn't been found (but may exist).
       UNDEFINED = 0,
-      /// = 1. The problem has no feasible solution.
+      ///The problem has no feasible solution
       INFEASIBLE = 1,
-      /// = 2. Feasible solution found.
+      ///Feasible solution found
       FEASIBLE = 2,
-      /// = 3. Optimal solution exists and found.
+      ///Optimal solution exists and found
       OPTIMAL = 3,
-      /// = 4. The cost function is unbounded.
-      ///The Mip or at least the relaxed problem is unbounded.
+      ///The cost function is unbounded
+      ///
+      ///The Mip or at least the relaxed problem is unbounded
       UNBOUNDED = 4
     };
@@ -2006,12 +1987,12 @@
     ///@}
 
-    ///\name Set Column Type
+    ///\name Setting column type
     ///@{
 
     ///Possible variable (column) types (e.g. real, integer, binary etc.)
     enum ColTypes {
-      /// = 0. Continuous variable (default).
+      ///Continuous variable (default)
       REAL = 0,
-      /// = 1. Integer variable.
+      ///Integer variable
       INTEGER = 1
     };
@@ -2034,5 +2015,5 @@
     ///@}
 
-    ///\name Obtain the Solution
+    ///\name Obtain the solution
 
     ///@{
Index: lemon/lp_skeleton.cc
===================================================================
--- lemon/lp_skeleton.cc	(revision 568)
+++ lemon/lp_skeleton.cc	(revision 528)
@@ -85,6 +85,4 @@
   }
 
-  void SkeletonSolverBase::_messageLevel(MessageLevel) {}
-
   LpSkeleton::SolveExitStatus LpSkeleton::_solve() { return SOLVED; }
 
Index: lemon/lp_skeleton.h
===================================================================
--- lemon/lp_skeleton.h	(revision 568)
+++ lemon/lp_skeleton.h	(revision 529)
@@ -141,6 +141,4 @@
     virtual void _clear();
 
-    ///\e
-    virtual void _messageLevel(MessageLevel);
   };
 
Index: lemon/maps.h
===================================================================
--- lemon/maps.h	(revision 576)
+++ lemon/maps.h	(revision 564)
@@ -2729,6 +2729,6 @@
   /// \brief Potential difference map
   ///
-  /// PotentialDifferenceMap returns the difference between the potentials of
-  /// the source and target nodes of each arc in a digraph, i.e. it returns
+  /// PotentialMap returns the difference between the potentials of the
+  /// source and target nodes of each arc in a digraph, i.e. it returns
   /// \code
   ///   potential[gr.target(arc)] - potential[gr.source(arc)].
Index: lemon/max_matching.h
===================================================================
--- lemon/max_matching.h	(revision 573)
+++ lemon/max_matching.h	(revision 550)
@@ -283,5 +283,5 @@
 
         while (base != nca) {
-          (*_ear)[node] = arc;
+          _ear->set(node, arc);
 
           Node n = node;
@@ -290,5 +290,5 @@
             Arc a = (*_ear)[n];
             n = _graph.target(a);
-            (*_ear)[n] = _graph.oppositeArc(a);
+            _ear->set(n, _graph.oppositeArc(a));
           }
           node = _graph.target((*_matching)[base]);
@@ -296,5 +296,5 @@
           _tree_set->erase(node);
           _blossom_set->insert(node, _blossom_set->find(base));
-          (*_status)[node] = EVEN;
+          _status->set(node, EVEN);
           _node_queue[_last++] = node;
           arc = _graph.oppositeArc((*_ear)[node]);
@@ -305,5 +305,5 @@
       }
 
-      (*_blossom_rep)[_blossom_set->find(nca)] = nca;
+      _blossom_rep->set(_blossom_set->find(nca), nca);
 
       {
@@ -314,5 +314,5 @@
 
         while (base != nca) {
-          (*_ear)[node] = arc;
+          _ear->set(node, arc);
 
           Node n = node;
@@ -321,5 +321,5 @@
             Arc a = (*_ear)[n];
             n = _graph.target(a);
-            (*_ear)[n] = _graph.oppositeArc(a);
+            _ear->set(n, _graph.oppositeArc(a));
           }
           node = _graph.target((*_matching)[base]);
@@ -327,5 +327,5 @@
           _tree_set->erase(node);
           _blossom_set->insert(node, _blossom_set->find(base));
-          (*_status)[node] = EVEN;
+          _status->set(node, EVEN);
           _node_queue[_last++] = node;
           arc = _graph.oppositeArc((*_ear)[node]);
@@ -336,5 +336,5 @@
       }
 
-      (*_blossom_rep)[_blossom_set->find(nca)] = nca;
+      _blossom_rep->set(_blossom_set->find(nca), nca);
     }
 
@@ -345,9 +345,9 @@
       Node odd = _graph.target(a);
 
-      (*_ear)[odd] = _graph.oppositeArc(a);
+      _ear->set(odd, _graph.oppositeArc(a));
       Node even = _graph.target((*_matching)[odd]);
-      (*_blossom_rep)[_blossom_set->insert(even)] = even;
-      (*_status)[odd] = ODD;
-      (*_status)[even] = EVEN;
+      _blossom_rep->set(_blossom_set->insert(even), even);
+      _status->set(odd, ODD);
+      _status->set(even, EVEN);
       int tree = _tree_set->find((*_blossom_rep)[_blossom_set->find(base)]);
       _tree_set->insert(odd, tree);
@@ -363,9 +363,9 @@
       int tree = _tree_set->find((*_blossom_rep)[_blossom_set->find(even)]);
 
-      (*_matching)[odd] = _graph.oppositeArc(a);
-      (*_status)[odd] = MATCHED;
+      _matching->set(odd, _graph.oppositeArc(a));
+      _status->set(odd, MATCHED);
 
       Arc arc = (*_matching)[even];
-      (*_matching)[even] = a;
+      _matching->set(even, a);
 
       while (arc != INVALID) {
@@ -373,7 +373,7 @@
         arc = (*_ear)[odd];
         even = _graph.target(arc);
-        (*_matching)[odd] = arc;
+        _matching->set(odd, arc);
         arc = (*_matching)[even];
-        (*_matching)[even] = _graph.oppositeArc((*_matching)[odd]);
+        _matching->set(even, _graph.oppositeArc((*_matching)[odd]));
       }
 
@@ -381,10 +381,10 @@
            it != INVALID; ++it) {
         if ((*_status)[it] == ODD) {
-          (*_status)[it] = MATCHED;
+          _status->set(it, MATCHED);
         } else {
           int blossom = _blossom_set->find(it);
           for (typename BlossomSet::ItemIt jt(*_blossom_set, blossom);
                jt != INVALID; ++jt) {
-            (*_status)[jt] = MATCHED;
+            _status->set(jt, MATCHED);
           }
           _blossom_set->eraseClass(blossom);
@@ -428,6 +428,6 @@
       createStructures();
       for(NodeIt n(_graph); n != INVALID; ++n) {
-        (*_matching)[n] = INVALID;
-        (*_status)[n] = UNMATCHED;
+        _matching->set(n, INVALID);
+        _status->set(n, UNMATCHED);
       }
     }
@@ -439,6 +439,6 @@
       createStructures();
       for (NodeIt n(_graph); n != INVALID; ++n) {
-        (*_matching)[n] = INVALID;
-        (*_status)[n] = UNMATCHED;
+        _matching->set(n, INVALID);
+        _status->set(n, UNMATCHED);
       }
       for (NodeIt n(_graph); n != INVALID; ++n) {
@@ -447,8 +447,8 @@
             Node v = _graph.target(a);
             if ((*_matching)[v] == INVALID && v != n) {
-              (*_matching)[n] = a;
-              (*_status)[n] = MATCHED;
-              (*_matching)[v] = _graph.oppositeArc(a);
-              (*_status)[v] = MATCHED;
+              _matching->set(n, a);
+              _status->set(n, MATCHED);
+              _matching->set(v, _graph.oppositeArc(a));
+              _status->set(v, MATCHED);
               break;
             }
@@ -470,6 +470,6 @@
 
       for (NodeIt n(_graph); n != INVALID; ++n) {
-        (*_matching)[n] = INVALID;
-        (*_status)[n] = UNMATCHED;
+        _matching->set(n, INVALID);
+        _status->set(n, UNMATCHED);
       }
       for(EdgeIt e(_graph); e!=INVALID; ++e) {
@@ -478,11 +478,11 @@
           Node u = _graph.u(e);
           if ((*_matching)[u] != INVALID) return false;
-          (*_matching)[u] = _graph.direct(e, true);
-          (*_status)[u] = MATCHED;
+          _matching->set(u, _graph.direct(e, true));
+          _status->set(u, MATCHED);
 
           Node v = _graph.v(e);
           if ((*_matching)[v] != INVALID) return false;
-          (*_matching)[v] = _graph.direct(e, false);
-          (*_status)[v] = MATCHED;
+          _matching->set(v, _graph.direct(e, false));
+          _status->set(v, MATCHED);
         }
       }
@@ -498,5 +498,5 @@
           (*_blossom_rep)[_blossom_set->insert(n)] = n;
           _tree_set->insert(n);
-          (*_status)[n] = EVEN;
+          _status->set(n, EVEN);
           processSparse(n);
         }
@@ -513,5 +513,5 @@
           (*_blossom_rep)[_blossom_set->insert(n)] = n;
           _tree_set->insert(n);
-          (*_status)[n] = EVEN;
+          _status->set(n, EVEN);
           processDense(n);
         }
@@ -1549,7 +1549,7 @@
         Value pot = (*_node_data)[bi].pot;
 
-        (*_matching)[base] = matching;
+        _matching->set(base, matching);
         _blossom_node_list.push_back(base);
-        (*_node_potential)[base] = pot;
+        _node_potential->set(base, pot);
       } else {
 
@@ -1645,15 +1645,15 @@
 
       for (ArcIt e(_graph); e != INVALID; ++e) {
-        (*_node_heap_index)[e] = BinHeap<Value, IntArcMap>::PRE_HEAP;
+        _node_heap_index->set(e, BinHeap<Value, IntArcMap>::PRE_HEAP);
       }
       for (NodeIt n(_graph); n != INVALID; ++n) {
-        (*_delta1_index)[n] = _delta1->PRE_HEAP;
+        _delta1_index->set(n, _delta1->PRE_HEAP);
       }
       for (EdgeIt e(_graph); e != INVALID; ++e) {
-        (*_delta3_index)[e] = _delta3->PRE_HEAP;
+        _delta3_index->set(e, _delta3->PRE_HEAP);
       }
       for (int i = 0; i < _blossom_num; ++i) {
-        (*_delta2_index)[i] = _delta2->PRE_HEAP;
-        (*_delta4_index)[i] = _delta4->PRE_HEAP;
+        _delta2_index->set(i, _delta2->PRE_HEAP);
+        _delta4_index->set(i, _delta4->PRE_HEAP);
       }
 
@@ -1667,5 +1667,5 @@
           }
         }
-        (*_node_index)[n] = index;
+        _node_index->set(n, index);
         (*_node_data)[index].pot = max;
         _delta1->push(n, max);
@@ -2742,7 +2742,7 @@
         Value pot = (*_node_data)[bi].pot;
 
-        (*_matching)[base] = matching;
+        _matching->set(base, matching);
         _blossom_node_list.push_back(base);
-        (*_node_potential)[base] = pot;
+        _node_potential->set(base, pot);
       } else {
 
@@ -2832,12 +2832,12 @@
 
       for (ArcIt e(_graph); e != INVALID; ++e) {
-        (*_node_heap_index)[e] = BinHeap<Value, IntArcMap>::PRE_HEAP;
+        _node_heap_index->set(e, BinHeap<Value, IntArcMap>::PRE_HEAP);
       }
       for (EdgeIt e(_graph); e != INVALID; ++e) {
-        (*_delta3_index)[e] = _delta3->PRE_HEAP;
+        _delta3_index->set(e, _delta3->PRE_HEAP);
       }
       for (int i = 0; i < _blossom_num; ++i) {
-        (*_delta2_index)[i] = _delta2->PRE_HEAP;
-        (*_delta4_index)[i] = _delta4->PRE_HEAP;
+        _delta2_index->set(i, _delta2->PRE_HEAP);
+        _delta4_index->set(i, _delta4->PRE_HEAP);
       }
 
@@ -2851,5 +2851,5 @@
           }
         }
-        (*_node_index)[n] = index;
+        _node_index->set(n, index);
         (*_node_data)[index].pot = max;
         int blossom =
Index: lemon/min_cost_arborescence.h
===================================================================
--- lemon/min_cost_arborescence.h	(revision 576)
+++ lemon/min_cost_arborescence.h	(revision 550)
@@ -91,8 +91,8 @@
   /// \ingroup spantree
   ///
-  /// \brief Minimum Cost Arborescence algorithm class.
+  /// \brief %MinCostArborescence algorithm class.
   ///
   /// This class provides an efficient implementation of
-  /// Minimum Cost Arborescence algorithm. The arborescence is a tree
+  /// %MinCostArborescence algorithm. The arborescence is a tree
   /// which is directed from a given source node of the digraph. One or
   /// more sources should be given for the algorithm and it will calculate
@@ -294,5 +294,5 @@
         }
       }
-      (*_arc_order)[minimum.arc] = _dual_variables.size();
+      _arc_order->set(minimum.arc, _dual_variables.size());
       DualVariable var(_dual_node_list.size() - 1,
                        _dual_node_list.size(), minimum.value);
@@ -336,5 +336,5 @@
         }
       }
-      (*_arc_order)[minimum.arc] = _dual_variables.size();
+      _arc_order->set(minimum.arc, _dual_variables.size());
       DualVariable var(node_bottom, _dual_node_list.size(), minimum.value);
       _dual_variables.push_back(var);
@@ -365,5 +365,5 @@
         Node source = _heap->top();
         _heap->pop();
-        (*_node_order)[source] = -1;
+        _node_order->set(source, -1);
         for (OutArcIt it(*_digraph, source); it != INVALID; ++it) {
           if ((*_arc_order)[it] < 0) continue;
@@ -391,5 +391,5 @@
   public:
 
-    /// \name Named Template Parameters
+    /// \name Named template parameters
 
     /// @{
@@ -631,5 +631,5 @@
     /// @}
 
-    /// \name Execution Control
+    /// \name Execution control
     /// The simplest way to execute the algorithm is to use
     /// one of the member functions called \c run(...). \n
@@ -651,11 +651,11 @@
       for (NodeIt it(*_digraph); it != INVALID; ++it) {
         (*_cost_arcs)[it].arc = INVALID;
-        (*_node_order)[it] = -3;
-        (*_heap_cross_ref)[it] = Heap::PRE_HEAP;
+        _node_order->set(it, -3);
+        _heap_cross_ref->set(it, Heap::PRE_HEAP);
         _pred->set(it, INVALID);
       }
       for (ArcIt it(*_digraph); it != INVALID; ++it) {
         _arborescence->set(it, false);
-        (*_arc_order)[it] = -1;
+        _arc_order->set(it, -1);
       }
       _dual_node_list.clear();
Index: lemon/preflow.h
===================================================================
--- lemon/preflow.h	(revision 573)
+++ lemon/preflow.h	(revision 550)
@@ -405,5 +405,5 @@
       _phase = true;
       for (NodeIt n(_graph); n != INVALID; ++n) {
-        (*_excess)[n] = 0;
+        _excess->set(n, 0);
       }
 
@@ -418,8 +418,8 @@
 
       std::vector<Node> queue;
-      reached[_source] = true;
+      reached.set(_source, true);
 
       queue.push_back(_target);
-      reached[_target] = true;
+      reached.set(_target, true);
       while (!queue.empty()) {
         _level->initNewLevel();
@@ -430,5 +430,5 @@
             Node u = _graph.source(e);
             if (!reached[u] && _tolerance.positive((*_capacity)[e])) {
-              reached[u] = true;
+              reached.set(u, true);
               _level->initAddItem(u);
               nqueue.push_back(u);
@@ -445,5 +445,5 @@
           if ((*_level)[u] == _level->maxLevel()) continue;
           _flow->set(e, (*_capacity)[e]);
-          (*_excess)[u] += (*_capacity)[e];
+          _excess->set(u, (*_excess)[u] + (*_capacity)[e]);
           if (u != _target && !_level->active(u)) {
             _level->activate(u);
@@ -479,5 +479,5 @@
         }
         if (excess < 0 && n != _source) return false;
-        (*_excess)[n] = excess;
+        _excess->set(n, excess);
       }
 
@@ -488,8 +488,8 @@
 
       std::vector<Node> queue;
-      reached[_source] = true;
+      reached.set(_source, true);
 
       queue.push_back(_target);
-      reached[_target] = true;
+      reached.set(_target, true);
       while (!queue.empty()) {
         _level->initNewLevel();
@@ -501,5 +501,5 @@
             if (!reached[u] &&
                 _tolerance.positive((*_capacity)[e] - (*_flow)[e])) {
-              reached[u] = true;
+              reached.set(u, true);
               _level->initAddItem(u);
               nqueue.push_back(u);
@@ -509,5 +509,5 @@
             Node v = _graph.target(e);
             if (!reached[v] && _tolerance.positive((*_flow)[e])) {
-              reached[v] = true;
+              reached.set(v, true);
               _level->initAddItem(v);
               nqueue.push_back(v);
@@ -525,5 +525,5 @@
           if ((*_level)[u] == _level->maxLevel()) continue;
           _flow->set(e, (*_capacity)[e]);
-          (*_excess)[u] += rem;
+          _excess->set(u, (*_excess)[u] + rem);
           if (u != _target && !_level->active(u)) {
             _level->activate(u);
@@ -537,5 +537,5 @@
           if ((*_level)[v] == _level->maxLevel()) continue;
           _flow->set(e, 0);
-          (*_excess)[v] += rem;
+          _excess->set(v, (*_excess)[v] + rem);
           if (v != _target && !_level->active(v)) {
             _level->activate(v);
@@ -578,10 +578,10 @@
               if (!_tolerance.less(rem, excess)) {
                 _flow->set(e, (*_flow)[e] + excess);
-                (*_excess)[v] += excess;
+                _excess->set(v, (*_excess)[v] + excess);
                 excess = 0;
                 goto no_more_push_1;
               } else {
                 excess -= rem;
-                (*_excess)[v] += rem;
+                _excess->set(v, (*_excess)[v] + rem);
                 _flow->set(e, (*_capacity)[e]);
               }
@@ -601,10 +601,10 @@
               if (!_tolerance.less(rem, excess)) {
                 _flow->set(e, (*_flow)[e] - excess);
-                (*_excess)[v] += excess;
+                _excess->set(v, (*_excess)[v] + excess);
                 excess = 0;
                 goto no_more_push_1;
               } else {
                 excess -= rem;
-                (*_excess)[v] += rem;
+                _excess->set(v, (*_excess)[v] + rem);
                 _flow->set(e, 0);
               }
@@ -616,5 +616,5 @@
         no_more_push_1:
 
-          (*_excess)[n] = excess;
+          _excess->set(n, excess);
 
           if (excess != 0) {
@@ -651,10 +651,10 @@
               if (!_tolerance.less(rem, excess)) {
                 _flow->set(e, (*_flow)[e] + excess);
-                (*_excess)[v] += excess;
+                _excess->set(v, (*_excess)[v] + excess);
                 excess = 0;
                 goto no_more_push_2;
               } else {
                 excess -= rem;
-                (*_excess)[v] += rem;
+                _excess->set(v, (*_excess)[v] + rem);
                 _flow->set(e, (*_capacity)[e]);
               }
@@ -674,10 +674,10 @@
               if (!_tolerance.less(rem, excess)) {
                 _flow->set(e, (*_flow)[e] - excess);
-                (*_excess)[v] += excess;
+                _excess->set(v, (*_excess)[v] + excess);
                 excess = 0;
                 goto no_more_push_2;
               } else {
                 excess -= rem;
-                (*_excess)[v] += rem;
+                _excess->set(v, (*_excess)[v] + rem);
                 _flow->set(e, 0);
               }
@@ -689,5 +689,5 @@
         no_more_push_2:
 
-          (*_excess)[n] = excess;
+          _excess->set(n, excess);
 
           if (excess != 0) {
@@ -732,5 +732,5 @@
       typename Digraph::template NodeMap<bool> reached(_graph);
       for (NodeIt n(_graph); n != INVALID; ++n) {
-        reached[n] = (*_level)[n] < _level->maxLevel();
+        reached.set(n, (*_level)[n] < _level->maxLevel());
       }
 
@@ -740,5 +740,5 @@
       std::vector<Node> queue;
       queue.push_back(_source);
-      reached[_source] = true;
+      reached.set(_source, true);
 
       while (!queue.empty()) {
@@ -750,5 +750,5 @@
             Node v = _graph.target(e);
             if (!reached[v] && _tolerance.positive((*_flow)[e])) {
-              reached[v] = true;
+              reached.set(v, true);
               _level->initAddItem(v);
               nqueue.push_back(v);
@@ -759,5 +759,5 @@
             if (!reached[u] &&
                 _tolerance.positive((*_capacity)[e] - (*_flow)[e])) {
-              reached[u] = true;
+              reached.set(u, true);
               _level->initAddItem(u);
               nqueue.push_back(u);
@@ -793,10 +793,10 @@
             if (!_tolerance.less(rem, excess)) {
               _flow->set(e, (*_flow)[e] + excess);
-              (*_excess)[v] += excess;
+              _excess->set(v, (*_excess)[v] + excess);
               excess = 0;
               goto no_more_push;
             } else {
               excess -= rem;
-              (*_excess)[v] += rem;
+              _excess->set(v, (*_excess)[v] + rem);
               _flow->set(e, (*_capacity)[e]);
             }
@@ -816,10 +816,10 @@
             if (!_tolerance.less(rem, excess)) {
               _flow->set(e, (*_flow)[e] - excess);
-              (*_excess)[v] += excess;
+              _excess->set(v, (*_excess)[v] + excess);
               excess = 0;
               goto no_more_push;
             } else {
               excess -= rem;
-              (*_excess)[v] += rem;
+              _excess->set(v, (*_excess)[v] + rem);
               _flow->set(e, 0);
             }
@@ -831,5 +831,5 @@
       no_more_push:
 
-        (*_excess)[n] = excess;
+        _excess->set(n, excess);
 
         if (excess != 0) {
Index: lemon/random.h
===================================================================
--- lemon/random.h	(revision 576)
+++ lemon/random.h	(revision 550)
@@ -660,5 +660,5 @@
     /// @}
 
-    ///\name Uniform Distributions
+    ///\name Uniform distributions
     ///
     /// @{
@@ -763,5 +763,5 @@
     /// @}
 
-    ///\name Non-uniform Distributions
+    ///\name Non-uniform distributions
     ///
     ///@{
@@ -939,5 +939,5 @@
     ///@}
 
-    ///\name Two Dimensional Distributions
+    ///\name Two dimensional distributions
     ///
     ///@{
Index: lemon/smart_graph.h
===================================================================
--- lemon/smart_graph.h	(revision 574)
+++ lemon/smart_graph.h	(revision 550)
@@ -192,5 +192,7 @@
   ///that <b> it does support only limited (only stack-like)
   ///node and arc deletions</b>.
-  ///It fully conforms to the \ref concepts::Digraph "Digraph concept".
+  ///It conforms to the \ref concepts::Digraph "Digraph concept" with
+  ///an important extra feature that its maps are real \ref
+  ///concepts::ReferenceMap "reference map"s.
   ///
   ///\sa concepts::Digraph.
@@ -628,7 +630,13 @@
   /// that <b> it does support only limited (only stack-like)
   /// node and arc deletions</b>.
-  /// It fully conforms to the \ref concepts::Graph "Graph concept".
+  /// Except from this it conforms to
+  /// the \ref concepts::Graph "Graph concept".
+  ///
+  /// It also has an
+  /// important extra feature that
+  /// its maps are real \ref concepts::ReferenceMap "reference map"s.
   ///
   /// \sa concepts::Graph.
+  ///
   class SmartGraph : public ExtendedSmartGraphBase {
   private:
Index: lemon/soplex.cc
===================================================================
--- lemon/soplex.cc	(revision 568)
+++ lemon/soplex.cc	(revision 528)
@@ -21,5 +21,4 @@
 
 #include <soplex.h>
-#include <spxout.h>
 
 
@@ -30,5 +29,4 @@
   SoplexLp::SoplexLp() {
     soplex = new soplex::SoPlex;
-    messageLevel(MESSAGE_NOTHING);
   }
 
@@ -50,5 +48,4 @@
     _row_names_ref = lp._row_names_ref;
 
-    messageLevel(MESSAGE_NOTHING);
   }
 
@@ -275,6 +272,4 @@
 
     _clear_temporals();
-    
-    _applyMessageLevel();
 
     soplex::SPxSolver::Status status = soplex->solve();
@@ -425,28 +420,4 @@
   }
 
-  void SoplexLp::_messageLevel(MessageLevel level) {
-    switch (level) {
-    case MESSAGE_NOTHING:
-      _message_level = -1;
-      break;
-    case MESSAGE_ERROR:
-      _message_level = soplex::SPxOut::ERROR;
-      break;
-    case MESSAGE_WARNING:
-      _message_level = soplex::SPxOut::WARNING;
-      break;
-    case MESSAGE_NORMAL:
-      _message_level = soplex::SPxOut::INFO2;
-      break;
-    case MESSAGE_VERBOSE:
-      _message_level = soplex::SPxOut::DEBUG;
-      break;
-    }
-  }
-
-  void SoplexLp::_applyMessageLevel() {
-    soplex::Param::setVerbose(_message_level);
-  }
-
 } //namespace lemon
 
Index: lemon/soplex.h
===================================================================
--- lemon/soplex.h	(revision 568)
+++ lemon/soplex.h	(revision 528)
@@ -145,9 +145,4 @@
     virtual void _clear();
 
-    void _messageLevel(MessageLevel m);
-    void _applyMessageLevel();
-
-    int _message_level;
-
   };
 
Index: lemon/suurballe.h
===================================================================
--- lemon/suurballe.h	(revision 576)
+++ lemon/suurballe.h	(revision 550)
@@ -289,5 +289,5 @@
     }
 
-    /// \name Execution Control
+    /// \name Execution control
     /// The simplest way to execute the algorithm is to call the run()
     /// function.
Index: lemon/time_measure.h
===================================================================
--- lemon/time_measure.h	(revision 576)
+++ lemon/time_measure.h	(revision 537)
@@ -288,5 +288,5 @@
     Timer(bool run=true) :_running(run) {_reset();}
 
-    ///\name Control the State of the Timer
+    ///\name Control the state of the timer
     ///Basically a Timer can be either running or stopped,
     ///but it provides a bit finer control on the execution.
@@ -396,5 +396,5 @@
     ///@}
 
-    ///\name Query Functions for the Ellapsed Time
+    ///\name Query Functions for the ellapsed time
 
     ///@{
Index: test/bfs_test.cc
===================================================================
--- test/bfs_test.cc	(revision 577)
+++ test/bfs_test.cc	(revision 440)
@@ -59,16 +59,14 @@
 
   Digraph G;
-  Node s, t, n;
+  Node s, t;
   Arc e;
-  int l, i;
+  int l;
   bool b;
   BType::DistMap d(G);
   BType::PredMap p(G);
   Path<Digraph> pp;
-  concepts::ReadMap<Node,bool> nm;
 
   {
     BType bfs_test(G);
-    const BType& const_bfs_test = bfs_test;
 
     bfs_test.run(s);
@@ -76,24 +74,11 @@
     bfs_test.run();
 
-    bfs_test.init();
-    bfs_test.addSource(s);
-    n = bfs_test.processNextNode();
-    n = bfs_test.processNextNode(t, b);
-    n = bfs_test.processNextNode(nm, n);
-    n = const_bfs_test.nextNode();
-    b = const_bfs_test.emptyQueue();
-    i = const_bfs_test.queueSize();
-    
-    bfs_test.start();
-    bfs_test.start(t);
-    bfs_test.start(nm);
-
-    l  = const_bfs_test.dist(t);
-    e  = const_bfs_test.predArc(t);
-    s  = const_bfs_test.predNode(t);
-    b  = const_bfs_test.reached(t);
-    d  = const_bfs_test.distMap();
-    p  = const_bfs_test.predMap();
-    pp = const_bfs_test.path(t);
+    l  = bfs_test.dist(t);
+    e  = bfs_test.predArc(t);
+    s  = bfs_test.predNode(t);
+    b  = bfs_test.reached(t);
+    d  = bfs_test.distMap();
+    p  = bfs_test.predMap();
+    pp = bfs_test.path(t);
   }
   {
@@ -102,35 +87,11 @@
       ::SetDistMap<concepts::ReadWriteMap<Node,int> >
       ::SetReachedMap<concepts::ReadWriteMap<Node,bool> >
+      ::SetProcessedMap<concepts::WriteMap<Node,bool> >
       ::SetStandardProcessedMap
-      ::SetProcessedMap<concepts::WriteMap<Node,bool> >
       ::Create bfs_test(G);
-      
-    concepts::ReadWriteMap<Node,Arc> pred_map;
-    concepts::ReadWriteMap<Node,int> dist_map;
-    concepts::ReadWriteMap<Node,bool> reached_map;
-    concepts::WriteMap<Node,bool> processed_map;
-    
-    bfs_test
-      .predMap(pred_map)
-      .distMap(dist_map)
-      .reachedMap(reached_map)
-      .processedMap(processed_map);
 
     bfs_test.run(s);
     bfs_test.run(s,t);
     bfs_test.run();
-    
-    bfs_test.init();
-    bfs_test.addSource(s);
-    n = bfs_test.processNextNode();
-    n = bfs_test.processNextNode(t, b);
-    n = bfs_test.processNextNode(nm, n);
-    n = bfs_test.nextNode();
-    b = bfs_test.emptyQueue();
-    i = bfs_test.queueSize();
-    
-    bfs_test.start();
-    bfs_test.start(t);
-    bfs_test.start(nm);
 
     l  = bfs_test.dist(t);
Index: test/circulation_test.cc
===================================================================
--- test/circulation_test.cc	(revision 577)
+++ test/circulation_test.cc	(revision 440)
@@ -72,20 +72,16 @@
   FlowMap flow;
   BarrierMap bar;
-  VType v;
-  bool b;
 
-  typedef Circulation<Digraph, CapMap, CapMap, DeltaMap>
-            ::SetFlowMap<FlowMap>
-            ::SetElevator<Elev>
-            ::SetStandardElevator<LinkedElev>
-            ::Create CirculationType;
-  CirculationType circ_test(g, lcap, ucap, delta);
-  const CirculationType& const_circ_test = circ_test;
-   
-  circ_test
-    .lowerCapMap(lcap)
-    .upperCapMap(ucap)
-    .deltaMap(delta)
-    .flowMap(flow);
+  Circulation<Digraph, CapMap, CapMap, DeltaMap>
+    ::SetFlowMap<FlowMap>
+    ::SetElevator<Elev>
+    ::SetStandardElevator<LinkedElev>
+    ::Create circ_test(g,lcap,ucap,delta);
+
+  circ_test.lowerCapMap(lcap);
+  circ_test.upperCapMap(ucap);
+  circ_test.deltaMap(delta);
+  flow = circ_test.flowMap();
+  circ_test.flowMap(flow);
 
   circ_test.init();
@@ -94,10 +90,7 @@
   circ_test.run();
 
-  v = const_circ_test.flow(a);
-  const FlowMap& fm = const_circ_test.flowMap();
-  b = const_circ_test.barrier(n);
-  const_circ_test.barrierMap(bar);
-  
-  ignore_unused_variable_warning(fm);
+  circ_test.barrier(n);
+  circ_test.barrierMap(bar);
+  circ_test.flow(a);
 }
 
Index: test/dfs_test.cc
===================================================================
--- test/dfs_test.cc	(revision 577)
+++ test/dfs_test.cc	(revision 440)
@@ -63,14 +63,12 @@
   Node s, t;
   Arc e;
-  int l, i;
+  int l;
   bool b;
   DType::DistMap d(G);
   DType::PredMap p(G);
   Path<Digraph> pp;
-  concepts::ReadMap<Arc,bool> am;
 
   {
     DType dfs_test(G);
-    const DType& const_dfs_test = dfs_test;
 
     dfs_test.run(s);
@@ -78,22 +76,11 @@
     dfs_test.run();
 
-    dfs_test.init();
-    dfs_test.addSource(s);
-    e = dfs_test.processNextArc();
-    e = const_dfs_test.nextArc();
-    b = const_dfs_test.emptyQueue();
-    i = const_dfs_test.queueSize();
-    
-    dfs_test.start();
-    dfs_test.start(t);
-    dfs_test.start(am);
-
-    l  = const_dfs_test.dist(t);
-    e  = const_dfs_test.predArc(t);
-    s  = const_dfs_test.predNode(t);
-    b  = const_dfs_test.reached(t);
-    d  = const_dfs_test.distMap();
-    p  = const_dfs_test.predMap();
-    pp = const_dfs_test.path(t);
+    l  = dfs_test.dist(t);
+    e  = dfs_test.predArc(t);
+    s  = dfs_test.predNode(t);
+    b  = dfs_test.reached(t);
+    d  = dfs_test.distMap();
+    p  = dfs_test.predMap();
+    pp = dfs_test.path(t);
   }
   {
@@ -102,33 +89,11 @@
       ::SetDistMap<concepts::ReadWriteMap<Node,int> >
       ::SetReachedMap<concepts::ReadWriteMap<Node,bool> >
+      ::SetProcessedMap<concepts::WriteMap<Node,bool> >
       ::SetStandardProcessedMap
-      ::SetProcessedMap<concepts::WriteMap<Node,bool> >
       ::Create dfs_test(G);
-
-    concepts::ReadWriteMap<Node,Arc> pred_map;
-    concepts::ReadWriteMap<Node,int> dist_map;
-    concepts::ReadWriteMap<Node,bool> reached_map;
-    concepts::WriteMap<Node,bool> processed_map;
-    
-    dfs_test
-      .predMap(pred_map)
-      .distMap(dist_map)
-      .reachedMap(reached_map)
-      .processedMap(processed_map);
 
     dfs_test.run(s);
     dfs_test.run(s,t);
     dfs_test.run();
-    dfs_test.init();
-
-    dfs_test.addSource(s);
-    e = dfs_test.processNextArc();
-    e = dfs_test.nextArc();
-    b = dfs_test.emptyQueue();
-    i = dfs_test.queueSize();
-    
-    dfs_test.start();
-    dfs_test.start(t);
-    dfs_test.start(am);
 
     l  = dfs_test.dist(t);
Index: test/dijkstra_test.cc
===================================================================
--- test/dijkstra_test.cc	(revision 577)
+++ test/dijkstra_test.cc	(revision 440)
@@ -61,8 +61,7 @@
 
   Digraph G;
-  Node s, t, n;
+  Node s, t;
   Arc e;
   VType l;
-  int i;
   bool b;
   DType::DistMap d(G);
@@ -70,34 +69,18 @@
   LengthMap length;
   Path<Digraph> pp;
-  concepts::ReadMap<Node,bool> nm;
 
   {
     DType dijkstra_test(G,length);
-    const DType& const_dijkstra_test = dijkstra_test;
 
     dijkstra_test.run(s);
     dijkstra_test.run(s,t);
 
-    dijkstra_test.init();
-    dijkstra_test.addSource(s);
-    dijkstra_test.addSource(s, 1);
-    n = dijkstra_test.processNextNode();
-    n = const_dijkstra_test.nextNode();
-    b = const_dijkstra_test.emptyQueue();
-    i = const_dijkstra_test.queueSize();
-    
-    dijkstra_test.start();
-    dijkstra_test.start(t);
-    dijkstra_test.start(nm);
-
-    l  = const_dijkstra_test.dist(t);
-    e  = const_dijkstra_test.predArc(t);
-    s  = const_dijkstra_test.predNode(t);
-    b  = const_dijkstra_test.reached(t);
-    b  = const_dijkstra_test.processed(t);
-    d  = const_dijkstra_test.distMap();
-    p  = const_dijkstra_test.predMap();
-    pp = const_dijkstra_test.path(t);
-    l  = const_dijkstra_test.currentDist(t);
+    l  = dijkstra_test.dist(t);
+    e  = dijkstra_test.predArc(t);
+    s  = dijkstra_test.predNode(t);
+    b  = dijkstra_test.reached(t);
+    d  = dijkstra_test.distMap();
+    p  = dijkstra_test.predMap();
+    pp = dijkstra_test.path(t);
   }
   {
@@ -105,40 +88,13 @@
       ::SetPredMap<concepts::ReadWriteMap<Node,Arc> >
       ::SetDistMap<concepts::ReadWriteMap<Node,VType> >
+      ::SetProcessedMap<concepts::WriteMap<Node,bool> >
       ::SetStandardProcessedMap
-      ::SetProcessedMap<concepts::WriteMap<Node,bool> >
       ::SetOperationTraits<DijkstraDefaultOperationTraits<VType> >
       ::SetHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> > >
       ::SetStandardHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> > >
-      ::SetHeap<BinHeap<VType, concepts::ReadWriteMap<Node,int> >, 
-                concepts::ReadWriteMap<Node,int> >
       ::Create dijkstra_test(G,length);
-
-    LengthMap length_map;
-    concepts::ReadWriteMap<Node,Arc> pred_map;
-    concepts::ReadWriteMap<Node,VType> dist_map;
-    concepts::WriteMap<Node,bool> processed_map;
-    concepts::ReadWriteMap<Node,int> heap_cross_ref;
-    BinHeap<VType, concepts::ReadWriteMap<Node,int> > heap(heap_cross_ref);
-    
-    dijkstra_test
-      .lengthMap(length_map)
-      .predMap(pred_map)
-      .distMap(dist_map)
-      .processedMap(processed_map)
-      .heap(heap, heap_cross_ref);
 
     dijkstra_test.run(s);
     dijkstra_test.run(s,t);
-
-    dijkstra_test.addSource(s);
-    dijkstra_test.addSource(s, 1);
-    n = dijkstra_test.processNextNode();
-    n = dijkstra_test.nextNode();
-    b = dijkstra_test.emptyQueue();
-    i = dijkstra_test.queueSize();
-    
-    dijkstra_test.start();
-    dijkstra_test.start(t);
-    dijkstra_test.start(nm);
 
     l  = dijkstra_test.dist(t);
@@ -146,7 +102,5 @@
     s  = dijkstra_test.predNode(t);
     b  = dijkstra_test.reached(t);
-    b  = dijkstra_test.processed(t);
     pp = dijkstra_test.path(t);
-    l  = dijkstra_test.currentDist(t);
   }
 
Index: test/gomory_hu_test.cc
===================================================================
--- test/gomory_hu_test.cc	(revision 588)
+++ test/gomory_hu_test.cc	(revision 534)
@@ -3,6 +3,4 @@
 #include "test_tools.h"
 #include <lemon/smart_graph.h>
-#include <lemon/concepts/graph.h>
-#include <lemon/concepts/maps.h>
 #include <lemon/lgf_reader.h>
 #include <lemon/gomory_hu.h>
@@ -35,34 +33,4 @@
   "target 3\n";
   
-void checkGomoryHuCompile()
-{
-  typedef int Value;
-  typedef concepts::Graph Graph;
-
-  typedef Graph::Node Node;
-  typedef Graph::Edge Edge;
-  typedef concepts::ReadMap<Edge, Value> CapMap;
-  typedef concepts::ReadWriteMap<Node, bool> CutMap;
-
-  Graph g;
-  Node n;
-  CapMap cap;
-  CutMap cut;
-  Value v;
-  int d;
-
-  GomoryHu<Graph, CapMap> gh_test(g, cap);
-  const GomoryHu<Graph, CapMap>&
-    const_gh_test = gh_test;
-
-  gh_test.run();
-
-  n = const_gh_test.predNode(n);
-  v = const_gh_test.predValue(n);
-  d = const_gh_test.rootDist(n);
-  v = const_gh_test.minCutValue(n, n);
-  v = const_gh_test.minCutMap(n, n, cut);
-}
-
 GRAPH_TYPEDEFS(Graph);
 typedef Graph::EdgeMap<int> IntEdgeMap;
@@ -103,6 +71,6 @@
       ght.minCutMap(u, v, cm);
       check(pf.flowValue() == ght.minCutValue(u, v), "Wrong cut 1");
-      check(cm[u] != cm[v], "Wrong cut 2");
-      check(pf.flowValue() == cutValue(graph, cm, capacity), "Wrong cut 3");
+      check(cm[u] != cm[v], "Wrong cut 3");
+      check(pf.flowValue() == cutValue(graph, cm, capacity), "Wrong cut 2");
 
       int sum=0;
@@ -117,4 +85,5 @@
         sum++;
       check(sum == countNodes(graph), "Problem with MinCutNodeIt");
+      
     }
   }
Index: test/hao_orlin_test.cc
===================================================================
--- test/hao_orlin_test.cc	(revision 589)
+++ test/hao_orlin_test.cc	(revision 440)
@@ -20,10 +20,7 @@
 
 #include <lemon/smart_graph.h>
-#include <lemon/adaptors.h>
-#include <lemon/concepts/digraph.h>
-#include <lemon/concepts/maps.h>
-#include <lemon/lgf_reader.h>
 #include <lemon/hao_orlin.h>
 
+#include <lemon/lgf_reader.h>
 #include "test_tools.h"
 
@@ -41,122 +38,25 @@
   "5\n"
   "@edges\n"
-  "     cap1 cap2 cap3\n"
-  "0 1  1    1    1   \n"
-  "0 2  2    2    4   \n"
-  "1 2  4    4    4   \n"
-  "3 4  1    1    1   \n"
-  "3 5  2    2    4   \n"
-  "4 5  4    4    4   \n"
-  "5 4  4    4    4   \n"
-  "2 3  1    6    6   \n"
-  "4 0  1    6    6   \n";
-
-void checkHaoOrlinCompile()
-{
-  typedef int Value;
-  typedef concepts::Digraph Digraph;
-
-  typedef Digraph::Node Node;
-  typedef Digraph::Arc Arc;
-  typedef concepts::ReadMap<Arc, Value> CapMap;
-  typedef concepts::WriteMap<Node, bool> CutMap;
-
-  Digraph g;
-  Node n;
-  CapMap cap;
-  CutMap cut;
-  Value v;
-
-  HaoOrlin<Digraph, CapMap> ho_test(g, cap);
-  const HaoOrlin<Digraph, CapMap>&
-    const_ho_test = ho_test;
-
-  ho_test.init();
-  ho_test.init(n);
-  ho_test.calculateOut();
-  ho_test.calculateIn();
-  ho_test.run();
-  ho_test.run(n);
-
-  v = const_ho_test.minCutValue();
-  v = const_ho_test.minCutMap(cut);
-}
-
-template <typename Graph, typename CapMap, typename CutMap>
-typename CapMap::Value 
-  cutValue(const Graph& graph, const CapMap& cap, const CutMap& cut)
-{
-  typename CapMap::Value sum = 0;
-  for (typename Graph::ArcIt a(graph); a != INVALID; ++a) {
-    if (cut[graph.source(a)] && !cut[graph.target(a)])
-      sum += cap[a];
-  }
-  return sum;
-}
+  "     label  capacity\n"
+  "0 1  0      2\n"
+  "1 2  1      2\n"
+  "2 0  2      2\n"
+  "3 4  3      2\n"
+  "4 5  4      2\n"
+  "5 3  5      2\n"
+  "2 3  6      3\n";
 
 int main() {
-  SmartDigraph graph;
-  SmartDigraph::ArcMap<int> cap1(graph), cap2(graph), cap3(graph);
-  SmartDigraph::NodeMap<bool> cut(graph);
+  SmartGraph graph;
+  SmartGraph::EdgeMap<int> capacity(graph);
 
-  istringstream input(lgf);
-  digraphReader(graph, input)
-    .arcMap("cap1", cap1)
-    .arcMap("cap2", cap2)
-    .arcMap("cap3", cap3)
-    .run();
+  istringstream lgfs(lgf);
+  graphReader(graph, lgfs).
+    edgeMap("capacity", capacity).run();
 
-  {
-    HaoOrlin<SmartDigraph> ho(graph, cap1);
-    ho.run();
-    ho.minCutMap(cut);
-    
-    check(ho.minCutValue() == 1, "Wrong cut value");
-    check(ho.minCutValue() == cutValue(graph, cap1, cut), "Wrong cut value");
-  }
-  {
-    HaoOrlin<SmartDigraph> ho(graph, cap2);
-    ho.run();
-    ho.minCutMap(cut);
+  HaoOrlin<SmartGraph, SmartGraph::EdgeMap<int> > ho(graph, capacity);
+  ho.run();
 
-    check(ho.minCutValue() == 1, "Wrong cut value");
-    check(ho.minCutValue() == cutValue(graph, cap2, cut), "Wrong cut value");
-  }
-  {
-    HaoOrlin<SmartDigraph> ho(graph, cap3);
-    ho.run();
-    ho.minCutMap(cut);
-    
-    check(ho.minCutValue() == 1, "Wrong cut value");
-    check(ho.minCutValue() == cutValue(graph, cap3, cut), "Wrong cut value");
-  }
-  
-  typedef Undirector<SmartDigraph> UGraph;
-  UGraph ugraph(graph);
-  
-  {
-    HaoOrlin<UGraph, SmartDigraph::ArcMap<int> > ho(ugraph, cap1);
-    ho.run();
-    ho.minCutMap(cut);
-    
-    check(ho.minCutValue() == 2, "Wrong cut value");
-    check(ho.minCutValue() == cutValue(ugraph, cap1, cut), "Wrong cut value");
-  }
-  {
-    HaoOrlin<UGraph, SmartDigraph::ArcMap<int> > ho(ugraph, cap2);
-    ho.run();
-    ho.minCutMap(cut);
-    
-    check(ho.minCutValue() == 5, "Wrong cut value");
-    check(ho.minCutValue() == cutValue(ugraph, cap2, cut), "Wrong cut value");
-  }
-  {
-    HaoOrlin<UGraph, SmartDigraph::ArcMap<int> > ho(ugraph, cap3);
-    ho.run();
-    ho.minCutMap(cut);
-    
-    check(ho.minCutValue() == 5, "Wrong cut value");
-    check(ho.minCutValue() == cutValue(ugraph, cap3, cut), "Wrong cut value");
-  }
+  check(ho.minCutValue() == 3, "Wrong cut value");
 
   return 0;
Index: test/kruskal_test.cc
===================================================================
--- test/kruskal_test.cc	(revision 573)
+++ test/kruskal_test.cc	(revision 440)
@@ -100,14 +100,14 @@
         "Total cost should be 10");
 
-  edge_cost_map[e1] = -10;
-  edge_cost_map[e2] = -9;
-  edge_cost_map[e3] = -8;
-  edge_cost_map[e4] = -7;
-  edge_cost_map[e5] = -6;
-  edge_cost_map[e6] = -5;
-  edge_cost_map[e7] = -4;
-  edge_cost_map[e8] = -3;
-  edge_cost_map[e9] = -2;
-  edge_cost_map[e10] = -1;
+  edge_cost_map.set(e1, -10);
+  edge_cost_map.set(e2, -9);
+  edge_cost_map.set(e3, -8);
+  edge_cost_map.set(e4, -7);
+  edge_cost_map.set(e5, -6);
+  edge_cost_map.set(e6, -5);
+  edge_cost_map.set(e7, -4);
+  edge_cost_map.set(e8, -3);
+  edge_cost_map.set(e9, -2);
+  edge_cost_map.set(e10, -1);
 
   vector<Edge> tree_edge_vec(5);
Index: test/lp_test.cc
===================================================================
--- test/lp_test.cc	(revision 567)
+++ test/lp_test.cc	(revision 540)
@@ -396,5 +396,10 @@
     cloneTest<CplexLp>();
   } catch (CplexEnv::LicenseError& error) {
+#ifdef LEMON_FORCE_CPLEX_CHECK
     check(false, error.what());
+#else
+    std::cerr << error.what() << std::endl;
+    std::cerr << "Cplex license check failed, lp check skipped" << std::endl;
+#endif
   }
 #endif
Index: test/mip_test.cc
===================================================================
--- test/mip_test.cc	(revision 567)
+++ test/mip_test.cc	(revision 559)
@@ -144,5 +144,10 @@
     cloneTest<CplexMip>();
   } catch (CplexEnv::LicenseError& error) {
+#ifdef LEMON_FORCE_CPLEX_CHECK
     check(false, error.what());
+#else
+    std::cerr << error.what() << std::endl;
+    std::cerr << "Cplex license check failed, lp check skipped" << std::endl;
+#endif
   }
 #endif
Index: test/preflow_test.cc
===================================================================
--- test/preflow_test.cc	(revision 577)
+++ test/preflow_test.cc	(revision 440)
@@ -85,20 +85,16 @@
   FlowMap flow;
   CutMap cut;
-  VType v;
-  bool b;
-
-  typedef Preflow<Digraph, CapMap>
-            ::SetFlowMap<FlowMap>
-            ::SetElevator<Elev>
-            ::SetStandardElevator<LinkedElev>
-            ::Create PreflowType;
-  PreflowType preflow_test(g, cap, n, n);
-  const PreflowType& const_preflow_test = preflow_test;
-
-  preflow_test
-    .capacityMap(cap)
-    .flowMap(flow)
-    .source(n)
-    .target(n);
+
+  Preflow<Digraph, CapMap>
+    ::SetFlowMap<FlowMap>
+    ::SetElevator<Elev>
+    ::SetStandardElevator<LinkedElev>
+    ::Create preflow_test(g,cap,n,n);
+
+  preflow_test.capacityMap(cap);
+  flow = preflow_test.flowMap();
+  preflow_test.flowMap(flow);
+  preflow_test.source(n);
+  preflow_test.target(n);
 
   preflow_test.init();
@@ -109,11 +105,9 @@
   preflow_test.runMinCut();
 
-  v = const_preflow_test.flowValue();
-  v = const_preflow_test.flow(e);
-  const FlowMap& fm = const_preflow_test.flowMap();
-  b = const_preflow_test.minCut(n);
-  const_preflow_test.minCutMap(cut);
-  
-  ignore_unused_variable_warning(fm);
+  preflow_test.flowValue();
+  preflow_test.minCut(n);
+  preflow_test.minCutMap(cut);
+  preflow_test.flow(e);
+
 }
 
Index: tools/dimacs-solver.cc
===================================================================
--- tools/dimacs-solver.cc	(revision 576)
+++ tools/dimacs-solver.cc	(revision 561)
@@ -24,8 +24,9 @@
 ///
 /// See
-/// \code
-///   dimacs-solver --help
-/// \endcode
+/// \verbatim
+///  dimacs-solver --help
+/// \endverbatim
 /// for more info on usage.
+///
 
 #include <iostream>
Index: tools/dimacs-to-lgf.cc
===================================================================
--- tools/dimacs-to-lgf.cc	(revision 576)
+++ tools/dimacs-to-lgf.cc	(revision 552)
@@ -25,8 +25,9 @@
 ///
 /// See
-/// \code
-///   dimacs-to-lgf --help
-/// \endcode
-/// for more info on the usage.
+/// \verbatim
+///  dimacs-to-lgf --help
+/// \endverbatim
+/// for more info on usage.
+///
 
 #include <iostream>
Index: tools/lemon-0.x-to-1.x.sh
===================================================================
--- tools/lemon-0.x-to-1.x.sh	(revision 566)
+++ tools/lemon-0.x-to-1.x.sh	(revision 545)
@@ -90,8 +90,4 @@
         -e "s/\<StoreBoolMap\>/LoggerBoolMap/g"\
         -e "s/\<storeBoolMap\>/loggerBoolMap/g"\
-        -e "s/\<InvertableMap\>/CrossRefMap/g"\
-        -e "s/\<invertableMap\>/crossRefMap/g"\
-        -e "s/\<DescriptorMap\>/RangeIdMap/g"\
-        -e "s/\<descriptorMap\>/rangeIdMap/g"\
         -e "s/\<BoundingBox\>/Box/g"\
         -e "s/\<readNauty\>/readNautyGraph/g"\
Index: tools/lgf-gen.cc
===================================================================
--- tools/lgf-gen.cc	(revision 576)
+++ tools/lgf-gen.cc	(revision 562)
@@ -24,8 +24,10 @@
 ///
 /// See
-/// \code
-///   lgf-gen --help
-/// \endcode
+/// \verbatim
+///  lgf-gen --help
+/// \endverbatim
 /// for more info on the usage.
+///
+
 
 #include <algorithm>
