Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.Designer.cs	(revision 6262)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.Designer.cs	(revision 6265)
@@ -27,4 +27,6 @@
       this.hits_sizeTextBox = new System.Windows.Forms.TextBox();
       this.clearButton = new System.Windows.Forms.Button();
+      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+      this.saveButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.SuspendLayout();
@@ -56,5 +58,5 @@
       this.hits_sizeTextBox.Name = "hits_sizeTextBox";
       this.hits_sizeTextBox.ReadOnly = true;
-      this.hits_sizeTextBox.Size = new System.Drawing.Size(379, 20);
+      this.hits_sizeTextBox.Size = new System.Drawing.Size(319, 20);
       this.hits_sizeTextBox.TabIndex = 5;
       // 
@@ -71,4 +73,22 @@
       this.clearButton.Click += new System.EventHandler(this.clearButton_Click);
       // 
+      // saveFileDialog
+      // 
+      this.saveFileDialog.DefaultExt = "csv";
+      this.saveFileDialog.Filter = "CSV Files|*.csv|All Files|*.*";
+      this.saveFileDialog.RestoreDirectory = true;
+      this.saveFileDialog.Title = "Save Cache";
+      // 
+      // saveButton
+      // 
+      this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.saveButton.Location = new System.Drawing.Point(384, 23);
+      this.saveButton.Name = "saveButton";
+      this.saveButton.Size = new System.Drawing.Size(54, 23);
+      this.saveButton.TabIndex = 8;
+      this.saveButton.Text = "Save...";
+      this.saveButton.UseVisualStyleBackColor = true;
+      this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
+      // 
       // EvaluationCacheView
       // 
@@ -78,5 +98,7 @@
       this.Controls.Add(this.hits_sizeLabel);
       this.Controls.Add(this.clearButton);
+      this.Controls.Add(this.saveButton);
       this.Name = "EvaluationCacheView";
+      this.Controls.SetChildIndex(this.saveButton, 0);
       this.Controls.SetChildIndex(this.clearButton, 0);
       this.Controls.SetChildIndex(this.hits_sizeLabel, 0);
@@ -97,4 +119,6 @@
     private System.Windows.Forms.TextBox hits_sizeTextBox;
     private System.Windows.Forms.Button clearButton;
+    private System.Windows.Forms.SaveFileDialog saveFileDialog;
+    private System.Windows.Forms.Button saveButton;
   }
 }
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.cs	(revision 6262)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.cs	(revision 6265)
@@ -3,4 +3,7 @@
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
+using System.Threading;
+using System.IO;
+using System.ComponentModel;
 
 namespace HeuristicLab.Problems.ExternalEvaluation.Views {
@@ -55,4 +58,5 @@
       base.SetEnabledStateOfControls();
       clearButton.Enabled = !ReadOnly && Content != null;
+      saveButton.Enabled = !ReadOnly && Content != null;
     }
 
@@ -62,4 +66,18 @@
     }
     #endregion
+    
+    private void saveButton_Click(object sender, EventArgs e) {
+      if (saveFileDialog.ShowDialog() == DialogResult.OK) {
+        saveButton.Enabled = false;
+        BackgroundWorker worker = new BackgroundWorker();
+        worker.DoWork += (s, a) => {
+          Content.Save((string)a.Argument);
+        };
+        worker.RunWorkerCompleted += (s, a) => {
+          SetEnabledStateOfControls();
+        };
+        worker.RunWorkerAsync(saveFileDialog.FileName);
+      }
+    }    
   }
 }
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.resx
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.resx	(revision 6262)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.resx	(revision 6265)
@@ -121,9 +121,9 @@
     <value>107, 17</value>
   </metadata>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>107, 17</value>
-  </metadata>
   <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
+  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>230, 17</value>
+  </metadata>
 </root>
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs	(revision 6262)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs	(revision 6265)
@@ -33,4 +33,8 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Analysis;
+using System.IO;
+using System.Globalization;
+using System.Text.RegularExpressions;
 namespace HeuristicLab.Problems.ExternalEvaluation {
 
@@ -281,4 +285,5 @@
       OnSizeChanged();
     }
+
     private IEnumerable<KeyValuePair<string, double>> GetCacheValues() {
       lock (cacheLock) {
@@ -286,4 +291,5 @@
       }
     }
+
     private void SetCacheValues(IEnumerable<KeyValuePair<string, double>> value) {
       lock (cacheLock) {
@@ -297,6 +303,19 @@
       }
     }
-    #endregion
-
-  }
+
+    public void Save(string filename) {
+      using (var writer = new StreamWriter(filename)) {
+        lock (cacheLock) {
+          foreach (var entry in list) {
+            writer.WriteLine(string.Format(CultureInfo.InvariantCulture,
+              "\"{0}\", {1}",
+              Regex.Replace(entry.Key, "\\s", "").Replace("\"", "\"\""),
+              entry.Value));
+          }
+        }
+        writer.Close();
+      }
+    }
+    #endregion
+  }  
 }
