Index: lemon/bits/base_extender.h
===================================================================
--- lemon/bits/base_extender.h	(revision 2031)
+++ lemon/bits/base_extender.h	(revision 2076)
@@ -38,5 +38,5 @@
   /// \brief BaseExtender for the UGraphs
   template <typename Base>
-  class UGraphBaseExtender : public Base {
+  class UndirGraphExtender : public Base {
 
   public:
@@ -49,5 +49,5 @@
 
     class Edge : public UEdge {
-      friend class UGraphBaseExtender;
+      friend class UndirGraphExtender;
 
     protected:
@@ -276,206 +276,4 @@
   };
 
-
-  /// \ingroup graphbits
-  ///
-  /// \brief BaseExtender for the BpUGraphs
-  template <typename Base>
-  class BpUGraphBaseExtender : public Base {
-  public:
-    typedef Base Parent;
-    typedef BpUGraphBaseExtender Graph;
-
-    typedef typename Parent::Node Node;
-    typedef typename Parent::Edge UEdge;
-
-
-    using Parent::first;
-    using Parent::next;
-
-    using Parent::id;
-
-    class ANode : public Node {
-      friend class BpUGraphBaseExtender;
-    public:
-      ANode() {}
-      ANode(const Node& node) : Node(node) {
-	LEMON_ASSERT(Parent::aNode(node) || node == INVALID, 
-		     typename Parent::NodeSetError());
-      }
-      ANode(Invalid) : Node(INVALID) {}
-    };
-
-    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 BpUGraphBaseExtender;
-    public:
-      BNode() {}
-      BNode(const Node& node) : Node(node) {
-	LEMON_ASSERT(Parent::bNode(node) || node == INVALID,
-		     typename Parent::NodeSetError());
-      }
-      BNode(Invalid) : Node(INVALID) {}
-    };
-
-    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 BNode& node) const {
-      return Parent::aNodeId(node);
-    }
-
-    Node source(const UEdge& edge) const {
-      return aNode(edge);
-    }
-    Node target(const UEdge& edge) const {
-      return bNode(edge);
-    }
-
-    void firstInc(UEdge& edge, bool& direction, const Node& node) const {
-      if (Parent::aNode(node)) {
-	Parent::firstOut(edge, node);
-	direction = true;
-      } else {
-	Parent::firstIn(edge, node);
-	direction = static_cast<UEdge&>(edge) == INVALID;
-      }
-    }
-    void nextInc(UEdge& edge, bool& direction) const {
-      if (direction) {
-	Parent::nextOut(edge);
-      } else {
-	Parent::nextIn(edge);
-	if (edge == INVALID) direction = true;
-      }
-    }
-
-    int maxUEdgeId() const {
-      return Parent::maxEdgeId();
-    }
-
-    UEdge uEdgeFromId(int id) const {
-      return Parent::edgeFromId(id);
-    }
-
-    class Edge : public UEdge {
-      friend class BpUGraphBaseExtender;
-    protected:
-      bool forward;
-
-      Edge(const UEdge& edge, bool _forward)
-	: UEdge(edge), forward(_forward) {}
-
-    public:
-      Edge() {}
-      Edge (Invalid) : UEdge(INVALID), forward(true) {}
-      bool operator==(const Edge& i) const {
-	return UEdge::operator==(i) && forward == i.forward;
-      }
-      bool operator!=(const Edge& i) const {
-	return UEdge::operator!=(i) || forward != i.forward;
-      }
-      bool operator<(const Edge& i) const {
-	return UEdge::operator<(i) || 
-	  (!(i.forward<forward) && UEdge(*this)<UEdge(i));
-      }
-    };
-
-    void first(Edge& edge) const {
-      Parent::first(static_cast<UEdge&>(edge));
-      edge.forward = true;
-    }
-
-    void next(Edge& edge) const {
-      if (!edge.forward) {
-	Parent::next(static_cast<UEdge&>(edge));
-      }
-      edge.forward = !edge.forward;
-    }
-
-    void firstOut(Edge& edge, const Node& node) const {
-      if (Parent::aNode(node)) {
-	Parent::firstOut(edge, node);
-	edge.forward = true;
-      } else {
-	Parent::firstIn(edge, node);
-	edge.forward = static_cast<UEdge&>(edge) == INVALID;
-      }
-    }
-    void nextOut(Edge& edge) const {
-      if (edge.forward) {
-	Parent::nextOut(edge);
-      } else {
-	Parent::nextIn(edge);
-        edge.forward = static_cast<UEdge&>(edge) == INVALID;
-      }
-    }
-
-    void firstIn(Edge& edge, const Node& node) const {
-      if (Parent::bNode(node)) {
-	Parent::firstIn(edge, node);
-	edge.forward = true;	
-      } else {
-	Parent::firstOut(edge, node);
-	edge.forward = static_cast<UEdge&>(edge) == INVALID;
-      }
-    }
-    void nextIn(Edge& edge) const {
-      if (edge.forward) {
-	Parent::nextIn(edge);
-      } else {
-	Parent::nextOut(edge);
-	edge.forward = static_cast<UEdge&>(edge) == INVALID;
-      }
-    }
-
-    Node source(const Edge& edge) const {
-      return edge.forward ? Parent::aNode(edge) : Parent::bNode(edge);
-    }
-    Node target(const Edge& edge) const {
-      return edge.forward ? Parent::bNode(edge) : Parent::aNode(edge);
-    }
-
-    int id(const Edge& edge) const {
-      return (Parent::id(edge) << 1) + (edge.forward ? 0 : 1);
-    }
-    Edge edgeFromId(int id) const {
-      return Edge(Parent::fromId(id >> 1, UEdge()), (id & 1) == 0);
-    }
-    int maxEdgeId() const {
-      return (Parent::maxId(UEdge()) << 1) + 1;
-    }
-
-    bool direction(const Edge& edge) const {
-      return edge.forward;
-    }
-
-    Edge direct(const UEdge& edge, bool direction) const {
-      return Edge(edge, direction);
-    }
-
-    int edgeNum() const {
-      return 2 * Parent::edgeNum();
-    }
-
-    int uEdgeNum() const {
-      return Parent::edgeNum();
-    }
-
-  };
-
 }
 
