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 13684)
+++ trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 13691)
@@ -52,13 +52,18 @@
       this.parametersTabPage = new System.Windows.Forms.TabPage();
       this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.solutionsTabPage = new System.Windows.Forms.TabPage();
       this.flaAnalysisTabPage = new System.Windows.Forms.TabPage();
+      this.flaSplitContainer = new System.Windows.Forms.SplitContainer();
       this.calculateButton = new System.Windows.Forms.Button();
-      this.flaSplitContainer = new System.Windows.Forms.SplitContainer();
       this.characteristicsMatrixView = new HeuristicLab.Data.Views.StringConvertibleMatrixView();
       this.uploadCharacteristicsButton = new System.Windows.Forms.Button();
       this.downloadCharacteristicsButton = new System.Windows.Forms.Button();
+      this.solutionsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.refreshSolutionsButton = new System.Windows.Forms.Button();
+      this.uploadSolutionsButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl.SuspendLayout();
       this.parametersTabPage.SuspendLayout();
+      this.solutionsTabPage.SuspendLayout();
       this.flaAnalysisTabPage.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.flaSplitContainer)).BeginInit();
@@ -135,4 +140,5 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.solutionsTabPage);
       this.tabControl.Controls.Add(this.flaAnalysisTabPage);
       this.tabControl.Location = new System.Drawing.Point(6, 53);
@@ -148,5 +154,5 @@
       this.parametersTabPage.Name = "parametersTabPage";
       this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.parametersTabPage.Size = new System.Drawing.Size(692, 314);
+      this.parametersTabPage.Size = new System.Drawing.Size(728, 447);
       this.parametersTabPage.TabIndex = 0;
       this.parametersTabPage.Text = "Parameters";
@@ -163,6 +169,19 @@
       this.parameterCollectionView.ReadOnly = true;
       this.parameterCollectionView.ShowDetails = true;
-      this.parameterCollectionView.Size = new System.Drawing.Size(686, 308);
+      this.parameterCollectionView.Size = new System.Drawing.Size(722, 441);
       this.parameterCollectionView.TabIndex = 8;
+      // 
+      // solutionsTabPage
+      // 
+      this.solutionsTabPage.Controls.Add(this.uploadSolutionsButton);
+      this.solutionsTabPage.Controls.Add(this.refreshSolutionsButton);
+      this.solutionsTabPage.Controls.Add(this.solutionsViewHost);
+      this.solutionsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsTabPage.Name = "solutionsTabPage";
+      this.solutionsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsTabPage.Size = new System.Drawing.Size(728, 447);
+      this.solutionsTabPage.TabIndex = 3;
+      this.solutionsTabPage.Text = "Solutions";
+      this.solutionsTabPage.UseVisualStyleBackColor = true;
       // 
       // flaAnalysisTabPage
@@ -177,4 +196,24 @@
       this.flaAnalysisTabPage.UseVisualStyleBackColor = true;
       // 
+      // flaSplitContainer
+      // 
+      this.flaSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.flaSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.flaSplitContainer.Location = new System.Drawing.Point(3, 3);
+      this.flaSplitContainer.Name = "flaSplitContainer";
+      // 
+      // flaSplitContainer.Panel1
+      // 
+      this.flaSplitContainer.Panel1.Controls.Add(this.calculateButton);
+      // 
+      // flaSplitContainer.Panel2
+      // 
+      this.flaSplitContainer.Panel2.Controls.Add(this.characteristicsMatrixView);
+      this.flaSplitContainer.Panel2.Controls.Add(this.uploadCharacteristicsButton);
+      this.flaSplitContainer.Panel2.Controls.Add(this.downloadCharacteristicsButton);
+      this.flaSplitContainer.Size = new System.Drawing.Size(722, 441);
+      this.flaSplitContainer.SplitterDistance = 363;
+      this.flaSplitContainer.TabIndex = 7;
+      // 
       // calculateButton
       // 
@@ -186,24 +225,4 @@
       this.calculateButton.UseVisualStyleBackColor = true;
       this.calculateButton.Click += new System.EventHandler(this.calculateButton_Click);
