Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.Designer.cs	(revision 15589)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.Designer.cs	(revision 15626)
@@ -51,10 +51,13 @@
       this.factorVarReplacementLabel = new System.Windows.Forms.Label();
       this.factorVarReplComboBox = new System.Windows.Forms.ComboBox();
+      this.sortByLabel = new System.Windows.Forms.Label();
+      this.sortByComboBox = new System.Windows.Forms.ComboBox();
+      this.ascendingCheckBox = new System.Windows.Forms.CheckBox();
       this.SuspendLayout();
       // 
       // variableImactsArrayView
       // 
-      this.variableImactsArrayView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.variableImactsArrayView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.variableImactsArrayView.Caption = "StringConvertibleArray View";
@@ -63,5 +66,5 @@
       this.variableImactsArrayView.Name = "variableImactsArrayView";
       this.variableImactsArrayView.ReadOnly = true;
-      this.variableImactsArrayView.Size = new System.Drawing.Size(363, 278);
+      this.variableImactsArrayView.Size = new System.Drawing.Size(706, 278);
       this.variableImactsArrayView.TabIndex = 2;
       // 
@@ -133,8 +136,45 @@
       this.factorVarReplComboBox.SelectedIndexChanged += new System.EventHandler(this.replacementComboBox_SelectedIndexChanged);
       // 
+      // sortByLabel
+      // 
+      this.sortByLabel.AutoSize = true;
+      this.sortByLabel.Location = new System.Drawing.Point(324, 6);
+      this.sortByLabel.Name = "sortByLabel";
+      this.sortByLabel.Size = new System.Drawing.Size(43, 13);
+      this.sortByLabel.TabIndex = 4;
+      this.sortByLabel.Text = "Sort by:";
+      // 
+      // sortByComboBox
+      // 
+      this.sortByComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.sortByComboBox.FormattingEnabled = true;
+      this.sortByComboBox.Items.AddRange(new object[] {
+            "Variable",
+            "Impact"});
+      this.sortByComboBox.Location = new System.Drawing.Point(373, 3);
+      this.sortByComboBox.Name = "sortByComboBox";
+      this.sortByComboBox.Size = new System.Drawing.Size(121, 21);
+      this.sortByComboBox.TabIndex = 5;
+      this.sortByComboBox.SelectedIndexChanged += new System.EventHandler(this.sortByComboBox_SelectedIndexChanged);
+      this.sortByComboBox.SelectedIndex = 1;
+      // 
+      // ascendingCheckBox
+      // 
+      this.ascendingCheckBox.AutoSize = true;
+      this.ascendingCheckBox.Location = new System.Drawing.Point(500, 6);
+      this.ascendingCheckBox.Name = "ascendingCheckBox";
+      this.ascendingCheckBox.Size = new System.Drawing.Size(76, 17);
+      this.ascendingCheckBox.TabIndex = 7;
+      this.ascendingCheckBox.Text = "Ascending";
+      this.ascendingCheckBox.UseVisualStyleBackColor = true;
+      this.ascendingCheckBox.CheckedChanged += new System.EventHandler(this.ascendingCheckBox_CheckedChanged);
+      // 
       // RegressionSolutionVariableImpactsView
       // 
       this.AllowDrop = true;
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.ascendingCheckBox);
+      this.Controls.Add(this.sortByLabel);
+      this.Controls.Add(this.sortByComboBox);
       this.Controls.Add(this.factorVarReplComboBox);
       this.Controls.Add(this.factorVarReplacementLabel);
@@ -145,5 +185,5 @@
       this.Controls.Add(this.variableImactsArrayView);
       this.Name = "RegressionSolutionVariableImpactsView";
-      this.Size = new System.Drawing.Size(369, 365);
+      this.Size = new System.Drawing.Size(712, 365);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -160,4 +200,7 @@
     private System.Windows.Forms.Label factorVarReplacementLabel;
     private System.Windows.Forms.ComboBox factorVarReplComboBox;