Index: lemon/bits/graph_adaptor_extender.h
===================================================================
--- lemon/bits/graph_adaptor_extender.h	(revision 2041)
+++ lemon/bits/graph_adaptor_extender.h	(revision 2076)
@@ -454,9 +454,4 @@
     typedef typename Parent::UEdge UEdge;
 
-    Node oppositeNode(const UEdge& edge, const Node& node) const {
-      return source(edge) == node ? 
-	target(edge) : source(edge);
-    }
-
 
     int maxId(Node) const {
Index: lemon/bits/graph_extender.h
===================================================================
--- lemon/bits/graph_extender.h	(revision 2046)
+++ lemon/bits/graph_extender.h	(revision 2076)
@@ -735,8 +735,185 @@
 
     typedef typename Parent::Node Node;
-    typedef typename Parent::BNode BNode;
-    typedef typename Parent::ANode ANode;
-    typedef typename Parent::Edge Edge;
     typedef typename Parent::UEdge UEdge;
+
+
+    using Parent::first;
+    using Parent::next;
+
+    using Parent::id;
+
+    class ANode : public Node {
+      friend class BpUGraphExtender;
+    public:
+      ANode() {}
+      ANode(const Node& node) : Node(node) {
+	LEMON_ASSERT(Parent::aNode(node) || node == INVALID, 
+		     typename Parent::NodeSetError());
+      }
+      ANode(Invalid) : Node(INVALID) {}
+    };
+
+    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:
+      BNode() {}
+      BNode(const Node& node) : Node(node) {
+	LEMON_ASSERT(Parent::bNode(node) || node == INVALID,
+		     typename Parent::NodeSetError());
+      }
+      BNode(Invalid) : Node(INVALID) {}
+    };
+
+    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 BNode& node) const {
+      return Parent::aNodeId(node);
+    }
+
+    Node source(const UEdge& edge) const {
+      return aNode(edge);
+    }
+    Node target(const UEdge& edge) const {
+      return bNode(edge);
+    }
+
+    void firstInc(UEdge& edge, bool& direction, const Node& node) const {
+      if (Parent::aNode(node)) {
+	Parent::firstFromANode(edge, node);
+	direction = true;
+      } else {
+	Parent::firstFromBNode(edge, node);
+	direction = static_cast<UEdge&>(edge) == INVALID;
+      }
+    }
+    void nextInc(UEdge& edge, bool& direction) const {
+      if (direction) {
+	Parent::nextFromANode(edge);
+      } else {
+	Parent::nextFromBNode(edge);
+	if (edge == INVALID) direction = true;
+      }
+    }
+
+    class Edge : public UEdge {
+      friend class BpUGraphExtender;
+    protected:
+      bool forward;
+
+      Edge(const UEdge& edge, bool _forward)
+	: UEdge(edge), forward(_forward) {}
+
+    public:
+      Edge() {}
+      Edge (Invalid) : UEdge(INVALID), forward(true) {}
+      bool operator==(const Edge& i) const {
+	return UEdge::operator==(i) && forward == i.forward;
+      }
+      bool operator!=(const Edge& i) const {
+	return UEdge::operator!=(i) || forward != i.forward;
+      }
+      bool operator<(const Edge& i) const {
+	return UEdge::operator<(i) || 
+	  (!(i.forward<forward) && UEdge(*this)<UEdge(i));
+      }
+    };
+
+    void first(Edge& edge) const {
+      Parent::first(static_cast<UEdge&>(edge));
+      edge.forward = true;
+    }
+
+    void next(Edge& edge) const {
+      if (!edge.forward) {
+	Parent::next(static_cast<UEdge&>(edge));
+      }
+      edge.forward = !edge.forward;
+    }
+
+    void firstOut(Edge& edge, const Node& node) const {
+      if (Parent::aNode(node)) {
+	Parent::firstFromANode(edge, node);
+	edge.forward = true;
+      } else {
+	Parent::firstFromBNode(edge, node);
+	edge.forward = static_cast<UEdge&>(edge) == INVALID;
+      }
+    }
+    void nextOut(Edge& edge) const {
+      if (edge.forward) {
+	Parent::nextFromANode(edge);
+      } else {
+	Parent::nextFromBNode(edge);
+        edge.forward = static_cast<UEdge&>(edge) == INVALID;
+      }
+    }
+
+    void firstIn(Edge& edge, const Node& node) const {
+      if (Parent::bNode(node)) {
+	Parent::firstFromBNode(edge, node);
+	edge.forward = true;	
+      } else {
+	Parent::firstFromANode(edge, node);
+	edge.forward = static_cast<UEdge&>(edge) == INVALID;
+      }
+    }
+    void nextIn(Edge& edge) const {
+      if (edge.forward) {
+	Parent::nextFromBNode(edge);
+      } else {
+	Parent::nextFromANode(edge);
+	edge.forward = static_cast<UEdge&>(edge) == INVALID;
+      }
+    }
+
+    Node source(const Edge& edge) const {
+      return edge.forward ? Parent::aNode(edge) : Parent::bNode(edge);
+    }
+    Node target(const Edge& edge) const {
+      return edge.forward ? Parent::bNode(edge) : Parent::aNode(edge);
+    }
+
+    int id(const Edge& edge) const {
+      return (Parent::id(static_cast<const UEdge&>(edge)) << 1) + 
+        (edge.forward ? 0 : 1);
+    }
+    Edge edgeFromId(int id) const {
+      return Edge(Parent::fromUEdgeId(id >> 1), (id & 1) == 0);
+    }
+    int maxEdgeId() const {
+      return (Parent::maxUEdgeId(UEdge()) << 1) + 1;
+    }
+
+    bool direction(const Edge& edge) const {
+      return edge.forward;
+    }
+
+    Edge direct(const UEdge& edge, bool direction) const {
+      return Edge(edge, direction);
+    }
+
+    int edgeNum() const {
+      return 2 * Parent::uEdgeNum();
+    }
+
+    int uEdgeNum() const {
+      return Parent::uEdgeNum();
+    }
 
     Node oppositeNode(const UEdge& edge, const Node& node) const {
@@ -745,5 +922,4 @@
     }
 
