Index: /stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs
===================================================================
--- /stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs	(revision 11536)
+++ /stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs	(revision 11537)
@@ -49,5 +49,5 @@
       this.label10 = new System.Windows.Forms.Label();
       this.tabDataShuffle = new System.Windows.Forms.TabPage();
-      this.label6 = new System.Windows.Forms.Label();
+      this.lblShuffleProperties = new System.Windows.Forms.Label();
       this.grpBoxPreview = new System.Windows.Forms.GroupBox();
       this.tabsPreview = new System.Windows.Forms.TabControl();
@@ -66,4 +66,5 @@
       this.lblPreviewShuffle = new System.Windows.Forms.Label();
       this.label9 = new System.Windows.Forms.Label();
+      this.shuffleSeparatelyCheckbox = new System.Windows.Forms.CheckBox();
       this.grpBoxData.SuspendLayout();
       this.tabsData.SuspendLayout();
@@ -350,5 +351,6 @@
       // tabDataShuffle
       // 
-      this.tabDataShuffle.Controls.Add(this.label6);
+      this.tabDataShuffle.Controls.Add(this.shuffleSeparatelyCheckbox);
+      this.tabDataShuffle.Controls.Add(this.lblShuffleProperties);
       this.tabDataShuffle.Location = new System.Drawing.Point(4, 22);
       this.tabDataShuffle.Name = "tabDataShuffle";
@@ -359,13 +361,13 @@
       this.tabDataShuffle.UseVisualStyleBackColor = true;
       // 
-      // label6
-      // 
-      this.label6.AutoSize = true;
-      this.label6.Enabled = false;
-      this.label6.Location = new System.Drawing.Point(3, 3);
-      this.label6.Name = "label6";
-      this.label6.Size = new System.Drawing.Size(115, 13);
-      this.label6.TabIndex = 0;
-      this.label6.Text = "No properties available";
+      // lblShuffleProperties
+      // 
+      this.lblShuffleProperties.AutoSize = true;
+      this.lblShuffleProperties.Enabled = false;
+      this.lblShuffleProperties.Location = new System.Drawing.Point(3, 3);
+      this.lblShuffleProperties.Name = "lblShuffleProperties";
+      this.lblShuffleProperties.Size = new System.Drawing.Size(115, 13);
+      this.lblShuffleProperties.TabIndex = 0;
+      this.lblShuffleProperties.Text = "No properties available";
       // 
       // grpBoxPreview
@@ -536,4 +538,14 @@
       this.label9.Size = new System.Drawing.Size(100, 23);
       this.label9.TabIndex = 0;
+      // 
+      // shuffleSeparatelyCheckbox
+      // 
+      this.shuffleSeparatelyCheckbox.AutoSize = true;
+      this.shuffleSeparatelyCheckbox.Location = new System.Drawing.Point(6, 2);
+      this.shuffleSeparatelyCheckbox.Name = "shuffleSeparatelyCheckbox";
+      this.shuffleSeparatelyCheckbox.Size = new System.Drawing.Size(233, 17);
+      this.shuffleSeparatelyCheckbox.TabIndex = 1;
+      this.shuffleSeparatelyCheckbox.Text = "Shuffle training and test partitions separately";
+      this.shuffleSeparatelyCheckbox.UseVisualStyleBackColor = true;
       // 
       // ManipulationView
@@ -619,8 +631,9 @@
     private System.Windows.Forms.Label label10;
     private System.Windows.Forms.TabPage tabDataShuffle;
-    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.Label lblShuffleProperties;
     private System.Windows.Forms.ComboBox cmbVariableNames;
     private System.Windows.Forms.Label label8;
     private System.Windows.Forms.Label lblPreviewInActive;
+    private System.Windows.Forms.CheckBox shuffleSeparatelyCheckbox;
   }
 }
Index: /stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.cs
===================================================================
--- /stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.cs	(revision 11536)
+++ /stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.cs	(revision 11537)
@@ -51,5 +51,5 @@
         ()=>validateDeleteRowsInfo(),
         ()=>validateReplaceWith(),
-        ()=>{btnApply.Enabled = true; lblPreviewShuffle.Text = "Data will be shuffled randomly - preview not possible";} //shuffle
+        ()=>validateShuffle()
       };
 
@@ -59,7 +59,6 @@
         ()=>Content.ManipulationLogic.DeleteRowsWithMissingValuesGreater(getRowsColumnsInfo()),
         ()=>replaceMissingValues(),
-        ()=>Content.ManipulationLogic.ShuffleWithRanges()
+        ()=>Content.ManipulationLogic.Shuffle(shuffleSeparatelyCheckbox.Checked)
       };
-
     }
 
