Index: trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 13550)
@@ -216,4 +216,5 @@
       this.calculatorListView.UseCompatibleStateImageBehavior = false;
       this.calculatorListView.View = System.Windows.Forms.View.Details;
+      this.calculatorListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.calculatorListView_ItemChecked);
       // 
       // characteristicColumnHeader
Index: trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 13550)
@@ -22,5 +22,4 @@
 using System;
 using System.Collections.Generic;
-using System.Globalization;
 using System.Linq;
 using System.Windows.Forms;
@@ -92,4 +91,5 @@
       uploadCharacteristicsButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked && !ReadOnly
         && characteristicsMatrixView.Content != null && characteristicsMatrixView.Content.Rows > 0;
+      calculateButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked && !ReadOnly && calculatorListView.CheckedItems.Count > 0;
     }
 
@@ -114,4 +114,5 @@
             var item = calculatorListView.Items.Add(c, c);
             item.Group = group;
+            item.Checked = true;
           }
         }
@@ -186,22 +187,22 @@
       try {
         RunCreationClient.SetCharacteristicValues(Content.ProblemId, values);
-      } catch (Exception ex) { PluginInfrastructure.ErrorHandling.ShowErrorDialog(ex); }
+      } catch (Exception ex) { ErrorHandling.ShowErrorDialog(ex); }
     }
     private void calculateButton_Click(object sender, EventArgs e) {
+      var characteristics = calculatorListView.CheckedItems.OfType<ListViewItem>().GroupBy(x => x.Group).ToList();
+      if (characteristics.Count == 0) return;
       var problem = Content.CloneProblem();
-      var characteristics = calculatorListView.CheckedItems.OfType<ListViewItem>().GroupBy(x => x.Group);
-      var results = new Dictionary<string, double>();
+      var results = new Dictionary<string, Value>();
       foreach (var c in characteristics) {
         var calc = (ICharacteristicCalculator)c.Key.Tag;
         foreach (var result in calc.Calculate(problem, c.Select(x => x.Text).ToArray()))
-          results[result.Key] = result.Value;
-      }
-      var matrix = characteristicsMatrixView.Content as StringMatrix;
-      if (matrix == null) matrix = new StringMatrix(results.Count, 3);
+          results[result.Key] = RunCreationClient.Instance.ConvertToValue(result.Value, result.Key);
+      }
+      var matrix = (characteristicsMatrixView.Content as StringMatrix) ?? (new StringMatrix(results.Count, 3));
       for (var i = 0; i < matrix.Rows; i++) {
-        double r;
+        Value r;
         if (results.TryGetValue(matrix[i, 0], out r)) {
-          matrix[i, 1] = r.ToString(CultureInfo.CurrentCulture.NumberFormat);
-          matrix[i, 2] = "DoubleValue";
+          matrix[i, 1] = r.GetValue();
+          matrix[i, 2] = r.GetType().Name;
           results.Remove(matrix[i, 0]);
         }
@@ -213,6 +214,6 @@
         if (string.IsNullOrEmpty(matrix[i, 0])) {
           matrix[i, 0] = resultsList[counter].Key;
-          matrix[i, 1] = resultsList[counter].Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
-          matrix[i, 2] = "DoubleValue";
+          matrix[i, 1] = resultsList[counter].Value.GetValue();
+          matrix[i, 2] = resultsList[counter].Value.GetType().Name;
           resultsList.RemoveAt(counter);
           counter--;
@@ -224,9 +225,14 @@
         for (var i = matrix.Rows - 1; counter >= 0; i--) {
           matrix[i, 0] = resultsList[0].Key;
-          matrix[i, 1] = resultsList[0].Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
-          matrix[i, 2] = "DoubleValue";
+          matrix[i, 1] = resultsList[0].Value.GetValue();
+          matrix[i, 2] = resultsList[0].Value.GetType().Name;
+          resultsList.RemoveAt(0);
           counter--;
         }
       }
+      SetEnabledStateOfControls();
+    }
+    private void calculatorListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
+      SetEnabledStateOfControls();
     }
     #endregion
@@ -239,4 +245,5 @@
     }
     #endregion
+
   }
 }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs	(revision 13550)