-      // 
-      // flaSplitContainer
-      // 
-      this.flaSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.flaSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
-      this.flaSplitContainer.Location = new System.Drawing.Point(3, 3);
-      this.flaSplitContainer.Name = "flaSplitContainer";
-      // 
-      // flaSplitContainer.Panel1
-      // 
-      this.flaSplitContainer.Panel1.Controls.Add(this.calculateButton);
-      // 
-      // flaSplitContainer.Panel2
-      // 
-      this.flaSplitContainer.Panel2.Controls.Add(this.characteristicsMatrixView);
-      this.flaSplitContainer.Panel2.Controls.Add(this.uploadCharacteristicsButton);
-      this.flaSplitContainer.Panel2.Controls.Add(this.downloadCharacteristicsButton);
-      this.flaSplitContainer.Size = new System.Drawing.Size(722, 441);
-      this.flaSplitContainer.SplitterDistance = 363;
-      this.flaSplitContainer.TabIndex = 7;
       // 
       // characteristicsMatrixView
@@ -241,4 +260,40 @@
       this.downloadCharacteristicsButton.UseVisualStyleBackColor = true;
       this.downloadCharacteristicsButton.Click += new System.EventHandler(this.downloadCharacteristicsButton_Click);
+      // 
+      // solutionsViewHost
+      // 
+      this.solutionsViewHost.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.solutionsViewHost.Caption = "View";
+      this.solutionsViewHost.Content = null;
+      this.solutionsViewHost.Enabled = false;
+      this.solutionsViewHost.Location = new System.Drawing.Point(0, 35);
+      this.solutionsViewHost.Name = "solutionsViewHost";
+      this.solutionsViewHost.ReadOnly = false;
+      this.solutionsViewHost.Size = new System.Drawing.Size(728, 412);
+      this.solutionsViewHost.TabIndex = 0;
+      this.solutionsViewHost.ViewsLabelVisible = true;
+      this.solutionsViewHost.ViewType = null;
+      // 
+      // refreshSolutionsButton
+      // 
+      this.refreshSolutionsButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshSolutionsButton.Name = "refreshSolutionsButton";
+      this.refreshSolutionsButton.Size = new System.Drawing.Size(26, 23);
+      this.refreshSolutionsButton.TabIndex = 1;
+      this.refreshSolutionsButton.Text = "Refresh";
+      this.refreshSolutionsButton.UseVisualStyleBackColor = true;
+      this.refreshSolutionsButton.Click += new System.EventHandler(this.refreshSolutionsButton_Click);
+      // 
+      // uploadSolutionsButton
+      // 
+      this.uploadSolutionsButton.Location = new System.Drawing.Point(38, 6);
+      this.uploadSolutionsButton.Name = "uploadSolutionsButton";
+      this.uploadSolutionsButton.Size = new System.Drawing.Size(26, 23);
+      this.uploadSolutionsButton.TabIndex = 1;
+      this.uploadSolutionsButton.Text = "Upload";
+      this.uploadSolutionsButton.UseVisualStyleBackColor = true;
+      this.uploadSolutionsButton.Click += new System.EventHandler(this.uploadSolutionsButton_Click);
       // 
       // OKBProblemView
@@ -264,4 +319,5 @@
       this.tabControl.ResumeLayout(false);
       this.parametersTabPage.ResumeLayout(false);
+      this.solutionsTabPage.ResumeLayout(false);
       this.flaAnalysisTabPage.ResumeLayout(false);
       this.flaSplitContainer.Panel1.ResumeLayout(false);
@@ -289,4 +345,8 @@
     private System.Windows.Forms.Button uploadCharacteristicsButton;
     private System.Windows.Forms.Button downloadCharacteristicsButton;
+    private System.Windows.Forms.TabPage solutionsTabPage;
+    private MainForm.WindowsForms.ViewHost solutionsViewHost;
+    private System.Windows.Forms.Button uploadSolutionsButton;
+    private System.Windows.Forms.Button refreshSolutionsButton;
 
 
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 13684)
+++ trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 13691)
@@ -73,4 +73,8 @@
       uploadCharacteristicsButton.Text = string.Empty;
       uploadCharacteristicsButton.Image = VSImageLibrary.PublishToWeb;
+      refreshSolutionsButton.Text = string.Empty;
+      refreshSolutionsButton.Image = VSImageLibrary.Refresh;
+      uploadSolutionsButton.Text = string.Empty;
+      uploadSolutionsButton.Image = VSImageLibrary.PublishToWeb;
     }
 
@@ -93,4 +97,12 @@
       base.RegisterContentEvents();
       Content.ProblemChanged += new EventHandler(Content_ProblemChanged);
+      Content.Solutions.ItemsAdded += SolutionsOnChanged;
+      Content.Solutions.ItemsReplaced += SolutionsOnChanged;
+      Content.Solutions.ItemsRemoved += SolutionsOnChanged;
+      Content.Solutions.CollectionReset += SolutionsOnChanged;
+    }
+
+    private void SolutionsOnChanged(object sender, EventArgs e) {
+      SetEnabledStateOfControls();
     }
 
