Index: demo/reader_writer_demo.cc
===================================================================
--- demo/reader_writer_demo.cc	(revision 1530)
+++ demo/reader_writer_demo.cc	(revision 1534)
@@ -25,6 +25,4 @@
     GraphWriter<SmartGraph> writer(std::cout, graph);
     writer.writeEdgeMap("multiplicity", cap);
-//     writer.writeNode("source", s);
-//     writer.writeNode("target", t);
     writer.run();
      
Index: doc/quicktour.dox
===================================================================
--- doc/quicktour.dox	(revision 1530)
+++ doc/quicktour.dox	(revision 1534)
@@ -39,5 +39,5 @@
 we also have routines that write a graph (and perhaps maps) to a stream
 (file): this will also be shown. LEMON supports the DIMACS file formats to
-store network optimization problems, but more importantly we also have our own
+read network optimization problems, but more importantly we also have our own
 file format that gives a more flexible way to store data related to network
 optimization.
@@ -87,7 +87,6 @@
 One can also store network (graph+capacity on the edges) instances and
 other things (minimum cost flow instances etc.) in DIMACS format and
-use these in LEMON: to see the details read the documentation of the
-\ref dimacs.h "Dimacs file format reader". There you will also find
-the details about the output routines into files of the DIMACS format.
+read these in LEMON: to see the details read the documentation of the
+\ref dimacs.h "Dimacs file format reader". 
 
 </ol>
Index: lemon/graph_reader.h
===================================================================
--- lemon/graph_reader.h	(revision 1476)
+++ lemon/graph_reader.h	(revision 1534)
@@ -34,4 +34,11 @@
   /// \brief The graph reader class.
   ///
+  /// The \c GraphReader class provides the graph input. 
+  /// Before you read this documentation it might be useful to read the general
+  /// description of  \ref graph-io-page "Graph Input-Output".
+  /// If you don't need very sophisticated
+  /// behaviour then you can use the versions of the public function
+  /// \ref readGraph() to read a graph (or a max flow instance etc).
+  ///
   /// The given file format may contain several maps and labeled nodes or 
   /// edges.
@@ -333,7 +340,76 @@
   };
 
-  /// \brief Read a graph from the input.
-  ///
-  /// Read a graph from the input.
+
+  ///\anchor readGraph()
+  ///
+  /// \brief Read a graph from an input stream.
+  ///
+  /// Read a graph from an input stream.
+  /// \param is The input stream.
+  /// \param g The graph.
+  template<typename Graph>
+  void readGraph(std::istream& is, Graph &g) {
+    GraphReader<Graph> reader(is, g);
+    reader.run();
+  }
+
+  /// \brief Read a capacitated graph instance from an input stream.
+  /// 
+  /// Read a capacitated graph (graph+capacity on the
+  /// edges) from an input stream.
+  /// \param is The input stream.
+  /// \param g The graph.
+  /// \param capacity The capacity map.
+  template<typename Graph, typename CapacityMap>
+  void readGraph(std::istream& is, Graph &g, CapacityMap& capacity) {
+    GraphReader<Graph> reader(is, g);
+    reader.readEdgeMap("capacity", capacity);
+    reader.run();
+  }
+
+  /// \brief Read a shortest path instance from an input stream.
+  /// 
+  /// Read a shortest path instance (graph+capacity on the
+  /// edges+designated source) from an input stream.
+  /// \param is The input stream.
+  /// \param g The graph.
+  /// \param capacity The capacity map.
+  /// \param s The source node.
+  template<typename Graph, typename CapacityMap>
+  void readGraph(std::istream& is, Graph &g, CapacityMap& capacity, 
+		  typename Graph::Node &s) {
+    GraphReader<Graph> reader(is, g);
+    reader.readEdgeMap("capacity", capacity);
+    reader.readNode("source", s);
+    reader.run();
+  }
+
+
+
+  /// \brief Read a max flow instance from an input stream.
+  ///
+  /// Read a max flow instance (graph+capacity on the
+  /// edges+designated source and target) from an input stream.
+  ///
+  /// \param is The input stream.
+  /// \param g The graph.
+  /// \param capacity The capacity map.
+  /// \param s The source node.
+  /// \param t The target node.
+  template<typename Graph, typename CapacityMap>
+  void readGraph(std::istream& is, Graph &g, CapacityMap& capacity, 
+		  typename Graph::Node &s, typename Graph::Node &t) {
+    GraphReader<Graph> reader(is, g);
+    reader.readEdgeMap("capacity", capacity);
+    reader.readNode("source", s);
+    reader.readNode("target", t);
+    reader.run();
+  }
+
+  /// \brief Read a min cost flow instance from an input stream.
+  ///
+  /// Read a min cost flow instance (graph+capacity on the edges+cost
+  /// function on the edges+designated source and target) from an input stream.
+  ///
   /// \param is The input stream.
   /// \param g The graph.
