Index: trunk/sources/HeuristicLab.Selection/3.3/BestSelector.cs
===================================================================
--- trunk/sources/HeuristicLab.Selection/3.3/BestSelector.cs	(revision 7990)
+++ trunk/sources/HeuristicLab.Selection/3.3/BestSelector.cs	(revision 7995)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -54,5 +55,5 @@
 
       // create a list for each scope that contains the scope's index in the original scope list
-      var temp = qualities.Select((x, index) => new { index, x.Value });
+      var temp = qualities.Where(x => IsValidQuality(x.Value)).Select((x, index) => new { index, x.Value });
       if (maximization)
         temp = temp.OrderByDescending(x => x.Value);
@@ -60,4 +61,10 @@
         temp = temp.OrderBy(x => x.Value);
       var list = temp.ToList();
+
+      //check if list with indexes is as long as the original scope list
+      //otherwise invalid quality values were filtered
+      if (list.Count != scopes.Count) {
+        throw new ArgumentException("The scopes contain invalid quality values (either infinity or double.NaN) on which the selector cannot operate.");
+      }
 
       if (copy) {
Index: trunk/sources/HeuristicLab.Selection/3.3/GeneralizedRankSelector.cs
===================================================================
--- trunk/sources/HeuristicLab.Selection/3.3/GeneralizedRankSelector.cs	(revision 7990)
+++ trunk/sources/HeuristicLab.Selection/3.3/GeneralizedRankSelector.cs	(revision 7995)
@@ -63,6 +63,12 @@
       double pressure = PressureParameter.ActualValue.Value;
 
-      var ordered = qualities.Select((x, index) => new KeyValuePair<int, double>(index, x.Value)).OrderBy(x => x.Value).ToList();
+      var ordered = qualities.Where(x => IsValidQuality(x.Value)).Select((x, index) => new KeyValuePair<int, double>(index, x.Value)).OrderBy(x => x.Value).ToList();
       if (maximization) ordered.Reverse();
+
+      //check if list with indexes is as long as the original scope list
+      //otherwise invalid quality values were filtered
+      if (ordered.Count != scopes.Count) {
+        throw new ArgumentException("The scopes contain invalid quality values (either infinity or double.NaN) on which the selector cannot operate.");
+      }
 
       int m = scopes.Count;
Index: trunk/sources/HeuristicLab.Selection/3.3/LinearRankSelector.cs
===================================================================
--- trunk/sources/HeuristicLab.Selection/3.3/LinearRankSelector.cs	(revision 7990)
+++ trunk/sources/HeuristicLab.Selection/3.3/LinearRankSelector.cs	(revision 7995)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -54,5 +55,5 @@
 
       // create a list for each scope that contains the scope's index in the original scope list and its lots
-      var temp = qualities.Select((x, index) => new { index, x.Value });
+      var temp = qualities.Where(x => IsValidQuality(x.Value)).Select((x, index) => new { index, x.Value });
       if (maximization)
         temp = temp.OrderBy(x => x.Value);
@@ -60,4 +61,10 @@
         temp = temp.OrderByDescending(x => x.Value);
       var list = temp.Select((x, index) => new { x.index, lots = index + 1 }).ToList();
+
+      //check if list with indexes is as long as the original scope list
+      //otherwise invalid quality values were filtered
+      if (list.Count != scopes.Count) {
+        throw new ArgumentException("The scopes contain invalid quality values (either infinity or double.NaN) on which the selector cannot operate.");
+      }
 
       int lotSum = list.Count * (list.Count + 1) / 2;
Index: trunk/sources/HeuristicLab.Selection/3.3/ProportionalSelector.cs
===================================================================
--- trunk/sources/HeuristicLab.Selection/3.3/ProportionalSelector.cs	(revision 7990)
+++ trunk/sources/HeuristicLab.Selection/3.3/ProportionalSelector.cs	(revision 7995)
@@ -69,4 +69,10 @@
       // prepare qualities for proportional selection
       var qualities = QualityParameter.ActualValue.Select(x => x.Value);
+      //check if list with indexes is as long as the original scope list
+      //otherwise invalid quality values were filtered
+      if (!qualities.All(IsValidQuality)) {
+        throw new ArgumentException("The scopes contain invalid quality values (either infinity or double.NaN) on which the selector cannot operate.");
+      }
+
       double minQuality = qualities.Min();
       double maxQuality = qualities.Max();
Index: trunk/sources/HeuristicLab.Selection/3.3/SingleObjectiveSelector.cs
===================================================================
--- trunk/sources/HeuristicLab.Selection/3.3/SingleObjectiveSelector.cs	(revision 7990)
+++ trunk/sources/HeuristicLab.Selection/3.3/SingleObjectiveSelector.cs	(revision 7995)
@@ -63,4 +63,8 @@
       CopySelectedParameter.Hidden = true;
     }
+
+    protected bool IsValidQuality(double quality) {
+      return !double.IsNaN(quality) && !double.IsInfinity(quality);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Selection/3.3/TournamentSelector.cs
===================================================================
--- trunk/sources/HeuristicLab.Selection/3.3/TournamentSelector.cs	(revision 7990)
+++ trunk/sources/HeuristicLab.Selection/3.3/TournamentSelector.cs	(revision 7995)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -57,7 +58,13 @@
       IRandom random = RandomParameter.ActualValue;
       bool maximization = MaximizationParameter.ActualValue.Value;
-      List<double> qualities = QualityParameter.ActualValue.Select(x => x.Value).ToList();
+      List<double> qualities = QualityParameter.ActualValue.Where(x => IsValidQuality(x.Value)).Select(x => x.Value).ToList();
       int groupSize = GroupSizeParameter.ActualValue.Value;
       IScope[] selected = new IScope[count];
+
+      //check if list with indexes is as long as the original scope list
+      //otherwise invalid quality values were filtered
+      if (qualities.Count != scopes.Count) {
+        throw new ArgumentException("The scopes contain invalid quality values (either infinity or double.NaN) on which the selector cannot operate.");
+      }
 
       for (int i = 0; i < count; i++) {
Index: trunk/sources/HeuristicLab.Selection/3.3/WorstSelector.cs
===================================================================
--- trunk/sources/HeuristicLab.Selection/3.3/WorstSelector.cs	(revision 7990)
+++ trunk/sources/HeuristicLab.Selection/3.3/WorstSelector.cs	(revision 7995)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -51,5 +52,5 @@
 
       // create a list for each scope that contains the scope's index in the original scope list
-      var temp = qualities.Select((x, index) => new { index, x.Value });
+      var temp = qualities.Where(x => IsValidQuality(x.Value)).Select((x, index) => new { index, x.Value });
       if (maximization)
         temp = temp.OrderBy(x => x.Value);
@@ -57,4 +58,10 @@
         temp = temp.OrderByDescending(x => x.Value);
       var list = temp.ToList();
+
+      //check if list with indexes is as long as the original scope list
+      //otherwise invalid quality values were filtered
+      if (list.Count != scopes.Count) {
+        throw new ArgumentException("The scopes contain invalid quality values (either infinity or double.NaN) on which the selector cannot operate.");
+      }
 
       if (copy) {
