Index: src/hugo/array_map.h
===================================================================
--- src/hugo/array_map.h	(revision 891)
+++ src/hugo/array_map.h	(revision 897)
@@ -30,4 +30,6 @@
   template <typename MapRegistry, typename Value> 
   class ArrayMap : public MapRegistry::MapBase {
+
+    template <typename MR, typename V> friend class ArrayMap;
 		
   public:
@@ -64,8 +66,4 @@
 
 	
-    /** Default constructor for the map.
-     */
-    ArrayMap() : capacity(0), values(0) {}
-			
     /** Graph and Registry initialized map constructor.
      */
@@ -119,15 +117,16 @@
     ArrayMap& operator=(const ArrayMap& copy) {
       if (&copy == this) return *this;
-
-      if (capacity != 0) {
-	MapBase::destroy();
-	allocator.deallocate(values, capacity);
-      }
-
-      MapBase::operator=(copy);
-
-      capacity = copy.capacity;
-      if (capacity == 0) return *this;
-      values = allocator.allocate(capacity);
+      
+      if (MapBase::getGraph() != copy.getGraph()) {
+	if (capacity != 0) {
+	  MapBase::destroy();
+	  allocator.deallocate(values, capacity);
+	}
+
+	MapBase::operator=(copy);
+	capacity = copy.capacity;
+	if (capacity == 0) return *this;
+	values = allocator.allocate(capacity);      
+      }
 
       for (KeyIt it(*MapBase::getGraph()); it != INVALID; ++it) {
@@ -143,14 +142,17 @@
     template <typename TT>
     ArrayMap& operator=(const ArrayMap<MapRegistry, TT>& copy) {
-      if (capacity != 0) {
-	MapBase::destroy();
-	allocator.deallocate(values, capacity);
-      }
-
-      MapBase::operator=(copy);
-
-      capacity = copy.capacity;
-      if (capacity == 0) return *this;
-      values = allocator.allocate(capacity);
+
+      if (MapBase::getGraph() != copy.getGraph()) {
+	if (capacity != 0) {
+	  MapBase::destroy();
+	  allocator.deallocate(values, capacity);
+	}
+
+	MapBase::operator=(copy);
+
+	capacity = copy.capacity;
+	if (capacity == 0) return *this;
+	values = allocator.allocate(capacity);
+      }
 
       for (KeyIt it(*MapBase::getGraph()); it != INVALID; ++it) {
Index: src/hugo/default_map.h
===================================================================
--- src/hugo/default_map.h	(revision 891)
+++ src/hugo/default_map.h	(revision 897)
@@ -38,5 +38,4 @@
 typedef typename MapRegistry::Graph Graph; \
 \
-DefaultMap() : Parent() {} \
 DefaultMap(const Graph& g, MapRegistry& r) : Parent(g, r) {} \
 DefaultMap(const Graph& g, MapRegistry& r, const Value& v) \
@@ -45,5 +44,6 @@
   : Parent(static_cast<const Parent&>(copy)) {} \
 template <typename TT> \
-DefaultMap(const DefaultMap<MapRegistry, TT>& copy) { \
+DefaultMap(const DefaultMap<MapRegistry, TT>& copy) \
+  : { \
   Parent::MapBase::operator= \
     (static_cast<const typename Parent::MapBase&>(copy)); \
@@ -61,9 +61,11 @@
 template <typename TT> \
 DefaultMap& operator=(const DefaultMap<MapRegistry, TT>& copy) { \
-  Parent::clear(); \
-  Parent::MapBase::operator=(copy); \
+  if (Parent::getGraph() != copy.getGraph()) { \
+    Parent::clear(); \
+    Parent::MapBase::operator=(copy); \
+    Parent::construct(); \
+  } \
   if (Parent::getGraph()) { \
     for (typename Parent::KeyIt it(*Parent::getGraph()); it!=INVALID; ++it) {\
-      Parent::add(it); \
       Parent::operator[](it) = copy[it]; \
     } \
Index: src/hugo/extended_pair.h
===================================================================
--- src/hugo/extended_pair.h	(revision 782)
+++ src/hugo/extended_pair.h	(revision 897)
@@ -37,6 +37,6 @@
 bool operator<(const extended_pair<T1, LA1, T2, LA2>& left, 
 		const extended_pair<T1, RA1, T2, RA2>& right) {
-  if (left.first == right.first) return left.second == right.second;
-  return left.first < right.first;
+  return left.first < right.first || 
+           (!(right.first<left.first) && left.second < right.second);
 }
 
Index: src/hugo/full_graph.h
===================================================================
--- src/hugo/full_graph.h	(revision 880)
+++ src/hugo/full_graph.h	(revision 897)
@@ -14,5 +14,5 @@
 
 #include <hugo/map_registry.h>
-#include <hugo/default_map.h>
+#include <hugo/array_map.h>
 
 #include <hugo/map_defines.h>
@@ -54,5 +54,5 @@
     CREATE_MAP_REGISTRIES;
     /// Creating node and edge maps.
-    CREATE_MAPS(DefaultMap);
+    CREATE_MAPS(ArrayMap);
     
   public:
Index: src/hugo/list_graph.h
===================================================================
--- src/hugo/list_graph.h	(revision 891)
+++ src/hugo/list_graph.h	(revision 897)
@@ -14,5 +14,5 @@
 
 #include <hugo/map_registry.h>
-#include <hugo/default_map.h>
+#include <hugo/array_map.h>
 
 #include <hugo/sym_map.h>
@@ -81,5 +81,5 @@
     /// \todo
     /// It apears in the documentation as if it were a function definition.
-    CREATE_MAPS(DefaultMap);
+    CREATE_MAPS(ArrayMap);
 
   public:
@@ -446,5 +446,5 @@
     CREATE_SYM_EDGE_MAP_REGISTRY;
     /// Creating symmetric edge map.
-    CREATE_SYM_EDGE_MAP(DefaultMap);
+    CREATE_SYM_EDGE_MAP(ArrayMap);
 
     SymListGraph() : ListGraph() { }
@@ -531,5 +531,5 @@
     CREATE_NODE_MAP_REGISTRY;
     /// Creating node maps.
-    CREATE_NODE_MAP(DefaultMap);
+    CREATE_NODE_MAP(ArrayMap);
 
     /// Creating empty map structure for edges.
@@ -537,5 +537,4 @@
     class EdgeMap {
     public:
-      EdgeMap() {}
       EdgeMap(const Graph&) {}
       EdgeMap(const Graph&, const Value&) {}
@@ -883,5 +882,5 @@
     CREATE_EDGE_MAP_REGISTRY;
     /// Creates edge maps.
-    CREATE_EDGE_MAP(DefaultMap);
+    CREATE_EDGE_MAP(ArrayMap);
 
     /// Imports node maps from the NodeGraphType.
Index: src/hugo/map_defines.h
===================================================================
--- src/hugo/map_defines.h	(revision 891)
+++ src/hugo/map_defines.h	(revision 897)
@@ -41,5 +41,4 @@
 public: \
 typedef DynMap<NodeMapRegistry, Value> Parent; \
-NodeMap() {} \
 NodeMap(const typename Parent::Graph& g) \
   : Parent(g, g.node_maps) {} \
@@ -73,5 +72,4 @@
 typedef DynMap<EdgeMapRegistry, Value> Parent; \
 \
-EdgeMap() {} \
 EdgeMap(const typename Parent::Graph& g) \
   : Parent(g, g.edge_maps) {} \
@@ -119,5 +117,4 @@
 typedef SymMap<DynMap, SymEdgeMapRegistry, Value> Parent; \
 \
-SymEdgeMap() {} \
 SymEdgeMap(const typename Parent::Graph& g) \
   : Parent(g, g.sym_edge_maps) {} \
@@ -149,5 +146,4 @@
 typedef typename From::template NodeMap<Value> Parent; \
 \
-NodeMap() : Parent() {} \
 NodeMap(const To& to) \
   : Parent(static_cast<const From&>(from)) { } \
@@ -179,5 +175,4 @@
 typedef typename From::template EdgeMap<Value> Parent; \
 \
-EdgeMap() : Parent() {} \
 EdgeMap(const To& to) \
   : Parent(static_cast<const From&>(from)) { } \
Index: src/hugo/smart_graph.h
===================================================================
--- src/hugo/smart_graph.h	(revision 891)
+++ src/hugo/smart_graph.h	(revision 897)
@@ -13,5 +13,5 @@
 #include <hugo/invalid.h>
 
-#include <hugo/default_map.h>
+#include <hugo/array_map.h>
 #include <hugo/sym_map.h>
 
@@ -77,5 +77,5 @@
     CREATE_MAP_REGISTRIES;
     /// Creating node and edge maps.
-    CREATE_MAPS(DefaultMap);
+    CREATE_MAPS(ArrayMap);
     
   public:
@@ -321,5 +321,5 @@
     CREATE_SYM_EDGE_MAP_REGISTRY;
     /// Creating symmetric edge map.
-    CREATE_SYM_EDGE_MAP(DefaultMap);
+    CREATE_SYM_EDGE_MAP(ArrayMap);
 
 
Index: src/hugo/sym_map.h
===================================================================
--- src/hugo/sym_map.h	(revision 891)
+++ src/hugo/sym_map.h	(revision 897)
@@ -86,8 +86,4 @@
 
 
-    /** Default constructor for the map.
-     */
-    SymMap() : MapImpl() {}
-
     /** Graph and Registry initialized map constructor.
      */
Index: src/hugo/vector_map.h
===================================================================
--- src/hugo/vector_map.h	(revision 891)
+++ src/hugo/vector_map.h	(revision 897)
@@ -70,8 +70,4 @@
     typedef typename Container::const_pointer ConstPointerType;
 
-    /** Default constructor for the map.
-     */
-    VectorMap() {}
-		
     /** Graph and Registry initialized map constructor.
      */
@@ -99,6 +95,8 @@
     template <typename TT>
     VectorMap& operator=(const VectorMap<MapRegistry, TT>& c) {
-      container.resize(c.container.size());
-      MapBase::operator=(c);
+      if (MapBase::getGraph() != c.getGraph()) {
+	MapBase::operator=(c);
+	container.resize(c.container.size());
+      }
       for (KeyIt it(*MapBase::getGraph()); it != INVALID; ++it) {
 	int id = KeyInfo<Graph, KeyIt>::id(*MapBase::getGraph(), it);
