Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs	(revision 7798)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs	(revision 7999)
@@ -29,5 +29,5 @@
   /// </summary>
   public interface IProblem : IParameterizedNamedItem {
-    IEnumerable<IOperator> Operators { get; }
+    IEnumerable<IItem> Operators { get; }
 
     event EventHandler OperatorsChanged;
Index: trunk/sources/HeuristicLab.Optimization/3.3/Problems/Problem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Problems/Problem.cs	(revision 7798)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Problems/Problem.cs	(revision 7999)
@@ -35,7 +35,6 @@
   public abstract class Problem : ParameterizedNamedItem, IProblem {
     private static readonly string OperatorsParameterName = "Operators";
-
-    public IFixedValueParameter<OperatorCollection> OperatorsParameter {
-      get { return (IFixedValueParameter<OperatorCollection>)Parameters[OperatorsParameterName]; }
+    public IFixedValueParameter<ItemCollection<IItem>> OperatorsParameter {
+      get { return (IFixedValueParameter<ItemCollection<IItem>>)Parameters[OperatorsParameterName]; }
     }
 
@@ -53,5 +52,5 @@
     protected Problem()
       : base() {
-      Parameters.Add(new FixedValueParameter<OperatorCollection>(OperatorsParameterName, "The operators that the problem provides to the algorithms.", new OperatorCollection(), false));
+      Parameters.Add(new FixedValueParameter<ItemCollection<IItem>>(OperatorsParameterName, "The operators and items that the problem provides to the algorithms.", new ItemCollection<IItem>(), false));
       OperatorsParameter.Hidden = true;
       RegisterEventHandlers();
@@ -60,11 +59,21 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (Parameters.ContainsKey(OperatorsParameterName) && Parameters[OperatorsParameterName] is FixedValueParameter<OperatorCollection>) {
+        OperatorCollection tmp = ((IFixedValueParameter<OperatorCollection>)Parameters[OperatorsParameterName]).Value;
+        Parameters.Remove(OperatorsParameterName);
+        Parameters.Add(new FixedValueParameter<ItemCollection<IItem>>(OperatorsParameterName, "The operators and items that the problem provides to the algorithms.", new ItemCollection<IItem>(tmp), false));        
+        OperatorsParameter.Hidden = true;
+      }
+      #endregion
+
       RegisterEventHandlers();
     }
 
     private void RegisterEventHandlers() {
-      Operators.ItemsAdded += new CollectionItemsChangedEventHandler<IOperator>(Operators_Changed);
-      Operators.ItemsRemoved += new CollectionItemsChangedEventHandler<IOperator>(Operators_Changed);
-      Operators.CollectionReset += new CollectionItemsChangedEventHandler<IOperator>(Operators_Changed);
+      Operators.ItemsAdded += new CollectionItemsChangedEventHandler<IItem>(Operators_Changed);
+      Operators.ItemsRemoved += new CollectionItemsChangedEventHandler<IItem>(Operators_Changed);
+      Operators.CollectionReset += new CollectionItemsChangedEventHandler<IItem>(Operators_Changed);
     }
 
@@ -72,10 +81,9 @@
     // BackwardsCompatibility3.3
     #region Backwards compatible code, remove with 3.4
-    [Storable(Name = "Operators")]
+    [Storable(Name = "Operators", AllowOneWay = true)]
     private IEnumerable<IOperator> StorableOperators {
-      get { return null; }
       set {
         if (!Parameters.ContainsKey(OperatorsParameterName)) {
-          Parameters.Add(new FixedValueParameter<OperatorCollection>(OperatorsParameterName, "The operators that the problem provides to the algorithms.", new OperatorCollection(value), false));
+          Parameters.Add(new FixedValueParameter<ItemCollection<IItem>>(OperatorsParameterName, "The operators and items that the problem provides to the algorithms.", new ItemCollection<IItem>(value), false));
           OperatorsParameter.Hidden = true;
         }
@@ -83,10 +91,10 @@
     }
     #endregion
-    protected OperatorCollection Operators {
+    protected ItemCollection<IItem> Operators {
       get {
         // BackwardsCompatibility3.3
         #region Backwards compatible code, remove with 3.4
         if (!Parameters.ContainsKey(OperatorsParameterName)) {
-          Parameters.Add(new FixedValueParameter<OperatorCollection>(OperatorsParameterName, "The operators that the problem provides to the algorithms.", new OperatorCollection(), false));
+          Parameters.Add(new FixedValueParameter<ItemCollection<IItem>>(OperatorsParameterName, "The operators and items that the problem provides to the algorithms.", new ItemCollection<IItem>(), false));
           OperatorsParameter.Hidden = true;
         }
@@ -95,5 +103,5 @@
       }
     }
-    IEnumerable<IOperator> IProblem.Operators { get { return Operators; } }
+    IEnumerable<IItem> IProblem.Operators { get { return Operators; } }
     #endregion
 
Index: trunk/sources/HeuristicLab.Optimization/3.3/Problems/UserDefinedProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Problems/UserDefinedProblem.cs	(revision 7798)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Problems/UserDefinedProblem.cs	(revision 7999)
@@ -81,6 +81,6 @@
       get { return (OptionalValueParameter<IScope>)Parameters["BestKnownSolution"]; }
     }
-    public ValueParameter<ItemList<IOperator>> OperatorsParameter {
-      get { return (ValueParameter<ItemList<IOperator>>)Parameters["Operators"]; }
+    public ValueParameter<ItemList<IItem>> OperatorsParameter {
+      get { return (ValueParameter<ItemList<IItem>>)Parameters["Operators"]; }
     }
     #endregion
@@ -112,5 +112,5 @@
       set { BestKnownQualityParameter.Value = value; }
     }
-    public IEnumerable<IOperator> Operators {
+    public IEnumerable<IItem> Operators {
       get { return OperatorsParameter.Value; }
     }
@@ -121,4 +121,13 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (Parameters.ContainsKey("Operators") && Parameters["Operators"] is ValueParameter<ItemList<IOperator>>) {
+        ItemList<IOperator> tmp = ((ValueParameter<ItemList<IOperator>>)Parameters["Operators"]).Value;
+        Parameters.Remove("Operators");
+        Parameters.Add(new ValueParameter<ItemList<IItem>>("Operators", "The operators and items that the problem provides to the algorithms.", new ItemList<IItem>(tmp), false));
+      }
+      #endregion
+
       RegisterEventHandlers();
     }
@@ -130,5 +139,5 @@
       Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this problem."));
       Parameters.Add(new OptionalValueParameter<IScope>("BestKnownSolution", "The best known solution for this external evaluation problem."));
-      Parameters.Add(new ValueParameter<ItemList<IOperator>>("Operators", "The operators that are passed to the algorithm.", new ItemList<IOperator>()));
+      Parameters.Add(new ValueParameter<ItemList<IItem>>("Operators", "The operators and items that the problem provides to the algorithms.", new ItemList<IItem>()));
 
       RegisterEventHandlers();
@@ -200,7 +209,7 @@
         Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
       OperatorsParameter.ValueChanged += new EventHandler(OperatorsParameter_ValueChanged);
-      OperatorsParameter.Value.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(OperatorsParameter_Value_ItemsAdded);
-      OperatorsParameter.Value.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(OperatorsParameter_Value_ItemsRemoved);
-      OperatorsParameter.Value.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(OperatorsParameter_Value_CollectionReset);
+      OperatorsParameter.Value.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IItem>>(OperatorsParameter_Value_ItemsAdded);
+      OperatorsParameter.Value.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IItem>>(OperatorsParameter_Value_ItemsRemoved);
+      OperatorsParameter.Value.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IItem>>(OperatorsParameter_Value_CollectionReset);
     }
 
@@ -209,5 +218,5 @@
       if (Evaluator != null) {
         string qualityName = Evaluator.QualityParameter.ActualName;
-        foreach (IOperator op in OperatorsParameter.Value) {
+        foreach (IOperator op in OperatorsParameter.Value.OfType<IOperator>()) {
           foreach (ILookupParameter<DoubleValue> param in op.Parameters.OfType<ILookupParameter<DoubleValue>>()) {
             if (param.Name.Equals("Quality")) param.ActualName = qualityName;
