Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataGridContentView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataGridContentView.cs	(revision 10869)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataGridContentView.cs	(revision 10870)
@@ -35,7 +35,9 @@
 
     private bool notOwnEvent = true;
+    private bool isSearching = false;
     private SearchAndReplaceDialog findAndReplaceDialog;
     private IFindPreprocessingItemsIterator searchIterator;
     private string currentSearchText;
+    private ComparisonOperation currentComparisonOperation;
     private Tuple<int, int> currentCell;
 
@@ -54,13 +56,4 @@
     }
 
-    private IDictionary<int, IList<int>> _highlightedCells;
-    public IDictionary<int, IList<int>> HightlightedCells {
-      get { return _highlightedCells; }
-      set {
-        _highlightedCells = value;
-        Refresh();
-      }
-    }
-
     private IDictionary<int, IList<int>> _highlightedCellsBackground;
     public IDictionary<int, IList<int>> HightlightedCellsBackground {
@@ -78,5 +71,4 @@
       dataGridView.KeyDown += dataGridView_KeyDown;
       contextMenuCell.Items.Add(ShowHideColumns);
-      _highlightedCells = new Dictionary<int, IList<int>>();
       _highlightedRowIndices = new List<int>();
       _highlightedCellsBackground = new Dictionary<int, IList<int>>();
@@ -86,5 +78,7 @@
 
     void DataGridView_SelectionChanged(object sender, EventArgs e) {
-      Content.DataGridLogic.SetSelection(GetSelectedCells());
+      if (!isSearching) {
+        Content.DataGridLogic.SetSelection(GetSelectedCells());
+      }
     }
 
@@ -179,5 +173,5 @@
     void DataGridView_SelectionChanged_FindAndReplace(object sender, EventArgs e) {
       if (Content != null) {
-        if (AreMultipleCellsSelected()) {
+        if (!isSearching && AreMultipleCellsSelected()) {
           ResetHighlightedCellsBackground();
           HightlightedCellsBackground = GetSelectedCells();
@@ -188,5 +182,4 @@
 
     void findAndReplaceDialog_FormClosing(object sender, FormClosingEventArgs e) {
-      ResetHighlightedCells();
       ResetHighlightedCellsBackground();
       searchIterator = null;
@@ -205,8 +198,12 @@
 
     void findAndReplaceDialog_FindNextEvent(object sender, EventArgs e) {
-      if (searchIterator == null || currentSearchText != findAndReplaceDialog.GetSearchText()) {
+      if (searchIterator == null || 
+        currentSearchText != findAndReplaceDialog.GetSearchText() || 
+        currentComparisonOperation != findAndReplaceDialog.GetComparisonOperation()) {
         searchIterator = new FindPreprocessingItemsIterator(FindAll(findAndReplaceDialog.GetSearchText()));
         currentSearchText = findAndReplaceDialog.GetSearchText();
-      }
+        currentComparisonOperation = findAndReplaceDialog.GetComparisonOperation();
+      }
+
       if (IsOneCellSelected()) {
         var first = GetSelectedCells().First();
@@ -214,35 +211,26 @@
       }
 
-
       bool moreOccurences = false;
-      do {
-        currentCell = searchIterator.GetCurrent();
-        moreOccurences = searchIterator.MoveNext();
-        if (IsOneCellSelected()) {
-          var first = GetSelectedCells().First();
-          if (currentCell.Item1 == first.Key && currentCell.Item2 == first.Value[0]) {
-            if (!moreOccurences) {
-              searchIterator.Reset();
-            }
-            currentCell = searchIterator.GetCurrent();
-            moreOccurences = searchIterator.MoveNext();
-
+      currentCell = searchIterator.GetCurrent();
+      moreOccurences = searchIterator.MoveNext();
+      if (IsOneCellSelected() && currentCell != null) {
+        var first = GetSelectedCells().First();
+        if (currentCell.Item1 == first.Key && currentCell.Item2 == first.Value[0]) {
+          if (!moreOccurences) {
+            searchIterator.Reset();
           }
-        }
-      } while (moreOccurences && (currentCell == null || !Content.GetValue(currentCell.Item2, currentCell.Item1).Equals(currentSearchText)));
+          currentCell = searchIterator.GetCurrent();
+          moreOccurences = searchIterator.MoveNext();
+          if (!moreOccurences) {
+            searchIterator.Reset();
+          }
+        }
+      }
+
+      dataGridView.ClearSelection();
 
       if (currentCell != null) {
-        dataGridView.ClearSelection();
         dataGridView[currentCell.Item1, currentCell.Item2].Selected = true;
-      } else {
-        ResetHighlightedCells();
-      }
-
-      //if (!moreOccurences) {
-      //  searchIterator.Reset();
-      //  dataGridView.ClearSelection();
-      //  currentCell = searchIterator.GetCurrent();
-      //  dataGridView[currentCell.Item1, currentCell.Item2].Selected = true;
-      //}
+      }
     }
 
@@ -264,10 +252,44 @@
 
     void findAndReplaceDialog_FindAllEvent(object sender, EventArgs e) {
-      HightlightedCells = FindAll(findAndReplaceDialog.GetSearchText());
+      dataGridView.ClearSelection();
+      isSearching = true;
+      foreach (var column in FindAll(findAndReplaceDialog.GetSearchText())) {
+        foreach (var cell in column.Value) {
+          dataGridView[column.Key, cell].Selected = true;
+        }
+      }
+      isSearching = false;
+      DataGridView_SelectionChanged(null, null);
+    }
+
+    private Core.ConstraintOperation GetConstraintOperation(ComparisonOperation comparisonOperation) {
+      Core.ConstraintOperation constraintOperation = Core.ConstraintOperation.Equal;
+      switch (comparisonOperation) {
+        case ComparisonOperation.Equal:
+          constraintOperation = Core.ConstraintOperation.Equal;
+          break;
+        case ComparisonOperation.Greater:
+          constraintOperation = Core.ConstraintOperation.Greater;
+          break;
+        case ComparisonOperation.GreaterOrEqual:
+          constraintOperation = Core.ConstraintOperation.GreaterOrEqual;
+          break;
+        case ComparisonOperation.Less:
+          constraintOperation = Core.ConstraintOperation.Less;
+          break;
+        case ComparisonOperation.LessOrEqual:
+          constraintOperation = Core.ConstraintOperation.LessOrEqual;
+          break;
+        case ComparisonOperation.NotEqual:
+          constraintOperation = Core.ConstraintOperation.NotEqual;
+          break;
+      }
+      return constraintOperation;
     }
 
     private IDictionary<int, IList<int>> FindAll(string match) {
       bool searchInSelection = HightlightedCellsBackground.Values.Sum(list => list.Count) > 1;
-      var comparisonFilter = new ComparisonFilter(Content.FilterLogic.PreprocessingData, Core.ConstraintOperation.Equal, new StringValue(match), true);
+      ComparisonOperation comparisonOperation = findAndReplaceDialog.GetComparisonOperation();
+      var comparisonFilter = new ComparisonFilter(Content.FilterLogic.PreprocessingData, GetConstraintOperation(comparisonOperation), new StringValue(match), true);
       var filters = new List<Filter.IFilter>() { comparisonFilter };
       var foundCells = new Dictionary<int, IList<int>>();
@@ -324,8 +346,4 @@
     }
 
-    private void ResetHighlightedCells() {
-      HightlightedCells = new Dictionary<int, IList<int>>();
-    }
-
     private void ResetHighlightedCellsBackground() {
       HightlightedCellsBackground = new Dictionary<int, IList<int>>();
@@ -374,5 +392,5 @@
       if (e.State.HasFlag(DataGridViewElementStates.Selected)) return;
       if (!e.PaintParts.HasFlag(DataGridViewPaintParts.Background)) return;
-      if (HighlightedRowIndices == null && HightlightedCells == null) return;
+      if (HighlightedRowIndices == null) return;
 
       int rowIndex = virtualRowIndices[e.RowIndex];
@@ -382,7 +400,4 @@
       if (HightlightedCellsBackground.ContainsKey(e.ColumnIndex) && HightlightedCellsBackground[e.ColumnIndex].Contains(e.RowIndex)) {
         backColor = Color.LightGray;
-      }
-      if (HighlightedRowIndices.Contains(rowIndex) || HightlightedCells.ContainsKey(e.ColumnIndex) && HightlightedCells[e.ColumnIndex].Contains(e.RowIndex)) {
-        backColor = Color.LightGreen;
       }
 
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/SearchAndReplaceDialog.Designer.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/SearchAndReplaceDialog.Designer.cs	(revision 10869)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/SearchAndReplaceDialog.Designer.cs	(revision 10870)
@@ -37,4 +37,5 @@
       this.txtValue = new System.Windows.Forms.TextBox();
       this.label1 = new System.Windows.Forms.Label();
+      this.cmbComparisonOperator = new System.Windows.Forms.ComboBox();
       this.tabSearchReplace.SuspendLayout();
       this.tabReplace.SuspendLayout();
@@ -67,4 +68,5 @@
       // tabReplace
       // 
+      this.tabReplace.Controls.Add(this.cmbComparisonOperator);
       this.tabReplace.Controls.Add(this.txtSearchString);
       this.tabReplace.Controls.Add(this.lblSearch);
@@ -87,7 +89,7 @@
       // txtSearchString
       // 
-      this.txtSearchString.Location = new System.Drawing.Point(103, 20);
+      this.txtSearchString.Location = new System.Drawing.Point(154, 20);
       this.txtSearchString.Name = "txtSearchString";
-      this.txtSearchString.Size = new System.Drawing.Size(254, 20);
+      this.txtSearchString.Size = new System.Drawing.Size(203, 20);
       this.txtSearchString.TabIndex = 23;
       // 
@@ -171,4 +173,13 @@
       this.label1.TabIndex = 14;
       this.label1.Text = "Replace with";
+      // 
+      // cmbComparisonOperator
+      // 
+      this.cmbComparisonOperator.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.cmbComparisonOperator.FormattingEnabled = true;
+      this.cmbComparisonOperator.Location = new System.Drawing.Point(103, 19);
+      this.cmbComparisonOperator.Name = "cmbComparisonOperator";
+      this.cmbComparisonOperator.Size = new System.Drawing.Size(45, 21);
+      this.cmbComparisonOperator.TabIndex = 24;
       // 
       // SearchAndReplaceDialog
@@ -206,4 +217,5 @@
     private System.Windows.Forms.TextBox txtValue;
     private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.ComboBox cmbComparisonOperator;
   }
 }
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/SearchAndReplaceDialog.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/SearchAndReplaceDialog.cs	(revision 10869)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/SearchAndReplaceDialog.cs	(revision 10870)
@@ -13,6 +13,16 @@
   }
 
+  public enum ComparisonOperation {
+    Equal,
+    Less,
+    LessOrEqual,
+    Greater,
+    GreaterOrEqual,
+    NotEqual
+  }
+
   public partial class SearchAndReplaceDialog : Form {
     private string[] cmbItemsText = { "Value", "Average", "Median", "Random", "Most Common", "Interpolation" };
+    private string[] cmbComparisonOperatorText = { "==", "<", "<=", ">", ">=", "!=" };
 
     public SearchAndReplaceDialog() {
@@ -20,4 +30,6 @@
       cmbReplaceWith.Items.AddRange(cmbItemsText);
       cmbReplaceWith.SelectedIndex = (int)ReplaceAction.Value;
+      cmbComparisonOperator.Items.AddRange(cmbComparisonOperatorText);
+      cmbComparisonOperator.SelectedIndex = (int)ComparisonOperation.Equal;
     }
 
@@ -45,4 +57,5 @@
       tabSearchReplace.SelectedTab.Controls.Add(lblSearch);
       tabSearchReplace.SelectedTab.Controls.Add(txtSearchString);
+      tabSearchReplace.SelectedTab.Controls.Add(cmbComparisonOperator);
       ActiveControl = txtSearchString;
       AcceptButton = btnFindNext;
@@ -59,4 +72,8 @@
     public ReplaceAction GetReplaceAction() {
       return (ReplaceAction)cmbReplaceWith.SelectedIndex;
+    }
+
+    public ComparisonOperation GetComparisonOperation() {
+      return (ComparisonOperation)cmbComparisonOperator.SelectedIndex;
     }
 
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/FindPreprocessingItemsIterator.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/FindPreprocessingItemsIterator.cs	(revision 10869)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/FindPreprocessingItemsIterator.cs	(revision 10870)
@@ -45,4 +45,7 @@
         ++tmpColumnIndex;
       }
+      if (startCell == null && tmpColumnIndex == columnIndex && rowIndex != 0) {
+        startCell = GetNextFoundCell(columnIndex, 0);
+      }
       currentCell = startCell;
     }
@@ -62,5 +65,5 @@
       bool result = false;
       bool endReached = false;
-      if (items != null) {
+      if (CurrentCellExists()) {
         do {
           if (currentCell.Item2 < items[currentCell.Item1].Count - 1) {
@@ -95,5 +98,5 @@
     private bool CurrentCellExists() {
       bool result = false;
-      if (items != null) {
+      if (currentCell != null && items != null) {
         result = items.ContainsKey(currentCell.Item1) && currentCell.Item2 < items[currentCell.Item1].Count;
       }
