Index: lemon/list_graph.h
===================================================================
--- lemon/list_graph.h	(revision 2343)
+++ lemon/list_graph.h	(revision 2381)
@@ -528,8 +528,9 @@
         }
         virtual void build() {
-          NodeNotifier* notifier = getNotifier();
+          NodeNotifier* _notifier = notifier();
           Node node;
           std::vector<Node> nodes;
-          for (notifier->first(node); node != INVALID; notifier->next(node)) {
+          for (_notifier->first(node); node != INVALID; 
+               _notifier->next(node)) {
             nodes.push_back(node);
           }
@@ -539,7 +540,8 @@
         }
         virtual void clear() {
-          NodeNotifier* notifier = getNotifier();
+          NodeNotifier* _notifier = notifier();
           Node node;
-          for (notifier->first(node); node != INVALID; notifier->next(node)) {
+          for (_notifier->first(node); node != INVALID; 
+               _notifier->next(node)) {
             snapshot.eraseNode(node);
           }
@@ -578,8 +580,9 @@
         }
         virtual void build() {
-          EdgeNotifier* notifier = getNotifier();
+          EdgeNotifier* _notifier = notifier();
           Edge edge;
           std::vector<Edge> edges;
-          for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+          for (_notifier->first(edge); edge != INVALID; 
+               _notifier->next(edge)) {
             edges.push_back(edge);
           }
@@ -589,7 +592,7 @@
         }
         virtual void clear() {
-          EdgeNotifier* notifier = getNotifier();
+          EdgeNotifier* _notifier = notifier();
           Edge edge;
-          for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+          for (_notifier->first(edge); edge != INVALID; _notifier->next(edge)) {
             snapshot.eraseEdge(edge);
           }
@@ -640,6 +643,6 @@
       void attach(ListGraph &_graph) {
 	graph = &_graph;
-	node_observer_proxy.attach(graph->getNotifier(Node()));
-        edge_observer_proxy.attach(graph->getNotifier(Edge()));
+	node_observer_proxy.attach(graph->notifier(Node()));
+        edge_observer_proxy.attach(graph->notifier(Edge()));
       }
             
@@ -912,11 +915,21 @@
     void firstInc(UEdge &e, bool& d, const Node& v) const {
       int de = nodes[v.id].first_out;
-      e.id = de / 2;
-      d = ((de & 1) == 1);
+      if (de != -1 ) {
+        e.id = de / 2;
+        d = ((de & 1) == 1);
+      } else {
+        e.id = -1;
+        d = true;
+      }
     }
     void nextInc(UEdge &e, bool& d) const {
       int de = (edges[(e.id * 2) | (d ? 1 : 0)].next_out);
-      e.id = de / 2;
-      d = ((de & 1) == 1);
+      if (de != -1 ) {
+        e.id = de / 2;
+        d = ((de & 1) == 1);
+      } else {
+        e.id = -1;
+        d = true;
+      }
     }
     
@@ -1262,8 +1275,9 @@
         }
         virtual void build() {
-          NodeNotifier* notifier = getNotifier();
+          NodeNotifier* _notifier = notifier();
           Node node;
           std::vector<Node> nodes;
-          for (notifier->first(node); node != INVALID; notifier->next(node)) {
+          for (_notifier->first(node); node != INVALID; 
+               _notifier->next(node)) {
             nodes.push_back(node);
           }
@@ -1273,7 +1287,8 @@
         }
         virtual void clear() {
-          NodeNotifier* notifier = getNotifier();
+          NodeNotifier* _notifier = notifier();
           Node node;
-          for (notifier->first(node); node != INVALID; notifier->next(node)) {
+          for (_notifier->first(node); node != INVALID; 
+               _notifier->next(node)) {
             snapshot.eraseNode(node);
           }
@@ -1312,8 +1327,9 @@
         }
         virtual void build() {
-          UEdgeNotifier* notifier = getNotifier();
+          UEdgeNotifier* _notifier = notifier();
           UEdge edge;
           std::vector<UEdge> edges;
-          for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+          for (_notifier->first(edge); edge != INVALID; 
+               _notifier->next(edge)) {
             edges.push_back(edge);
           }
@@ -1323,7 +1339,8 @@
         }
         virtual void clear() {
-          UEdgeNotifier* notifier = getNotifier();
+          UEdgeNotifier* _notifier = notifier();
           UEdge edge;
-          for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+          for (_notifier->first(edge); edge != INVALID; 
+               _notifier->next(edge)) {
             snapshot.eraseUEdge(edge);
           }
@@ -1374,6 +1391,6 @@
       void attach(ListUGraph &_graph) {
 	graph = &_graph;
-	node_observer_proxy.attach(graph->getNotifier(Node()));
-        edge_observer_proxy.attach(graph->getNotifier(UEdge()));
+	node_observer_proxy.attach(graph->notifier(Node()));
+        edge_observer_proxy.attach(graph->notifier(UEdge()));
       }
             
@@ -2040,8 +2057,9 @@
         }
         virtual void build() {
-          NodeNotifier* notifier = getNotifier();
+          NodeNotifier* _notifier = notifier();
           Node node;
           std::vector<Node> nodes;
-          for (notifier->first(node); node != INVALID; notifier->next(node)) {
+          for (_notifier->first(node); node != INVALID; 
+               _notifier->next(node)) {
             nodes.push_back(node);
           }
@@ -2051,7 +2069,8 @@
         }
         virtual void clear() {
-          NodeNotifier* notifier = getNotifier();
+          NodeNotifier* _notifier = notifier();
           Node node;
-          for (notifier->first(node); node != INVALID; notifier->next(node)) {
+          for (_notifier->first(node); node != INVALID; 
+               _notifier->next(node)) {
             snapshot.eraseNode(node);
           }
@@ -2090,8 +2109,9 @@
         }
         virtual void build() {
-          UEdgeNotifier* notifier = getNotifier();
+          UEdgeNotifier* _notifier = notifier();
           UEdge edge;
           std::vector<UEdge> edges;
-          for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+          for (_notifier->first(edge); edge != INVALID; 
+               _notifier->next(edge)) {
             edges.push_back(edge);
           }
@@ -2101,7 +2121,8 @@
         }
         virtual void clear() {
-          UEdgeNotifier* notifier = getNotifier();
+          UEdgeNotifier* _notifier = notifier();
           UEdge edge;
-          for (notifier->first(edge); edge != INVALID; notifier->next(edge)) {
+          for (_notifier->first(edge); edge != INVALID; 
+               _notifier->next(edge)) {
             snapshot.eraseUEdge(edge);
           }
@@ -2152,6 +2173,6 @@
       void attach(ListBpUGraph &_graph) {
 	graph = &_graph;
-	node_observer_proxy.attach(graph->getNotifier(Node()));
-        edge_observer_proxy.attach(graph->getNotifier(UEdge()));
+	node_observer_proxy.attach(graph->notifier(Node()));
+        edge_observer_proxy.attach(graph->notifier(UEdge()));
       }
             
Index: lemon/smart_graph.h
===================================================================
--- lemon/smart_graph.h	(revision 2350)
+++ lemon/smart_graph.h	(revision 2381)
@@ -287,5 +287,5 @@
       while(s.edge_num<edges.size()) {
         Edge edge = edgeFromId(edges.size()-1);
-	Parent::getNotifier(Edge()).erase(edge);
+	Parent::notifier(Edge()).erase(edge);
 	nodes[edges.back().source].first_out=edges.back().next_out;
 	nodes[edges.back().target].first_in=edges.back().next_in;
@@ -294,5 +294,5 @@
       while(s.node_num<nodes.size()) {
         Node node = nodeFromId(nodes.size()-1);
-	Parent::getNotifier(Node()).erase(node);
+	Parent::notifier(Node()).erase(node);
 	nodes.pop_back();
       }
@@ -506,11 +506,21 @@
     void firstInc(UEdge &edge, bool& d, const Node& v) const {
       int de = nodes[v.id].first_out;
-      edge.id = de / 2;
-      d = ((de & 1) == 1);
+      if (de != -1) {
+        edge.id = de / 2;
+        d = ((de & 1) == 1);
+      } else {
+        edge.id = -1;
+        d = true;
+      }
     }
     void nextInc(UEdge &edge, bool& d) const {
       int de = (edges[(edge.id * 2) | (d ? 1 : 0)].next_out);
-      edge.id = de / 2;
-      d = ((de & 1) == 1);
+      if (de != -1) {
+        edge.id = de / 2;
+        d = ((de & 1) == 1);
+      } else {
+        edge.id = -1;
+        d = true;      
+      }
     }
     
@@ -642,9 +652,9 @@
         int n=edges.size()-1;
         UEdge edge=uEdgeFromId(n/2);
-	Parent::getNotifier(UEdge()).erase(edge);
+	Parent::notifier(UEdge()).erase(edge);
         std::vector<Edge> dir;
         dir.push_back(edgeFromId(n));
         dir.push_back(edgeFromId(n-1));
-	Parent::getNotifier(Edge()).erase(dir);
+	Parent::notifier(Edge()).erase(dir);
 	nodes[edges[n].target].first_out=edges[n].next_out;
 	nodes[edges[n-1].target].first_out=edges[n-1].next_out;
@@ -655,5 +665,5 @@
         int n=nodes.size()-1;
         Node node = nodeFromId(n);
-	Parent::getNotifier(Node()).erase(node);
+	Parent::notifier(Node()).erase(node);
 	nodes.pop_back();
       }
@@ -1024,9 +1034,9 @@
       while(s.edge_num<edges.size()) {
         UEdge edge = uEdgeFromId(edges.size()-1);
-	Parent::getNotifier(UEdge()).erase(edge);
+	Parent::notifier(UEdge()).erase(edge);
         std::vector<Edge> dir;
         dir.push_back(Parent::direct(edge, true));
         dir.push_back(Parent::direct(edge, false));
-	Parent::getNotifier(Edge()).erase(dir);
+	Parent::notifier(Edge()).erase(dir);
 	aNodes[edges.back().aNode >> 1].first=edges.back().next_out;
 	bNodes[edges.back().bNode >> 1].first=edges.back().next_in;
@@ -1035,12 +1045,12 @@
       while(s.anode_num<aNodes.size()) {
         Node node = nodeFromANodeId(aNodes.size() - 1);
-	Parent::getNotifier(ANode()).erase(node);
-	Parent::getNotifier(Node()).erase(node);
+	Parent::notifier(ANode()).erase(node);
+	Parent::notifier(Node()).erase(node);
 	aNodes.pop_back();
       }
       while(s.bnode_num<bNodes.size()) {
         Node node = nodeFromBNodeId(bNodes.size() - 1);
-	Parent::getNotifier(BNode()).erase(node);
-	Parent::getNotifier(Node()).erase(node);
+	Parent::notifier(BNode()).erase(node);
+	Parent::notifier(Node()).erase(node);
 	bNodes.pop_back();
       }
Index: lemon/ugraph_adaptor.h
===================================================================
--- lemon/ugraph_adaptor.h	(revision 2096)
+++ lemon/ugraph_adaptor.h	(revision 2381)
@@ -152,18 +152,18 @@
     typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
 
-    NodeNotifier& getNotifier(Node) const {
-      return graph->getNotifier(Node());
+    NodeNotifier& notifier(Node) const {
+      return graph->notifier(Node());
     } 
 
     typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
 
-    EdgeNotifier& getNotifier(Edge) const {
-      return graph->getNotifier(Edge());
+    EdgeNotifier& notifier(Edge) const {
+      return graph->notifier(Edge());
     } 
 
     typedef typename ItemSetTraits<Graph, UEdge>::ItemNotifier UEdgeNotifier;
 
-    UEdgeNotifier& getNotifier(UEdge) const {
-      return graph->getNotifier(UEdge());
+    UEdgeNotifier& notifier(UEdge) const {
+      return graph->notifier(UEdge());
     } 
 
@@ -312,4 +312,5 @@
       Parent::firstInc(i, d, n); 
       while (i!=INVALID && (!(*uedge_filter_map)[i] 
+            || !(*node_filter_map)[Parent::source(i)]
             || !(*node_filter_map)[Parent::target(i)])) Parent::nextInc(i, d); 
     }
@@ -348,6 +349,7 @@
     void nextInc(UEdge& i, bool& d) const { 
       Parent::nextInc(i, d); 
-      while (i!=INVALID && (!(*uedge_filter_map)[i] 
-            || !(*node_filter_map)[Parent::source(i)])) Parent::nextInc(i, d); 
+      while (i!=INVALID && (!(*uedge_filter_map)[i]
+            || !(*node_filter_map)[Parent::source(i)]
+            || !(*node_filter_map)[Parent::target(i)])) Parent::nextInc(i, d); 
     }
 
@@ -988,12 +990,12 @@
     typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
 
-    NodeNotifier& getNotifier(Node) const {
-      return graph->getNotifier(Node());
+    NodeNotifier& notifier(Node) const {
+      return graph->notifier(Node());
     } 
 
     typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
 
-    EdgeNotifier& getNotifier(Edge) const {
-      return graph->getNotifier(Edge());
+    EdgeNotifier& notifier(Edge) const {
+      return graph->notifier(Edge());
     } 
 