@@ -354,61 +430,4 @@
   }
 
-  /// \brief Read a graph from the input.
-  ///
-  /// Read a graph from the input.
-  /// \param is The input stream.
-  /// \param g The graph.
-  /// \param capacity The capacity map.
-  /// \param s The source node.
-  /// \param t The target node.
-  template<typename Graph, typename CapacityMap>
-  void readGraph(std::istream& is, Graph &g, CapacityMap& capacity, 
-		  typename Graph::Node &s, typename Graph::Node &t) {
-    GraphReader<Graph> reader(is, g);
-    reader.readEdgeMap("capacity", capacity);
-    reader.readNode("source", s);
-    reader.readNode("target", t);
-    reader.run();
-  }
-
-  /// \brief Read a graph from the input.
-  ///
-  /// Read a graph from the input.
-  /// \param is The input stream.
-  /// \param g The graph.
-  /// \param capacity The capacity map.
-  /// \param s The source node.
-  template<typename Graph, typename CapacityMap>
-  void readGraph(std::istream& is, Graph &g, CapacityMap& capacity, 
-		  typename Graph::Node &s) {
-    GraphReader<Graph> reader(is, g);
-    reader.readEdgeMap("capacity", capacity);
-    reader.readNode("source", s);
-    reader.run();
-  }
-
-  /// \brief Read a graph from the input.
-  ///
-  /// Read a graph from the input.
-  /// \param is The input stream.
-  /// \param g The graph.
-  /// \param capacity The capacity map.
-  template<typename Graph, typename CapacityMap>
-  void readGraph(std::istream& is, Graph &g, CapacityMap& capacity) {
-    GraphReader<Graph> reader(is, g);
-    reader.readEdgeMap("capacity", capacity);
-    reader.run();
-  }
-
-  /// \brief Read a graph from the input.
-  ///
-  /// Read a graph from the input.
-  /// \param is The input stream.
-  /// \param g The graph.
-  template<typename Graph>
-  void readGraph(std::istream& is, Graph &g) {
-    GraphReader<Graph> reader(is, g);
-    reader.run();
-  }
 
   /// \brief The undir graph reader class.
@@ -780,7 +799,20 @@
   };
 
-  /// \brief Read an undir graph from the input.
-  ///
-  /// Read an undir graph from the input.
+  /// \brief Read an undirected graph from an input stream.
+  ///
+  /// Read an undirected graph from an input stream.
+  /// \param is The input stream.
+  /// \param g The graph.
+  template<typename Graph>
+  void readUndirGraph(std::istream& is, Graph &g) {
+    UndirGraphReader<Graph> reader(is, g);
+    reader.run();
+  }
+
+  /// \brief Read an undirected multigraph (undirected graph + capacity
+  /// map on the edges) from an input stream.
+  ///
+  /// Read an undirected multigraph (undirected graph + capacity
+  /// map on the edges) from an input stream.
   /// \param is The input stream.
   /// \param g The graph.
@@ -793,14 +825,4 @@
   }
 
-  /// \brief Read an undir graph from the input.
-  ///
-  /// Read an undir graph from the input.
-  /// \param is The input stream.
-  /// \param g The graph.
-  template<typename Graph>
-  void readUndirGraph(std::istream& is, Graph &g) {
-    UndirGraphReader<Graph> reader(is, g);
-    reader.run();
-  }
 
   /// @}
Index: lemon/graph_writer.h
===================================================================
--- lemon/graph_writer.h	(revision 1526)
+++ lemon/graph_writer.h	(revision 1534)
@@ -18,4 +18,5 @@
 ///\file
 ///\brief Lemon Graph Format writer.
+///
 
 #ifndef LEMON_GRAPH_WRITER_H
