Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(revision 705)
+++ CMakeLists.txt	(revision 715)
@@ -19,8 +19,9 @@
 
 IF(MSVC)
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4250 /wd4355 /wd4800 /wd4996")
+  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4250 /wd4355 /wd4503 /wd4800 /wd4996")
 # Suppressed warnings:
 # C4250: 'class1' : inherits 'class2::member' via dominance
 # C4355: 'this' : used in base member initializer list
+# C4503: 'function' : decorated name length exceeded, name was truncated
 # C4800: 'type' : forcing value to bool 'true' or 'false' (performance warning)
 # C4996: 'function': was declared deprecated
Index: lemon/Makefile.am
===================================================================
--- lemon/Makefile.am	(revision 708)
+++ lemon/Makefile.am	(revision 714)
@@ -1,5 +1,6 @@
 EXTRA_DIST += \
 	lemon/lemon.pc.in \
-	lemon/CMakeLists.txt
+	lemon/CMakeLists.txt \
+	lemon/config.h.cmake
 
 pkgconfig_DATA += lemon/lemon.pc
@@ -17,5 +18,5 @@
 
 nodist_lemon_HEADERS = lemon/config.h	
-	
+
 lemon_libemon_la_CXXFLAGS = \
 	$(AM_CXXFLAGS) \
Index: lemon/concepts/graph_components.h
===================================================================
--- lemon/concepts/graph_components.h	(revision 664)
+++ lemon/concepts/graph_components.h	(revision 713)
@@ -72,4 +72,9 @@
       GraphItem& operator=(const GraphItem&) { return *this; }
 
+      /// \brief Assignment operator for INVALID.
+      ///
+      /// This operator makes the item invalid.
+      GraphItem& operator=(Invalid) { return *this; }
+
       /// \brief Equality operator.
       ///
@@ -97,4 +102,5 @@
         void constraints() {
           _GraphItem i1;
+          i1=INVALID;
           _GraphItem i2 = i1;
           _GraphItem i3 = INVALID;
@@ -222,12 +228,5 @@
         /// be convertible to the represented edge.
         Edge(const Arc&) {}
-
-        /// \brief Assign an arc to an edge.
-        ///
-        /// This function assigns an arc to an edge.
-        /// Besides the core graph item functionality each arc should
-        /// be convertible to the represented edge.
-        Edge& operator=(const Arc&) { return *this; }
-      };
+     };
 
       /// \brief Return one end node of an edge.
@@ -354,8 +353,10 @@
           checkConcept<Base, _Digraph >();
           typename _Digraph::Node node;
+          node=INVALID;
           int nid = digraph.id(node);
           nid = digraph.id(node);
           node = digraph.nodeFromId(nid);
           typename _Digraph::Arc arc;
+          arc=INVALID;
           int eid = digraph.id(arc);
           eid = digraph.id(arc);
Index: lemon/edge_set.h
===================================================================
--- lemon/edge_set.h	(revision 707)
+++ lemon/edge_set.h	(revision 717)
@@ -85,4 +85,10 @@
     ListArcSetBase() : first_arc(-1), first_free_arc(-1) {}
 
+    Node addNode() {
+      LEMON_ASSERT(false,
+        "This graph structure does not support node insertion");
+      return INVALID; // avoid warning
+    }
+
     Arc addArc(const Node& u, const Node& v) {
       int n;
@@ -416,4 +422,10 @@
 
     ListEdgeSetBase() : first_arc(-1), first_free_arc(-1) {}
+
+    Node addNode() {
+      LEMON_ASSERT(false,
+        "This graph structure does not support node insertion");
+      return INVALID; // avoid warning
+    }
 
     Edge addEdge(const Node& u, const Node& v) {
@@ -817,4 +829,10 @@
     SmartArcSetBase() {}
 
+    Node addNode() {
+      LEMON_ASSERT(false,
+        "This graph structure does not support node insertion");
+      return INVALID; // avoid warning
+    }
+
     Arc addArc(const Node& u, const Node& v) {
       int n = arcs.size();
@@ -1113,4 +1131,10 @@
     SmartEdgeSetBase() {}
 
+    Node addNode() {
+      LEMON_ASSERT(false,
+        "This graph structure does not support node insertion");
+      return INVALID; // avoid warning
+    }
+
     Edge addEdge(const Node& u, const Node& v) {
       int n = arcs.size();
Index: test/min_cost_flow_test.cc
===================================================================
--- test/min_cost_flow_test.cc	(revision 711)
+++ test/min_cost_flow_test.cc	(revision 716)
@@ -94,20 +94,22 @@
     void constraints() {
       checkConcept<concepts::Digraph, GR>();
-
-      MCF mcf(g);
+      
+      const Constraints& me = *this;
+
+      MCF mcf(me.g);
       const MCF& const_mcf = mcf;
 
       b = mcf.reset()
-             .lowerMap(lower)
-             .upperMap(upper)
-             .costMap(cost)
-             .supplyMap(sup)
-             .stSupply(n, n, k)
+             .lowerMap(me.lower)
+             .upperMap(me.upper)
+             .costMap(me.cost)
+             .supplyMap(me.sup)
+             .stSupply(me.n, me.n, me.k)
              .run();
 
       c = const_mcf.totalCost();
       x = const_mcf.template totalCost<double>();
-      v = const_mcf.flow(a);
-      c = const_mcf.potential(n);
+      v = const_mcf.flow(me.a);
+      c = const_mcf.potential(me.n);
       const_mcf.flowMap(fm);
       const_mcf.potentialMap(pm);
@@ -121,13 +123,14 @@
     typedef concepts::WriteMap<Arc, Value> FlowMap;
     typedef concepts::WriteMap<Node, Cost> PotMap;
-
-    const GR &g;
-    const VAM &lower;
-    const VAM &upper;
-    const CAM &cost;
-    const NM &sup;
-    const Node &n;
-    const Arc &a;
-    const Value &k;
+  
+    GR g;
+    VAM lower;
+    VAM upper;
+    CAM cost;
+    NM sup;
+    Node n;
+    Arc a;
+    Value k;
+
     FlowMap fm;
     PotMap pm;
