Index: lemon/lgf_writer.h
===================================================================
--- lemon/lgf_writer.h	(revision 165)
+++ lemon/lgf_writer.h	(revision 185)
@@ -604,4 +604,5 @@
     DigraphWriter& skipNodes() {
       LEMON_ASSERT(!_skip_nodes, "Multiple usage of skipNodes() member");
+      _skip_nodes = true;
       return *this;
     }
@@ -612,4 +613,5 @@
     DigraphWriter& skipArcs() {
       LEMON_ASSERT(!_skip_arcs, "Multiple usage of skipArcs() member");
+      _skip_arcs = true;
       return *this;
     }
@@ -676,4 +678,28 @@
 	}
 	*_os << std::endl;
+      }
+    }
+
+    void createNodeIndex() {
+      _writer_bits::MapStorageBase<Node>* label = 0;
+      for (typename NodeMaps::iterator it = _node_maps.begin();
+	   it != _node_maps.end(); ++it) {
+        if (it->first == "label") {
+	  label = it->second;
+	  break;
+	}
+      }
+
+      if (label == 0) {
+	for (NodeIt n(_digraph); n != INVALID; ++n) {
+	  std::ostringstream os;
+	  os << _digraph.id(n);
+	  _node_index.insert(std::make_pair(n, os.str()));	  
+	}	
+      } else {
+	for (NodeIt n(_digraph); n != INVALID; ++n) {
+	  std::string value = label->get(n);	  
+	  _node_index.insert(std::make_pair(n, value));
+	}
       }
     }
@@ -746,4 +772,28 @@
     }
 
+    void createArcIndex() {
+      _writer_bits::MapStorageBase<Arc>* label = 0;
+      for (typename ArcMaps::iterator it = _arc_maps.begin();
+	   it != _arc_maps.end(); ++it) {
+        if (it->first == "label") {
+	  label = it->second;
+	  break;
+	}
+      }
+
+      if (label == 0) {
+	for (ArcIt a(_digraph); a != INVALID; ++a) {
+	  std::ostringstream os;
+	  os << _digraph.id(a);
+	  _arc_index.insert(std::make_pair(a, os.str()));	  
+	}	
+      } else {
+	for (ArcIt a(_digraph); a != INVALID; ++a) {
+	  std::string value = label->get(a);	  
+	  _arc_index.insert(std::make_pair(a, value));
+	}
+      }
+    }
+
     void writeAttributes() {
       if (_attributes.empty()) return;
@@ -772,7 +822,11 @@
       if (!_skip_nodes) {
 	writeNodes();
+      } else {
+	createNodeIndex();
       }
       if (!_skip_arcs) {      
 	writeArcs();
+      } else {
+	createArcIndex();
       }
       writeAttributes();
@@ -1116,4 +1170,5 @@
     GraphWriter& skipNodes() {
       LEMON_ASSERT(!_skip_nodes, "Multiple usage of skipNodes() member");
+      _skip_nodes = true;
       return *this;
     }
@@ -1124,4 +1179,5 @@
     GraphWriter& skipEdges() {
       LEMON_ASSERT(!_skip_edges, "Multiple usage of skipEdges() member");
+      _skip_edges = true;
       return *this;
     }
@@ -1188,4 +1244,28 @@
 	}
 	*_os << std::endl;
+      }
+    }
+
+    void createNodeIndex() {
+      _writer_bits::MapStorageBase<Node>* label = 0;
+      for (typename NodeMaps::iterator it = _node_maps.begin();
+	   it != _node_maps.end(); ++it) {
+        if (it->first == "label") {
+	  label = it->second;
+	  break;
+	}
+      }
+
+      if (label == 0) {
+	for (NodeIt n(_graph); n != INVALID; ++n) {
+	  std::ostringstream os;
+	  os << _graph.id(n);
+	  _node_index.insert(std::make_pair(n, os.str()));	  
+	}	
+      } else {
+	for (NodeIt n(_graph); n != INVALID; ++n) {
+	  std::string value = label->get(n);	  
+	  _node_index.insert(std::make_pair(n, value));
+	}
       }
     }
@@ -1258,4 +1338,28 @@
     }
 
+    void createEdgeIndex() {
+      _writer_bits::MapStorageBase<Edge>* label = 0;
+      for (typename EdgeMaps::iterator it = _edge_maps.begin();
+	   it != _edge_maps.end(); ++it) {
+        if (it->first == "label") {
+	  label = it->second;
+	  break;
+	}
+      }
+
+      if (label == 0) {
+	for (EdgeIt e(_graph); e != INVALID; ++e) {
+	  std::ostringstream os;
+	  os << _graph.id(e);
+	  _edge_index.insert(std::make_pair(e, os.str()));	  
+	}	
+      } else {
+	for (EdgeIt e(_graph); e != INVALID; ++e) {
+	  std::string value = label->get(e);	  
+	  _edge_index.insert(std::make_pair(e, value));
+	}
+      }
+    }
+
     void writeAttributes() {
       if (_attributes.empty()) return;
@@ -1284,7 +1388,11 @@
       if (!_skip_nodes) {
 	writeNodes();
+      } else {
+	createNodeIndex();
       }
       if (!_skip_edges) {      
 	writeEdges();
+      } else {
+	createEdgeIndex();
       }
       writeAttributes();