@@ -37,4 +38,8 @@
   /// Before you read this documentation it might be useful to read the general
   /// description of  \ref graph-io-page "Graph Input-Output".
+  /// If you don't need very sophisticated
+  /// behaviour then you can use the versions of the public function
+  /// \ref writeGraph() to output a graph (or a max flow instance etc).
+  ///
   /// To write a graph
   /// you should first give writing commands to the writer. You can declare
@@ -277,7 +282,92 @@
 
 
+  ///\anchor writeGraph()
+  ///
   /// \brief Write a graph to the output.
   ///
   /// Write a graph to the output.
+  /// \param os The output stream.
+  /// \param g The graph.
+  template<typename Graph>
+  void writeGraph(std::ostream& os, const Graph &g) {
+    GraphWriter<Graph> writer(os, g);
+    IdMap<Graph, typename Graph::Node> nodeIdMap(g);
+    writer.writeNodeMap("id", nodeIdMap);
+    IdMap<Graph, typename Graph::Edge> edgeIdMap(g);
+    writer.writeEdgeMap("id", edgeIdMap);
+    writer.run();
+  }
+
+  /// \brief Write a capacitated graph instance to the output.
+  /// 
+  /// Write a capacitated graph (graph+capacity on the
+  /// edges) to the output.
+  /// \param os The output stream.
+  /// \param g The graph.
+  /// \param capacity The capacity map.
+  template<typename Graph, typename CapacityMap>
+  void writeGraph(std::ostream& os, const Graph &g, 
+		  const CapacityMap& capacity) {
+    GraphWriter<Graph> writer(os, g);
+    IdMap<Graph, typename Graph::Node> nodeIdMap(g);
+    writer.writeNodeMap("id", nodeIdMap);
+    IdMap<Graph, typename Graph::Edge> edgeIdMap(g);
+    writer.writeEdgeMap("id", edgeIdMap);
+    writer.writeEdgeMap("capacity", capacity);
+    writer.run();
+  }
+
+  /// \brief Write a shortest path instance to the output.
+  /// 
+  /// Write a shortest path instance (graph+capacity on the
+  /// edges+designated source) to the output.
+  /// \param os The output stream.
+  /// \param g The graph.
+  /// \param capacity The capacity map.
+  /// \param s The source node.
+  template<typename Graph, typename CapacityMap>
+  void writeGraph(std::ostream& os, const Graph &g, 
+		  const CapacityMap& capacity, const typename Graph::Node &s) {
+    GraphWriter<Graph> writer(os, g);
+    IdMap<Graph, typename Graph::Node> nodeIdMap(g);
+    writer.writeNodeMap("id", nodeIdMap);
+    IdMap<Graph, typename Graph::Edge> edgeIdMap(g);
+    writer.writeEdgeMap("id", edgeIdMap);
+    writer.writeEdgeMap("capacity", capacity);
+    writer.writeNode("source", s);
+    writer.run();
+  }
+
+
+  /// \brief Write a max flow instance to the output.
+  ///
+  /// Write a max flow instance (graph+capacity on the
+  /// edges+designated source and target) to the output.
+  ///
+  /// \param os The output stream.
+  /// \param g The graph.
+  /// \param capacity The capacity map.
+  /// \param s The source node.
+  /// \param t The target node.
+  template<typename Graph, typename CapacityMap>
+  void writeGraph(std::ostream& os, const Graph &g, 
+		  const CapacityMap& capacity, const typename Graph::Node &s,
+		  const typename Graph::Node &t) {
+    GraphWriter<Graph> writer(os, g);
+    IdMap<Graph, typename Graph::Node> nodeIdMap(g);
+    writer.writeNodeMap("id", nodeIdMap);
+    IdMap<Graph, typename Graph::Edge> edgeIdMap(g);
+    writer.writeEdgeMap("id", edgeIdMap);
+    writer.writeEdgeMap("capacity", capacity);
+    writer.writeNode("source", s);
+    writer.writeNode("target", t);
+    writer.run();
+  }
+
+  /// \brief Write a min cost flow instance to the output.
+  ///
+  /// Write a min cost flow instance (graph+capacity on the edges+cost
+  /// function on the edges+designated source and target) to the output.
+  ///
   /// \param os The output stream.
   /// \param g The graph.