@@ -100,7 +112,9 @@
         problemComboBox.SelectedIndex = -1;
         parameterCollectionView.Content = null;
+        solutionsViewHost.Content = null;
       } else {
         problemComboBox.SelectedItem = RunCreationClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
         parameterCollectionView.Content = Content.Parameters;
+        solutionsViewHost.Content = Content.Solutions;
       }
       UpdateCharacteristicCalculators();
@@ -118,4 +132,6 @@
         && characteristicsMatrixView.Content != null && characteristicsMatrixView.Content.Rows > 0;
       calculateButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked && !ReadOnly && calculatorList.CheckedItems.Any();
+      refreshSolutionsButton.Enabled = Content != null && !ReadOnly && !Locked && Content.ProblemId != -1;
+      uploadSolutionsButton.Enabled = Content != null && !ReadOnly && !Locked && Content.ProblemId != -1 && Content.Solutions.Any(x => x.SolutionId == -1);
     }
 
@@ -217,37 +233,40 @@
       }
       var matrix = (characteristicsMatrixView.Content as StringMatrix) ?? (new StringMatrix(results.Count, 3));
-      for (var i = 0; i < matrix.Rows; i++) {
-        Value r;
-        if (results.TryGetValue(matrix[i, 0], out r)) {
-          matrix[i, 1] = r.GetValue();
-          matrix[i, 2] = r.GetType().Name;
-          results.Remove(matrix[i, 0]);
+      try {
+        for (var i = 0; i < matrix.Rows; i++) {
+          Value r;
+          if (results.TryGetValue(matrix[i, 0], out r)) {
+            matrix[i, 1] = r.GetValue();
+            matrix[i, 2] = r.GetType().Name;
+            results.Remove(matrix[i, 0]);
+          }
         }
-      }
-      if (results.Count == 0) return;
-      var resultsList = results.ToList();
-      var counter = resultsList.Count - 1;
-      for (var i = 0; i < matrix.Rows; i++) {
-        if (string.IsNullOrEmpty(matrix[i, 0])) {
-          matrix[i, 0] = resultsList[counter].Key;
-          matrix[i, 1] = resultsList[counter].Value.GetValue();
-          matrix[i, 2] = resultsList[counter].Value.GetType().Name;
-          resultsList.RemoveAt(counter);
-          counter--;
-          if (counter < 0) return;
+        if (results.Count == 0) return;
+        var resultsList = results.ToList();
+        var counter = resultsList.Count - 1;
+        for (var i = 0; i < matrix.Rows; i++) {
+          if (string.IsNullOrEmpty(matrix[i, 0])) {
+            matrix[i, 0] = resultsList[counter].Key;
+            matrix[i, 1] = resultsList[counter].Value.GetValue();
+            matrix[i, 2] = resultsList[counter].Value.GetType().Name;
+            resultsList.RemoveAt(counter);
+            counter--;
+            if (counter < 0) return;
+          }
         }
-      }
-      if (counter >= 0) {
-        ((IStringConvertibleMatrix)matrix).Rows += counter + 1;
-        for (var i = matrix.Rows - 1; counter >= 0; i--) {
-          matrix[i, 0] = resultsList[0].Key;
-          matrix[i, 1] = resultsList[0].Value.GetValue();
-          matrix[i, 2] = resultsList[0].Value.GetType().Name;
-          resultsList.RemoveAt(0);
-          counter--;
+        if (counter >= 0) {
+          ((IStringConvertibleMatrix)matrix).Rows += counter + 1;
+          for (var i = matrix.Rows - 1; counter >= 0; i--) {
+            matrix[i, 0] = resultsList[0].Key;
+            matrix[i, 1] = resultsList[0].Value.GetValue();
+            matrix[i, 2] = resultsList[0].Value.GetType().Name;
+            resultsList.RemoveAt(0);
+            counter--;
+          }
         }
-      }
-      characteristicsMatrixView.Content = matrix;
-      SetEnabledStateOfControls();
+      } finally {
+        characteristicsMatrixView.Content = matrix;
+        SetEnabledStateOfControls();
+      }
     }
     #endregion
@@ -261,4 +280,13 @@
     #endregion
 
+    private void refreshSolutionsButton_Click(object sender, EventArgs e) {
+      Content.RefreshSolutions();
+    }
+
+    private void uploadSolutionsButton_Click(object sender, EventArgs e) {
+      foreach (var solution in Content.Solutions.Where(x => x.SolutionId == -1))
+        solution.Upload();
+    }
+
   }
 }
