Index: /trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs	(revision 3627)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs	(revision 3628)
@@ -33,5 +33,5 @@
 namespace HeuristicLab.Core.Views {
   [View("CheckedItemCollection View")]
-  [Content(typeof(ICheckedItemCollection<>), false)]
+  [Content(typeof(ICheckedItemCollection<>), true)]
   [Content(typeof(CheckedItemCollection<>), true)]
   public partial class CheckedItemCollectionView<T> : ItemCollectionView<T> where T : class, IItem {
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs	(revision 3627)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs	(revision 3628)
@@ -37,5 +37,5 @@
   [View("CheckedItemList View")]
   [Content(typeof(CheckedItemList<>), true)]
-  [Content(typeof(ICheckedItemList<>), false)]
+  [Content(typeof(ICheckedItemList<>), true)]
   public partial class CheckedItemListView<T> : ItemListView<T> where T : class, IItem {
     public new ICheckedItemList<T> Content {
Index: /trunk/sources/HeuristicLab.Core/3.3/Collections/CheckedItemCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Collections/CheckedItemCollection.cs	(revision 3627)
+++ /trunk/sources/HeuristicLab.Core/3.3/Collections/CheckedItemCollection.cs	(revision 3628)
@@ -113,4 +113,12 @@
 
     /// <summary>
+    /// Creates a ReadOnlyCheckedItemCollection containing the same elements.
+    /// </summary>
+    /// <returns>A new ReadOnlyCheckedItemCollection containing the same elements.</returns>
+    public new ReadOnlyCheckedItemCollection<T> AsReadOnly() {
+      return new ReadOnlyCheckedItemCollection<T>(this);
+    }
+
+    /// <summary>
     /// Raised when the collection of items is reset.
     /// </summary>
Index: /trunk/sources/HeuristicLab.Core/3.3/Collections/CheckedItemList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Collections/CheckedItemList.cs	(revision 3627)
+++ /trunk/sources/HeuristicLab.Core/3.3/Collections/CheckedItemList.cs	(revision 3628)
@@ -149,4 +149,12 @@
 
     /// <summary>
+    /// Creates a ReadOnlyCheckedItemList containing the same elements.
+    /// </summary>
+    /// <returns>A new ReadOnlyCheckedItemList containing the same elements.</returns>
+    public new ReadOnlyCheckedItemList<T> AsReadOnly() {
+      return new ReadOnlyCheckedItemList<T>(this);
+    }
+
+    /// <summary>
     /// Raised after the list has been reset.
     /// </summary>
Index: /trunk/sources/HeuristicLab.Core/3.3/Collections/ReadOnlyCheckedItemCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Collections/ReadOnlyCheckedItemCollection.cs	(revision 3628)
+++ /trunk/sources/HeuristicLab.Core/3.3/Collections/ReadOnlyCheckedItemCollection.cs	(revision 3628)
@@ -0,0 +1,73 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core {
+  [StorableClass]
+  [Item("ReadOnlyCheckedItemCollection<T>", "Represents a read-only collection of checked items.")]
+  public class ReadOnlyCheckedItemCollection<T> : ReadOnlyItemCollection<T>, ICheckedItemCollection<T> where T : class, IItem {
+    private CheckedItemCollection<T> CheckedItemCollection {
+      get { return (CheckedItemCollection<T>)base.collection; }
+    }
+    
+    public ReadOnlyCheckedItemCollection() : base(new CheckedItemCollection<T>()) { }
+    public ReadOnlyCheckedItemCollection(ICheckedItemCollection<T> collection)
+      : base(collection) {
+      collection.CheckedItemsChanged += new CollectionItemsChangedEventHandler<T>(collection_CheckedItemsChanged);
+    }
+
+    [StorableConstructor]
+    protected ReadOnlyCheckedItemCollection(bool deserializing) : base(deserializing) { }
+
+    #region ReadOnlyCheckedItemCollection<T> Members
+    public event CollectionItemsChangedEventHandler<T> CheckedItemsChanged;
+    protected virtual void collection_CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<T> e) {
+      var handler = CheckedItemsChanged;
+      if (handler != null)
+        handler(this, e);
+    }
+    
+    public IEnumerable<T> CheckedItems {
+      get { return CheckedItemCollection.CheckedItems; }
+    }
+
+    public bool ItemChecked(T item) {
+      return CheckedItemCollection.ItemChecked(item);
+    }
+
+    public void SetItemCheckedState(T item, bool checkedState) {
+      CheckedItemCollection.SetItemCheckedState(item, checkedState);
+    }
+
+    public void Add(T item, bool checkedState) {
+      throw new NotSupportedException();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core/3.3/Collections/ReadOnlyCheckedItemList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Collections/ReadOnlyCheckedItemList.cs	(revision 3628)
+++ /trunk/sources/HeuristicLab.Core/3.3/Collections/ReadOnlyCheckedItemList.cs	(revision 3628)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core {
+  [StorableClass]
+  [Item("ReadOnlyCheckedItemList<T>", "Represents a read-only list of checked items.")]
+  public class ReadOnlyCheckedItemList<T> : ReadOnlyItemList<T>, ICheckedItemList<T> where T : class, IItem {
+    private CheckedItemList<T> CheckedItemList {
+      get { return (CheckedItemList<T>)base.list; }
+    }
+    
+    public ReadOnlyCheckedItemList() : base(new CheckedItemList<T>()) { }
+    public ReadOnlyCheckedItemList(ICheckedItemList<T> list) : base(list) {
+      list.CheckedItemsChanged += new CollectionItemsChangedEventHandler<IndexedItem<T>>(list_CheckedItemsChanged);
+    }
+
+    [StorableConstructor]
+    protected ReadOnlyCheckedItemList(bool deserializing) : base(deserializing) { }
+
+    #region ICheckedItemList<T> Members
+    public event CollectionItemsChangedEventHandler<IndexedItem<T>> CheckedItemsChanged;
+    protected virtual void list_CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      var handler = CheckedItemsChanged;
+      if (handler != null)
+        handler(this, e);
+    }
+    
+    public IEnumerable<IndexedItem<T>> CheckedItems {
+      get { return CheckedItemList.CheckedItems; }
+    }
+
+    public bool ItemChecked(T item) {
+      return CheckedItemList.ItemChecked(item);
+    }
+
+    public void SetItemCheckedState(T item, bool checkedState) {
+      CheckedItemList.SetItemCheckedState(item, checkedState);
+    }
+
+    public void Add(T item, bool checkedState) {
+      throw new NotSupportedException();
+    }
+
+    public void Insert(int index, T item, bool checkedState) {
+      throw new NotSupportedException();
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 3627)
+++ /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 3628)
@@ -104,4 +104,8 @@
     <Compile Include="Collections\CheckedItemCollection.cs" />
     <Compile Include="Collections\CheckedItemList.cs" />
+    <Compile Include="Collections\ReadOnlyCheckedItemCollection.cs" />
+    <Compile Include="Collections\ReadOnlyCheckedItemList.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Collections\ReadOnlyItemDictionary.cs" />
     <Compile Include="Collections\ItemDictionary.cs" />
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisProblemData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisProblemData.cs	(revision 3627)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisProblemData.cs	(revision 3628)
@@ -46,6 +46,6 @@
     }
 
-    public IValueParameter<CheckedItemList<StringValue>> InputVariablesParameter {
-      get { return (IValueParameter<CheckedItemList<StringValue>>)Parameters["InputVariables"]; }
+    public IValueParameter<ICheckedItemList<StringValue>> InputVariablesParameter {
+      get { return (IValueParameter<ICheckedItemList<StringValue>>)Parameters["InputVariables"]; }
     }
 
@@ -85,6 +85,6 @@
       }
     }
-    public CheckedItemList<StringValue> InputVariables {
-      get { return (CheckedItemList<StringValue>)InputVariablesParameter.Value; }
+    public ICheckedItemList<StringValue> InputVariables {
+      get { return (ICheckedItemList<StringValue>)InputVariablesParameter.Value; }
       set {
         if (value != InputVariables) {
@@ -140,5 +140,5 @@
       : base() {
       Parameters.Add(new ValueParameter<Dataset>("Dataset", new Dataset()));
-      Parameters.Add(new ValueParameter<CheckedItemList<StringValue>>("InputVariables", new CheckedItemList<StringValue>()));
+      Parameters.Add(new ValueParameter<ICheckedItemList<StringValue>>("InputVariables", new CheckedItemList<StringValue>()));
       Parameters.Add(new ConstrainedValueParameter<StringValue>("TargetVariable"));
       Parameters.Add(new ValueParameter<IntValue>("TrainingSamplesStart", new IntValue()));
@@ -329,5 +329,5 @@
         ((ConstrainedValueParameter<StringValue>)TargetVariableParameter).ValidValues.Add(variableName);
       TargetVariable = variableNames.First();
-      InputVariables = new CheckedItemList<StringValue>(variableNames);
+      InputVariables = new CheckedItemList<StringValue>(variableNames).AsReadOnly();
       foreach (var variableName in variableNames.Skip(1))
         InputVariables.SetItemCheckedState(variableName, true);
