Index: branches/DataPreprocessing/HeuristicLab.Core/3.3/Constraints/ComparisonConstraint.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.Core/3.3/Constraints/ComparisonConstraint.cs	(revision 10697)
+++ branches/DataPreprocessing/HeuristicLab.Core/3.3/Constraints/ComparisonConstraint.cs	(revision 10698)
@@ -37,5 +37,5 @@
     }
     public ComparisonConstraint(IItem constrainedValue, ConstraintOperation comparisonOperation, object comparisonValue, bool active)
-      : base(constrainedValue, comparisonOperation, comparisonOperation, active) {
+      : base(constrainedValue, comparisonOperation, comparisonValue, active) {
     }
 
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataGridContentView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataGridContentView.cs	(revision 10697)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataGridContentView.cs	(revision 10698)
@@ -35,6 +35,5 @@
     private bool notOwnEvent = true;
     private FindAndReplaceDialog findAndReplaceDialog;
-    private IDictionary<int, IList<int>> foundCells;
-    private Tuple<int, int> currentCell;
+    private IFindPreprocessingItemsIterator searchIterator;
     private string currentSearchText;
 
@@ -142,21 +141,19 @@
     }
 
-
+    #region FindAndReplaceDialog
 
     private void CreateFindAndReplaceDialog() {
       findAndReplaceDialog = new FindAndReplaceDialog();
-      findAndReplaceDialog.Show();
+      findAndReplaceDialog.Show(this);
       findAndReplaceDialog.FindAllEvent += findAndReplaceDialog_FindAllEvent;
       findAndReplaceDialog.FindNextEvent += findAndReplaceDialog_FindNextEvent;
       findAndReplaceDialog.ReplaceAllEvent += findAndReplaceDialog_ReplaceAllEvent;
       findAndReplaceDialog.ReplaceNextEvent += findAndReplaceDialog_ReplaceEvent;
-      foundCells = null;
-      currentCell = null;
     }
 
     void findAndReplaceDialog_ReplaceEvent(object sender, EventArgs e) {
-      if (foundCells != null)
+      if (searchIterator != null && searchIterator.GetCurrent() != null)
       {
-        Replace(GetIndexOfCurrentSelectedCell());
+        Replace(TransformToDictionary(searchIterator.GetCurrent()));
       }
     }
@@ -167,24 +164,18 @@
 
     void findAndReplaceDialog_FindNextEvent(object sender, EventArgs e) {
-      IDictionary<int, IList<int>> highlightCell;
-      do {
-        if (foundCells == null || currentSearchText != findAndReplaceDialog.GetSearchText()) {
-          currentSearchText = findAndReplaceDialog.GetSearchText();
-          foundCells = FindAll(findAndReplaceDialog.GetSearchText());
-          currentCell = new Tuple<int, int>(0, 0);
-        } else {
-          if (currentCell.Item2 < foundCells[currentCell.Item1].Count - 1) {
-            currentCell = new Tuple<int, int>(currentCell.Item1, currentCell.Item2 + 1);
-          } else if (currentCell.Item1 < foundCells.Count - 1) {
-            currentCell = new Tuple<int, int>(currentCell.Item1 + 1, 0);
-          } else {
-            currentCell = new Tuple<int, int>(0, 0);
-          }
-        }
-
-        highlightCell = GetIndexOfCurrentSelectedCell();
-
-      } while (!Content.GetValue(currentCell.Item1, highlightCell[currentCell.Item1].ElementAt(0)).Equals(currentSearchText));
-      HightlightedCells = highlightCell;
+      if (searchIterator == null || currentSearchText != findAndReplaceDialog.GetSearchText()) {
+        searchIterator = new FindPreprocessingItemsIterator(FindAll(findAndReplaceDialog.GetSearchText()));
+        currentSearchText = findAndReplaceDialog.GetSearchText();
+      }
+
+      while (searchIterator.MoveNext() && (searchIterator.GetCurrent() == null || !Content.GetValue(searchIterator.GetCurrent().Item1, searchIterator.GetCurrent().Item2).Equals(currentSearchText))) {
+        
+      }
+
+      if (searchIterator.GetCurrent() != null) {
+        HightlightedCells = TransformToDictionary(searchIterator.GetCurrent());
+      } else {
+        HightlightedCells.Clear();
+      }
     }
 
@@ -233,10 +224,11 @@
     }
 
