Index: trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj	(revision 13474)
+++ trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj	(revision 13534)
@@ -333,4 +333,8 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data.Views\3.3\HeuristicLab.Data.Views-3.3.csproj">
+      <Project>{72104A0B-90E7-42F3-9ABE-9BBBADD4B943}</Project>
+      <Name>HeuristicLab.Data.Views-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
       <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
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 13474)
+++ trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 13534)
@@ -49,6 +49,15 @@
       this.refreshButton = new System.Windows.Forms.Button();
       this.cloneProblemButton = new System.Windows.Forms.Button();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.characteristicsTabPage = new System.Windows.Forms.TabPage();
       this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.downloadCharacteristicsButton = new System.Windows.Forms.Button();
+      this.uploadCharacteristicsButton = new System.Windows.Forms.Button();
+      this.characteristicsMatrixView = new HeuristicLab.Data.Views.StringConvertibleMatrixView();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.characteristicsTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -74,5 +83,5 @@
       // 
       this.problemComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
+            | System.Windows.Forms.AnchorStyles.Right)));
       this.problemComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.problemComboBox.FormattingEnabled = true;
@@ -116,17 +125,88 @@
       this.cloneProblemButton.Click += new System.EventHandler(this.cloneProblemButton_Click);
       // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.characteristicsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(6, 53);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(700, 340);
+      this.tabControl.TabIndex = 8;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.parameterCollectionView);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(692, 314);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // characteristicsTabPage
+      // 
+      this.characteristicsTabPage.Controls.Add(this.characteristicsMatrixView);
+      this.characteristicsTabPage.Controls.Add(this.uploadCharacteristicsButton);
+      this.characteristicsTabPage.Controls.Add(this.downloadCharacteristicsButton);
+      this.characteristicsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.characteristicsTabPage.Name = "characteristicsTabPage";
+      this.characteristicsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.characteristicsTabPage.Size = new System.Drawing.Size(692, 314);
+      this.characteristicsTabPage.TabIndex = 1;
+      this.characteristicsTabPage.Text = "Characteristics";
+      this.characteristicsTabPage.UseVisualStyleBackColor = true;
+      // 
       // parameterCollectionView
       // 
       this.parameterCollectionView.AllowEditingOfHiddenParameters = false;
-      this.parameterCollectionView.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.parameterCollectionView.Caption = "ParameterCollection View";
       this.parameterCollectionView.Content = null;
-      this.parameterCollectionView.Location = new System.Drawing.Point(0, 53);
+      this.parameterCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.parameterCollectionView.Location = new System.Drawing.Point(3, 3);
       this.parameterCollectionView.Name = "parameterCollectionView";
-      this.parameterCollectionView.ReadOnly = false;
-      this.parameterCollectionView.Size = new System.Drawing.Size(706, 340);
-      this.parameterCollectionView.TabIndex = 7;
+      this.parameterCollectionView.ReadOnly = true;
+      this.parameterCollectionView.ShowDetails = true;
+      this.parameterCollectionView.Size = new System.Drawing.Size(686, 308);
+      this.parameterCollectionView.TabIndex = 8;
+      // 
+      // downloadCharacteristicsButton
+      // 
+      this.downloadCharacteristicsButton.Location = new System.Drawing.Point(6, 6);
+      this.downloadCharacteristicsButton.Name = "downloadCharacteristicsButton";
+      this.downloadCharacteristicsButton.Size = new System.Drawing.Size(26, 23);
+      this.downloadCharacteristicsButton.TabIndex = 0;
+      this.downloadCharacteristicsButton.Text = "Download";
+      this.downloadCharacteristicsButton.UseVisualStyleBackColor = true;
+      this.downloadCharacteristicsButton.Click += new System.EventHandler(this.downloadCharacteristicsButton_Click);
+      // 
+      // uploadCharacteristicsButton
+      // 
+      this.uploadCharacteristicsButton.Location = new System.Drawing.Point(38, 6);
+      this.uploadCharacteristicsButton.Name = "uploadCharacteristicsButton";
+      this.uploadCharacteristicsButton.Size = new System.Drawing.Size(26, 23);
+      this.uploadCharacteristicsButton.TabIndex = 0;
+      this.uploadCharacteristicsButton.Text = "Upload";
+      this.uploadCharacteristicsButton.UseVisualStyleBackColor = true;
+      this.uploadCharacteristicsButton.Click += new System.EventHandler(this.uploadCharacteristicsButton_Click);
+      // 
+      // characteristicsMatrixView
+      // 
+      this.characteristicsMatrixView.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.characteristicsMatrixView.Caption = "StringConvertibleMatrix View";
+      this.characteristicsMatrixView.Content = null;
+      this.characteristicsMatrixView.Location = new System.Drawing.Point(6, 35);
+      this.characteristicsMatrixView.Name = "characteristicsMatrixView";
+      this.characteristicsMatrixView.ReadOnly = false;
+      this.characteristicsMatrixView.ShowRowsAndColumnsTextBox = false;
+      this.characteristicsMatrixView.ShowStatisticalInformation = false;
+      this.characteristicsMatrixView.Size = new System.Drawing.Size(680, 273);
+      this.characteristicsMatrixView.TabIndex = 1;
       // 
       // OKBProblemView
