Index: lemon/concepts/digraph.h
===================================================================
--- lemon/concepts/digraph.h	(revision 57)
+++ lemon/concepts/digraph.h	(revision 61)
@@ -349,4 +349,26 @@
       Node source(Arc) const { return INVALID; }
 
+      /// \brief Returns the ID of the node.
+      int id(Node) const { return -1; } 
+
+      /// \brief Returns the ID of the arc.
+      int id(Arc) const { return -1; } 
+
+      /// \brief Returns the node with the given ID.
+      ///
+      /// \pre The argument should be a valid node ID in the graph.
+      Node nodeFromId(int) const { return INVALID; } 
+
+      /// \brief Returns the arc with the given ID.
+      ///
+      /// \pre The argument should be a valid arc ID in the graph.
+      Arc arcFromId(int) const { return INVALID; } 
+
+      /// \brief Returns an upper bound on the node IDs.
+      int maxNodeId() const { return -1; } 
+
+      /// \brief Returns an upper bound on the arc IDs.
+      int maxArcId() const { return -1; } 
+
       void first(Node&) const {}
       void next(Node&) const {}
@@ -361,4 +383,14 @@
       void firstOut(Arc&, const Node&) const {}
       void nextOut(Arc&) const {}
+
+      // The second parameter is dummy.
+      Node fromId(int, Node) const { return INVALID; }
+      // The second parameter is dummy.
+      Arc fromId(int, Arc) const { return INVALID; }
+
+      // Dummy parameter.
+      int maxId(Node) const { return -1; } 
+      // Dummy parameter.
+      int maxId(Arc) const { return -1; } 
 
       /// \brief The base node of the iterator.
@@ -440,4 +472,5 @@
         void constraints() {
           checkConcept<IterableDigraphComponent<>, Digraph>();
+	  checkConcept<IDableDigraphComponent<>, Digraph>();
           checkConcept<MappableDigraphComponent<>, Digraph>();
         }
Index: lemon/concepts/graph.h
===================================================================
--- lemon/concepts/graph.h	(revision 57)
+++ lemon/concepts/graph.h	(revision 61)
@@ -625,4 +625,37 @@
       Node target(Arc) const { return INVALID; }
 
+      /// \brief Returns the id of the node.
+      int id(Node) const { return -1; } 
+
+      /// \brief Returns the id of the edge.
+      int id(Edge) const { return -1; } 
+
+      /// \brief Returns the id of the arc.
+      int id(Arc) const { return -1; } 
+
+      /// \brief Returns the node with the given id.
+      ///
+      /// \pre The argument should be a valid node id in the graph.
+      Node nodeFromId(int) const { return INVALID; } 
+
+      /// \brief Returns the edge with the given id.
+      ///
+      /// \pre The argument should be a valid edge id in the graph.
+      Edge edgeFromId(int) const { return INVALID; } 
+
+      /// \brief Returns the arc with the given id.
+      ///
+      /// \pre The argument should be a valid arc id in the graph.
+      Arc arcFromId(int) const { return INVALID; } 
+
+      /// \brief Returns an upper bound on the node IDs.
+      int maxNodeId() const { return -1; } 
+
+      /// \brief Returns an upper bound on the edge IDs.
+      int maxEdgeId() const { return -1; } 
+
+      /// \brief Returns an upper bound on the arc IDs.
+      int maxArcId() const { return -1; } 
+
       void first(Node&) const {}
       void next(Node&) const {}
@@ -640,7 +673,20 @@
       void nextIn(Arc&) const {}
 
-
       void firstInc(Edge &, bool &, const Node &) const {}
       void nextInc(Edge &, bool &) const {}
+
+      // The second parameter is dummy.
+      Node fromId(int, Node) const { return INVALID; }
+      // The second parameter is dummy.
+      Edge fromId(int, Edge) const { return INVALID; }
+      // The second parameter is dummy.
+      Arc fromId(int, Arc) const { return INVALID; }
+
+      // Dummy parameter.
+      int maxId(Node) const { return -1; } 
+      // Dummy parameter.
+      int maxId(Edge) const { return -1; } 
+      // Dummy parameter.
+      int maxId(Arc) const { return -1; } 
 
       /// \brief Base node of the iterator
@@ -690,4 +736,5 @@
 	void constraints() {
 	  checkConcept<IterableGraphComponent<>, Graph>();
+	  checkConcept<IDableGraphComponent<>, Graph>();
 	  checkConcept<MappableGraphComponent<>, Graph>();
 	}
