Index: src/unittests/ObserverTest.cpp
===================================================================
--- src/unittests/ObserverTest.cpp	(revision 61ea5b9b2b106f510b81b3dc13ab775fcd191126)
+++ src/unittests/ObserverTest.cpp	(revision 8774c5c1ce2e91c27547acbca62ebdfe34d3880a)
@@ -182,5 +182,5 @@
 };
 
-class ObservableCollection : public Observable {
+class ObservableSet : public Observable {
 public:
   typedef std::set<SimpleObservable*> set;
@@ -188,5 +188,5 @@
   typedef set::const_iterator const_iterator;
 
-  ObservableCollection(int _num) :
+  ObservableSet(int _num) :
     Observable("ObservableCollection"),
     num(_num)
@@ -199,8 +199,46 @@
   }
 
-  ~ObservableCollection(){
+  ~ObservableSet(){
     set::iterator iter;
     for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){
       delete (*iter);
+    }
+  }
+
+  iterator begin(){
+    return iterator(theSet.begin(),this);
+  }
+
+  iterator end(){
+    return iterator(theSet.end(),this);
+  }
+
+  const int num;
+
+private:
+  set theSet;
+};
+
+class ObservableMap : public Observable {
+public:
+  typedef std::map<int,SimpleObservable*> set;
+  typedef ObservedIterator<set> iterator;
+  typedef set::const_iterator const_iterator;
+
+  ObservableMap(int _num) :
+    Observable("ObservableCollection"),
+    num(_num)
+  {
+    for(int i=0; i<num; ++i){
+      SimpleObservable *content = new SimpleObservable();
+      content->signOn(this);
+      theSet.insert(make_pair(i,content));
+    }
+  }
+
+  ~ObservableMap(){
+    set::iterator iter;
+    for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){
+      delete iter->second;
     }
   }
@@ -231,5 +269,6 @@
   blockObservable = new BlockObservable();
   notificationObservable = new NotificationObservable();
-  collection = new ObservableCollection(5);
+  obsset = new ObservableSet(5);
+  obsmap = new ObservableMap(5);
 
   observer1 = new UpdateCountObserver();
@@ -249,5 +288,6 @@
   delete blockObservable;
   delete notificationObservable;
-  delete collection;
+  delete obsset;
+  delete obsmap;
 
   delete observer1;
@@ -360,21 +400,21 @@
   int i = 0;
   // test the general iterator methods
-  for(ObservableCollection::iterator iter=collection->begin(); iter!=collection->end();++iter){
-    CPPUNIT_ASSERT(i< collection->num);
+  for(ObservableSet::iterator iter=obsset->begin(); iter!=obsset->end();++iter){
+    CPPUNIT_ASSERT(i< obsset->num);
     i++;
   }
 
   i=0;
-  for(ObservableCollection::const_iterator iter=collection->begin(); iter!=collection->end();++iter){
-    CPPUNIT_ASSERT(i<collection->num);
-    i++;
-  }
-
-  collection->signOn(observer1);
+  for(ObservableSet::const_iterator iter=obsset->begin(); iter!=obsset->end();++iter){
+    CPPUNIT_ASSERT(i<obsset->num);
+    i++;
+  }
+
+  obsset->signOn(observer1);
   {
     // we construct this out of the loop, so the iterator dies at the end of
     // the scope and not the end of the loop (allows more testing)
-    ObservableCollection::iterator iter;
-    for(iter=collection->begin(); iter!=collection->end(); ++iter){
+    ObservableSet::iterator iter;
+    for(iter=obsset->begin(); iter!=obsset->end(); ++iter){
       (*iter)->changeMethod();
     }
@@ -386,7 +426,25 @@
 
   // when using a const_iterator no changes should be propagated
-  for(ObservableCollection::const_iterator iter = collection->begin(); iter!=collection->end();++iter);
+  for(ObservableSet::const_iterator iter = obsset->begin(); iter!=obsset->end();++iter);
   CPPUNIT_ASSERT_EQUAL( 1, observer1->updates);
-  collection->signOff(observer1);
+
+  // we need to test the operator-> as well
+  obsmap->signOn(observer2);
+  {
+    // we construct this out of the loop, so the iterator dies at the end of
+    // the scope and not the end of the loop (allows more testing)
+    ObservableMap::iterator iter;
+    for(iter=obsmap->begin(); iter!=obsmap->end(); ++iter){
+      iter->second->changeMethod();
+    }
+    // At this point no change should have been propagated
+    CPPUNIT_ASSERT_EQUAL( 0, observer2->updates);
+  }
+  // After the Iterator has died the propagation should take place
+  CPPUNIT_ASSERT_EQUAL( 1, observer2->updates);
+
+
+  obsset->signOff(observer1);
+  obsmap->signOff(observer2);
 }
 
Index: src/unittests/ObserverTest.hpp
===================================================================
--- src/unittests/ObserverTest.hpp	(revision 61ea5b9b2b106f510b81b3dc13ab775fcd191126)
+++ src/unittests/ObserverTest.hpp	(revision 8774c5c1ce2e91c27547acbca62ebdfe34d3880a)
@@ -17,5 +17,6 @@
 class CallObservable;
 class SuperObservable;
-class ObservableCollection;
+class ObservableSet;
+class ObservableMap;
 class BlockObservable;
 class NotificationObservable;
@@ -62,5 +63,6 @@
   SuperObservable *superObservable;
   NotificationObservable *notificationObservable;
-  ObservableCollection *collection;
+  ObservableSet *obsset;
+  ObservableMap *obsmap;
 
 };
