Index: demo/topology_demo.cc
===================================================================
--- demo/topology_demo.cc	(revision 1909)
+++ demo/topology_demo.cc	(revision 1910)
@@ -60,5 +60,5 @@
   connectedComponents(graph, compMap);
 
-  graphToEps(graph, "connected_components.eps").u().
+  graphToEps(graph, "connected_components.eps").undirected().
     coords(coords).scaleToA4().enableParallel().
     parEdgeDist(20.0).edgeWidthScale(2.0).nodeScale(20.0).
@@ -116,5 +116,6 @@
   biNodeConnectedComponents(graph, compMap);
   biNodeConnectedCutNodes(graph, cutMap);
-  graphToEps(graph, "bi_node_connected_components.eps").u().
+
+  graphToEps(graph, "bi_node_connected_components.eps").undirected().
     coords(coords).scaleToA4().enableParallel().
     parEdgeDist(20.0).edgeWidthScale(5.0).nodeScale(20.0).
@@ -146,5 +147,5 @@
   biEdgeConnectedCutEdges(graph, cutMap);
 
-  graphToEps(graph, "bi_edge_connected_components.eps").u().
+  graphToEps(graph, "bi_edge_connected_components.eps").undirected().
     coords(coords).scaleToA4().enableParallel().
     parEdgeDist(20.0).edgeWidthScale(2.0).nodeScale(20.0).
@@ -173,5 +174,5 @@
   bipartitePartitions(graph, partMap);
 
-  graphToEps(graph, "bipartite_partitions.eps").u().
+  graphToEps(graph, "bipartite_partitions.eps").undirected().
     coords(coords).scaleToA4().enableParallel().
     parEdgeDist(20.0).edgeWidthScale(2.0).nodeScale(20.0).
Index: lemon/Makefile.am
===================================================================
--- lemon/Makefile.am	(revision 1909)
+++ lemon/Makefile.am	(revision 1910)
@@ -89,4 +89,5 @@
 	bits/item_reader.h \
 	bits/item_writer.h \
+	concept/bpugraph.h \
 	concept/graph.h \
 	concept/graph_component.h \
Index: lemon/bits/alteration_notifier.h
===================================================================
--- lemon/bits/alteration_notifier.h	(revision 1909)
+++ lemon/bits/alteration_notifier.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ * (Egervary Research Groin on Combinatorial Optimization, EGRES).
  *
  * Permission to use, modify and distribute this software is granted
@@ -21,5 +21,5 @@
 #include <algorithm>
 
-///\ingroup graphmapfactory
+///\ingroin graphmapfactory
 ///\file
 ///\brief Observer registry for graph alteration observers.
