Index: trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableArray.cs
===================================================================
--- trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableArray.cs	(revision 3018)
+++ trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableArray.cs	(revision 3019)
@@ -33,13 +33,4 @@
     private IObservableArray<T> array;
 
-    #region Persistence
-    private ReadOnlyObservableArray() { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void PostDeserializationHook() {
-      RegisterEvents();
-    }
-    #endregion
-
     #region Properties
     public int Length {
@@ -62,18 +53,10 @@
     #endregion
 
-    
-
     #region Constructors
+    protected ReadOnlyObservableArray() { }
     public ReadOnlyObservableArray(IObservableArray<T> array) {
       if (array == null) throw new ArgumentNullException();
       this.array = array;
       RegisterEvents();
-    }
-
-    private void RegisterEvents() {
-      array.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<T>>(array_ItemsReplaced);
-      array.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(array_ItemsMoved);
-      array.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<T>>(array_CollectionReset);
-      array.PropertyChanged += new PropertyChangedEventHandler(array_PropertyChanged);
     }
     #endregion
@@ -126,4 +109,12 @@
 
     #region Events
+    [StorableHook(HookType.AfterDeserialization)]
+    protected void RegisterEvents() {
+      array.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<T>>(array_ItemsReplaced);
+      array.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(array_ItemsMoved);
+      array.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<T>>(array_CollectionReset);
+      array.PropertyChanged += new PropertyChangedEventHandler(array_PropertyChanged);
+    }
+
     [field: NonSerialized]
     public event CollectionItemsChangedEventHandler<IndexedItem<T>> ItemsReplaced;
Index: trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableCollection.cs
===================================================================
--- trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableCollection.cs	(revision 3018)
+++ trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableCollection.cs	(revision 3019)
@@ -33,13 +33,4 @@
     private IObservableCollection<T> collection;
 
-    #region persistence
-    private ReadOnlyObservableCollection() { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void PostDeserializationHook() {
-      RegisterEvents();
-    }
-    #endregion
-
     #region Properties
     public int Count {
@@ -52,15 +43,9 @@
 
     #region Constructors
+    protected ReadOnlyObservableCollection() { }
     public ReadOnlyObservableCollection(IObservableCollection<T> collection) {
       if (collection == null) throw new ArgumentNullException();
       this.collection = collection;
       RegisterEvents();
-    }
-
-    private void RegisterEvents() {
-      collection.ItemsAdded += new CollectionItemsChangedEventHandler<T>(collection_ItemsAdded);
-      collection.ItemsRemoved += new CollectionItemsChangedEventHandler<T>(collection_ItemsRemoved);
-      collection.CollectionReset += new CollectionItemsChangedEventHandler<T>(collection_CollectionReset);
-      collection.PropertyChanged += new PropertyChangedEventHandler(collection_PropertyChanged);
     }
     #endregion
@@ -102,4 +87,12 @@
 
     #region Events
+    [StorableHook(HookType.AfterDeserialization)]
+    protected void RegisterEvents() {
+      collection.ItemsAdded += new CollectionItemsChangedEventHandler<T>(collection_ItemsAdded);
+      collection.ItemsRemoved += new CollectionItemsChangedEventHandler<T>(collection_ItemsRemoved);
+      collection.CollectionReset += new CollectionItemsChangedEventHandler<T>(collection_CollectionReset);
+      collection.PropertyChanged += new PropertyChangedEventHandler(collection_PropertyChanged);
+    }
+
     [field: NonSerialized]
     public event CollectionItemsChangedEventHandler<T> ItemsAdded;
Index: trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableDictionary.cs
===================================================================
--- trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableDictionary.cs	(revision 3018)
+++ trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableDictionary.cs	(revision 3019)
@@ -33,13 +33,4 @@
     private IObservableDictionary<TKey, TValue> dict;
 
-    #region persistence
-    private ReadOnlyObservableDictionary() { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void PostDeserizlationHook() {
-      RegisterEvents();
-    }
-    #endregion
-
     #region Properties
     public ICollection<TKey> Keys {
@@ -66,16 +57,9 @@
 
     #region Constructors
+    protected ReadOnlyObservableDictionary() { }
     public ReadOnlyObservableDictionary(IObservableDictionary<TKey, TValue> dictionary) {
       if (dictionary == null) throw new ArgumentNullException();
       dict = dictionary;
       RegisterEvents();
-    }
-
-    private void RegisterEvents() {
-      dict.ItemsAdded += new CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>>(dict_ItemsAdded);
-      dict.ItemsRemoved += new CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>>(dict_ItemsRemoved);
-      dict.ItemsReplaced += new CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>>(dict_ItemsReplaced);
-      dict.CollectionReset += new CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>>(dict_CollectionReset);
-      dict.PropertyChanged += new PropertyChangedEventHandler(dict_PropertyChanged);
     }
     #endregion
@@ -130,4 +114,13 @@
 
     #region Events
+    [StorableHook(HookType.AfterDeserialization)]
+    protected void RegisterEvents() {
+      dict.ItemsAdded += new CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>>(dict_ItemsAdded);
+      dict.ItemsRemoved += new CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>>(dict_ItemsRemoved);
+      dict.ItemsReplaced += new CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>>(dict_ItemsReplaced);
+      dict.CollectionReset += new CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>>(dict_CollectionReset);
+      dict.PropertyChanged += new PropertyChangedEventHandler(dict_PropertyChanged);
+    }
+
     [field: NonSerialized]
     public event CollectionItemsChangedEventHandler<KeyValuePair<TKey, TValue>> ItemsAdded;
Index: trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableKeyedCollection.cs
===================================================================
--- trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableKeyedCollection.cs	(revision 3018)
+++ trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableKeyedCollection.cs	(revision 3019)
@@ -33,13 +33,4 @@
     private IObservableKeyedCollection<TKey, TItem> collection;
 
-    #region persistence
-    private ReadOnlyObservableKeyedCollection() { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void PostDeserizlationHook() {
-      RegisterEvents();
-    }
-    #endregion
-
     #region Properties
     public int Count {
@@ -58,16 +49,9 @@
 
     #region Constructors
+    protected ReadOnlyObservableKeyedCollection() { }
     public ReadOnlyObservableKeyedCollection(IObservableKeyedCollection<TKey, TItem> collection) {
       if (collection == null) throw new ArgumentNullException();
       this.collection = collection;
       RegisterEvents();
-    }
-
-    private void RegisterEvents() {
-      collection.ItemsAdded += new CollectionItemsChangedEventHandler<TItem>(collection_ItemsAdded);
-      collection.ItemsRemoved += new CollectionItemsChangedEventHandler<TItem>(collection_ItemsRemoved);
-      collection.ItemsReplaced += new CollectionItemsChangedEventHandler<TItem>(collection_ItemsReplaced);
-      collection.CollectionReset += new CollectionItemsChangedEventHandler<TItem>(collection_CollectionReset);
-      collection.PropertyChanged += new PropertyChangedEventHandler(collection_PropertyChanged);
     }
     #endregion
@@ -119,4 +103,13 @@
 
     #region Events
+    [StorableHook(HookType.AfterDeserialization)]
+    protected void RegisterEvents() {
+      collection.ItemsAdded += new CollectionItemsChangedEventHandler<TItem>(collection_ItemsAdded);
+      collection.ItemsRemoved += new CollectionItemsChangedEventHandler<TItem>(collection_ItemsRemoved);
+      collection.ItemsReplaced += new CollectionItemsChangedEventHandler<TItem>(collection_ItemsReplaced);
+      collection.CollectionReset += new CollectionItemsChangedEventHandler<TItem>(collection_CollectionReset);
+      collection.PropertyChanged += new PropertyChangedEventHandler(collection_PropertyChanged);
+    }
+
     [field: NonSerialized]
     public event CollectionItemsChangedEventHandler<TItem> ItemsAdded;
Index: trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableList.cs
===================================================================
--- trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableList.cs	(revision 3018)
+++ trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableList.cs	(revision 3019)
@@ -33,13 +33,4 @@
     private IObservableList<T> list;
 
-    #region persistence
-    private ReadOnlyObservableList() { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void PostDeserizlationHook() {
-      RegisterEvents();
-    }
-    #endregion
-
     #region Properties
     public int Count {
@@ -60,4 +51,5 @@
 
     #region Constructors
+    protected ReadOnlyObservableList() { }
     public ReadOnlyObservableList(IObservableList<T> list) {
       if (list == null) throw new ArgumentNullException();
@@ -65,6 +57,55 @@
       RegisterEvents();
     }
-
-    private void RegisterEvents() {
+    #endregion
+
+    #region Access
+    public bool Contains(T item) {
+      return list.Contains(item);
+    }
+
+    public int IndexOf(T item) {
+      return list.IndexOf(item);
+    }
+    #endregion
+
+    #region Manipulation
+    void ICollection<T>.Add(T item) {
+      throw new NotSupportedException();
+    }
+
+    void IList<T>.Insert(int index, T item) {
+      throw new NotSupportedException();
+    }
+
+    bool ICollection<T>.Remove(T item) {
+      throw new NotSupportedException();
+    }
+    void IList<T>.RemoveAt(int index) {
+      throw new NotSupportedException();
+    }
+
+    void ICollection<T>.Clear() {
+      throw new NotSupportedException();
+    }
+    #endregion
+
+    #region Conversion
+    public void CopyTo(T[] array, int arrayIndex) {
+      list.CopyTo(array, arrayIndex);
+    }
+    #endregion
+
+    #region Enumeration
+    public IEnumerator<T> GetEnumerator() {
+      return ((ICollection<T>)list).GetEnumerator();
+    }
+    IEnumerator IEnumerable.GetEnumerator() {
+      return ((IEnumerable)list).GetEnumerator();
+    }
+    #endregion
+
+    #region Events
+    [StorableHook(HookType.AfterDeserialization)]
+    protected void RegisterEvents() {
       list.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<T>>(list_ItemsAdded);
       ((IObservableCollection<T>)list).ItemsAdded += new CollectionItemsChangedEventHandler<T>(list_ItemsAdded);
@@ -77,53 +118,5 @@
       list.PropertyChanged += new PropertyChangedEventHandler(list_PropertyChanged);
     }
-    #endregion
-
-    #region Access
-    public bool Contains(T item) {
-      return list.Contains(item);
-    }
-
-    public int IndexOf(T item) {
-      return list.IndexOf(item);
-    }
-    #endregion
-
-    #region Manipulation
-    void ICollection<T>.Add(T item) {
-      throw new NotSupportedException();
-    }
-
-    void IList<T>.Insert(int index, T item) {
-      throw new NotSupportedException();
-    }
-
-    bool ICollection<T>.Remove(T item) {
-      throw new NotSupportedException();
-    }
-    void IList<T>.RemoveAt(int index) {
-      throw new NotSupportedException();
-    }
-
-    void ICollection<T>.Clear() {
-      throw new NotSupportedException();
-    }
-    #endregion
-
-    #region Conversion
-    public void CopyTo(T[] array, int arrayIndex) {
-      list.CopyTo(array, arrayIndex);
-    }
-    #endregion
-
-    #region Enumeration
-    public IEnumerator<T> GetEnumerator() {
-      return ((ICollection<T>)list).GetEnumerator();
-    }
-    IEnumerator IEnumerable.GetEnumerator() {
-      return ((IEnumerable)list).GetEnumerator();
-    }
-    #endregion
-
-    #region Events
+
     [field: NonSerialized]
     public event CollectionItemsChangedEventHandler<IndexedItem<T>> ItemsAdded;
Index: trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableSet.cs
===================================================================
--- trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableSet.cs	(revision 3018)
+++ trunk/sources/HeuristicLab.Collections/3.3/ReadOnlyObservableSet.cs	(revision 3019)
@@ -33,13 +33,4 @@
     private IObservableSet<T> set;
 
-    #region persistence
-    private ReadOnlyObservableSet() { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void PostDeserizlationHook() {
-      RegisterEvents();
-    }
-    #endregion
-
     #region Properties
     public int Count {
@@ -52,15 +43,9 @@
 
     #region Constructors
+    protected ReadOnlyObservableSet() { }
     public ReadOnlyObservableSet(IObservableSet<T> set) {
       if (set == null) throw new ArgumentNullException();
       this.set = set;
       RegisterEvents();
-    }
-
-    private void RegisterEvents() {
-      set.ItemsAdded += new CollectionItemsChangedEventHandler<T>(set_ItemsAdded);
-      set.ItemsRemoved += new CollectionItemsChangedEventHandler<T>(set_ItemsRemoved);
-      set.CollectionReset += new CollectionItemsChangedEventHandler<T>(set_CollectionReset);
-      set.PropertyChanged += new PropertyChangedEventHandler(set_PropertyChanged);
     }
     #endregion
@@ -143,4 +128,12 @@
 
     #region Events
+    [StorableHook(HookType.AfterDeserialization)]
+    protected void RegisterEvents() {
+      set.ItemsAdded += new CollectionItemsChangedEventHandler<T>(set_ItemsAdded);
+      set.ItemsRemoved += new CollectionItemsChangedEventHandler<T>(set_ItemsRemoved);
+      set.CollectionReset += new CollectionItemsChangedEventHandler<T>(set_CollectionReset);
+      set.PropertyChanged += new PropertyChangedEventHandler(set_PropertyChanged);
+    }
+
     [field: NonSerialized]
     public event CollectionItemsChangedEventHandler<T> ItemsAdded;
