Index: branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/IDiscretizer.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/IDiscretizer.cs	(revision 9342)
+++ branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/IDiscretizer.cs	(revision 9392)
@@ -25,4 +25,5 @@
 namespace HeuristicLab.Optimization.Operators.LCS {
   public interface IDiscretizer : IItem {
+    IEnumerable<double> DiscretizeValues(string attribute, IEnumerable<double> values);
     int NumberOfMicroIntervals(string attribute);
     IEnumerable<double> GetCutPoints(string attribute);
Index: branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/InitializeDiscretizersOperator.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/InitializeDiscretizersOperator.cs	(revision 9392)
+++ branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/InitializeDiscretizersOperator.cs	(revision 9392)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Optimization.Operators.LCS {
+  [Item("InitializeDiscretizersOperator", "Description missing")]
+  [StorableClass]
+  public class InitializeDiscretizersOperator : SingleSuccessorOperator {
+
+    #region Parameter Properties
+    public ILookupParameter<IGAssistNichesProblemData> ProblemDataParameter {
+      get { return (ILookupParameter<IGAssistNichesProblemData>)Parameters["ProblemData"]; }
+    }
+    public ILookupParameter<ItemCollection<IDiscretizer>> DiscretizersParameter {
+      get { return (ILookupParameter<ItemCollection<IDiscretizer>>)Parameters["Discretizers"]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected InitializeDiscretizersOperator(bool deserializing) : base(deserializing) { }
+    protected InitializeDiscretizersOperator(InitializeDiscretizersOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public InitializeDiscretizersOperator()
+      : base() {
+      Parameters.Add(new LookupParameter<IGAssistNichesProblemData>("ProblemData", ""));
+      Parameters.Add(new LookupParameter<ItemCollection<IDiscretizer>>("Discretizers", ""));
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new InitializeDiscretizersOperator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      var dataset = ProblemDataParameter.ActualValue.Dataset;
+      var trainingIndizes = ProblemDataParameter.ActualValue.TrainingIndices;
+      var conditionVariables = ProblemDataParameter.ActualValue.ConditionVariables.CheckedItems.Select(x => x.Value.Value);
+
+      foreach (var variable in dataset.DoubleVariables.Where(x => conditionVariables.Contains(x))) {
+        var values = dataset.GetDoubleValues(variable, trainingIndizes);
+        foreach (var discretizer in DiscretizersParameter.ActualValue) {
+          discretizer.DiscretizeValues(variable, values);
+        }
+      }
+
+      return base.Apply();
+    }
+  }
+}
Index: branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/UniformWidthDiscretizer.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/UniformWidthDiscretizer.cs	(revision 9342)
+++ branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Discretizer/UniformWidthDiscretizer.cs	(revision 9392)
@@ -20,5 +20,4 @@
 #endregion
 
-using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -42,8 +41,9 @@
     protected UniformWidthDiscretizer(UniformWidthDiscretizer original, Cloner cloner)
       : base(original, cloner) {
+      this.bins = original.bins;
+      this.variableMicroItervals = new Dictionary<string, IList<double>>(original.variableMicroItervals);
     }
     public UniformWidthDiscretizer()
-      : base() {
-      bins = 5;
+      : this(5) {
     }
     public UniformWidthDiscretizer(int bins)
@@ -60,9 +60,5 @@
     }
 
-    public IEnumerable<double> discretizeValues(string attribute, IEnumerable<double> values) {
-      if (variableMicroItervals.ContainsKey(attribute)) {
-        throw new ArgumentException("Values of attribute " + attribute + " are already set.");
-      }
-
+    public IEnumerable<double> DiscretizeValues(string attribute, IEnumerable<double> values) {
       double min = values.Min();
       double max = values.Max();
