Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableEvaluationImpactCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableEvaluationImpactCalculator.cs	(revision 2161)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableEvaluationImpactCalculator.cs	(revision 2165)
@@ -41,5 +41,5 @@
 
 
-    protected override double[] GetOutputs(IScope scope, Dataset dataset, int targetVariable, ItemList<IntData> allowedFeatures, int start, int end) {
+    protected override double[] GetOutputs(IScope scope, Dataset dataset, int targetVariable, int start, int end) {
       ITreeEvaluator evaluator = GetVariableValue<ITreeEvaluator>("TreeEvaluator", scope, true);
       IFunctionTree tree = GetVariableValue<IFunctionTree>("FunctionTree", scope, true);
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableQualityImpactCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableQualityImpactCalculator.cs	(revision 2161)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableQualityImpactCalculator.cs	(revision 2165)
@@ -40,5 +40,5 @@
     }
 
-    protected override double CalculateQuality(IScope scope, Dataset dataset, int targetVariable, ItemList<IntData> allowedFeatures, int start, int end) {
+    protected override double CalculateQuality(IScope scope, Dataset dataset, int targetVariable, int start, int end) {
       ITreeEvaluator evaluator = GetVariableValue<ITreeEvaluator>("TreeEvaluator", scope, true);
       IFunctionTree tree = GetVariableValue<IFunctionTree>("FunctionTree", scope, true);
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/FunctionLibraryInjector.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/FunctionLibraryInjector.cs	(revision 2161)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/FunctionLibraryInjector.cs	(revision 2165)
@@ -32,7 +32,7 @@
 namespace HeuristicLab.GP.StructureIdentification {
   public class FunctionLibraryInjector : OperatorBase {
+    private const string NUMBEROFINPUTVARIABLES = "NumberOfInputVariables";
     private const string FUNCTIONLIBRARY = "FunctionLibrary";
     private const string TARGETVARIABLE = "TargetVariable";
-    private const string ALLOWEDFEATURES = "AllowedFeatures";
     private const string MINTIMEOFFSET = "MinTimeOffset";
     private const string MAXTIMEOFFSET = "MaxTimeOffset";
@@ -70,8 +70,8 @@
     public FunctionLibraryInjector()
       : base() {
+      AddVariableInfo(new VariableInfo(NUMBEROFINPUTVARIABLES, "The number of available input variables", typeof(IntData), VariableKind.In));
       AddVariableInfo(new VariableInfo(TARGETVARIABLE, "The target variable", typeof(IntData), VariableKind.In));
-      AddVariableInfo(new VariableInfo(ALLOWEDFEATURES, "List of indexes of allowed features", typeof(ItemList<IntData>), VariableKind.In));
-      AddVariableInfo(new Core.VariableInfo(MINTIMEOFFSET, "Minimal time offset for all features", typeof(IntData), Core.VariableKind.In));
-      AddVariableInfo(new Core.VariableInfo(MAXTIMEOFFSET, "Maximal time offset for all feature", typeof(IntData), Core.VariableKind.In));
+      AddVariableInfo(new VariableInfo(MINTIMEOFFSET, "Minimal time offset for all features", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(MAXTIMEOFFSET, "Maximal time offset for all feature", typeof(IntData), VariableKind.In));
       AddVariableInfo(new VariableInfo(FUNCTIONLIBRARY, "Preconfigured default operator library", typeof(GPOperatorLibrary), VariableKind.New));
 
@@ -111,6 +111,5 @@
       StructId.Variable variable;
       GPOperatorLibrary operatorLibrary;
-
-      ItemList<IntData> allowedFeatures = GetVariableValue<ItemList<IntData>>(ALLOWEDFEATURES, scope, true);
+      int nInputVariables = GetVariableValue<IntData>(NUMBEROFINPUTVARIABLES, scope, true).Data;
       int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
 
@@ -226,11 +225,6 @@
       ConditionalAddOperator(XOR_ALLOWED, operatorLibrary, xor);
 
-      int[] allowedIndexes = new int[allowedFeatures.Count];
-      for (int i = 0; i < allowedIndexes.Length; i++) {
-        allowedIndexes[i] = allowedFeatures[i].Data;
-      }
-
-      variable.SetConstraints(allowedIndexes, minTimeOffset, maxTimeOffset);
-      differential.SetConstraints(allowedIndexes, minTimeOffset, maxTimeOffset);
+      variable.SetConstraints(1, nInputVariables, minTimeOffset, maxTimeOffset);
+      differential.SetConstraints(1, nInputVariables, minTimeOffset, maxTimeOffset);
 
       scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(FUNCTIONLIBRARY), operatorLibrary));
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Variable.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Variable.cs	(revision 2161)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Variable.cs	(revision 2165)
@@ -154,53 +154,28 @@
     }
 
-    public void SetConstraints(int[] allowedIndexes, int minSampleOffset, int maxSampleOffset) {
+    public void SetConstraints(int minInputIndex, int maxInputIndex, int minSampleOffset, int maxSampleOffset) {
       ConstrainedIntData offset = GetVariableValue<ConstrainedIntData>(OFFSET, null, false);
-      IntBoundedConstraint rangeConstraint = new IntBoundedConstraint();
+      IntBoundedConstraint offsetConstraint = new IntBoundedConstraint();
       this.minOffset = minSampleOffset;
       this.maxOffset = maxSampleOffset;
-      rangeConstraint.LowerBound = minSampleOffset;
-      rangeConstraint.LowerBoundEnabled = true;
-      rangeConstraint.LowerBoundIncluded = true;
-      rangeConstraint.UpperBound = maxSampleOffset;
-      rangeConstraint.UpperBoundEnabled = true;
-      rangeConstraint.UpperBoundIncluded = true;
-      offset.AddConstraint(rangeConstraint);
+      offsetConstraint.LowerBound = minSampleOffset;
+      offsetConstraint.LowerBoundEnabled = true;
+      offsetConstraint.LowerBoundIncluded = true;
+      offsetConstraint.UpperBound = maxSampleOffset;
+      offsetConstraint.UpperBoundEnabled = true;
+      offsetConstraint.UpperBoundIncluded = true;
+      offset.AddConstraint(offsetConstraint);
 
       ConstrainedIntData index = GetVariableValue<ConstrainedIntData>(INDEX, null, false);
-      Array.Sort(allowedIndexes);
-      minIndex = allowedIndexes[0]; maxIndex = allowedIndexes[allowedIndexes.Length - 1];
-      List<IConstraint> constraints = new List<IConstraint>();
-      int start = allowedIndexes[0];
-      int prev = start;
-      for(int i = 1; i < allowedIndexes.Length; i++) {
-        if(allowedIndexes[i] != prev + 1) {
-          IntBoundedConstraint lastRange = new IntBoundedConstraint();
-          lastRange.LowerBound = start;
-          lastRange.LowerBoundEnabled = true;
-          lastRange.LowerBoundIncluded = true;
-          lastRange.UpperBound = prev;
-          lastRange.UpperBoundEnabled = true;
-          lastRange.UpperBoundIncluded = true;
-          constraints.Add(lastRange);
-          start = allowedIndexes[i];
-          prev = start;
-        }
-        prev = allowedIndexes[i];
-      }
-      IntBoundedConstraint range = new IntBoundedConstraint();
-      range.LowerBound = start;
-      range.LowerBoundEnabled = true;
-      range.LowerBoundIncluded = true;
-      range.UpperBound = prev;
-      range.UpperBoundEnabled = true;
-      range.UpperBoundIncluded = true;
-      constraints.Add(range);
-      if(constraints.Count > 1) {
-        OrConstraint or = new OrConstraint();
-        foreach(IConstraint c in constraints) or.Clauses.Add(c);
-        index.AddConstraint(or);
-      } else {
-        index.AddConstraint(constraints[0]);
-      }
+      IntBoundedConstraint indexConstraint = new IntBoundedConstraint();
+      minIndex = minInputIndex;
+      maxIndex = maxInputIndex;
+      indexConstraint.LowerBound = minInputIndex;
+      indexConstraint.LowerBoundEnabled = true;
+      indexConstraint.LowerBoundIncluded = true;
+      indexConstraint.UpperBound = maxInputIndex;
+      indexConstraint.UpperBoundEnabled = true;
+      indexConstraint.UpperBoundIncluded = true;
+      index.AddConstraint(indexConstraint);
 
       SetupInitialization();