-    private IDictionary<int, IList<int>> GetIndexOfCurrentSelectedCell() {
+    private IDictionary<int, IList<int>> TransformToDictionary(Tuple<int, int> tuple) {
       var highlightCells = new Dictionary<int, IList<int>>();
-      int highlightCell = foundCells[currentCell.Item1].ElementAt(currentCell.Item2);
-      highlightCells.Add(currentCell.Item1, new List<int>() { highlightCell });
+      highlightCells.Add(tuple.Item1, new List<int>() { tuple.Item2 });
       return highlightCells;
     }
+
+    #endregion FindAndReplaceDialog
 
     private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/HeuristicLab.DataPreprocessing.Views-3.3.csproj
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/HeuristicLab.DataPreprocessing.Views-3.3.csproj	(revision 10697)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/HeuristicLab.DataPreprocessing.Views-3.3.csproj	(revision 10698)
@@ -141,4 +141,6 @@
       <DependentUpon>TransformationView.cs</DependentUpon>
     </Compile>
+    <Compile Include="Utils\FindPreprocessingItemsIterator.cs" />
+    <Compile Include="Utils\IFindPreprocessingItemsIterator.cs" />
     <Compile Include="ViewShortcutCollectionView.cs">
       <SubType>UserControl</SubType>
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/FindPreprocessingItemsIterator.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/FindPreprocessingItemsIterator.cs	(revision 10698)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/FindPreprocessingItemsIterator.cs	(revision 10698)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.DataPreprocessing.Views {
+  class FindPreprocessingItemsIterator : IFindPreprocessingItemsIterator {
+    private IDictionary<int, IList<int>> items;
+    private Tuple<int, int> currentCell;
+
+    public FindPreprocessingItemsIterator(IDictionary<int, IList<int>> items) {
+      this.items = items;
+      Reset();
+    }
+
+    public bool MoveNext() {
+      bool result = false;
+      if (items != null) {
+        do {
+          if (currentCell.Item2 < items[currentCell.Item1].Count - 1) {
+            currentCell = new Tuple<int, int>(currentCell.Item1, currentCell.Item2 + 1);
+          } else if (currentCell.Item1 < items.Count - 1) {
+            currentCell = new Tuple<int, int>(currentCell.Item1 + 1, 0);
+          }
+        } while (!EndReached() && !CurrentCellExists());
+        result = EndReached();
+      }
+      return result;
+    }
+
+    public Tuple<int, int> GetCurrent() {
+      Tuple<int, int> resultCells = null;
+      if (items != null && CurrentCellExists()) {
+        int cellRow = items[currentCell.Item1].ElementAt(currentCell.Item2);
+        resultCells = new Tuple<int, int>(currentCell.Item1, cellRow);
+      }
+      return resultCells;
+    }
+
+    public void Reset() {
+      currentCell = new Tuple<int, int>(0, 0);
+    }
+
+    private bool CurrentCellExists() {
+      bool result = false;
+      if (items != null) {
+        result = items.ContainsKey(currentCell.Item1) && currentCell.Item2 < items[currentCell.Item1].Count;
+      }
+      return result;
+    }
+
+    private bool EndReached() {
+      bool result = true;
+      if (items != null && CurrentCellExists()) {
+        result = currentCell.Item1 >= items.Count - 1 && currentCell.Item2 >= items[currentCell.Item1].Count - 1;
+      }
+      return result;
+    }
+  }
+}
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/IFindPreprocessingItemsIterator.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/IFindPreprocessingItemsIterator.cs	(revision 10698)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/Utils/IFindPreprocessingItemsIterator.cs	(revision 10698)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+using System.Collections.Generic;
+
+namespace HeuristicLab.DataPreprocessing.Views {
+  interface IFindPreprocessingItemsIterator {
+    Tuple<int, int> GetCurrent();
+    bool MoveNext();
+    void Reset();
+  }
+}
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10697)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10698)
@@ -75,5 +75,5 @@
     <Compile Include="Implementations\PreprocessingData.cs" />
     <Compile Include="Implementations\DataGridLogic.cs" />
-    <Compile Include="Implementations\DataPreprocessingChangedEvent.cs" />
+    <Compile Include="Utils\DataPreprocessingChangedEvent.cs" />
     <Compile Include="Implementations\Filter\ComparisonFilter.cs" />
     <Compile Include="Implementations\Filter\IFilter.cs" />
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataPreprocessingChangedEvent.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataPreprocessingChangedEvent.cs	(revision 10697)
+++ 	(revision )
@@ -1,49 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2013 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;
-
-namespace HeuristicLab.DataPreprocessing {
-  public enum DataPreprocessingChangedEventType {
-    DeleteColumn,
-    AddColumn,
-    ChangeColumn,
-    DeleteRow,
-    AddRow,
-    ChangeItem,
-    Any,
-    Transformation
-  }
-
-  public class DataPreprocessingChangedEventArgs : EventArgs {
-    public DataPreprocessingChangedEventType Type { get; private set; }
-    public int Row { get; private set; }
-    public int Column { get; private set; }
-
-    public DataPreprocessingChangedEventArgs(DataPreprocessingChangedEventType type, int column, int row) {
-      Type = type;
-      Column = column;
-      Row = row;
-    }
-  }
-
-  public delegate void DataPreprocessingChangedEventHandler(object sender, DataPreprocessingChangedEventArgs e);
-}
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Utils/DataPreprocessingChangedEvent.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Utils/DataPreprocessingChangedEvent.cs	(revision 10698)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Utils/DataPreprocessingChangedEvent.cs	(revision 10698)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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;
+
+namespace HeuristicLab.DataPreprocessing {
+  public enum DataPreprocessingChangedEventType {
+    DeleteColumn,
+    AddColumn,
+    ChangeColumn,
+    DeleteRow,
+    AddRow,
+    ChangeItem,
+    Any,
+    Transformation
+  }
+
+  public class DataPreprocessingChangedEventArgs : EventArgs {
+    public DataPreprocessingChangedEventType Type { get; private set; }
+    public int Row { get; private set; }
+    public int Column { get; private set; }
+
+    public DataPreprocessingChangedEventArgs(DataPreprocessingChangedEventType type, int column, int row) {
+      Type = type;
+      Column = column;
+      Row = row;
+    }
+  }
+
+  public delegate void DataPreprocessingChangedEventHandler(object sender, DataPreprocessingChangedEventArgs e);
+}
