Index: lemon/bits/graph_adaptor_extender.h
===================================================================
--- lemon/bits/graph_adaptor_extender.h	(revision 455)
+++ lemon/bits/graph_adaptor_extender.h	(revision 580)
@@ -22,6 +22,4 @@
 #include <lemon/core.h>
 #include <lemon/error.h>
-
-#include <lemon/bits/default_map.h>
 
 namespace lemon {
Index: lemon/bits/map_extender.h
===================================================================
--- lemon/bits/map_extender.h	(revision 440)
+++ lemon/bits/map_extender.h	(revision 580)
@@ -48,4 +48,6 @@
     typedef typename Parent::Key Key;
     typedef typename Parent::Value Value;
+    typedef typename Parent::Reference Reference;
+    typedef typename Parent::ConstReference ConstReference;
 
     class MapIt;
@@ -188,4 +190,6 @@
     typedef typename Parent::Key Key;
     typedef typename Parent::Value Value;
+    typedef typename Parent::Reference Reference;
+    typedef typename Parent::ConstReference ConstReference;
 
     class MapIt;
Index: lemon/concepts/digraph.h
===================================================================
--- lemon/concepts/digraph.h	(revision 529)
+++ lemon/concepts/digraph.h	(revision 580)
@@ -422,10 +422,9 @@
       Node oppositeNode(const Node&, const Arc&) const { return INVALID; }
 
-      /// \brief Read write map of the nodes to type \c T.
-      ///
-      /// ReadWrite map of the nodes to type \c T.
-      /// \sa Reference
+      /// \brief Reference map of the nodes to type \c T.
+      ///
+      /// Reference map of the nodes to type \c T.
       template<class T>
-      class NodeMap : public ReadWriteMap< Node, T > {
+      class NodeMap : public ReferenceMap<Node, T, T&, const T&> {
       public:
 
@@ -437,5 +436,6 @@
       private:
         ///Copy constructor
-        NodeMap(const NodeMap& nm) : ReadWriteMap< Node, T >(nm) { }
+        NodeMap(const NodeMap& nm) : 
+          ReferenceMap<Node, T, T&, const T&>(nm) { }
         ///Assignment operator
         template <typename CMap>
@@ -446,10 +446,9 @@
       };
 
-      /// \brief Read write map of the arcs to type \c T.
+      /// \brief Reference map of the arcs to type \c T.
       ///
       /// Reference map of the arcs to type \c T.
-      /// \sa Reference
       template<class T>
-      class ArcMap : public ReadWriteMap<Arc,T> {
+      class ArcMap : public ReferenceMap<Arc, T, T&, const T&> {
       public:
 
@@ -460,5 +459,6 @@
       private:
         ///Copy constructor
-        ArcMap(const ArcMap& em) : ReadWriteMap<Arc,T>(em) { }
+        ArcMap(const ArcMap& em) :
+          ReferenceMap<Arc, T, T&, const T&>(em) { }
         ///Assignment operator
         template <typename CMap>
@@ -472,4 +472,5 @@
       struct Constraints {
         void constraints() {
+          checkConcept<BaseDigraphComponent, _Digraph>();
           checkConcept<IterableDigraphComponent<>, _Digraph>();
           checkConcept<IDableDigraphComponent<>, _Digraph>();
Index: lemon/concepts/graph.h
===================================================================
--- lemon/concepts/graph.h	(revision 559)
+++ lemon/concepts/graph.h	(revision 580)
@@ -498,10 +498,9 @@
       };
 
-      /// \brief Read write map of the nodes to type \c T.
-      ///
-      /// ReadWrite map of the nodes to type \c T.
-      /// \sa Reference
+      /// \brief Reference map of the nodes to type \c T.
+      ///
+      /// Reference map of the nodes to type \c T.
       template<class T>
-      class NodeMap : public ReadWriteMap< Node, T >
+      class NodeMap : public ReferenceMap<Node, T, T&, const T&>
       {
       public:
@@ -514,5 +513,6 @@
       private:
         ///Copy constructor
-        NodeMap(const NodeMap& nm) : ReadWriteMap< Node, T >(nm) { }
+        NodeMap(const NodeMap& nm) :
+          ReferenceMap<Node, T, T&, const T&>(nm) { }
         ///Assignment operator
         template <typename CMap>
@@ -523,10 +523,9 @@
       };
 
-      /// \brief Read write map of the directed arcs to type \c T.
-      ///
-      /// Reference map of the directed arcs to type \c T.
-      /// \sa Reference
+      /// \brief Reference map of the arcs to type \c T.
+      ///
+      /// Reference map of the arcs to type \c T.
       template<class T>
-      class ArcMap : public ReadWriteMap<Arc,T>
+      class ArcMap : public ReferenceMap<Arc, T, T&, const T&>
       {
       public:
@@ -538,5 +537,6 @@
       private:
         ///Copy constructor
-        ArcMap(const ArcMap& em) : ReadWriteMap<Arc,T>(em) { }
+        ArcMap(const ArcMap& em) :
+          ReferenceMap<Arc, T, T&, const T&>(em) { }
         ///Assignment operator
         template <typename CMap>
@@ -547,10 +547,9 @@
       };
 
-      /// Read write map of the edges to type \c T.
-
-      /// Reference map of the arcs to type \c T.
-      /// \sa Reference
+      /// Reference map of the edges to type \c T.
+
+      /// Reference map of the edges to type \c T.
       template<class T>
-      class EdgeMap : public ReadWriteMap<Edge,T>
+      class EdgeMap : public ReferenceMap<Edge, T, T&, const T&>
       {
       public:
@@ -562,5 +561,6 @@
       private:
         ///Copy constructor
-        EdgeMap(const EdgeMap& em) : ReadWriteMap<Edge,T>(em) {}
+        EdgeMap(const EdgeMap& em) :
+          ReferenceMap<Edge, T, T&, const T&>(em) {}
         ///Assignment operator
         template <typename CMap>
@@ -749,4 +749,5 @@
       struct Constraints {
         void constraints() {
+          checkConcept<BaseGraphComponent, _Graph>();
           checkConcept<IterableGraphComponent<>, _Graph>();
           checkConcept<IDableGraphComponent<>, _Graph>();
Index: lemon/concepts/graph_components.h
===================================================================
--- lemon/concepts/graph_components.h	(revision 579)
+++ lemon/concepts/graph_components.h	(revision 580)
@@ -989,6 +989,7 @@
     /// the \c NodeMap, \c ArcMap and \c EdgeMap subtypes of digraph and 
     /// graph types, which can be used for associating data to graph items.
+    /// The standard graph maps must conform to the ReferenceMap concept.
     template <typename GR, typename K, typename V>
-    class GraphMap : public ReadWriteMap<K, V> {
+    class GraphMap : public ReferenceMap<K, V, V&, const V&> {
     public:
 
@@ -1001,4 +1002,11 @@
       /// The value type of the map.
       typedef V Value;
+      /// The reference type of the map.
+      typedef Value& Reference;
+      /// The const reference type of the map.
+      typedef const Value& ConstReference;
+
+      // The reference map tag.
+      typedef True ReferenceMapTag;
 
       /// \brief Construct a new map.
@@ -1032,5 +1040,6 @@
       struct Constraints {
         void constraints() {
-          checkConcept<ReadWriteMap<Key, Value>, _Map >();
+          checkConcept
+            <ReferenceMap<Key, Value, Value&, const Value&>, _Map>();
           _Map m1(g);
           _Map m2(g,t);
@@ -1074,4 +1083,5 @@
       ///
       /// Standard graph map for the nodes.
+      /// It conforms to the ReferenceMap concept.
       template <typename V>
       class NodeMap : public GraphMap<MappableDigraphComponent, Node, V> {
@@ -1111,4 +1121,5 @@
       ///
       /// Standard graph map for the arcs.
+      /// It conforms to the ReferenceMap concept.
       template <typename V>
       class ArcMap : public GraphMap<MappableDigraphComponent, Arc, V> {
@@ -1208,4 +1219,5 @@
       ///
       /// Standard graph map for the edges.
+      /// It conforms to the ReferenceMap concept.
       template <typename V>
       class EdgeMap : public GraphMap<MappableGraphComponent, Edge, V> {