@@ -134,6 +214,6 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
       this.Controls.Add(this.problemComboBox);
-      this.Controls.Add(this.parameterCollectionView);
       this.Controls.Add(this.problemLabel);
       this.Controls.Add(this.cloneProblemButton);
@@ -144,10 +224,13 @@
       this.Controls.SetChildIndex(this.cloneProblemButton, 0);
       this.Controls.SetChildIndex(this.problemLabel, 0);
-      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
+      this.Controls.SetChildIndex(this.problemComboBox, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.nameLabel, 0);
       this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.problemComboBox, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.characteristicsTabPage.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -161,5 +244,11 @@
     private System.Windows.Forms.Button refreshButton;
     private System.Windows.Forms.Button cloneProblemButton;
-    private HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.TabPage characteristicsTabPage;
+    private Core.Views.ParameterCollectionView parameterCollectionView;
+    private Data.Views.StringConvertibleMatrixView characteristicsMatrixView;
+    private System.Windows.Forms.Button uploadCharacteristicsButton;
+    private System.Windows.Forms.Button downloadCharacteristicsButton;
 
 
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 13474)
+++ trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 13534)
@@ -21,7 +21,10 @@
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
 using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
 using HeuristicLab.MainForm;
 
@@ -38,4 +41,8 @@
     public OKBProblemView() {
       InitializeComponent();
+      downloadCharacteristicsButton.Text = string.Empty;
+      downloadCharacteristicsButton.Image = VSImageLibrary.Refresh;
+      uploadCharacteristicsButton.Text = string.Empty;
+      uploadCharacteristicsButton.Image = VSImageLibrary.PublishToWeb;
     }
 
@@ -73,4 +80,8 @@
       refreshButton.Enabled = (Content != null) && !ReadOnly && !Locked;
       parameterCollectionView.Enabled = Content != null;
+      characteristicsMatrixView.Enabled = Content != null;
+      downloadCharacteristicsButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked;
+      uploadCharacteristicsButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked && !ReadOnly
+        && characteristicsMatrixView.Content != null && characteristicsMatrixView.Content.Rows > 0;
     }
 
@@ -103,6 +114,8 @@
       if (InvokeRequired)
         Invoke(new EventHandler(Content_ProblemChanged), sender, e);
-      else
+      else {
         OnContentChanged();
+        SetEnabledStateOfControls();
+      }
     }
     #endregion
@@ -123,4 +136,29 @@
       }
     }
+    private void downloadCharacteristicsButton_Click(object sender, EventArgs e) {
+      var values = RunCreationClient.GetCharacteristicValues(Content.ProblemId).ToList();
+      var content = new StringMatrix(values.Count, 3);
+      for (var i = 0; i < values.Count; i++) {
+        content[i, 0] = values[i].Name;
+        content[i, 1] = values[i].ToString();
+        content[i, 2] = values[i].GetType().Name;
+      }
+      characteristicsMatrixView.Content = content;
+      SetEnabledStateOfControls();
+    }
+    private void uploadCharacteristicsButton_Click(object sender, EventArgs e) {
+      var matrix = characteristicsMatrixView.Content as StringMatrix;
+      if (matrix == null) return;
+      var values = new List<Value>(matrix.Rows);
+      for (var i = 0; i < matrix.Rows; i++) {
+        var name = matrix[i, 0];
+        var strValue = matrix[i, 1];
+        var type = matrix[i, 2];
+        values.Add(Value.Create(name, strValue, type));
+      }
+      try {
+        RunCreationClient.SetCharacteristicValues(Content.ProblemId, values);
+      } catch (Exception ex) { PluginInfrastructure.ErrorHandling.ShowErrorDialog(ex); }
+    }
     #endregion
 