+    private System.Windows.Forms.Label sortByLabel;
+    private System.Windows.Forms.ComboBox sortByComboBox;
+    private System.Windows.Forms.CheckBox ascendingCheckBox;
   }
 }
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs	(revision 15589)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs	(revision 15626)
@@ -20,4 +20,5 @@
 #endregion
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
@@ -30,4 +31,9 @@
   [Content(typeof(IRegressionSolution))]
   public partial class RegressionSolutionVariableImpactsView : DataAnalysisSolutionEvaluationView {
+
+    private const int ORDER_BY_VARIABLE = 0;
+    private const int ORDER_BY_IMPACT = 1;
+
+    private Dictionary<string, double> rawVariableImpacts = new Dictionary<string, double>();
 
     public new IRegressionSolution Content {
@@ -99,4 +105,12 @@
           impactArray.ElementNames = impacts.Select(i => i.Item1);
           variableImactsArrayView.Content = (DoubleArray)impactArray.AsReadOnly();
+
+          //Remember the original ordering of the variables
+          var problemData = Content.ProblemData;
+          var inputvariables = new HashSet<string>(problemData.AllowedInputVariables.Union(Content.Model.VariablesUsedForPrediction));
+          var originalVariableOrdering = problemData.Dataset.VariableNames.Where(v => inputvariables.Contains(v)).Where(problemData.Dataset.VariableHasType<double>).ToList();
+          rawVariableImpacts.Clear();
+          originalVariableOrdering.ForEach(v => rawVariableImpacts.Add(v, impacts.First(vv => vv.Item1 == v).Item2));
+
         } finally {
           mainForm.RemoveOperationProgressFromView(this);
@@ -105,13 +119,66 @@
     }
 
-    #endregion
-
     private void dataPartitionComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      ResetOrdering();
       UpdateVariableImpacts();
     }
 
     private void replacementComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      ResetOrdering();
       UpdateVariableImpacts();
     }
+
+    private void sortByComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateDataOrdering();
+    }
+
+    private void ascendingCheckBox_CheckedChanged(object sender, EventArgs e) {
+      UpdateDataOrdering();
+    }
+    #endregion
+
+    #region Helper Methods
+    /// <summary>
+    /// Updates the <see cref="variableImactsArrayView"/> according to the selected ordering <see cref="ascendingCheckBox"/> of the selected Column <see cref="sortByComboBox"/>
+    /// The default is "Descending" by "VariableImpact" (as in previous versions)
+    /// </summary>
+    private void UpdateDataOrdering() {
+      int orderIdx = sortByComboBox.SelectedIndex;
+      bool ascending = ascendingCheckBox.Checked;
+
+      //Check if valid ordering is selected AND at if any VariableImpact exists
+      if (orderIdx > -1 && rawVariableImpacts != null && rawVariableImpacts.Any()) {
+        IEnumerable<KeyValuePair<string, double>> orderedEntries = null;
+
+        //Sort accordingly
+        if (orderIdx == ORDER_BY_VARIABLE) {
+          orderedEntries = ascending ? rawVariableImpacts : rawVariableImpacts.Reverse();
+        } else if (orderIdx == ORDER_BY_IMPACT) {
+          orderedEntries = ascending ? rawVariableImpacts.OrderBy(v => v.Value) : rawVariableImpacts.OrderByDescending(v => v.Value);
+        }
+
+        //Write the data back
+        var impactArray = new DoubleArray(orderedEntries.Select(i => i.Value).ToArray());
+        impactArray.ElementNames = orderedEntries.Select(i => i.Key);
+        variableImactsArrayView.Content = (DoubleArray)impactArray.AsReadOnly();
+      }
+    }
+
+    /// <summary>
+    /// Resets the ordering to the default behaviour (descending by variableImpact), meaning <see cref="ascendingCheckBox"/> and <see cref="sortByComboBox"/> will be updated
+    /// Note: this will NOT update the UI
+    /// </summary>
+    private void ResetOrdering() {
+      //The events shouldn't fire everytime we reset the data
+      ascendingCheckBox.CheckedChanged -= ascendingCheckBox_CheckedChanged;
+      sortByComboBox.SelectedIndexChanged -= sortByComboBox_SelectedIndexChanged;
+
+      ascendingCheckBox.Checked = false;
+      sortByComboBox.SelectedIndex = ORDER_BY_IMPACT;
+
+      ascendingCheckBox.CheckedChanged += ascendingCheckBox_CheckedChanged;
+      sortByComboBox.SelectedIndexChanged += sortByComboBox_SelectedIndexChanged;
+    }
+    #endregion
   }
 }
