Index: lemon/ugraph_adaptor.h
===================================================================
--- lemon/ugraph_adaptor.h	(revision 1985)
+++ lemon/ugraph_adaptor.h	(revision 1991)
@@ -43,7 +43,4 @@
   /// \brief Base type for the Graph Adaptors
   ///
-  /// \warning Graph adaptors are in even more experimental state than the 
-  /// other parts of the lib. Use them at you own risk.
-  ///
   /// This is the base type for most of LEMON graph adaptors. 
   /// This class implements a trivial graph adaptor i.e. it only wraps the 
@@ -94,5 +91,4 @@
     void nextInc(UEdge &i, bool &d) const { graph->nextInc(i, d); }
 
-
     Node source(const UEdge& e) const { return graph->source(e); }
     Node target(const UEdge& e) const { return graph->target(e); }
@@ -112,5 +108,4 @@
       return graph->findEdge(source, target, prev);
     }
-
     UEdge findUEdge(const Node& source, const Node& target, 
                     const UEdge& prev = INVALID) {
@@ -133,16 +128,34 @@
     bool direction(const Edge& e) const { return graph->direction(e); }
     Edge direct(const UEdge& e, bool d) const { return graph->direct(e, d); }
-    Edge direct(const UEdge& e, const Node& n) const { 
-      return graph->direct(e, n); 
-    }
-
-    Node oppositeNode(const Node& n, const Edge& e) const { 
-      return graph->oppositeNode(n, e); 
-    }
-
-    Edge oppositeEdge(const Edge& e) const { 
-      return graph->oppositeEdge(e); 
-    }
-
+
+    int maxNodeId() const {
+      return graph->maxNodeId();
+    }
+
+    int maxEdgeId() const {
+      return graph->maxEdgeId();
+    }
+
+    int maxUEdgeId() const {
+      return graph->maxEdgeId();
+    }
+
+    typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
+
+    NodeNotifier& getNotifier(Node) const {
+      return graph->getNotifier(Node());
+    } 
+
+    typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
+
+    EdgeNotifier& getNotifier(Edge) const {
+      return graph->getNotifier(Edge());
+    } 
+
+    typedef typename ItemSetTraits<Graph, UEdge>::ItemNotifier UEdgeNotifier;
+
+    UEdgeNotifier& getNotifier(UEdge) const {
+      return graph->getNotifier(UEdge());
+    } 
 
     template <typename _Value>
@@ -380,4 +393,28 @@
     typedef False NodeNumTag;
     typedef False EdgeNumTag;
+
+    typedef FindEdgeTagIndicator<Graph> FindEdgeTag;
+    Edge findEdge(const Node& source, const Node& target, 
+		  const Edge& prev = INVALID) {
+      if (!(*node_filter_map)[source] || !(*node_filter_map)[target]) {
+        return INVALID;
+      }
+      Edge edge = Parent::findEdge(source, target, prev);
+      while (edge != INVALID && !(*uedge_filter_map)[edge]) {
+        edge = Parent::findEdge(source, target, edge);
+      }
+      return edge;
+    }
+    UEdge findUEdge(const Node& source, const Node& target, 
+		  const UEdge& prev = INVALID) {
+      if (!(*node_filter_map)[source] || !(*node_filter_map)[target]) {
+        return INVALID;
+      }
+      UEdge uedge = Parent::findUEdge(source, target, prev);
+      while (uedge != INVALID && !(*uedge_filter_map)[uedge]) {
+        uedge = Parent::findUEdge(source, target, uedge);
+      }
+      return uedge;
+    }
   };
 
@@ -505,4 +542,22 @@
     typedef False NodeNumTag;
     typedef False EdgeNumTag;
+
+    typedef FindEdgeTagIndicator<Graph> FindEdgeTag;
+    Edge findEdge(const Node& source, const Node& target, 
+		  const Edge& prev = INVALID) {
+      Edge edge = Parent::findEdge(source, target, prev);
+      while (edge != INVALID && !(*uedge_filter_map)[edge]) {
+        edge = Parent::findEdge(source, target, edge);
+      }
+      return edge;
+    }
+    UEdge findUEdge(const Node& source, const Node& target, 
+		  const UEdge& prev = INVALID) {
+      UEdge uedge = Parent::findUEdge(source, target, prev);
+      while (uedge != INVALID && !(*uedge_filter_map)[uedge]) {
+        uedge = Parent::findUEdge(source, target, uedge);
+      }
+      return uedge;
+    }
   };
 
@@ -582,5 +637,4 @@
   /// \brief An adaptor for hiding nodes from an undirected graph.
   ///
-  ///
   /// An adaptor for hiding nodes from an undirected graph.
   /// This adaptor specializes SubUGraphAdaptor in the way that only
@@ -599,4 +653,9 @@
   protected:
     ConstMap<typename _UGraph::UEdge, bool> const_true_map;
+
+    NodeSubUGraphAdaptor() : const_true_map(true) {
+      Parent::setUEdgeFilterMap(const_true_map);
+    }
+
   public:
     NodeSubUGraphAdaptor(Graph& _graph, NodeFilterMap& _node_filter_map) : 
@@ -640,4 +699,9 @@
   protected:
     ConstMap<typename Graph::Node, bool> const_true_map;
+
+    EdgeSubUGraphAdaptor() : const_true_map(true) {
+      Parent::setNodeFilterMap(const_true_map);
+    }
+
   public:
     EdgeSubUGraphAdaptor(Graph& _graph, UEdgeFilterMap& _uedge_filter_map) : 
@@ -671,4 +735,8 @@
     typedef typename _UGraph::UEdge Edge;
    
+    void reverseEdge(const Edge& edge) {
+      direction->set(edge, !(*direction)[edge]);
+    }
+
     void first(Node& i) const { graph->first(i); }
     void first(Edge& i) const { graph->first(i); }
@@ -747,7 +815,23 @@
     int id(const Edge& e) const { return graph->id(e); }
 
-    void reverseEdge(const Edge& edge) {
-      direction->set(edge, !(*direction)[edge]);
-    }
+    int maxNodeId() const {
+      return graph->maxNodeId();
+    }
+
+    int maxEdgeId() const {
+      return graph->maxEdgeId();
+    }
+
+    typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
+
+    NodeNotifier& getNotifier(Node) const {
+      return graph->getNotifier(Node());
+    } 
+
+    typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
+
+    EdgeNotifier& getNotifier(Edge) const {
+      return graph->getNotifier(Edge());
+    } 
 
     template <typename _Value>
@@ -789,5 +873,6 @@
 
   /// \ingroup graph_adaptors
-  /// \brief A directed graph is made from a undirected graph by an adaptor
+  ///
+  /// \brief A directed graph is made from an undirected graph by an adaptor
   ///
   /// This adaptor gives a direction for each uedge in the undirected graph.