@@ -228,4 +227,12 @@
     }
 
+    private void validateShuffle() {
+      btnApply.Enabled = true;
+      lblShuffleProperties.Enabled = false;
+      lblShuffleProperties.Visible = false;
+      shuffleSeparatelyCheckbox.Enabled = true;
+      shuffleSeparatelyCheckbox.Visible = true;
+    }
+
     public new ManipulationContent Content {
       get { return (ManipulationContent)base.Content; }
Index: /stable/HeuristicLab.DataPreprocessing/3.4/Implementations/ManipulationContent.cs
===================================================================
--- /stable/HeuristicLab.DataPreprocessing/3.4/Implementations/ManipulationContent.cs	(revision 11536)
+++ /stable/HeuristicLab.DataPreprocessing/3.4/Implementations/ManipulationContent.cs	(revision 11537)
@@ -41,8 +41,8 @@
     }
 
-    public ManipulationContent(IManipulationLogic theManipulationLogic, ISearchLogic theSearchLogic, IFilterLogic theFitlerLogic) {
+    public ManipulationContent(IManipulationLogic theManipulationLogic, ISearchLogic theSearchLogic, IFilterLogic theFilterLogic) {
       manipulationLogic = theManipulationLogic;
       searchLogic = theSearchLogic;
-      filterLogic = theFitlerLogic;
+      filterLogic = theFilterLogic;
     }
 
Index: /stable/HeuristicLab.DataPreprocessing/3.4/Implementations/ManipulationLogic.cs
===================================================================
--- /stable/HeuristicLab.DataPreprocessing/3.4/Implementations/ManipulationLogic.cs	(revision 11536)
+++ /stable/HeuristicLab.DataPreprocessing/3.4/Implementations/ManipulationLogic.cs	(revision 11537)
@@ -225,29 +225,29 @@
     }
 
-    public void ShuffleWithRanges() {
-      ShuffleWithRanges(new[] {
-        preprocessingData.TestPartition,
-        preprocessingData.TrainingPartition
-      });
-    }
-
-    public void ShuffleWithRanges(IEnumerable<IntRange> ranges) {
-      // init random outside loop
+    public void Shuffle(bool shuffleRangesSeparately) {
       Random random = new Random();
-
-      preprocessingData.InTransaction(() => {
-        // process all given ranges - e.g. TrainingPartition, TestPartition
-        foreach (IntRange range in ranges) {
-          List<Tuple<int, int>> shuffledIndices = new List<Tuple<int, int>>();
-
-          // generate random indices used for shuffeling each column
-          for (int i = range.End - 1; i >= range.Start; --i) {
-            int rand = random.Next(range.Start, i);
-            shuffledIndices.Add(new Tuple<int, int>(i, rand));
-          }
-
-          ShuffleToIndices(shuffledIndices);
-        }
-      });
+      var ranges = new[] { preprocessingData.TestPartition, preprocessingData.TrainingPartition };
+      if (shuffleRangesSeparately) {
+        preprocessingData.InTransaction(() => {
+          // process all given ranges - e.g. TrainingPartition, TestPartition
+          foreach (IntRange range in ranges) {
+            List<Tuple<int, int>> shuffledIndices = new List<Tuple<int, int>>();
+
+            // generate random indices used for shuffeling each column
+            for (int i = range.End - 1; i >= range.Start; --i) {
+              int rand = random.Next(range.Start, i);
+              shuffledIndices.Add(new Tuple<int, int>(i, rand));
+            }
+
+            ShuffleToIndices(shuffledIndices);
+          }
+        });
+      } else {
+        preprocessingData.InTransaction(() => {
+          var indices = ranges.SelectMany(x => Enumerable.Range(x.Start, x.Size)).ToList();
+          var shuffledIndices = indices.OrderBy(x => random.Next());
+          ShuffleToIndices(indices.Zip(shuffledIndices, (i, j) => new Tuple<int, int>(i, j)).ToList());
+        });
+      }
     }
 
Index: /stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IManipulationLogic.cs
===================================================================
--- /stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IManipulationLogic.cs	(revision 11536)
+++ /stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IManipulationLogic.cs	(revision 11537)
@@ -38,6 +38,5 @@
     void ReplaceIndicesByValue(IDictionary<int, IList<int>> cells, string value);
     void ReplaceIndicesByValue<T>(int columnIndex, IEnumerable<int> rowIndices, T value);
-    void ShuffleWithRanges();
-    void ShuffleWithRanges(IEnumerable<HeuristicLab.Data.IntRange> ranges);
+    void Shuffle(bool shuffleRangesSeparately);
     List<int> RowsWithMissingValuesGreater(double percent);
     List<int> ColumnsWithMissingValuesGreater(double percent);
