diff --git a/dune/common/parallel/indexset.hh b/dune/common/parallel/indexset.hh
index 661bd7318362a708d426a5717d8bd9c78f4aca81..164a6fbea7b33d6e835d176612bbcc74915dbba8 100644
--- a/dune/common/parallel/indexset.hh
+++ b/dune/common/parallel/indexset.hh
@@ -1109,9 +1109,15 @@ namespace Dune
     typedef typename ParallelIndexSet<TG,TL,N>::const_iterator Iter;
     typedef typename ParallelIndexSet<TG1,TL1,N1>::const_iterator Iter1;
     Iter iter=idxset.begin();
-    for(Iter1 iter1=idxset1.begin(); iter1 != idxset1.end(); ++iter, ++iter1)
-      if(*iter1!=*iter)
+    for(Iter1 iter1=idxset1.begin(); iter1 != idxset1.end(); ++iter, ++iter1) {
+      if(iter1->global()!=iter->global())
         return false;
+      typedef typename ParallelIndexSet<TG,TL,N>::LocalIndex PI;
+      const PI& pi=iter->local(), pi1=iter1->local();
+
+      if(pi!=pi1)
+        return false;
+    }
     return true;
   }
 
diff --git a/dune/common/parallel/plocalindex.hh b/dune/common/parallel/plocalindex.hh
index 57b5268527a842bd93a0e429977da2265390ef3c..d80e6e7e6a9727968329eac4143654b1f0a7d396 100644
--- a/dune/common/parallel/plocalindex.hh
+++ b/dune/common/parallel/plocalindex.hh
@@ -168,6 +168,25 @@ namespace Dune
 
   };
 
+  template<typename T>
+  bool operator==(const ParallelLocalIndex<T>& p1,
+                  const ParallelLocalIndex<T>& p2)
+  {
+    if(p1.local()!=p2.local())
+      return false;
+    if(p1.attribute()!=p2.attribute())
+      return false;
+    if(p1.isPublic()!=p2.isPublic())
+      return false;
+    return true;
+  }
+  template<typename T>
+  bool operator!=(const ParallelLocalIndex<T>& p1,
+                  const ParallelLocalIndex<T>& p2)
+  {
+    return !(p1==p2);
+  }
+
 
   template<typename T>
   struct LocalIndexComparator<ParallelLocalIndex<T> >