@@ -22,8 +22,11 @@
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using HeuristicLab.Clients.Common;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.Xml;
 
 namespace HeuristicLab.Clients.OKB.RunCreation {
@@ -114,4 +117,81 @@
     #endregion
 
+    #region OKB-Item Conversion
+    public IItem ConvertToItem(Value value) {
+      if (value is BinaryValue) {
+        IItem item = null;
+        var binaryValue = (BinaryValue)value;
+        if (binaryValue.Value != null) {
+          using (var stream = new MemoryStream(binaryValue.Value)) {
+            try {
+              item = XmlParser.Deserialize<IItem>(stream);
+            } catch (Exception) { }
+            stream.Close();
+          }
+        }
+        return item ?? new Data.StringValue(value.DataType.Name);
+      } else if (value is BoolValue) {
+        return new Data.BoolValue(((BoolValue)value).Value);
+      } else if (value is FloatValue) {
+        return new Data.DoubleValue(((FloatValue)value).Value);
+      } else if (value is PercentValue) {
+        return new Data.PercentValue(((PercentValue)value).Value);
+      } else if (value is DoubleValue) {
+        return new Data.DoubleValue(((DoubleValue)value).Value);
+      } else if (value is IntValue) {
+        return new Data.IntValue((int)((IntValue)value).Value);
+      } else if (value is LongValue) {
+        return new Data.IntValue((int)((LongValue)value).Value);
+      } else if (value is StringValue) {
+        return new Data.StringValue(((StringValue)value).Value);
+      } else if (value is TimeSpanValue) {
+        return new Data.TimeSpanValue(TimeSpan.FromSeconds((long)((TimeSpanValue)value).Value));
+      }
+      return null;
+    }
+
+    public Value ConvertToValue(IItem item, string name) {
+      Value result = null;
+      if (item is ValueTypeValue<bool>) {
+        var boolValue = (ValueTypeValue<bool>)item;
+        result = new BoolValue() { Value = boolValue.Value };
+      } else if (item is ValueTypeValue<int>) {
+        var intValue = (ValueTypeValue<int>)item;
+        result = new IntValue() { Value = intValue.Value };
+      } else if (item is ValueTypeValue<long>) {
+        var longValue = (ValueTypeValue<long>)item;
+        result = new LongValue() { Value = longValue.Value };
+      } else if (item is ValueTypeValue<float>) {
+        var floatValue = (ValueTypeValue<float>)item;
+        result = new FloatValue() { Value = floatValue.Value };
+      } else if (item is ValueTypeValue<double>) {
+        var doubleValue = (ValueTypeValue<double>)item;
+        if (item is Data.PercentValue) result = new PercentValue() { Value = doubleValue.Value };
+        else result = new DoubleValue() { Value = doubleValue.Value };
+      } else if (item is ValueTypeValue<TimeSpan>) {
+        var timeSpanValue = (ValueTypeValue<TimeSpan>)item;
+        result = new TimeSpanValue() { Value = (long)timeSpanValue.Value.TotalSeconds };
+      } else if (item is Data.StringValue) {
+        var stringValue = (Data.StringValue)item;
+        result = new StringValue() { Value = stringValue.Value };
+      }
+      if (result == null) {
+        var binaryValue = new BinaryValue {
+          DataType = new DataType() {
+            Name = item.GetType().Name,
+            TypeName = item.GetType().AssemblyQualifiedName
+          }
+        };
+        using (var memStream = new MemoryStream()) {
+          XmlGenerator.Serialize(item, memStream);
+          binaryValue.Value = memStream.ToArray();
+        }
+        result = binaryValue;
+      }
+      result.Name = name;
+      return result;
+    }
+    #endregion
+
     #region Events
     public event EventHandler Refreshing;
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/BoolValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/BoolValue.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/BoolValue.cs	(revision 13550)
@@ -24,4 +24,5 @@
 namespace HeuristicLab.Clients.OKB.RunCreation {
   public partial class BoolValue {
+
     public BoolValue() {
       DataType = new DataType() {
@@ -31,5 +32,5 @@
     }
 
-    public override string ToString() {
+    public override string GetValue() {
       return Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
     }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/DoubleValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/DoubleValue.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/DoubleValue.cs	(revision 13550)
@@ -31,5 +31,5 @@
     }
 
-    public override string ToString() {
+    public override string GetValue() {
       return Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
     }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/FloatValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/FloatValue.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/FloatValue.cs	(revision 13550)
@@ -31,5 +31,5 @@
     }
 
-    public override string ToString() {
+    public override string GetValue() {
       return Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
     }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/IntValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/IntValue.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/IntValue.cs	(revision 13550)
@@ -31,5 +31,5 @@
     }
 
-    public override string ToString() {
+    public override string GetValue() {
       return Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
     }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/LongValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/LongValue.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/LongValue.cs	(revision 13550)
@@ -31,5 +31,5 @@
     }
 
-    public override string ToString() {
+    public override string GetValue() {
       return Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
     }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/PercentValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/PercentValue.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/PercentValue.cs	(revision 13550)
@@ -31,6 +31,6 @@
     }
 
-    public override string ToString() {
-      return (100 * Value).ToString(CultureInfo.CurrentCulture.NumberFormat) + "%";
+    public override string GetValue() {
+      return Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
     }
   }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/StringValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/StringValue.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/StringValue.cs	(revision 13550)
@@ -30,5 +30,5 @@
     }
 
-    public override string ToString() {
+    public override string GetValue() {
       return Value;
     }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/TimeSpanValue.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/TimeSpanValue.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/TimeSpanValue.cs	(revision 13550)
@@ -31,6 +31,6 @@
     }
 
-    public override string ToString() {
-      return Value.ToString(CultureInfo.CurrentCulture.DateTimeFormat);
+    public override string GetValue() {
+      return Value.ToString(CultureInfo.CurrentCulture.NumberFormat);
     }
   }
Index: trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Value.cs
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Value.cs	(revision 13549)
+++ trunk/sources/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/Value.cs	(revision 13550)
@@ -26,4 +26,8 @@
 namespace HeuristicLab.Clients.OKB.RunCreation {
   public partial class Value {
+    public virtual string GetValue() {
+      return string.Empty;
+    }
+
     public static Value Create(string name, string strValue, string type) {
       switch (type) {
