Index: src/lemon/bits/item_reader.h
===================================================================
--- src/lemon/bits/item_reader.h	(revision 1415)
+++ src/lemon/bits/item_reader.h	(revision 1427)
@@ -342,32 +342,6 @@
   };
 
-  template <typename Item>
-  class DefaultReader<std::vector<Item> > 
-    : public PushBackReader<std::vector<Item> > {};
-
-  template <typename Item>
-  class DefaultReader<std::deque<Item> > 
-    : public PushBackReader<std::deque<Item> > {};
-
-  template <typename Item>
-  class DefaultReader<std::list<Item> > 
-    : public PushBackReader<std::list<Item> > {};
-
-  template <typename Item>
-  class DefaultReader<std::set<Item> > 
-    : public InsertReader<std::set<Item> > {};
-
-  template <typename Item>
-  class DefaultReader<std::multiset<Item> > 
-    : public InsertReader<std::multiset<Item> > {};
-
-  /// \ingroup item_io
-  /// 
-  /// \brief The default item reader for skipping a value in the stream.
-  ///
-  /// The default item reader for skipping a value in the stream.
-  ///
-  /// \author Balazs Dezso
-  class DefaultSkipper {
+  template <>
+  class DefaultReader<std::string> {
   public:
     typedef std::string Value;
@@ -385,9 +359,39 @@
 	break;
       default:
-	DefaultReader<std::string>().read(is, value); 
+	is >> value; 
 	break;
       }
     }
-  };
+    
+  };
+
+  template <typename Item>
+  class DefaultReader<std::vector<Item> > 
+    : public PushBackReader<std::vector<Item> > {};
+
+  template <typename Item>
+  class DefaultReader<std::deque<Item> > 
+    : public PushBackReader<std::deque<Item> > {};
+
+  template <typename Item>
+  class DefaultReader<std::list<Item> > 
+    : public PushBackReader<std::list<Item> > {};
+
+  template <typename Item>
+  class DefaultReader<std::set<Item> > 
+    : public InsertReader<std::set<Item> > {};
+
+  template <typename Item>
+  class DefaultReader<std::multiset<Item> > 
+    : public InsertReader<std::multiset<Item> > {};
+
+  /// \ingroup item_io
+  /// 
+  /// \brief The default item reader for skipping a value in the stream.
+  ///
+  /// The default item reader for skipping a value in the stream.
+  ///
+  /// \author Balazs Dezso
+  class DefaultSkipper : public DefaultReader<std::string> {};
 
   /// \ingroup item_io  
Index: src/lemon/lemon_reader.h
===================================================================
--- src/lemon/lemon_reader.h	(revision 1424)
+++ src/lemon/lemon_reader.h	(revision 1427)
@@ -100,6 +100,6 @@
   /// while it does not starts with \c \@ character. This line can start a 
   /// new section or if it can close the file with the \c \@end line.
-  /// The file format ignore the empty lines and it may contain comments
-  /// started with a \c # character to the end of the line. 
+  /// The file format ignore the empty and comment lines. The line is
+  /// comment line if it starts with a \c # character. 
   ///
   /// The framework provides an abstract LemonReader::SectionReader class
@@ -109,6 +109,6 @@
   /// can be attached to an LemonReader and the first attached what can
   /// process the section will be used. Its \c read() member will called
-  /// with a stream contains the section. From this stream the empty lines
-  /// and comments are filtered out.
+  /// with a stream contains the section. From this stream the empty and
+  /// comment lines are filtered out.
   ///
   /// \relates GraphReader
@@ -134,7 +134,6 @@
       enum skip_state_type {
 	no_skip,
-	after_comment,
 	after_endl,
-	empty_line
+	comment_line
       };
 
@@ -181,18 +180,7 @@
 	    skip_state = after_endl;
 	    return true;
-	  case '#':
-	    skip_state = after_comment;
-	    return false;
 	  default:
 	    return true;
 	  }
-	case after_comment:
-	  switch (c) {
-	  case '\n': 
-	    skip_state = after_endl;
-	    return true;
-	  default:
-	    return false;
-	  }        
 	case after_endl:
 	  switch (c) {
@@ -202,5 +190,5 @@
 	    return false;
 	  case '#':
-	    skip_state = empty_line;
+	    skip_state = comment_line;
 	    return false;
 	  default:
@@ -213,5 +201,5 @@
 	  }
 	  break;
-	case empty_line:
+	case comment_line:
 	  switch (c) {
 	  case '\n': 
