Index: lemon/christofides_tsp.h
===================================================================
--- lemon/christofides_tsp.h	(revision 1033)
+++ lemon/christofides_tsp.h	(revision 1034)
@@ -32,4 +32,6 @@
 namespace lemon {
   
+  /// \ingroup tsp
+  ///
   /// \brief Christofides algorithm for symmetric TSP.
   ///
@@ -38,5 +40,5 @@
   ///
   /// This a well-known approximation method for the TSP problem with
-  /// \ref checkMetricCost() "metric cost function".
+  /// metric cost function.
   /// It yields a tour whose total cost is at most 3/2 of the optimum,
   /// but it is usually much better.
@@ -55,5 +57,5 @@
   /// \tparam CM Type of the cost map.
   ///
-  /// \warning \& CM::Value must be signed type.
+  /// \warning CM::Value must be a signed number type.
   template <typename CM>
   class ChristofidesTsp
@@ -196,5 +198,5 @@
       /// found tour.
       ///
-      /// This function returns a const reference to the internal structure
+      /// This function returns a const reference to a vector
       /// that stores the node sequence of the found tour.
       ///
Index: lemon/greedy_tsp.h
===================================================================
--- lemon/greedy_tsp.h	(revision 1033)
+++ lemon/greedy_tsp.h	(revision 1034)
@@ -31,4 +31,6 @@
 namespace lemon {
 
+  /// \ingroup tsp
+  ///
   /// \brief Greedy algorithm for symmetric TSP.
   ///
@@ -43,7 +45,6 @@
   ///
   /// This method runs in O(n<sup>2</sup>log(n)) time.
-  /// It quickly finds an effectively short tour for most TSP
-  /// instances, but in special cases, it could yield a really bad
-  /// (or even the worst) solution.
+  /// It quickly finds a short tour for most TSP instances, but in special
+  /// cases, it could yield a really bad (or even the worst) solution.
   ///
   /// \tparam CM Type of the cost map.
@@ -194,5 +195,5 @@
       /// found tour.
       ///
-      /// This function returns a const reference to the internal structure
+      /// This function returns a const reference to a vector
       /// that stores the node sequence of the found tour.
       ///
Index: lemon/insertion_tsp.h
===================================================================
--- lemon/insertion_tsp.h	(revision 1033)
+++ lemon/insertion_tsp.h	(revision 1034)
@@ -31,4 +31,6 @@
 namespace lemon {
 
+  /// \ingroup tsp
+  ///
   /// \brief Insertion algorithm for symmetric TSP.
   ///
@@ -75,7 +77,7 @@
       /// During the algorithm, nodes are selected for addition to the current
       /// subtour according to the applied rule.
-      /// In general, the FARTHEST yields the best tours, thus it is the
-      /// default option. RANDOM usually gives somewhat worse results, but
-      /// it is much faster than the others and it is the most robust.
+      /// In general, the FARTHEST method yields the best tours, thus it is the
+      /// default option. The RANDOM rule usually gives somewhat worse results,
+      /// but it is much faster than the others and it is the most robust.
       ///
       /// The desired selection rule can be specified as a parameter of the
@@ -179,5 +181,5 @@
       /// found tour.
       ///
-      /// This function returns a const reference to the internal structure
+      /// This function returns a const reference to a vector
       /// that stores the node sequence of the found tour.
       ///
Index: lemon/nearest_neighbor_tsp.h
===================================================================
--- lemon/nearest_neighbor_tsp.h	(revision 1033)
+++ lemon/nearest_neighbor_tsp.h	(revision 1034)
@@ -25,4 +25,5 @@
 
 #include <deque>
+#include <vector>
 #include <limits>
 #include <lemon/full_graph.h>
@@ -31,4 +32,6 @@
 namespace lemon {
 
+  /// \ingroup tsp
+  ///
   /// \brief Nearest neighbor algorithm for symmetric TSP.
   ///
@@ -42,7 +45,6 @@
   ///
   /// This method runs in O(n<sup>2</sup>) time.
-  /// It quickly finds an effectively short tour for most TSP
-  /// instances, but in special cases, it could yield a really bad
-  /// (or even the worst) solution.
+  /// It quickly finds a short tour for most TSP instances, but in special
+  /// cases, it could yield a really bad (or even the worst) solution.
   ///
   /// \tparam CM Type of the cost map.
@@ -64,5 +66,5 @@
       const CostMap &_cost;
       Cost _sum;
-      std::deque<Node> _path;
+      std::vector<Node> _path;
 
     public:
@@ -86,6 +88,7 @@
       Cost run() {
         _path.clear();
-
-        if (_gr.nodeNum() == 0) return _sum = 0;
+        if (_gr.nodeNum() == 0) {
+          return _sum = 0;
+        }
         else if (_gr.nodeNum() == 1) {
           _path.push_back(_gr(0));
@@ -93,4 +96,5 @@
         }
 
+        std::deque<Node> path_dq;
         Edge min_edge1 = INVALID,
              min_edge2 = INVALID;
@@ -99,6 +103,6 @@
         Node n1 = _gr.u(min_edge1),
              n2 = _gr.v(min_edge1);
-        _path.push_back(n1);
-        _path.push_back(n2);
+        path_dq.push_back(n1);
+        path_dq.push_back(n2);
 
         FullGraph::NodeMap<bool> used(_gr, false);
@@ -107,5 +111,5 @@
 
         min_edge1 = INVALID;
-        while (int(_path.size()) != _gr.nodeNum()) {
+        while (int(path_dq.size()) != _gr.nodeNum()) {
           if (min_edge1 == INVALID) {
             for (IncEdgeIt e(_gr, n1); e != INVALID; ++e) {
@@ -128,5 +132,5 @@
           if (_cost[min_edge1] < _cost[min_edge2]) {
             n1 = _gr.oppositeNode(n1, min_edge1);
-            _path.push_front(n1);
+            path_dq.push_front(n1);
 
             used[n1] = true;
@@ -137,5 +141,5 @@
           } else {
             n2 = _gr.oppositeNode(n2, min_edge2);
-            _path.push_back(n2);
+            path_dq.push_back(n2);
 
             used[n2] = true;
@@ -147,7 +151,13 @@
         }
 
-        _sum = _cost[_gr.edge(_path.back(), _path.front())];
-        for (int i = 0; i < int(_path.size())-1; ++i) {
-          _sum += _cost[_gr.edge(_path[i], _path[i+1])];
+        n1 = path_dq.back();
+        n2 = path_dq.front();
+        _path.push_back(n2);
+        _sum = _cost[_gr.edge(n1, n2)];
+        for (int i = 1; i < int(path_dq.size()); ++i) {
+          n1 = n2;
+          n2 = path_dq[i];
+          _path.push_back(n2);
+          _sum += _cost[_gr.edge(n1, n2)];
         }
 
@@ -172,9 +182,9 @@
       /// found tour.
       ///
-      /// This function returns a const reference to the internal structure
+      /// This function returns a const reference to a vector
       /// that stores the node sequence of the found tour.
       ///
       /// \pre run() must be called before using this function.
-      const std::deque<Node>& tourNodes() const {
+      const std::vector<Node>& tourNodes() const {
         return _path;
       }
Index: lemon/opt2_tsp.h
===================================================================
--- lemon/opt2_tsp.h	(revision 1033)
+++ lemon/opt2_tsp.h	(revision 1034)
@@ -22,5 +22,5 @@
 /// \ingroup tsp
 /// \file
-/// \brief 2-opt algorithm for symmetric TSP
+/// \brief 2-opt algorithm for symmetric TSP.
 
 #include <vector>
@@ -29,4 +29,6 @@
 namespace lemon {
 
+  /// \ingroup tsp
+  ///
   /// \brief 2-opt algorithm for symmetric TSP.
   ///
@@ -115,5 +117,5 @@
       }
 
-      /// \brief Runs the algorithm from the given tour.
+      /// \brief Runs the algorithm starting from the given tour.
       ///
       /// This function runs the algorithm starting from the given tour.
@@ -157,14 +159,14 @@
       }
 
-      /// \brief Runs the algorithm from the given tour.
-      ///
-      /// This function runs the algorithm starting from the given tour.
-      ///
-      /// \param tour The tour as a node sequence. It must be a standard
-      /// sequence container storing all <tt>Node</tt>s in the desired order.
+      /// \brief Runs the algorithm starting from the given tour.
+      ///
+      /// This function runs the algorithm starting from the given tour
+      /// (node sequence).
+      ///
+      /// \param tour A vector that stores all <tt>Node</tt>s of the graph
+      /// in the desired order.
       ///
       /// \return The total cost of the found tour.
-      template <template <typename> class Container>
-      Cost run(const Container<Node>& tour) {
+      Cost run(const std::vector<Node>& tour) {
         _path.clear();
 
@@ -181,5 +183,5 @@
 
         _plist.resize(2*_gr.nodeNum());
-        typename Container<Node>::const_iterator it = tour.begin();
+        typename std::vector<Node>::const_iterator it = tour.begin();
         int first = _gr.id(*it),
             prev = first,
@@ -218,5 +220,5 @@
       /// found tour.
       ///
-      /// This function returns a const reference to the internal structure
+      /// This function returns a const reference to a vector
       /// that stores the node sequence of the found tour.
       ///
