Index: src/work/marci/bipartite_graph_wrapper_test.cc
===================================================================
--- src/work/marci/bipartite_graph_wrapper_test.cc	(revision 389)
+++ src/work/marci/bipartite_graph_wrapper_test.cc	(revision 393)
@@ -73,4 +73,7 @@
     max_flow_test(stgw, stgw.S_NODE, stgw.T_NODE, const1map, flow);
   max_flow_test.augmentOnShortestPath();
+  max_flow_test.augmentOnShortestPath();
+
+  std::cout << max_flow_test.flowValue() << std::endl;
 
   return 0;
Index: src/work/marci/graph_wrapper.h
===================================================================
--- src/work/marci/graph_wrapper.h	(revision 389)
+++ src/work/marci/graph_wrapper.h	(revision 393)
@@ -919,5 +919,5 @@
     SFalseTTrueMap;
     SFalseTTrueMap* s_false_t_true_map;
-    
+
   public:
     static const bool S_CLASS=false;
@@ -931,5 +931,13 @@
     typedef typename GraphWrapper<Graph>::Edge Edge;
     //using GraphWrapper<Graph>::EdgeIt;
+    class ClassNodeIt;
+    friend class ClassNodeIt;
+    class OutEdgeIt;
+    friend class OutEdgeIt;
+    class InEdgeIt;
+    friend class InEdgeIt;
     class ClassNodeIt {
+      friend class BipartiteGraphWrapper<Graph>;
+    protected:
       Node n;
     public:
@@ -964,6 +972,6 @@
 //     };
     class OutEdgeIt { 
-    public:
-
+      friend class BipartiteGraphWrapper<Graph>;
+    protected:
       typename Graph::OutEdgeIt e;
     public:
@@ -979,5 +987,6 @@
     };
     class InEdgeIt { 
-    public:
+      friend class BipartiteGraphWrapper<Graph>;
+    protected:
       typename Graph::InEdgeIt e;
     public:
@@ -995,5 +1004,5 @@
     using GraphWrapper<Graph>::first;
     ClassNodeIt& first(ClassNodeIt& n, bool _class) const { 
-      n=SNodeIt(*this, _class) ; return n; }
+      n=ClassNodeIt(*this, _class) ; return n; }
 //    SNodeIt& first(SNodeIt& n) const { n=SNodeIt(*this); return n; }
 //    TNodeIt& first(TNodeIt& n) const { n=TNodeIt(*this); return n; }
@@ -1007,5 +1016,5 @@
     using GraphWrapper<Graph>::next;
     ClassNodeIt& next(ClassNodeIt& n) const { 
-      this->s_false_t_true_map->next(n); return n; 
+      this->s_false_t_true_map->next(n.n); return n; 
     }
 //     SNodeIt& next(SNodeIt& n) const { 
@@ -1320,7 +1329,8 @@
     }
     OutEdgeIt& next(OutEdgeIt& i) const { 
+      typename Graph::Node v;
       switch (i.spec) {
 	case 0: //normal edge
-	  typename Graph::Node v=this->graph->aNode(i.e);
+	  this->graph->aNode(i.e);
 	  this->graph->next(i.e);
 	  if (!this->graph->valid(i.e)) { //Az igazi elek vegere ertunk
@@ -1346,7 +1356,8 @@
     }
     InEdgeIt& next(InEdgeIt& i) const { 
+      typename Graph::Node v;
       switch (i.spec) {
 	case 0: //normal edge
-	  typename Graph::Node v=this->graph->aNode(i.e);
+	  v=this->graph->aNode(i.e);
 	  this->graph->next(i.e);
 	  if (!this->graph->valid(i.e)) { //Az igazi elek vegere ertunk
@@ -1404,26 +1415,28 @@
     Node tail(const Edge& e) const { 
       switch (e.spec) {
-	case 0: 
-	  return Node(this->graph->tail(e));
-	  break;
-	case 1:
-	  return S_NODE;
-	  break;
-	case 2:
-	  return Node(e.n);
-	  break;
+      case 0: 
+	return Node(this->graph->tail(e));
+	break;
+      case 1:
+	return S_NODE;
+	break;
+      case 2:
+      default:
+	return Node(e.n);
+	break;
       }
     }
     Node head(const Edge& e) const { 
       switch (e.spec) {
-	case 0: 
-	  return Node(this->graph->head(e));
-	  break;
-	case 1:
-	  return Node(e.n);
-	  break;
-	case 2:
-	  return T_NODE;
-	  break;
+      case 0: 
+	return Node(this->graph->head(e));
+	break;
+      case 1:
+	return Node(e.n);
+	break;
+      case 2:
+      default:
+	return T_NODE;
+	break;
       }
     }
@@ -1459,26 +1472,28 @@
       T operator[](const Node& n) const { 
 	switch (n.spec) {
-	  case 0: 
-	    return (*this)[n];
-	    break;
-	  case 1:
-	    return s_value;
-	    break;
-	  case 2:
-	    return t_value;
-	    break;
+	case 0: 
+	  return Parent::operator[](n);
+	  break;
+	case 1:
+	  return s_value;
+	  break;
+	case 2: 
+	default:
+	  return t_value;
+	  break;
 	}
       }
       void set(const Node& n, T t) { 
 	switch (n.spec) {
-	  case 0: 
-	    GraphWrapper<Graph>::template NodeMap<T>::set(n, t);
-	    break;
-	  case 1:
-	    s_value=t;
-	    break;
-	  case 2:
-	    t_value=t;
-	    break;
+	case 0: 
+	  GraphWrapper<Graph>::template NodeMap<T>::set(n, t);
+	  break;
+	case 1:
+	  s_value=t;
+	  break;
+	case 2:
+	default:
+	  t_value=t;
+	  break;
 	}
       }
@@ -1486,35 +1501,37 @@
 
     template<typename T> class EdgeMap : public GraphWrapper<Graph>::template EdgeMap<T> { 
-      typedef typename Graph::template NodeMap<T> Parent;
+      typedef typename GraphWrapper<Graph>::template EdgeMap<T> Parent;
       typename GraphWrapper<Graph>::template NodeMap<T> node_value;
     public:
-      EdgeMap(const stGraphWrapper<Graph>& _G) :  Parent(_G), 
-						  node_value(_G) { }
+      EdgeMap(const stGraphWrapper<Graph>& _G) : Parent(_G), 
+						 node_value(_G) { }
       EdgeMap(const stGraphWrapper<Graph>& _G, T a) : Parent(_G, a), 
 						      node_value(_G, a) { }
       T operator[](const Edge& e) const { 
 	switch (e.spec) {
-	  case 0: 
-	    return (*this)[e];
-	    break;
-	  case 1:
-	    return node_value[e.n];
-	    break;
-	  case 2:
-	    return node_value[e.n];
-	    break;
+	case 0: 
+	  return Parent::operator[](e);
+	  break;
+	case 1:
+	  return node_value[e.n];
+	  break;
+	case 2:
+	default:
+	  return node_value[e.n];
+	  break;
 	}
       }
       void set(const Edge& e, T t) { 
 	switch (e.spec) {
-	  case 0: 
-	    GraphWrapper<Graph>::set(e, t);
-	    break;
-	  case 1:
-	    node_value.set(e, t);
-	    break;
-	  case 2:
-	    node_value.set(e, t);
-	    break;
+	case 0: 
+	  GraphWrapper<Graph>::template EdgeMap<T>::set(e, t);
+	  break;
+	case 1:
+	  node_value.set(e.n, t);
+	  break;
+	case 2:
+	default:
+	  node_value.set(e.n, t);
+	  break;
 	}
       }