@@ -302,80 +392,4 @@
   }
 
-  /// \brief Write a graph to the output.
-  ///
-  /// Write a graph to the output.
-  /// \param os The output stream.
-  /// \param g The graph.
-  /// \param capacity The capacity map.
-  /// \param s The source node.
-  /// \param t The target node.
-  template<typename Graph, typename CapacityMap>
-  void writeGraph(std::ostream& os, const Graph &g, 
-		  const CapacityMap& capacity, const typename Graph::Node &s,
-		  const typename Graph::Node &t) {
-    GraphWriter<Graph> writer(os, g);
-    IdMap<Graph, typename Graph::Node> nodeIdMap(g);
-    writer.writeNodeMap("id", nodeIdMap);
-    IdMap<Graph, typename Graph::Edge> edgeIdMap(g);
-    writer.writeEdgeMap("id", edgeIdMap);
-    writer.writeEdgeMap("capacity", capacity);
-    writer.writeNode("source", s);
-    writer.writeNode("target", t);
-    writer.run();
-  }
-
-  /// \brief Write a graph to the output.
-  ///
-  /// Write a graph to the output.
-  /// \param os The output stream.
-  /// \param g The graph.
-  /// \param capacity The capacity map.
-  /// \param s The source node.
-  template<typename Graph, typename CapacityMap>
-  void writeGraph(std::ostream& os, const Graph &g, 
-		  const CapacityMap& capacity, const typename Graph::Node &s) {
-    GraphWriter<Graph> writer(os, g);
-    IdMap<Graph, typename Graph::Node> nodeIdMap(g);
-    writer.writeNodeMap("id", nodeIdMap);
-    IdMap<Graph, typename Graph::Edge> edgeIdMap(g);
-    writer.writeEdgeMap("id", edgeIdMap);
-    writer.writeEdgeMap("capacity", capacity);
-    writer.writeNode("source", s);
-    writer.run();
-  }
-
-  /// \brief Write a graph to the output.
-  ///
-  /// Write a graph to the output.
-  /// \param os The output stream.
-  /// \param g The graph.
-  /// \param capacity The capacity map.
-  template<typename Graph, typename CapacityMap>
-  void writeGraph(std::ostream& os, const Graph &g, 
-		  const CapacityMap& capacity) {
-    GraphWriter<Graph> writer(os, g);
-    IdMap<Graph, typename Graph::Node> nodeIdMap(g);
-    writer.writeNodeMap("id", nodeIdMap);
-    IdMap<Graph, typename Graph::Edge> edgeIdMap(g);
-    writer.writeEdgeMap("id", edgeIdMap);
-    writer.writeEdgeMap("capacity", capacity);
-    writer.run();
-  }
-
-  /// \brief Write a graph to the output.
-  ///
-  /// Write a graph to the output.
-  /// \param os The output stream.
-  /// \param g The graph.
-  template<typename Graph>
-  void writeGraph(std::ostream& os, const Graph &g) {
-    GraphWriter<Graph> writer(os, g);
-    IdMap<Graph, typename Graph::Node> nodeIdMap(g);
-    writer.writeNodeMap("id", nodeIdMap);
-    IdMap<Graph, typename Graph::Edge> edgeIdMap(g);
-    writer.writeEdgeMap("id", edgeIdMap);
-    writer.run();
-  }
-
   /// \brief The undirected graph writer class.
   ///
@@ -666,4 +680,14 @@
   };
 
+  /// \brief Write an undirected graph to the output.
+  ///
+  /// Write an undirected graph to the output.
+  /// \param os The output stream.
+  /// \param g The graph.
+  template<typename Graph>
+  void writeUndirGraph(std::ostream& os, const Graph &g) {
+    UndirGraphWriter<Graph> writer(os, g);
+    writer.run();
+  }
 
   /// \brief Write an undirected multigraph (undirected graph + capacity
@@ -683,14 +707,4 @@
   }
 
-  /// \brief Write an undirected graph to the output.
-  ///
-  /// Write an undirected graph to the output.
-  /// \param os The output stream.
-  /// \param g The graph.
-  template<typename Graph>
-  void writeUndirGraph(std::ostream& os, const Graph &g) {
-    UndirGraphWriter<Graph> writer(os, g);
-    writer.run();
-  }
 
   /// @}