-    using Parent::direct;
     Edge direct(const UEdge& edge, const Node& node) const {
       return Edge(edge, node == Parent::source(edge));
@@ -765,5 +941,5 @@
     }
     int maxId(Edge) const {
-      return Parent::maxEdgeId();
+      return maxEdgeId();
     }
     int maxId(UEdge) const {
Index: lemon/edge_set.h
===================================================================
--- lemon/edge_set.h	(revision 2031)
+++ lemon/edge_set.h	(revision 2076)
@@ -338,9 +338,9 @@
   template <typename _Graph>
   class ListUEdgeSet 
-    : public UEdgeSetExtender<UGraphBaseExtender<ListEdgeSetBase<_Graph> > > {
-
-  public:
-
-    typedef UEdgeSetExtender<UGraphBaseExtender<
+    : public UEdgeSetExtender<UndirGraphExtender<ListEdgeSetBase<_Graph> > > {
+
+  public:
+
+    typedef UEdgeSetExtender<UndirGraphExtender<
       ListEdgeSetBase<_Graph> > > Parent;
     
@@ -670,9 +670,9 @@
   template <typename _Graph>
   class SmartUEdgeSet 
-    : public UEdgeSetExtender<UGraphBaseExtender<SmartEdgeSetBase<_Graph> > > {
-
-  public:
-
-    typedef UEdgeSetExtender<UGraphBaseExtender<
+    : public UEdgeSetExtender<UndirGraphExtender<SmartEdgeSetBase<_Graph> > > {
+
+  public:
+
+    typedef UEdgeSetExtender<UndirGraphExtender<
       SmartEdgeSetBase<_Graph> > > Parent;
     
Index: lemon/full_graph.h
===================================================================
--- lemon/full_graph.h	(revision 2061)
+++ lemon/full_graph.h	(revision 2076)
@@ -442,5 +442,5 @@
   };
 
-  typedef UGraphExtender<UGraphBaseExtender<FullUGraphBase> > 
+  typedef UGraphExtender<UndirGraphExtender<FullUGraphBase> > 
   ExtendedFullUGraphBase;
 
@@ -519,16 +519,16 @@
     };
 
-    class Edge {
+    class UEdge {
       friend class FullBpUGraphBase;
     protected:
       int id;
 
-      Edge(int _id) { id = _id;}
+      UEdge(int _id) { id = _id;}
     public:
-      Edge() {}
-      Edge (Invalid) { id = -1; }
-      bool operator==(const Edge i) const {return id==i.id;}
-      bool operator!=(const Edge i) const {return id!=i.id;}
-      bool operator<(const Edge i) const {return id<i.id;}
+      UEdge() {}
+      UEdge (Invalid) { id = -1; }
+      bool operator==(const UEdge i) const {return id==i.id;}
+      bool operator!=(const UEdge i) const {return id!=i.id;}
+      bool operator<(const UEdge i) const {return id<i.id;}
     };
 
@@ -569,25 +569,25 @@
     }
   
-    void first(Edge& edge) const {
+    void first(UEdge& edge) const {
       edge.id = _edgeNum - 1;
     }
-    void next(Edge& edge) const {
+    void next(UEdge& edge) const {
       --edge.id;
     }
 
-    void firstOut(Edge& edge, const Node& node) const {
+    void firstFromANode(UEdge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 0, NodeSetError());
       edge.id = (node.id >> 1) * _bNodeNum;
     }
-    void nextOut(Edge& edge) const {
+    void nextFromANode(UEdge& edge) const {
       ++(edge.id);
       if (edge.id % _bNodeNum == 0) edge.id = -1;
     }
 
-    void firstIn(Edge& edge, const Node& node) const {
+    void firstFromBNode(UEdge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 1, NodeSetError());
       edge.id = (node.id >> 1);
     }
-    void nextIn(Edge& edge) const {
+    void nextFromBNode(UEdge& edge) const {
       edge.id += _bNodeNum;
       if (edge.id >= _edgeNum) edge.id = -1;
@@ -605,11 +605,11 @@
     }
   
-    static int id(const Edge& edge) {
+    static int id(const UEdge& edge) {
       return edge.id;
     }
-    static Edge edgeFromId(int id) {
-      return Edge(id);
-    }
-    int maxEdgeId() const {
+    static UEdge uEdgeFromId(int id) {
+      return UEdge(id);
+    }
+    int maxUEdgeId() const {
       return _edgeNum - 1;
     }
@@ -635,8 +635,8 @@
     }
 
-    Node aNode(const Edge& edge) const {
+    Node aNode(const UEdge& edge) const {
       return Node((edge.id / _bNodeNum) << 1);
     }
-    Node bNode(const Edge& edge) const {
+    Node bNode(const UEdge& edge) const {
       return Node(((edge.id % _bNodeNum) << 1) + 1);
     }
@@ -664,11 +664,10 @@
 
     typedef True EdgeNumTag;
-    int edgeNum() const { return _edgeNum; }
+    int uEdgeNum() const { return _edgeNum; }
 
   };
 
 
-  typedef BpUGraphExtender< BpUGraphBaseExtender<
-    FullBpUGraphBase> > ExtendedFullBpUGraphBase;
+  typedef BpUGraphExtender<FullBpUGraphBase> ExtendedFullBpUGraphBase;
 
 
Index: lemon/grid_ugraph.h
===================================================================
--- lemon/grid_ugraph.h	(revision 2037)
+++ lemon/grid_ugraph.h	(revision 2076)
@@ -348,6 +348,6 @@
 
 
-  typedef UGraphExtender<UGraphBaseExtender<
-    GridUGraphBase> > ExtendedGridUGraphBase;
+  typedef UGraphExtender<UndirGraphExtender<GridUGraphBase> > 
+  ExtendedGridUGraphBase;
 
   /// \ingroup graphs
Index: lemon/list_graph.h
===================================================================
--- lemon/list_graph.h	(revision 2031)
+++ lemon/list_graph.h	(revision 2076)
@@ -567,6 +567,6 @@
   /**************** Undirected List Graph ****************/
 
-  typedef UGraphExtender<UGraphBaseExtender<
-    ListGraphBase> > ExtendedListUGraphBase;
+  typedef UGraphExtender<UndirGraphExtender<ListGraphBase> > 
+  ExtendedListUGraphBase;
 
   /// \addtogroup graphs
@@ -652,5 +652,5 @@
     };
 
-    struct EdgeT {
+    struct UEdgeT {
       int aNode, prev_out, next_out;
       int bNode, prev_in, next_in;
@@ -660,5 +660,5 @@
     std::vector<NodeT> bNodes;
 
-    std::vector<EdgeT> edges;
+    std::vector<UEdgeT> edges;
 
     int first_anode;
@@ -686,16 +686,16 @@
     };
 
-    class Edge {
+    class UEdge {
       friend class ListBpUGraphBase;
     protected:
       int id;
 
-      explicit Edge(int _id) { id = _id;}
+      explicit UEdge(int _id) { id = _id;}
     public:
-      Edge() {}
-      Edge (Invalid) { id = -1; }
-      bool operator==(const Edge i) const {return id==i.id;}
-      bool operator!=(const Edge i) const {return id!=i.id;}
-      bool operator<(const Edge i) const {return id<i.id;}
+      UEdge() {}
+      UEdge (Invalid) { id = -1; }
+      bool operator==(const UEdge i) const {return id==i.id;}
+      bool operator!=(const UEdge i) const {return id!=i.id;}
+      bool operator<(const UEdge i) const {return id<i.id;}
     };
 
@@ -741,5 +741,5 @@
     }
   
-    void first(Edge& edge) const {
+    void first(UEdge& edge) const {
       int aNodeId = first_anode;
       while (aNodeId != -1 && aNodes[aNodeId].first_edge == -1) {
@@ -753,5 +753,5 @@
       }
     }
-    void next(Edge& edge) const {
+    void next(UEdge& edge) const {
       int aNodeId = edges[edge.id].aNode >> 1;
       edge.id = edges[edge.id].next_out;
@@ -771,17 +771,17 @@
     }
 
-    void firstOut(Edge& edge, const Node& node) const {
+    void firstFromANode(UEdge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 0, NodeSetError());
       edge.id = aNodes[node.id >> 1].first_edge;
     }
-    void nextOut(Edge& edge) const {
+    void nextFromANode(UEdge& edge) const {
       edge.id = edges[edge.id].next_out;
     }
 
-    void firstIn(Edge& edge, const Node& node) const {
+    void firstFromBNode(UEdge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 1, NodeSetError());
       edge.id = bNodes[node.id >> 1].first_edge;
     }
-    void nextIn(Edge& edge) const {
+    void nextFromBNode(UEdge& edge) const {
       edge.id = edges[edge.id].next_in;
     }
@@ -798,11 +798,11 @@
     }
   
-    static int id(const Edge& edge) {
+    static int id(const UEdge& edge) {
       return edge.id;
     }
-    static Edge edgeFromId(int id) {
-      return Edge(id);
-    }
-    int maxEdgeId() const {
+    static UEdge uEdgeFromId(int id) {
+      return UEdge(id);
+    }
+    int maxUEdgeId() const {
       return edges.size();
     }
@@ -828,8 +828,8 @@
     }
 
-    Node aNode(const Edge& edge) const {
+    Node aNode(const UEdge& edge) const {
       return Node(edges[edge.id].aNode);
     }
-    Node bNode(const Edge& edge) const {
+    Node bNode(const UEdge& edge) const {
       return Node(edges[edge.id].bNode);
     }
@@ -875,5 +875,5 @@
     }
 
-    Edge addEdge(const Node& source, const Node& target) {
+    UEdge addEdge(const Node& source, const Node& target) {
       LEMON_ASSERT(((source.id ^ target.id) & 1) == 1, NodeSetError());
       int edgeId;
@@ -883,5 +883,5 @@
       } else {
         edgeId = edges.size();
-        edges.push_back(EdgeT());
+        edges.push_back(UEdgeT());
       }
       if ((source.id & 1) == 0) {
@@ -904,5 +904,5 @@
       }
       bNodes[edges[edgeId].bNode >> 1].first_edge = edgeId;
-      return Edge(edgeId);
+      return UEdge(edgeId);
     }
 
@@ -919,5 +919,5 @@
     }
 
-    void erase(const Edge& edge) {
+    void erase(const UEdge& edge) {
       if (edges[edge.id].prev_out != -1) {
         edges[edges[edge.id].prev_out].next_out = edges[edge.id].next_out;
@@ -954,6 +954,5 @@
 
 
-  typedef BpUGraphExtender< BpUGraphBaseExtender<
-    ListBpUGraphBase> > ExtendedListBpUGraphBase;
+  typedef BpUGraphExtender< ListBpUGraphBase > ExtendedListBpUGraphBase;
 
   /// \ingroup graphs
Index: lemon/smart_graph.h
===================================================================
--- lemon/smart_graph.h	(revision 2031)
+++ lemon/smart_graph.h	(revision 2076)
@@ -120,6 +120,14 @@
     static int id(Edge e) { return e.n; }
 
+    /// \brief Returns the node from its \c id.
+    ///
+    /// Returns the node from its \c id. If there is not node
+    /// with the given id the effect of the function is undefinied.
     static Node nodeFromId(int id) { return Node(id);}
 
+    /// \brief Returns the edge from its \c id.
+    ///
+    /// Returns the edge from its \c id. If there is not edge
+    /// with the given id the effect of the function is undefinied.
     static Edge edgeFromId(int id) { return Edge(id);}
 
@@ -351,5 +359,5 @@
   /**************** Undirected List Graph ****************/
 
-  typedef UGraphExtender<UGraphBaseExtender<SmartGraphBase> >
+  typedef UGraphExtender<UndirGraphExtender<SmartGraphBase> >
   ExtendedSmartUGraphBase;
 
@@ -389,5 +397,5 @@
     };
 
-    struct EdgeT {
+    struct UEdgeT {
       int aNode, next_out;
       int bNode, next_in;
@@ -397,5 +405,5 @@
     std::vector<NodeT> bNodes;
 
-    std::vector<EdgeT> edges;
+    std::vector<UEdgeT> edges;
 
   public:
@@ -415,16 +423,16 @@
     };
 
-    class Edge {
+    class UEdge {
       friend class SmartBpUGraphBase;
     protected:
       int id;
 
-      Edge(int _id) { id = _id;}
+      UEdge(int _id) { id = _id;}
     public:
-      Edge() {}
-      Edge (Invalid) { id = -1; }
-      bool operator==(const Edge i) const {return id==i.id;}
-      bool operator!=(const Edge i) const {return id!=i.id;}
-      bool operator<(const Edge i) const {return id<i.id;}
+      UEdge() {}
+      UEdge (Invalid) { id = -1; }
+      bool operator==(const UEdge i) const {return id==i.id;}
+      bool operator!=(const UEdge i) const {return id!=i.id;}
+      bool operator<(const UEdge i) const {return id<i.id;}
     };
 
@@ -459,24 +467,24 @@
     }
   
-    void first(Edge& edge) const {
+    void first(UEdge& edge) const {
       edge.id = edges.size() - 1;
     }
-    void next(Edge& edge) const {
+    void next(UEdge& edge) const {
       --edge.id;
     }
 
-    void firstOut(Edge& edge, const Node& node) const {
+    void firstFromANode(UEdge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 0, NodeSetError());
       edge.id = aNodes[node.id >> 1].first;
     }
-    void nextOut(Edge& edge) const {
+    void nextFromANode(UEdge& edge) const {
       edge.id = edges[edge.id].next_out;
     }
 
-    void firstIn(Edge& edge, const Node& node) const {
+    void firstFromBNode(UEdge& edge, const Node& node) const {
       LEMON_ASSERT((node.id & 1) == 1, NodeSetError());
       edge.id = bNodes[node.id >> 1].first;
     }
-    void nextIn(Edge& edge) const {
+    void nextFromBNode(UEdge& edge) const {
       edge.id = edges[edge.id].next_in;
     }
@@ -493,11 +501,11 @@
     }
   
-    static int id(const Edge& edge) {
+    static int id(const UEdge& edge) {
       return edge.id;
     }
-    static Edge edgeFromId(int id) {
-      return Edge(id);
-    }
-    int maxEdgeId() const {
+    static UEdge uEdgeFromId(int id) {
+      return UEdge(id);
+    }
+    int maxUEdgeId() const {
       return edges.size();
     }
@@ -523,8 +531,8 @@
     }
 
-    Node aNode(const Edge& edge) const {
+    Node aNode(const UEdge& edge) const {
       return Node(edges[edge.id].aNode);
     }
-    Node bNode(const Edge& edge) const {
+    Node bNode(const UEdge& edge) const {
       return Node(edges[edge.id].bNode);
     }
@@ -552,7 +560,7 @@
     }
 
-    Edge addEdge(const Node& source, const Node& target) {
+    UEdge addEdge(const Node& source, const Node& target) {
       LEMON_ASSERT(((source.id ^ target.id) & 1) == 1, NodeSetError());
-      EdgeT edgeT;
+      UEdgeT edgeT;
       if ((source.id & 1) == 0) {
 	edgeT.aNode = source.id;
@@ -567,5 +575,5 @@
       bNodes[edgeT.bNode >> 1].first = edges.size();
       edges.push_back(edgeT);
-      return Edge(edges.size() - 1);
+      return UEdge(edges.size() - 1);
     }
 
@@ -582,11 +590,10 @@
 
     typedef True EdgeNumTag;
-    int edgeNum() const { return edges.size(); }
+    int uEdgeNum() const { return edges.size(); }
 
   };
 
 
-  typedef BpUGraphExtender< BpUGraphBaseExtender<
-    SmartBpUGraphBase> > ExtendedSmartBpUGraphBase;
+  typedef BpUGraphExtender<SmartBpUGraphBase> ExtendedSmartBpUGraphBase;
 
   /// \ingroup graphs