@@ -27,5 +27,5 @@
 namespace lemon {
 
-  /// \addtogroup graphmapfactory
+  /// \addtogroin graphmapfactory
   /// @{
 
@@ -502,13 +502,13 @@
 
   template <typename _Base>
-  class AlterableUBipartiteGraphExtender : public _Base {
+  class AlterableBpUGraphExtender : public _Base {
   public:
 
     typedef _Base Parent;
-    typedef AlterableUBipartiteGraphExtender Graph;
+    typedef AlterableBpUGraphExtender Graph;
   
     typedef typename Parent::Node Node;
-    typedef typename Parent::LowerNode LowerNode;
-    typedef typename Parent::UpperNode UpperNode;
+    typedef typename Parent::BNode BNode;
+    typedef typename Parent::ANode ANode;
     typedef typename Parent::Edge Edge;
     typedef typename Parent::UEdge UEdge;
@@ -516,6 +516,6 @@
   
     typedef AlterationNotifier<Node> NodeNotifier;
-    typedef AlterationNotifier<LowerNode> LowerNodeNotifier;
-    typedef AlterationNotifier<UpperNode> UpperNodeNotifier;
+    typedef AlterationNotifier<BNode> BNodeNotifier;
+    typedef AlterationNotifier<ANode> ANodeNotifier;
     typedef AlterationNotifier<Edge> EdgeNotifier;
     typedef AlterationNotifier<UEdge> UEdgeNotifier;
@@ -524,6 +524,6 @@
 
     mutable NodeNotifier nodeNotifier;
-    mutable LowerNodeNotifier lowerNodeNotifier;
-    mutable UpperNodeNotifier upperNodeNotifier;
+    mutable BNodeNotifier bNodeNotifier;
+    mutable ANodeNotifier aNodeNotifier;
     mutable EdgeNotifier edgeNotifier;
     mutable UEdgeNotifier uEdgeNotifier;
@@ -535,10 +535,10 @@
     }
 
-    LowerNodeNotifier& getNotifier(LowerNode) const {
-      return lowerNodeNotifier;
-    }
-
-    UpperNodeNotifier& getNotifier(UpperNode) const {
-      return upperNodeNotifier;
+    BNodeNotifier& getNotifier(BNode) const {
+      return bNodeNotifier;
+    }
+
+    ANodeNotifier& getNotifier(ANode) const {
+      return aNodeNotifier;
     }
 
@@ -551,8 +551,8 @@
     }
 
-    ~AlterableUBipartiteGraphExtender() {
+    ~AlterableBpUGraphExtender() {
       nodeNotifier.clear();
-      lowerNodeNotifier.clear();
-      upperNodeNotifier.clear();
+      bNodeNotifier.clear();
+      aNodeNotifier.clear();
       edgeNotifier.clear();
       uEdgeNotifier.clear();
Index: lemon/bits/array_map.h
===================================================================
--- lemon/bits/array_map.h	(revision 1875)
+++ lemon/bits/array_map.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ * (Egervary Research Groin on Combinatorial Optimization, EGRES).
  *
  * Permission to use, modify and distribute this software is granted
@@ -24,5 +24,5 @@
 #include <lemon/concept/maps.h>
 
-/// \ingroup graphmapfactory
+/// \ingroin graphmapfactory
 /// \file
 /// \brief Graph maps that construct and destruct
@@ -31,10 +31,10 @@
 namespace lemon {
 
-  /// \ingroup graphmapfactory
+  /// \ingroin graphmapfactory
   ///
   /// \brief Graph map based on the array storage.
   ///
   /// The ArrayMap template class is graph map structure what
-  /// automatically updates the map when a key is added to or erased from
+  /// automatically indates the map when a key is added to or erased from
   /// the map. This map uses the allocators to implement 
   /// the container functionality.
Index: lemon/bits/clearable_graph_extender.h
===================================================================
--- lemon/bits/clearable_graph_extender.h	(revision 1909)
+++ lemon/bits/clearable_graph_extender.h	(revision 1910)
@@ -80,13 +80,13 @@
 
   template <typename _Base>
-  class ClearableUBipartiteGraphExtender : public _Base {
+  class ClearableBpUGraphExtender : public _Base {
   public:
 
     typedef _Base Parent;
-    typedef ClearableUBipartiteGraphExtender Graph;
+    typedef ClearableBpUGraphExtender Graph;
 
     typedef typename Parent::Node Node;
-    typedef typename Parent::LowerNode LowerNode;
-    typedef typename Parent::UpperNode UpperNode;
+    typedef typename Parent::BNode BNode;
+    typedef typename Parent::ANode ANode;
     typedef typename Parent::Edge Edge;
     typedef typename Parent::UEdge UEdge;
@@ -96,6 +96,6 @@
       Parent::getNotifier(UEdge()).clear();
       Parent::getNotifier(Node()).clear();
-      Parent::getNotifier(LowerNode()).clear();
-      Parent::getNotifier(UpperNode()).clear();
+      Parent::getNotifier(BNode()).clear();
+      Parent::getNotifier(ANode()).clear();
       Parent::clear();
     }
Index: lemon/bits/default_map.h
===================================================================
--- lemon/bits/default_map.h	(revision 1909)
+++ lemon/bits/default_map.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ * (Egervary Research Groin on Combinatorial Optimization, EGRES).
  *
  * Permission to use, modify and distribute this software is granted
@@ -22,5 +22,5 @@
 #include <lemon/bits/vector_map.h>
 
-///\ingroup graphmapfactory
+///\ingroin graphmapfactory
 ///\file
 ///\brief Graph maps that construct and destruct
@@ -353,31 +353,31 @@
 
   template <typename _Base>
-  class MappableUBipartiteGraphExtender : public _Base {
+  class MappableBpUGraphExtender : public _Base {
   public:
 
     typedef _Base Parent;
-    typedef MappableUBipartiteGraphExtender Graph;
+    typedef MappableBpUGraphExtender Graph;
 
     typedef typename Parent::Node Node;
-    typedef typename Parent::UpperNode UpperNode;
-    typedef typename Parent::LowerNode LowerNode;
+    typedef typename Parent::ANode ANode;
+    typedef typename Parent::BNode BNode;
     typedef typename Parent::Edge Edge;
     typedef typename Parent::UEdge UEdge;
     
     template <typename _Value>
-    class UpperNodeMap 
-      : public IterableMapExtender<DefaultMap<Graph, UpperNode, _Value> > {
-    public:
-      typedef MappableUBipartiteGraphExtender Graph;
-      typedef IterableMapExtender<DefaultMap<Graph, UpperNode, _Value> > 
+    class ANodeMap 
+      : public IterableMapExtender<DefaultMap<Graph, ANode, _Value> > {
+    public:
+      typedef MappableBpUGraphExtender Graph;
+      typedef IterableMapExtender<DefaultMap<Graph, ANode, _Value> > 
       Parent;
     
-      UpperNodeMap(const Graph& _g) 
-	: Parent(_g) {}
-      UpperNodeMap(const Graph& _g, const _Value& _v) 
-	: Parent(_g, _v) {}
-    
-      UpperNodeMap& operator=(const UpperNodeMap& cmap) {
-	return operator=<UpperNodeMap>(cmap);
+      ANodeMap(const Graph& _g) 
+	: Parent(_g) {}
+      ANodeMap(const Graph& _g, const _Value& _v) 
+	: Parent(_g, _v) {}
+    
+      ANodeMap& operator=(const ANodeMap& cmap) {
+	return operator=<ANodeMap>(cmap);
       }
     
@@ -387,34 +387,34 @@
       /// The given parameter should be conform to the ReadMap
       /// concept and could be indiced by the current item set of
-      /// the UpperNodeMap. In this case the value for each item
+      /// the ANodeMap. In this case the value for each item
       /// is assigned by the value of the given ReadMap. 
       template <typename CMap>
-      UpperNodeMap& operator=(const CMap& cmap) {
-	checkConcept<concept::ReadMap<UpperNode, _Value>, CMap>();
-	const typename Parent::Graph* graph = Parent::getGraph();
-	UpperNode it;
-	for (graph->first(it); it != INVALID; graph->next(it)) {
-	  Parent::set(it, cmap[it]);
-	}
-	return *this;
-      }
-    
-    };
-
-    template <typename _Value>
-    class LowerNodeMap 
-      : public IterableMapExtender<DefaultMap<Graph, LowerNode, _Value> > {
-    public:
-      typedef MappableUBipartiteGraphExtender Graph;
-      typedef IterableMapExtender<DefaultMap<Graph, LowerNode, _Value> > 
+      ANodeMap& operator=(const CMap& cmap) {
+	checkConcept<concept::ReadMap<ANode, _Value>, CMap>();
+	const typename Parent::Graph* graph = Parent::getGraph();
+	ANode it;
+	for (graph->first(it); it != INVALID; graph->next(it)) {
+	  Parent::set(it, cmap[it]);
+	}
+	return *this;
+      }
+    
+    };
+
+    template <typename _Value>
+    class BNodeMap 
+      : public IterableMapExtender<DefaultMap<Graph, BNode, _Value> > {
+    public:
+      typedef MappableBpUGraphExtender Graph;
+      typedef IterableMapExtender<DefaultMap<Graph, BNode, _Value> > 
       Parent;
     
-      LowerNodeMap(const Graph& _g) 
-	: Parent(_g) {}
-      LowerNodeMap(const Graph& _g, const _Value& _v) 
-	: Parent(_g, _v) {}
-    
-      LowerNodeMap& operator=(const LowerNodeMap& cmap) {
-	return operator=<LowerNodeMap>(cmap);
+      BNodeMap(const Graph& _g) 
+	: Parent(_g) {}
+      BNodeMap(const Graph& _g, const _Value& _v) 
+	: Parent(_g, _v) {}
+    
+      BNodeMap& operator=(const BNodeMap& cmap) {
+	return operator=<BNodeMap>(cmap);
       }
     
@@ -424,11 +424,11 @@
       /// The given parameter should be conform to the ReadMap
       /// concept and could be indiced by the current item set of
-      /// the LowerNodeMap. In this case the value for each item
+      /// the BNodeMap. In this case the value for each item
       /// is assigned by the value of the given ReadMap. 
       template <typename CMap>
-      LowerNodeMap& operator=(const CMap& cmap) {
-	checkConcept<concept::ReadMap<LowerNode, _Value>, CMap>();
-	const typename Parent::Graph* graph = Parent::getGraph();
-	LowerNode it;
+      BNodeMap& operator=(const CMap& cmap) {
+	checkConcept<concept::ReadMap<BNode, _Value>, CMap>();
+	const typename Parent::Graph* graph = Parent::getGraph();
+	BNode it;
 	for (graph->first(it); it != INVALID; graph->next(it)) {
 	  Parent::set(it, cmap[it]);
@@ -444,5 +444,5 @@
     class NodeMapBase : public Parent::NodeNotifier::ObserverBase {
     public:
-      typedef MappableUBipartiteGraphExtender Graph;
+      typedef MappableBpUGraphExtender Graph;
 
       typedef Node Key;
@@ -450,24 +450,24 @@
 
       /// The reference type of the map;
-      typedef typename LowerNodeMap<_Value>::Reference Reference;
+      typedef typename BNodeMap<_Value>::Reference Reference;
       /// The pointer type of the map;
-      typedef typename LowerNodeMap<_Value>::Pointer Pointer;
+      typedef typename BNodeMap<_Value>::Pointer Pointer;
       
       /// The const value type of the map.
       typedef const Value ConstValue;
       /// The const reference type of the map;
-      typedef typename LowerNodeMap<_Value>::ConstReference ConstReference;
+      typedef typename BNodeMap<_Value>::ConstReference ConstReference;
       /// The pointer type of the map;
-      typedef typename LowerNodeMap<_Value>::ConstPointer ConstPointer;
+      typedef typename BNodeMap<_Value>::ConstPointer ConstPointer;
 
       typedef True ReferenceMapTag;
 
       NodeMapBase(const Graph& _g) 
-	: graph(&_g), lowerMap(_g), upperMap(_g) {
+	: graph(&_g), bNodeMap(_g), aNodeMap(_g) {
 	Parent::NodeNotifier::ObserverBase::attach(_g.getNotifier(Node()));
       }
       NodeMapBase(const Graph& _g, const _Value& _v) 
-	: graph(&_g), lowerMap(_g, _v), 
-	  upperMap(_g, _v) {
+	: graph(&_g), bNodeMap(_g, _v), 
+	  aNodeMap(_g, _v) {
 	Parent::NodeNotifier::ObserverBase::attach(_g.getNotifier(Node()));
       }
@@ -480,24 +480,24 @@
     
       ConstReference operator[](const Key& node) const {
-	if (Parent::upper(node)) {
-	  return upperMap[node];
+	if (Parent::aNode(node)) {
+	  return aNodeMap[node];
 	} else {
-	  return lowerMap[node];
+	  return bNodeMap[node];
 	}
       } 
 
       Reference operator[](const Key& node) {
-	if (Parent::upper(node)) {
-	  return upperMap[node];
+	if (Parent::aNode(node)) {
+	  return aNodeMap[node];
 	} else {
-	  return lowerMap[node];
+	  return bNodeMap[node];
 	}
       }
 
       void set(const Key& node, const Value& value) {
-	if (Parent::upper(node)) {
-	  upperMap.set(node, value);
+	if (Parent::aNode(node)) {
+	  aNodeMap.set(node, value);
 	} else {
-	  lowerMap.set(node, value);
+	  bNodeMap.set(node, value);
 	}
       }
@@ -514,6 +514,6 @@
     private:
       const Graph* graph;
-      LowerNodeMap<_Value> lowerMap;
-      UpperNodeMap<_Value> upperMap;
+      BNodeMap<_Value> bNodeMap;
+      ANodeMap<_Value> aNodeMap;
     };
     
@@ -524,5 +524,5 @@
       : public IterableMapExtender<NodeMapBase<_Value> > {
     public:
-      typedef MappableUBipartiteGraphExtender Graph;
+      typedef MappableBpUGraphExtender Graph;
       typedef IterableMapExtender< NodeMapBase<_Value> > Parent;
     
@@ -562,5 +562,5 @@
       : public IterableMapExtender<DefaultMap<Graph, Edge, _Value> > {
     public:
-      typedef MappableUBipartiteGraphExtender Graph;
+      typedef MappableBpUGraphExtender Graph;
       typedef IterableMapExtender<DefaultMap<Graph, Edge, _Value> > Parent;
     
@@ -590,5 +590,5 @@
       : public IterableMapExtender<DefaultMap<Graph, UEdge, _Value> > {
     public:
-      typedef MappableUBipartiteGraphExtender Graph;
+      typedef MappableBpUGraphExtender Graph;
       typedef IterableMapExtender<DefaultMap<Graph, UEdge, _Value> > 
       Parent;
Index: lemon/bits/extendable_graph_extender.h
===================================================================
--- lemon/bits/extendable_graph_extender.h	(revision 1909)
+++ lemon/bits/extendable_graph_extender.h	(revision 1910)
@@ -106,26 +106,26 @@
 
   template <typename _Base>
-  class ExtendableUBipartiteGraphExtender : public _Base {
+  class ExtendableBpUGraphExtender : public _Base {
   public:
 
     typedef _Base Parent;
-    typedef ExtendableUBipartiteGraphExtender Graph;
+    typedef ExtendableBpUGraphExtender Graph;
   
     typedef typename Parent::Node Node;
-    typedef typename Parent::LowerNode LowerNode;
-    typedef typename Parent::UpperNode UpperNode;
+    typedef typename Parent::BNode BNode;
+    typedef typename Parent::ANode ANode;
     typedef typename Parent::Edge Edge;
     typedef typename Parent::UEdge UEdge;
   
-    Node addUpperNode() {
-      Node node = Parent::addUpperNode();
-      Parent::getNotifier(UpperNode()).add(node);
+    Node addANode() {
+      Node node = Parent::addANode();
+      Parent::getNotifier(ANode()).add(node);
       Parent::getNotifier(Node()).add(node);
       return node;
     }
 
-    Node addLowerNode() {
-      Node node = Parent::addLowerNode();
-      Parent::getNotifier(LowerNode()).add(node);
+    Node addBNode() {
+      Node node = Parent::addBNode();
+      Parent::getNotifier(BNode()).add(node);
       Parent::getNotifier(Node()).add(node);
       return node;
Index: lemon/bits/graph_extender.h
===================================================================
--- lemon/bits/graph_extender.h	(revision 1909)
+++ lemon/bits/graph_extender.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi
- * Kutatocsoport (Egervary Research Group on Combinatorial Optimization,
+ * Kutatocsoport (Egervary Research Groin on Combinatorial Optimization,
  * EGRES).
  *
@@ -380,8 +380,8 @@
 
   template <typename _Base>
-  class UBipartiteGraphExtender : public _Base {
+  class BpUGraphExtender : public _Base {
   public:
     typedef _Base Parent;
-    typedef UBipartiteGraphExtender Graph;
+    typedef BpUGraphExtender Graph;
 
     typedef typename Parent::Node Node;
@@ -394,16 +394,16 @@
 
     Node source(const UEdge& edge) const {
-      return upperNode(edge);
+      return aNode(edge);
     }
     Node target(const UEdge& edge) const {
-      return lowerNode(edge);
+      return bNode(edge);
     }
 
     void firstInc(UEdge& edge, bool& direction, const Node& node) const {
-      if (Parent::upper(node)) {
-	Parent::firstDown(edge, node);
+      if (Parent::aNode(node)) {
+	Parent::firstOut(edge, node);
 	direction = true;
       } else {
-	Parent::firstUp(edge, node);
+	Parent::firstIn(edge, node);
 	direction = static_cast<UEdge&>(edge) == INVALID;
       }
@@ -411,7 +411,7 @@
     void nextInc(UEdge& edge, bool& direction) const {
       if (direction) {
-	Parent::nextDown(edge);
-      } else {
-	Parent::nextUp(edge);
+	Parent::nextOut(edge);
+      } else {
+	Parent::nextIn(edge);
 	if (edge == INVALID) direction = true;
       }
@@ -427,5 +427,5 @@
 
     class Edge : public UEdge {
-      friend class UBipartiteGraphExtender;
+      friend class BpUGraphExtender;
     protected:
       bool forward;
@@ -462,9 +462,9 @@
 
     void firstOut(Edge& edge, const Node& node) const {
-      if (Parent::upper(node)) {
-	Parent::firstDown(edge, node);
+      if (Parent::aNode(node)) {
+	Parent::firstOut(edge, node);
 	edge.forward = true;
       } else {
-	Parent::firstUp(edge, node);
+	Parent::firstIn(edge, node);
 	edge.forward = static_cast<UEdge&>(edge) == INVALID;
       }
@@ -472,7 +472,7 @@
     void nextOut(Edge& edge) const {
       if (edge.forward) {
-	Parent::nextDown(edge);
-      } else {
-	Parent::nextUp(edge);
+	Parent::nextOut(edge);
+      } else {
+	Parent::nextIn(edge);
         edge.forward = static_cast<UEdge&>(edge) == INVALID;
       }
@@ -480,9 +480,9 @@
 
     void firstIn(Edge& edge, const Node& node) const {
-      if (Parent::lower(node)) {
-	Parent::firstUp(edge, node);
+      if (Parent::bNode(node)) {
+	Parent::firstIn(edge, node);
 	edge.forward = true;	
       } else {
-	Parent::firstDown(edge, node);
+	Parent::firstOut(edge, node);
 	edge.forward = static_cast<UEdge&>(edge) == INVALID;
       }
@@ -490,7 +490,7 @@
     void nextIn(Edge& edge) const {
       if (edge.forward) {
-	Parent::nextUp(edge);
-      } else {
-	Parent::nextDown(edge);
+	Parent::nextIn(edge);
+      } else {
+	Parent::nextOut(edge);
 	edge.forward = static_cast<UEdge&>(edge) == INVALID;
       }
@@ -498,8 +498,8 @@
 
     Node source(const Edge& edge) const {
-      return edge.forward ? Parent::upperNode(edge) : Parent::lowerNode(edge);
+      return edge.forward ? Parent::aNode(edge) : Parent::bNode(edge);
     }
     Node target(const Edge& edge) const {
-      return edge.forward ? Parent::lowerNode(edge) : Parent::upperNode(edge);
+      return edge.forward ? Parent::bNode(edge) : Parent::aNode(edge);
     }
 
@@ -535,46 +535,46 @@
     }
 
-    class UpperNode : public Node {
-      friend class UBipartiteGraphExtender;
+    class ANode : public Node {
+      friend class BpUGraphExtender;
     public:
-      UpperNode() {}
-      UpperNode(const Node& node) : Node(node) {
-	LEMON_ASSERT(Parent::upper(node) || node == INVALID, 
+      ANode() {}
+      ANode(const Node& node) : Node(node) {
+	LEMON_ASSERT(Parent::aNode(node) || node == INVALID, 
 		     typename Parent::NodeSetError());
       }
-      UpperNode(Invalid) : Node(INVALID) {}
+      ANode(Invalid) : Node(INVALID) {}
     };
 
-    void first(UpperNode& node) const {
-      Parent::firstUpper(static_cast<Node&>(node));
-    }
-    void next(UpperNode& node) const {
-      Parent::nextUpper(static_cast<Node&>(node));
-    }
-
-    int id(const UpperNode& node) const {
-      return Parent::upperId(node);
-    }
-
-    class LowerNode : public Node {
-      friend class UBipartiteGraphExtender;
+    void first(ANode& node) const {
+      Parent::firstANode(static_cast<Node&>(node));
+    }
+    void next(ANode& node) const {
+      Parent::nextANode(static_cast<Node&>(node));
+    }
+
+    int id(const ANode& node) const {
+      return Parent::aNodeId(node);
+    }
+
+    class BNode : public Node {
+      friend class BpUGraphExtender;
     public:
-      LowerNode() {}
-      LowerNode(const Node& node) : Node(node) {
-	LEMON_ASSERT(Parent::lower(node) || node == INVALID,
+      BNode() {}
+      BNode(const Node& node) : Node(node) {
+	LEMON_ASSERT(Parent::bNode(node) || node == INVALID,
 		     typename Parent::NodeSetError());
       }
-      LowerNode(Invalid) : Node(INVALID) {}
+      BNode(Invalid) : Node(INVALID) {}
     };
 
-    void first(LowerNode& node) const {
-      Parent::firstLower(static_cast<Node&>(node));
-    }
-    void next(LowerNode& node) const {
-      Parent::nextLower(static_cast<Node&>(node));
+    void first(BNode& node) const {
+      Parent::firstBNode(static_cast<Node&>(node));
+    }
+    void next(BNode& node) const {
+      Parent::nextBNode(static_cast<Node&>(node));
     }
   
-    int id(const LowerNode& node) const {
-      return Parent::upperId(node);
+    int id(const BNode& node) const {
+      return Parent::aNodeId(node);
     }
 
@@ -584,9 +584,9 @@
       return Parent::maxNodeId();
     }
-    int maxId(LowerNode) const {
-      return Parent::maxLowerId();
-    }
-    int maxId(UpperNode) const {
-      return Parent::maxUpperId();
+    int maxId(BNode) const {
+      return Parent::maxBNodeId();
+    }
+    int maxId(ANode) const {
+      return Parent::maxANodeId();
     }
     int maxId(Edge) const {
@@ -601,9 +601,9 @@
       return Parent::nodeFromId(id);
     }
-    UpperNode fromId(int id, UpperNode) const {
-      return Parent::fromUpperId(id);
-    }
-    LowerNode fromId(int id, LowerNode) const {
-      return Parent::fromLowerId(id);
+    ANode fromId(int id, ANode) const {
+      return Parent::fromANodeId(id);
+    }
+    BNode fromId(int id, BNode) const {
+      return Parent::fromBNodeId(id);
     }
     Edge fromId(int id, Edge) const {
Index: lemon/bits/item_reader.h
===================================================================
--- lemon/bits/item_reader.h	(revision 1875)
+++ lemon/bits/item_reader.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ * (Egervary Research Groin on Combinatorial Optimization, EGRES).
  *
  * Permission to use, modify and distribute this software is granted
@@ -15,6 +15,6 @@
  */
 
-/// @defgroup item_io Item Readers and Writers
-/// @ingroup io_group
+/// @defgroin item_io Item Readers and Writers
+/// @ingroin io_groin
 /// \brief Item Readers and Writers
 /// 
@@ -23,5 +23,5 @@
 /// read some way. The module make possible to do this.  
 
-/// \ingroup item_io
+/// \ingroin item_io
 /// \file
 /// \brief Item reader bits for lemon input.
@@ -43,5 +43,5 @@
   class DefaultReader;
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   ///
   /// \brief Reader class for quoted strings.
@@ -158,5 +158,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// \brief Reader for standard containers.
   ///
@@ -205,5 +205,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   ///
   /// \brief Reader for standard containers.
@@ -253,5 +253,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// \brief Reader for parsed string.
   ///
@@ -301,5 +301,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// \brief Reader for read the whole line.
   ///
@@ -331,5 +331,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// \brief Reader for std::pair.
   ///
@@ -385,5 +385,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// 
   /// \brief The default item reader template class.
@@ -472,5 +472,5 @@
     : public PairReader<std::pair<First, Second> > {};
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// 
   /// \brief The default item reader for skipping a value in the stream.
@@ -481,5 +481,5 @@
   class DefaultSkipper : public DefaultReader<std::string> {};
 
-  /// \ingroup item_io  
+  /// \ingroin item_io  
   /// \brief Standard ReaderTraits for the GraphReader class.
   ///
Index: lemon/bits/item_writer.h
===================================================================
--- lemon/bits/item_writer.h	(revision 1875)
+++ lemon/bits/item_writer.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ * (Egervary Research Groin on Combinatorial Optimization, EGRES).
  *
  * Permission to use, modify and distribute this software is granted
@@ -15,5 +15,5 @@
  */
 
-/// \ingroup item_io
+/// \ingroin item_io
 /// \file
 /// \brief Item writer bits for lemon output.
@@ -35,5 +35,5 @@
   class DefaultWriter;
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// \brief Writer class for quoted strings.
   ///
@@ -118,5 +118,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// \brief Writer class for quoted char array.
   ///
@@ -146,5 +146,5 @@
 
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   ///
   /// \brief Writer for standard containers.
@@ -188,5 +188,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   ///
   /// \brief Writer for standard pairs.
@@ -235,5 +235,5 @@
   };
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// 
   /// \brief The default item writer template class.
@@ -308,5 +308,5 @@
     : public PairWriter<std::pair<First, Second> > {};
 
-  /// \ingroup item_io
+  /// \ingroin item_io
   /// \brief Standard WriterTraits for the section writers.
   ///
Index: lemon/bits/iterable_graph_extender.h
===================================================================
--- lemon/bits/iterable_graph_extender.h	(revision 1909)
+++ lemon/bits/iterable_graph_extender.h	(revision 1910)
@@ -271,12 +271,12 @@
 
   template <typename _Base>
-  class IterableUBipartiteGraphExtender : public _Base {
+  class IterableBpUGraphExtender : public _Base {
   public:
     typedef _Base Parent;
-    typedef IterableUBipartiteGraphExtender Graph;
+    typedef IterableBpUGraphExtender Graph;
    
     typedef typename Parent::Node Node;
-    typedef typename Parent::UpperNode UpperNode;
-    typedef typename Parent::LowerNode LowerNode;
+    typedef typename Parent::ANode ANode;
+    typedef typename Parent::BNode BNode;
     typedef typename Parent::Edge Edge;
     typedef typename Parent::UEdge UEdge;
@@ -304,44 +304,44 @@
     };
 
-    class UpperNodeIt : public Node { 
-      friend class IterableUBipartiteGraphExtender;
-      const Graph* graph;
-    public:
-    
-      UpperNodeIt() { }
-    
-      UpperNodeIt(Invalid i) : Node(INVALID) { }
-    
-      explicit UpperNodeIt(const Graph& _graph) : graph(&_graph) {
-	graph->firstUpper(static_cast<Node&>(*this));
-      }
-
-      UpperNodeIt(const Graph& _graph, const Node& node) 
+    class ANodeIt : public Node { 
+      friend class IterableBpUGraphExtender;
+      const Graph* graph;
+    public:
+    
+      ANodeIt() { }
+    
+      ANodeIt(Invalid i) : Node(INVALID) { }
+    
+      explicit ANodeIt(const Graph& _graph) : graph(&_graph) {
+	graph->firstANode(static_cast<Node&>(*this));
+      }
+
+      ANodeIt(const Graph& _graph, const Node& node) 
 	: Node(node), graph(&_graph) {}
     
-      UpperNodeIt& operator++() { 
-	graph->nextUpper(*this);
-	return *this; 
-      }
-    };
-
-    class LowerNodeIt : public Node { 
-      friend class IterableUBipartiteGraphExtender;
-      const Graph* graph;
-    public:
-    
-      LowerNodeIt() { }
-    
-      LowerNodeIt(Invalid i) : Node(INVALID) { }
-    
-      explicit LowerNodeIt(const Graph& _graph) : graph(&_graph) {
-	graph->firstLower(static_cast<Node&>(*this));
-      }
-
-      LowerNodeIt(const Graph& _graph, const Node& node) 
+      ANodeIt& operator++() { 
+	graph->nextANode(*this);
+	return *this; 
+      }
+    };
+
+    class BNodeIt : public Node { 
+      friend class IterableBpUGraphExtender;
+      const Graph* graph;
+    public:
+    
+      BNodeIt() { }
+    
+      BNodeIt(Invalid i) : Node(INVALID) { }
+    
+      explicit BNodeIt(const Graph& _graph) : graph(&_graph) {
+	graph->firstBNode(static_cast<Node&>(*this));
+      }
+
+      BNodeIt(const Graph& _graph, const Node& node) 
 	: Node(node), graph(&_graph) {}
     
-      LowerNodeIt& operator++() { 
-	graph->nextLower(*this);
+      BNodeIt& operator++() { 
+	graph->nextBNode(*this);
 	return *this; 
       }
@@ -349,5 +349,5 @@
 
     class EdgeIt : public Edge { 
-      friend class IterableUBipartiteGraphExtender;
+      friend class IterableBpUGraphExtender;
       const Graph* graph;
     public:
@@ -372,5 +372,5 @@
 
     class UEdgeIt : public UEdge { 
-      friend class IterableUBipartiteGraphExtender;
+      friend class IterableBpUGraphExtender;
       const Graph* graph;
     public:
@@ -394,5 +394,5 @@
 
     class OutEdgeIt : public Edge { 
-      friend class IterableUBipartiteGraphExtender;
+      friend class IterableBpUGraphExtender;
       const Graph* graph;
     public:
@@ -419,5 +419,5 @@
 
     class InEdgeIt : public Edge { 
-      friend class IterableUBipartiteGraphExtender;
+      friend class IterableBpUGraphExtender;
       const Graph* graph;
     public:
@@ -471,5 +471,5 @@
   
     class IncEdgeIt : public Parent::UEdge { 
-      friend class IterableUBipartiteGraphExtender;
+      friend class IterableBpUGraphExtender;
       const Graph* graph;
       bool direction;
Index: lemon/bits/map_extender.h
===================================================================
--- lemon/bits/map_extender.h	(revision 1875)
+++ lemon/bits/map_extender.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ * (Egervary Research Groin on Combinatorial Optimization, EGRES).
  *
  * Permission to use, modify and distribute this software is granted
Index: lemon/bits/static_map.h
===================================================================
--- lemon/bits/static_map.h	(revision 1909)
+++ lemon/bits/static_map.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ * (Egervary Research Groin on Combinatorial Optimization, EGRES).
  *
  * Permission to use, modify and distribute this software is granted
@@ -28,5 +28,5 @@
 #include <lemon/concept/maps.h>
 
-/// \ingroup graphmaps
+/// \ingroin graphmaps
 ///
 ///\file
@@ -35,10 +35,10 @@
 namespace lemon {
 
-  /// \ingroup graphmaps
+  /// \ingroin graphmaps
   ///
   /// \brief Graph map with static sized storage.
   ///
   /// The StaticMap template class is graph map structure what
-  /// does not update automatically the map when a key is added to or 
+  /// does not indate automatically the map when a key is added to or 
   /// erased from the map rather it throws an exception. This map factory 
   /// uses the allocators to implement the container functionality.
@@ -55,9 +55,9 @@
   public:
 
-    /// \brief Exception class for unsupported exceptions.
-    class UnsupportedOperation : public lemon::LogicError {
+    /// \brief Exception class for unsinported exceptions.
+    class UnsinportedOperation : public lemon::LogicError {
     public:
       virtual const char* exceptionName() const {
-	return "lemon::StaticMap::UnsupportedOperation";
+	return "lemon::StaticMap::UnsinportedOperation";
       }
     };
@@ -186,5 +186,5 @@
      
     void add(const Key&) {
-      throw UnsupportedOperation();
+      throw UnsinportedOperation();
     }
 
@@ -194,5 +194,5 @@
     /// and it overrides the erase() member function of the observer base.     
     void erase(const Key&) {
-      throw UnsupportedOperation();
+      throw UnsinportedOperation();
     }
 
@@ -347,31 +347,31 @@
 
   template <typename _Base>
-  class StaticMappableUBipartiteGraphExtender : public _Base {
+  class StaticMappableBpUGraphExtender : public _Base {
   public:
 
     typedef _Base Parent;
-    typedef StaticMappableUBipartiteGraphExtender Graph;
+    typedef StaticMappableBpUGraphExtender Graph;
 
     typedef typename Parent::Node Node;
-    typedef typename Parent::UpperNode UpperNode;
-    typedef typename Parent::LowerNode LowerNode;
+    typedef typename Parent::ANode ANode;
+    typedef typename Parent::BNode BNode;
     typedef typename Parent::Edge Edge;
     typedef typename Parent::UEdge UEdge;
     
     template <typename _Value>
-    class UpperNodeMap 
-      : public IterableMapExtender<StaticMap<Graph, UpperNode, _Value> > {
-    public:
-      typedef StaticMappableUBipartiteGraphExtender Graph;
-      typedef IterableMapExtender<StaticMap<Graph, UpperNode, _Value> > 
+    class ANodeMap 
+      : public IterableMapExtender<StaticMap<Graph, ANode, _Value> > {
+    public:
+      typedef StaticMappableBpUGraphExtender Graph;
+      typedef IterableMapExtender<StaticMap<Graph, ANode, _Value> > 
       Parent;
     
-      UpperNodeMap(const Graph& _g) 
-	: Parent(_g) {}
-      UpperNodeMap(const Graph& _g, const _Value& _v) 
-	: Parent(_g, _v) {}
-    
-      UpperNodeMap& operator=(const UpperNodeMap& cmap) {
-	return operator=<UpperNodeMap>(cmap);
+      ANodeMap(const Graph& _g) 
+	: Parent(_g) {}
+      ANodeMap(const Graph& _g, const _Value& _v) 
+	: Parent(_g, _v) {}
+    
+      ANodeMap& operator=(const ANodeMap& cmap) {
+	return operator=<ANodeMap>(cmap);
       }
     
@@ -381,34 +381,34 @@
       /// The given parameter should be conform to the ReadMap
       /// concept and could be indiced by the current item set of
-      /// the UpperNodeMap. In this case the value for each item
+      /// the ANodeMap. In this case the value for each item
       /// is assigned by the value of the given ReadMap. 
       template <typename CMap>
-      UpperNodeMap& operator=(const CMap& cmap) {
-	checkConcept<concept::ReadMap<UpperNode, _Value>, CMap>();
-	const typename Parent::Graph* graph = Parent::getGraph();
-	UpperNode it;
-	for (graph->first(it); it != INVALID; graph->next(it)) {
-	  Parent::set(it, cmap[it]);
-	}
-	return *this;
-      }
-    
-    };
-
-    template <typename _Value>
-    class LowerNodeMap 
-      : public IterableMapExtender<StaticMap<Graph, LowerNode, _Value> > {
-    public:
-      typedef StaticMappableUBipartiteGraphExtender Graph;
-      typedef IterableMapExtender<StaticMap<Graph, LowerNode, _Value> > 
+      ANodeMap& operator=(const CMap& cmap) {
+	checkConcept<concept::ReadMap<ANode, _Value>, CMap>();
+	const typename Parent::Graph* graph = Parent::getGraph();
+	ANode it;
+	for (graph->first(it); it != INVALID; graph->next(it)) {
+	  Parent::set(it, cmap[it]);
+	}
+	return *this;
+      }
+    
+    };
+
+    template <typename _Value>
+    class BNodeMap 
+      : public IterableMapExtender<StaticMap<Graph, BNode, _Value> > {
+    public:
+      typedef StaticMappableBpUGraphExtender Graph;
+      typedef IterableMapExtender<StaticMap<Graph, BNode, _Value> > 
       Parent;
     
-      LowerNodeMap(const Graph& _g) 
-	: Parent(_g) {}
-      LowerNodeMap(const Graph& _g, const _Value& _v) 
-	: Parent(_g, _v) {}
-    
-      LowerNodeMap& operator=(const LowerNodeMap& cmap) {
-	return operator=<LowerNodeMap>(cmap);
+      BNodeMap(const Graph& _g) 
+	: Parent(_g) {}
+      BNodeMap(const Graph& _g, const _Value& _v) 
+	: Parent(_g, _v) {}
+    
+      BNodeMap& operator=(const BNodeMap& cmap) {
+	return operator=<BNodeMap>(cmap);
       }
     
@@ -418,11 +418,11 @@
       /// The given parameter should be conform to the ReadMap
       /// concept and could be indiced by the current item set of
-      /// the LowerNodeMap. In this case the value for each item
+      /// the BNodeMap. In this case the value for each item
       /// is assigned by the value of the given ReadMap. 
       template <typename CMap>
-      LowerNodeMap& operator=(const CMap& cmap) {
-	checkConcept<concept::ReadMap<LowerNode, _Value>, CMap>();
-	const typename Parent::Graph* graph = Parent::getGraph();
-	LowerNode it;
+      BNodeMap& operator=(const CMap& cmap) {
+	checkConcept<concept::ReadMap<BNode, _Value>, CMap>();
+	const typename Parent::Graph* graph = Parent::getGraph();
+	BNode it;
 	for (graph->first(it); it != INVALID; graph->next(it)) {
 	  Parent::set(it, cmap[it]);
@@ -438,5 +438,5 @@
     class NodeMapBase : public Parent::NodeNotifier::ObserverBase {
     public:
-      typedef StaticMappableUBipartiteGraphExtender Graph;
+      typedef StaticMappableBpUGraphExtender Graph;
 
       typedef Node Key;
@@ -444,24 +444,24 @@
 
       /// The reference type of the map;
-      typedef typename LowerNodeMap<_Value>::Reference Reference;
+      typedef typename BNodeMap<_Value>::Reference Reference;
       /// The pointer type of the map;
-      typedef typename LowerNodeMap<_Value>::Pointer Pointer;
+      typedef typename BNodeMap<_Value>::Pointer Pointer;
       
       /// The const value type of the map.
       typedef const Value ConstValue;
       /// The const reference type of the map;
-      typedef typename LowerNodeMap<_Value>::ConstReference ConstReference;
+      typedef typename BNodeMap<_Value>::ConstReference ConstReference;
       /// The pointer type of the map;
-      typedef typename LowerNodeMap<_Value>::ConstPointer ConstPointer;
+      typedef typename BNodeMap<_Value>::ConstPointer ConstPointer;
 
       typedef True ReferenceMapTag;
 
       NodeMapBase(const Graph& _g) 
-	: graph(&_g), lowerMap(_g), upperMap(_g) {
+	: graph(&_g), bNodeMap(_g), aNodeMap(_g) {
 	Parent::NodeNotifier::ObserverBase::attach(_g.getNotifier(Node()));
       }
       NodeMapBase(const Graph& _g, const _Value& _v) 
-	: graph(&_g), lowerMap(_g, _v), 
-	  upperMap(_g, _v) {
+	: graph(&_g), bNodeMap(_g, _v), 
+	  aNodeMap(_g, _v) {
 	Parent::NodeNotifier::ObserverBase::attach(_g.getNotifier(Node()));
       }
@@ -474,24 +474,24 @@
     
       ConstReference operator[](const Key& node) const {
-	if (Parent::upper(node)) {
-	  return upperMap[node];
+	if (Parent::aNode(node)) {
+	  return aNodeMap[node];
 	} else {
-	  return lowerMap[node];
+	  return bNodeMap[node];
 	}
       } 
 
       Reference operator[](const Key& node) {
-	if (Parent::upper(node)) {
-	  return upperMap[node];
+	if (Parent::aNode(node)) {
+	  return aNodeMap[node];
 	} else {
-	  return lowerMap[node];
+	  return bNodeMap[node];
 	}
       }
 
       void set(const Key& node, const Value& value) {
-	if (Parent::upper(node)) {
-	  upperMap.set(node, value);
+	if (Parent::aNode(node)) {
+	  aNodeMap.set(node, value);
 	} else {
-	  lowerMap.set(node, value);
+	  bNodeMap.set(node, value);
 	}
       }
@@ -508,6 +508,6 @@
     private:
       const Graph* graph;
-      LowerNodeMap<_Value> lowerMap;
-      UpperNodeMap<_Value> upperMap;
+      BNodeMap<_Value> bNodeMap;
+      ANodeMap<_Value> aNodeMap;
     };
     
@@ -518,5 +518,5 @@
       : public IterableMapExtender<NodeMapBase<_Value> > {
     public:
-      typedef StaticMappableUBipartiteGraphExtender Graph;
+      typedef StaticMappableBpUGraphExtender Graph;
       typedef IterableMapExtender< NodeMapBase<_Value> > Parent;
     
@@ -556,5 +556,5 @@
       : public IterableMapExtender<StaticMap<Graph, Edge, _Value> > {
     public:
-      typedef StaticMappableUBipartiteGraphExtender Graph;
+      typedef StaticMappableBpUGraphExtender Graph;
       typedef IterableMapExtender<StaticMap<Graph, Edge, _Value> > Parent;
     
@@ -584,5 +584,5 @@
       : public IterableMapExtender<StaticMap<Graph, UEdge, _Value> > {
     public:
-      typedef StaticMappableUBipartiteGraphExtender Graph;
+      typedef StaticMappableBpUGraphExtender Graph;
       typedef IterableMapExtender<StaticMap<Graph, UEdge, _Value> > 
       Parent;
Index: lemon/bits/vector_map.h
===================================================================
--- lemon/bits/vector_map.h	(revision 1875)
+++ lemon/bits/vector_map.h	(revision 1910)
@@ -3,5 +3,5 @@
  *
  * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
- * (Egervary Research Group on Combinatorial Optimization, EGRES).
+ * (Egervary Research Groin on Combinatorial Optimization, EGRES).
  *
  * Permission to use, modify and distribute this software is granted
@@ -27,5 +27,5 @@
 #include <lemon/concept/maps.h>
 
-/// \ingroup graphmapfactory
+/// \ingroin graphmapfactory
 ///
 ///\file
@@ -34,10 +34,10 @@
 namespace lemon {
 
-  /// \ingroup graphmapfactory
+  /// \ingroin graphmapfactory
   ///
   /// \brief Graph map based on the std::vector storage.
   ///
   /// The VectorMap template class is graph map structure what
-  /// automatically updates the map when a key is added to or erased from
+  /// automatically indates the map when a key is added to or erased from
   /// the map. This map factory uses the allocators to implement 
   /// the container functionality. This map factory
Index: lemon/concept/ugraph.h
===================================================================
--- lemon/concept/ugraph.h	(revision 1909)
+++ lemon/concept/ugraph.h	(revision 1910)
@@ -23,6 +23,6 @@
 
 
-#ifndef LEMON_CONCEPT_UNDIR_GRAPH_H
-#define LEMON_CONCEPT_UNDIR_GRAPH_H
+#ifndef LEMON_CONCEPT_UGRAPH_H
+#define LEMON_CONCEPT_UGRAPH_H
 
 #include <lemon/concept/graph_component.h>
Index: lemon/full_graph.h
===================================================================
--- lemon/full_graph.h	(revision 1909)
+++ lemon/full_graph.h	(revision 1910)
@@ -404,9 +404,9 @@
 
 
-  class FullUBipartiteGraphBase {
+  class FullBpUGraphBase {
   protected:
 
-    int _upperNodeNum;
-    int _lowerNodeNum;
+    int _aNodeNum;
+    int _bNodeNum;
 
     int _edgeNum;
@@ -416,10 +416,10 @@
     class NodeSetError : public LogicError {
       virtual const char* exceptionName() const { 
-	return "lemon::FullUBipartiteGraph::NodeSetError";
+	return "lemon::FullBpUGraph::NodeSetError";
       }
     };
   
     class Node {
-      friend class FullUBipartiteGraphBase;
+      friend class FullBpUGraphBase;
     protected:
       int id;
@@ -435,5 +435,5 @@
 
     class Edge {
-      friend class FullUBipartiteGraphBase;
+      friend class FullBpUGraphBase;
     protected:
       int id;
@@ -448,31 +448,31 @@
     };
 
-    void construct(int upperNodeNum, int lowerNodeNum) {
-      _upperNodeNum = upperNodeNum;
-      _lowerNodeNum = lowerNodeNum;
-      _edgeNum = upperNodeNum * lowerNodeNum;
-    }
-
-    void firstUpper(Node& node) const {
-      node.id = 2 * _upperNodeNum - 2;
+    void construct(int aNodeNum, int bNodeNum) {
+      _aNodeNum = aNodeNum;
+      _bNodeNum = bNodeNum;
+      _edgeNum = aNodeNum * bNodeNum;
+    }
+
+    void firstANode(Node& node) const {
+      node.id = 2 * _aNodeNum - 2;
       if (node.id < 0) node.id = -1; 
     }
-    void nextUpper(Node& node) const {
+    void nextANode(Node& node) const {
       node.id -= 2;
       if (node.id < 0) node.id = -1; 
     }
 
-    void firstLower(Node& node) const {
-      node.id = 2 * _lowerNodeNum - 1;
-    }
-    void nextLower(Node& node) const {
+    void firstBNode(Node& node) const {
+      node.id = 2 * _bNodeNum - 1;
+    }
+    void nextBNode(Node& node) const {
       node.id -= 2;
     }
 
     void first(Node& node) const {
-      if (_upperNodeNum > 0) {
-	node.id = 2 * _upperNodeNum - 2;
+      if (_aNodeNum > 0) {
+	node.id = 2 * _aNodeNum - 2;
       } else {
-	node.id = 2 * _lowerNodeNum - 1;
+	node.id = 2 * _bNodeNum - 1;
       }
     }
@@ -480,5 +480,5 @@
       node.id -= 2;
       if (node.id == -2) {
-	node.id = 2 * _lowerNodeNum - 1;
+	node.id = 2 * _bNodeNum - 1;
       }
     }
@@ -491,19 +491,19 @@
     }
 
-    void firstDown(Edge& edge, const Node& node) const {
+    void firstOut(Edge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 0, NodeSetError());
-      edge.id = (node.id >> 1) * _lowerNodeNum;
-    }
-    void nextDown(Edge& edge) const {
+      edge.id = (node.id >> 1) * _bNodeNum;
+    }
+    void nextOut(Edge& edge) const {
       ++(edge.id);
-      if (edge.id % _lowerNodeNum == 0) edge.id = -1;
-    }
-
-    void firstUp(Edge& edge, const Node& node) const {
+      if (edge.id % _bNodeNum == 0) edge.id = -1;
+    }
+
+    void firstIn(Edge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 1, NodeSetError());
       edge.id = (node.id >> 1);
     }
-    void nextUp(Edge& edge) const {
-      edge.id += _lowerNodeNum;
+    void nextIn(Edge& edge) const {
+      edge.id += _bNodeNum;
       if (edge.id >= _edgeNum) edge.id = -1;
     }
@@ -516,6 +516,6 @@
     }
     int maxNodeId() const {
-      return _upperNodeNum > _lowerNodeNum ? 
-	_upperNodeNum * 2 - 2 : _lowerNodeNum * 2 - 1;
+      return _aNodeNum > _bNodeNum ? 
+	_aNodeNum * 2 - 2 : _bNodeNum * 2 - 1;
     }
   
@@ -530,44 +530,44 @@
     }
   
-    static int upperId(const Node& node) {
+    static int aNodeId(const Node& node) {
       return node.id >> 1;
     }
-    static Node fromUpperId(int id, Node) {
+    static Node fromANodeId(int id, Node) {
       return Node(id << 1);
     }
-    int maxUpperId() const {
-      return _upperNodeNum;
-    }
-
-    static int lowerId(const Node& node) {
+    int maxANodeId() const {
+      return _aNodeNum;
+    }
+
+    static int bNodeId(const Node& node) {
       return node.id >> 1;
     }
-    static Node fromLowerId(int id) {
+    static Node fromBNodeId(int id) {
       return Node((id << 1) + 1);
     }
-    int maxLowerId() const {
-      return _lowerNodeNum;
-    }
-
-    Node upperNode(const Edge& edge) const {
-      return Node((edge.id / _lowerNodeNum) << 1);
-    }
-    Node lowerNode(const Edge& edge) const {
-      return Node(((edge.id % _lowerNodeNum) << 1) + 1);
-    }
-
-    static bool upper(const Node& node) {
+    int maxBNodeId() const {
+      return _bNodeNum;
+    }
+
+    Node aNode(const Edge& edge) const {
+      return Node((edge.id / _bNodeNum) << 1);
+    }
+    Node bNode(const Edge& edge) const {
+      return Node(((edge.id % _bNodeNum) << 1) + 1);
+    }
+
+    static bool aNode(const Node& node) {
       return (node.id & 1) == 0;
     }
 
-    static bool lower(const Node& node) {
+    static bool bNode(const Node& node) {
       return (node.id & 1) == 1;
     }
 
-    static Node upperNode(int index) {
+    static Node aNode(int index) {
       return Node(index << 1);
     }
 
-    static Node lowerNode(int index) {
+    static Node bNode(int index) {
       return Node((index << 1) + 1);
     }
@@ -576,18 +576,29 @@
 
 
-  typedef StaticMappableUBipartiteGraphExtender<
-    IterableUBipartiteGraphExtender<
-    AlterableUBipartiteGraphExtender<
-    UBipartiteGraphExtender <
-    FullUBipartiteGraphBase> > > >
-  ExtendedFullUBipartiteGraphBase;
-
-
-  class FullUBipartiteGraph : 
-    public ExtendedFullUBipartiteGraphBase {
-  public:
-    typedef ExtendedFullUBipartiteGraphBase Parent;
-    FullUBipartiteGraph(int upperNodeNum, int lowerNodeNum) {
-      Parent::construct(upperNodeNum, lowerNodeNum);
+  typedef StaticMappableBpUGraphExtender<
+    IterableBpUGraphExtender<
+    AlterableBpUGraphExtender<
+    BpUGraphExtender <
+    FullBpUGraphBase> > > >
+  ExtendedFullBpUGraphBase;
+
+
+  /// \ingroup graphs
+  ///
+  /// \brief An undirected full bipartite graph class.
+  ///
+  /// This is a simple and fast bipartite undirected full graph implementation.
+  /// It is completely static, so you can neither add nor delete either
+  /// edges or nodes.
+  ///
+  /// \sa FullGraph
+  ///
+  /// \author Balazs Dezso
+  class FullBpUGraph : 
+    public ExtendedFullBpUGraphBase {
+  public:
+    typedef ExtendedFullBpUGraphBase Parent;
+    FullBpUGraph(int aNodeNum, int bNodeNum) {
+      Parent::construct(aNodeNum, bNodeNum);
     }
   };
Index: lemon/graph_to_eps.h
===================================================================
--- lemon/graph_to_eps.h	(revision 1909)
+++ lemon/graph_to_eps.h	(revision 1910)
@@ -235,5 +235,6 @@
   char *_nodePsTextsPreamble;
   
-  bool _u;
+  bool _undirected;
+
   bool _pleaseRemoveOsStream;
 
@@ -273,5 +274,5 @@
     _showNodeText(false), _nodeTexts(false), _nodeTextSize(1),
     _showNodePsText(false), _nodePsTexts(false), _nodePsTextsPreamble(0),
-    _u(false),
+    _undirected(false),
     _pleaseRemoveOsStream(_pros), _scaleToA4(false),
     _nodeTextColorType(SAME_COL), _nodeTextColors(Color(0,0,0)),
@@ -330,5 +331,6 @@
   using T::_nodePsTextsPreamble;
   
-  using T::_u;
+  using T::_undirected;
+
   using T::_pleaseRemoveOsStream;
 
@@ -735,10 +737,11 @@
   ///Sets whether the the graph is undirected
   ///
-  GraphToEps<T> &u(bool b=true) {_u=b;return *this;}
+  GraphToEps<T> &undirected(bool b=true) {_undirected=b;return *this;}
+
   ///Sets whether the the graph is directed
 
   ///Sets whether the the graph is directed.
   ///Use it to show the undirected edges as a pair of directed ones.
-  GraphToEps<T> &bidir(bool b=true) {_u=!b;return *this;}
+  GraphToEps<T> &bidir(bool b=true) {_undirected=!b;return *this;}
 
   ///Sets the title.
@@ -959,5 +962,5 @@
 	std::vector<Edge> el;
 	for(EdgeIt e(g);e!=INVALID;++e)
-	  if((!_u||g.source(e)<g.target(e))&&_edgeWidths[e]>0)
+	  if((!_undirected||g.source(e)<g.target(e))&&_edgeWidths[e]>0)
 	    el.push_back(e);
 	std::sort(el.begin(),el.end(),edgeLess(g));
@@ -1047,5 +1050,5 @@
       }
       else for(EdgeIt e(g);e!=INVALID;++e)
-	if((!_u||g.source(e)<g.target(e))&&_edgeWidths[e]>0)
+	if((!_undirected||g.source(e)<g.target(e))&&_edgeWidths[e]>0)
 	  if(_drawArrows) {
 	    xy<double> d(mycoords[g.target(e)]-mycoords[g.source(e)]);
Index: lemon/smart_graph.h
===================================================================
--- lemon/smart_graph.h	(revision 1909)
+++ lemon/smart_graph.h	(revision 1910)
@@ -379,10 +379,10 @@
 
 
-  class SmartUBipartiteGraphBase {
+  class SmartBpUGraphBase {
   public:
 
     class NodeSetError : public LogicError {
       virtual const char* exceptionName() const { 
-	return "lemon::FullUBipartiteGraph::NodeSetError";
+	return "lemon::SmartBpUGraph::NodeSetError";
       }
     };
@@ -397,10 +397,10 @@
 
     struct EdgeT {
-      int upper, next_down;
-      int lower, next_up;
-    };
-
-    std::vector<NodeT> upperNodes;
-    std::vector<NodeT> lowerNodes;
+      int aNode, next_out;
+      int bNode, next_in;
+    };
+
+    std::vector<NodeT> aNodes;
+    std::vector<NodeT> bNodes;
 
     std::vector<EdgeT> edges;
@@ -409,5 +409,5 @@
   
     class Node {
-      friend class SmartUBipartiteGraphBase;
+      friend class SmartBpUGraphBase;
     protected:
       int id;
@@ -423,5 +423,5 @@
 
     class Edge {
-      friend class SmartUBipartiteGraphBase;
+      friend class SmartBpUGraphBase;
     protected:
       int id;
@@ -436,25 +436,25 @@
     };
 
-    void firstUpper(Node& node) const {
-      node.id = 2 * upperNodes.size() - 2;
+    void firstANode(Node& node) const {
+      node.id = 2 * aNodes.size() - 2;
       if (node.id < 0) node.id = -1; 
     }
-    void nextUpper(Node& node) const {
+    void nextANode(Node& node) const {
       node.id -= 2;
       if (node.id < 0) node.id = -1; 
     }
 
-    void firstLower(Node& node) const {
-      node.id = 2 * lowerNodes.size() - 1;
-    }
-    void nextLower(Node& node) const {
+    void firstBNode(Node& node) const {
+      node.id = 2 * bNodes.size() - 1;
+    }
+    void nextBNode(Node& node) const {
       node.id -= 2;
     }
 
     void first(Node& node) const {
-      if (upperNodes.size() > 0) {
-	node.id = 2 * upperNodes.size() - 2;
+      if (aNodes.size() > 0) {
+	node.id = 2 * aNodes.size() - 2;
       } else {
-	node.id = 2 * lowerNodes.size() - 1;
+	node.id = 2 * bNodes.size() - 1;
       }
     }
@@ -462,5 +462,5 @@
       node.id -= 2;
       if (node.id == -2) {
-	node.id = 2 * lowerNodes.size() - 1;
+	node.id = 2 * bNodes.size() - 1;
       }
     }
@@ -473,18 +473,18 @@
     }
 
-    void firstDown(Edge& edge, const Node& node) const {
+    void firstOut(Edge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 0, NodeSetError());
-      edge.id = upperNodes[node.id >> 1].first;
-    }
-    void nextDown(Edge& edge) const {
-      edge.id = edges[edge.id].next_down;
-    }
-
-    void firstUp(Edge& edge, const Node& node) const {
+      edge.id = aNodes[node.id >> 1].first;
+    }
+    void nextOut(Edge& edge) const {
+      edge.id = edges[edge.id].next_out;
+    }
+
+    void firstIn(Edge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 1, NodeSetError());
-      edge.id = lowerNodes[node.id >> 1].first;
-    }
-    void nextUp(Edge& edge) const {
-      edge.id = edges[edge.id].next_up;
+      edge.id = bNodes[node.id >> 1].first;
+    }
+    void nextIn(Edge& edge) const {
+      edge.id = edges[edge.id].next_in;
     }
 
@@ -496,6 +496,6 @@
     }
     int maxNodeId() const {
-      return upperNodes.size() > lowerNodes.size() ?
-	upperNodes.size() * 2 - 2 : lowerNodes.size() * 2 - 1;
+      return aNodes.size() > bNodes.size() ?
+	aNodes.size() * 2 - 2 : bNodes.size() * 2 - 1;
     }
   
@@ -510,51 +510,51 @@
     }
   
-    static int upperId(const Node& node) {
+    static int aNodeId(const Node& node) {
       return node.id >> 1;
     }
-    static Node fromUpperId(int id, Node) {
+    static Node fromANodeId(int id, Node) {
       return Node(id << 1);
     }
-    int maxUpperId() const {
-      return upperNodes.size();
-    }
-
-    static int lowerId(const Node& node) {
+    int maxANodeId() const {
+      return aNodes.size();
+    }
+
+    static int bNodeId(const Node& node) {
       return node.id >> 1;
     }
-    static Node fromLowerId(int id) {
+    static Node fromBNodeId(int id) {
       return Node((id << 1) + 1);
     }
-    int maxLowerId() const {
-      return lowerNodes.size();
-    }
-
-    Node upperNode(const Edge& edge) const {
-      return Node(edges[edge.id].upper);
-    }
-    Node lowerNode(const Edge& edge) const {
-      return Node(edges[edge.id].lower);
-    }
-
-    static bool upper(const Node& node) {
+    int maxBNodeId() const {
+      return bNodes.size();
+    }
+
+    Node aNode(const Edge& edge) const {
+      return Node(edges[edge.id].aNode);
+    }
+    Node bNode(const Edge& edge) const {
+      return Node(edges[edge.id].bNode);
+    }
+
+    static bool aNode(const Node& node) {
       return (node.id & 1) == 0;
     }
 
-    static bool lower(const Node& node) {
+    static bool bNode(const Node& node) {
       return (node.id & 1) == 1;
     }
 
-    Node addUpperNode() {
+    Node addANode() {
       NodeT nodeT;
       nodeT.first = -1;
-      upperNodes.push_back(nodeT);
-      return Node(upperNodes.size() * 2 - 2);
-    }
-
-    Node addLowerNode() {
+      aNodes.push_back(nodeT);
+      return Node(aNodes.size() * 2 - 2);
+    }
+
+    Node addBNode() {
       NodeT nodeT;
       nodeT.first = -1;
-      lowerNodes.push_back(nodeT);
-      return Node(lowerNodes.size() * 2 - 1);
+      bNodes.push_back(nodeT);
+      return Node(bNodes.size() * 2 - 1);
     }
 
@@ -563,14 +563,14 @@
       EdgeT edgeT;
       if ((source.id & 1) == 0) {
-	edgeT.upper = source.id;
-	edgeT.lower = target.id;
+	edgeT.aNode = source.id;
+	edgeT.bNode = target.id;
       } else {
-	edgeT.upper = target.id;
-	edgeT.lower = source.id;
-      }
-      edgeT.next_down = upperNodes[edgeT.upper >> 1].first;
-      upperNodes[edgeT.upper >> 1].first = edges.size();
-      edgeT.next_up = lowerNodes[edgeT.lower >> 1].first;
-      lowerNodes[edgeT.lower >> 1].first = edges.size();
+	edgeT.aNode = target.id;
+	edgeT.bNode = source.id;
+      }
+      edgeT.next_out = aNodes[edgeT.aNode >> 1].first;
+      aNodes[edgeT.aNode >> 1].first = edges.size();
+      edgeT.next_in = bNodes[edgeT.bNode >> 1].first;
+      bNodes[edgeT.bNode >> 1].first = edges.size();
       edges.push_back(edgeT);
       return Edge(edges.size() - 1);
@@ -578,6 +578,6 @@
 
     void clear() {
-      upperNodes.clear();
-      lowerNodes.clear();
+      aNodes.clear();
+      bNodes.clear();
       edges.clear();
     }
@@ -586,17 +586,25 @@
 
 
-  typedef ClearableUBipartiteGraphExtender<
-    ExtendableUBipartiteGraphExtender<
-    MappableUBipartiteGraphExtender<
-    IterableUBipartiteGraphExtender<
-    AlterableUBipartiteGraphExtender<
-    UBipartiteGraphExtender <
-    SmartUBipartiteGraphBase> > > > > >
-  ExtendedSmartUBipartiteGraphBase;
-
-
-  class SmartUBipartiteGraph : 
-    public ExtendedSmartUBipartiteGraphBase {
-  };
+  typedef ClearableBpUGraphExtender<
+    ExtendableBpUGraphExtender<
+    MappableBpUGraphExtender<
+    IterableBpUGraphExtender<
+    AlterableBpUGraphExtender<
+    BpUGraphExtender <
+    SmartBpUGraphBase> > > > > >
+  ExtendedSmartBpUGraphBase;
+
+  /// \ingroup graphs
+  ///
+  /// \brief A smart bipartite undirected graph class.
+  ///
+  /// This is a simple and fast bipartite undirected graph implementation.
+  /// It is also quite memory efficient, but at the price
+  /// that <b> it does not support node and edge deletions</b>.
+  /// Except from this it conforms to 
+  /// the \ref concept::BpUGraph "BpUGraph" concept.
+  /// \sa concept::BpUGraph.
+  ///
+  class SmartBpUGraph : public ExtendedSmartBpUGraphBase {};
 
   
