Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/ClientNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/ClientNodeView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/ClientNodeView.Designer.cs	(revision 11526)
@@ -0,0 +1,184 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Optimization.Networks.Views {
+  partial class ClientNodeView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.portCollectionView = new HeuristicLab.Optimization.Networks.Views.PortCollectionView();
+      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.portsTabPage = new System.Windows.Forms.TabPage();
+      this.serviceCallsTabPage = new System.Windows.Forms.TabPage();
+      this.serviceParameterCollectionCollectionView = new HeuristicLab.Optimization.Networks.Views.ServiceParameterCollectionCollectionView();
+      this.callServicesButton = new System.Windows.Forms.Button();
+      this.cancelServicesButton = new System.Windows.Forms.Button();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.portsTabPage.SuspendLayout();
+      this.serviceCallsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // portCollectionView
+      // 
+      this.portCollectionView.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.portCollectionView.Caption = "PortCollection View";
+      this.portCollectionView.Content = null;
+      this.portCollectionView.Location = new System.Drawing.Point(6, 6);
+      this.portCollectionView.Name = "portCollectionView";
+      this.portCollectionView.ReadOnly = false;
+      this.portCollectionView.ShowDetails = true;
+      this.portCollectionView.Size = new System.Drawing.Size(625, 424);
+      this.portCollectionView.TabIndex = 0;
+      // 
+      // tabControl
+      // 
+      this.tabControl.AllowDrop = true;
+      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.portsTabPage);
+      this.tabControl.Controls.Add(this.serviceCallsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 26);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(645, 462);
+      this.tabControl.TabIndex = 3;
+      // 
+      // portsTabPage
+      // 
+      this.portsTabPage.Controls.Add(this.portCollectionView);
+      this.portsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.portsTabPage.Name = "portsTabPage";
+      this.portsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.portsTabPage.Size = new System.Drawing.Size(637, 436);
+      this.portsTabPage.TabIndex = 0;
+      this.portsTabPage.Text = "Ports";
+      this.portsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // serviceCallsTabPage
+      // 
+      this.serviceCallsTabPage.Controls.Add(this.serviceParameterCollectionCollectionView);
+      this.serviceCallsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.serviceCallsTabPage.Name = "serviceCallsTabPage";
+      this.serviceCallsTabPage.Size = new System.Drawing.Size(637, 428);
+      this.serviceCallsTabPage.TabIndex = 2;
+      this.serviceCallsTabPage.Text = "Service Calls";
+      this.serviceCallsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // serviceParameterCollectionCollectionView
+      // 
+      this.serviceParameterCollectionCollectionView.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.serviceParameterCollectionCollectionView.Caption = "ServiceParameterCollectionCollection View";
+      this.serviceParameterCollectionCollectionView.Content = null;
+      this.serviceParameterCollectionCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.serviceParameterCollectionCollectionView.Name = "serviceParameterCollectionCollectionView";
+      this.serviceParameterCollectionCollectionView.ReadOnly = false;
+      this.serviceParameterCollectionCollectionView.ShowDetails = true;
+      this.serviceParameterCollectionCollectionView.Size = new System.Drawing.Size(631, 422);
+      this.serviceParameterCollectionCollectionView.TabIndex = 0;
+      // 
+      // callServicesButton
+      // 
+      this.callServicesButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.callServicesButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play;
+      this.callServicesButton.Location = new System.Drawing.Point(0, 494);
+      this.callServicesButton.Name = "callServicesButton";
+      this.callServicesButton.Size = new System.Drawing.Size(23, 23);
+      this.callServicesButton.TabIndex = 4;
+      this.callServicesButton.UseVisualStyleBackColor = true;
+      this.callServicesButton.Click += new System.EventHandler(this.callServicesButton_Click);
+      // 
+      // cancelServicesButton
+      // 
+      this.cancelServicesButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.cancelServicesButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Stop;
+      this.cancelServicesButton.Location = new System.Drawing.Point(29, 494);
+      this.cancelServicesButton.Name = "cancelServicesButton";
+      this.cancelServicesButton.Size = new System.Drawing.Size(23, 23);
+      this.cancelServicesButton.TabIndex = 5;
+      this.cancelServicesButton.UseVisualStyleBackColor = true;
+      this.cancelServicesButton.Click += new System.EventHandler(this.cancelServicesButton_Click);
+      // 
+      // ClientNodeView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.cancelServicesButton);
+      this.Controls.Add(this.callServicesButton);
+      this.Controls.Add(this.tabControl);
+      this.Name = "ClientNodeView";
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.callServicesButton, 0);
+      this.Controls.SetChildIndex(this.cancelServicesButton, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.portsTabPage.ResumeLayout(false);
+      this.serviceCallsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected PortCollectionView portCollectionView;
+    protected System.Windows.Forms.TabPage portsTabPage;
+    protected HeuristicLab.MainForm.WindowsForms.DragOverTabControl tabControl;
+    protected System.Windows.Forms.TabPage serviceCallsTabPage;
+    protected ServiceParameterCollectionCollectionView serviceParameterCollectionCollectionView;
+    protected System.Windows.Forms.Button callServicesButton;
+    protected System.Windows.Forms.Button cancelServicesButton;
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/ClientNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/ClientNodeView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/ClientNodeView.cs	(revision 11526)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using System;
+using System.Threading;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Optimization.Networks.Views {
+  [View("ClientNode View")]
+  [Content(typeof(ClientNode), true)]
+  [Content(typeof(IClientNode), false)]
+  public partial class ClientNodeView : EntityView {
+    protected CancellationTokenSource tokenSource;
+    protected int openCalls = 0;
+
+    public new IClientNode Content {
+      get { return (IClientNode)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ClientNodeView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      if (tokenSource != null) tokenSource.Cancel();
+
+      if (Content == null) {
+        tokenSource = null;
+        portCollectionView.Content = null;
+        serviceParameterCollectionCollectionView.Content = null;
+      } else {
+        tokenSource = new CancellationTokenSource();
+        portCollectionView.Content = Content.Ports;
+        serviceParameterCollectionCollectionView.Content = Content.Calls;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      callServicesButton.Enabled = Content != null && !ReadOnly;
+      cancelServicesButton.Enabled = Content != null && !ReadOnly && openCalls > 0;
+      portCollectionView.Enabled = Content != null && !ReadOnly;
+      serviceParameterCollectionCollectionView.Enabled = Content != null && !ReadOnly;
+    }
+
+    protected virtual void callServicesButton_Click(object sender, EventArgs e) {
+      openCalls++;
+      cancelServicesButton.Enabled = Content != null && !ReadOnly && openCalls > 0;
+      Content.CallServicesAsync(tokenSource.Token).ContinueWith(t => {
+        Invoke(new Action(() => {
+          openCalls--;
+          cancelServicesButton.Enabled = Content != null && !ReadOnly && openCalls > 0;
+
+          try {
+            t.Wait();
+          }
+          catch (Exception ex) {
+            ErrorHandling.ShowErrorDialog(this, ex);
+          }
+        }));
+      });
+    }
+    protected virtual void cancelServicesButton_Click(object sender, EventArgs e) {
+      tokenSource.Cancel();
+      tokenSource = new CancellationTokenSource();
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/VariablesNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/VariablesNodeView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/VariablesNodeView.Designer.cs	(revision 11526)
@@ -0,0 +1,133 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Optimization.Networks.Views {
+  partial class VariablesNodeView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.variableCollectionView = new HeuristicLab.Core.Views.VariableCollectionView();
+      this.portCollectionView = new HeuristicLab.Optimization.Networks.Views.PortCollectionView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.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.splitContainer.Location = new System.Drawing.Point(0, 26);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.portCollectionView);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.variableCollectionView);
+      this.splitContainer.Size = new System.Drawing.Size(645, 491);
+      this.splitContainer.SplitterDistance = 237;
+      this.splitContainer.TabIndex = 3;
+      // 
+      // variableCollectionView
+      // 
+      this.variableCollectionView.Caption = "VariableCollection View";
+      this.variableCollectionView.Content = null;
+      this.variableCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableCollectionView.Location = new System.Drawing.Point(0, 0);
+      this.variableCollectionView.Name = "variableCollectionView";
+      this.variableCollectionView.ReadOnly = false;
+      this.variableCollectionView.ShowDetails = true;
+      this.variableCollectionView.Size = new System.Drawing.Size(645, 250);
+      this.variableCollectionView.TabIndex = 0;
+      // 
+      // portCollectionView
+      // 
+      this.portCollectionView.Caption = "PortCollection View";
+      this.portCollectionView.Content = null;
+      this.portCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.portCollectionView.Location = new System.Drawing.Point(0, 0);
+      this.portCollectionView.Name = "portCollectionView";
+      this.portCollectionView.ReadOnly = false;
+      this.portCollectionView.ShowDetails = true;
+      this.portCollectionView.Size = new System.Drawing.Size(645, 237);
+      this.portCollectionView.TabIndex = 0;
+      // 
+      // VariablesNodeView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "VariablesNodeView";
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.splitContainer, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.SplitContainer splitContainer;
+    protected Core.Views.VariableCollectionView variableCollectionView;
+    private PortCollectionView portCollectionView;
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/VariablesNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/VariablesNodeView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/### obsolete/VariablesNodeView.cs	(revision 11526)
@@ -0,0 +1,54 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Optimization.Networks.Views {
+  [View("VariablesNode View")]
+  [Content(typeof(VariablesNode), true)]
+  [Content(typeof(IVariablesNode), false)]
+  public partial class VariablesNodeView : EntityView {
+    public new IVariablesNode Content {
+      get { return (IVariablesNode)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public VariablesNodeView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      portCollectionView.Content = Content == null ? null : Content.Ports;
+      variableCollectionView.Content = Content == null ? null : Content.Variables;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      portCollectionView.Enabled = Content != null && !ReadOnly;
+      variableCollectionView.Enabled = Content != null && !ReadOnly;
+    }
+  }
+}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/AlgorithmNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/AlgorithmNodeView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,220 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class AlgorithmNodeView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AlgorithmNodeView));
-      this.portCollectionView = new HeuristicLab.Optimization.Networks.Views.PortCollectionView();
-      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.portsTabPage = new System.Windows.Forms.TabPage();
-      this.algorithmTabPage = new System.Windows.Forms.TabPage();
-      this.algorithmPanel = new System.Windows.Forms.Panel();
-      this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.clearAlgorithmButton = new System.Windows.Forms.Button();
-      this.setAlgorithmButton = new System.Windows.Forms.Button();
-      this.runsTabPage = new System.Windows.Forms.TabPage();
-      this.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tabControl.SuspendLayout();
-      this.portsTabPage.SuspendLayout();
-      this.algorithmTabPage.SuspendLayout();
-      this.algorithmPanel.SuspendLayout();
-      this.runsTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      // 
-      // portCollectionView
-      // 
-      this.portCollectionView.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.portCollectionView.Caption = "PortCollection View";
-      this.portCollectionView.Content = null;
-      this.portCollectionView.Location = new System.Drawing.Point(6, 6);
-      this.portCollectionView.Name = "portCollectionView";
-      this.portCollectionView.ReadOnly = false;
-      this.portCollectionView.ShowDetails = true;
-      this.portCollectionView.Size = new System.Drawing.Size(625, 453);
-      this.portCollectionView.TabIndex = 0;
-      // 
-      // tabControl
-      // 
-      this.tabControl.AllowDrop = true;
-      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.portsTabPage);
-      this.tabControl.Controls.Add(this.algorithmTabPage);
-      this.tabControl.Controls.Add(this.runsTabPage);
-      this.tabControl.Location = new System.Drawing.Point(0, 26);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(645, 491);
-      this.tabControl.TabIndex = 3;
-      // 
-      // portsTabPage
-      // 
-      this.portsTabPage.Controls.Add(this.portCollectionView);
-      this.portsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.portsTabPage.Name = "portsTabPage";
-      this.portsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.portsTabPage.Size = new System.Drawing.Size(637, 465);
-      this.portsTabPage.TabIndex = 0;
-      this.portsTabPage.Text = "Ports";
-      this.portsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // algorithmTabPage
-      // 
-      this.algorithmTabPage.Controls.Add(this.algorithmPanel);
-      this.algorithmTabPage.Controls.Add(this.clearAlgorithmButton);
-      this.algorithmTabPage.Controls.Add(this.setAlgorithmButton);
-      this.algorithmTabPage.Location = new System.Drawing.Point(4, 22);
-      this.algorithmTabPage.Name = "algorithmTabPage";
-      this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.algorithmTabPage.Size = new System.Drawing.Size(637, 465);
-      this.algorithmTabPage.TabIndex = 1;
-      this.algorithmTabPage.Text = "Algorithm";
-      this.algorithmTabPage.UseVisualStyleBackColor = true;
-      // 
-      // algorithmPanel
-      // 
-      this.algorithmPanel.AllowDrop = true;
-      this.algorithmPanel.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.algorithmPanel.Controls.Add(this.algorithmViewHost);
-      this.algorithmPanel.Location = new System.Drawing.Point(6, 36);
-      this.algorithmPanel.Name = "algorithmPanel";
-      this.algorithmPanel.Size = new System.Drawing.Size(625, 423);
-      this.algorithmPanel.TabIndex = 2;
-      this.algorithmPanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.algorithmPanel_DragDrop);
-      this.algorithmPanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.algorithmPanel_DragEnterOver);
-      this.algorithmPanel.DragOver += new System.Windows.Forms.DragEventHandler(this.algorithmPanel_DragEnterOver);
-      // 
-      // algorithmViewHost
-      // 
-      this.algorithmViewHost.Caption = "View";
-      this.algorithmViewHost.Content = null;
-      this.algorithmViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.algorithmViewHost.Enabled = false;
-      this.algorithmViewHost.Location = new System.Drawing.Point(0, 0);
-      this.algorithmViewHost.Name = "algorithmViewHost";
-      this.algorithmViewHost.ReadOnly = false;
-      this.algorithmViewHost.Size = new System.Drawing.Size(625, 423);
-      this.algorithmViewHost.TabIndex = 0;
-      this.algorithmViewHost.ViewsLabelVisible = true;
-      this.algorithmViewHost.ViewType = null;
-      // 
-      // clearAlgorithmButton
-      // 
-      this.clearAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
-      this.clearAlgorithmButton.Location = new System.Drawing.Point(36, 6);
-      this.clearAlgorithmButton.Name = "clearAlgorithmButton";
-      this.clearAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.clearAlgorithmButton.TabIndex = 1;
-      this.clearAlgorithmButton.UseVisualStyleBackColor = true;
-      this.clearAlgorithmButton.Click += new System.EventHandler(this.clearAlgorithmButton_Click);
-      // 
-      // setAlgorithmButton
-      // 
-      this.setAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Edit;
-      this.setAlgorithmButton.Location = new System.Drawing.Point(6, 6);
-      this.setAlgorithmButton.Name = "setAlgorithmButton";
-      this.setAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.setAlgorithmButton.TabIndex = 0;
-      this.setAlgorithmButton.UseVisualStyleBackColor = true;
-      this.setAlgorithmButton.Click += new System.EventHandler(this.setAlgorithmButton_Click);
-      // 
-      // runsTabPage
-      // 
-      this.runsTabPage.Controls.Add(this.runCollectionView);
-      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.runsTabPage.Name = "runsTabPage";
-      this.runsTabPage.Size = new System.Drawing.Size(637, 465);
-      this.runsTabPage.TabIndex = 2;
-      this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runCollectionView
-      // 
-      this.runCollectionView.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.runCollectionView.Caption = "RunCollection View";
-      this.runCollectionView.Content = null;
-      this.runCollectionView.Location = new System.Drawing.Point(3, 3);
-      this.runCollectionView.Name = "runCollectionView";
-      this.runCollectionView.ReadOnly = false;
-      this.runCollectionView.Size = new System.Drawing.Size(631, 459);
-      this.runCollectionView.TabIndex = 0;
-      // 
-      // AlgorithmNodeView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.tabControl);
-      this.Name = "AlgorithmNodeView";
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.tabControl, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.tabControl.ResumeLayout(false);
-      this.portsTabPage.ResumeLayout(false);
-      this.algorithmTabPage.ResumeLayout(false);
-      this.algorithmPanel.ResumeLayout(false);
-      this.runsTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected PortCollectionView portCollectionView;
-    protected System.Windows.Forms.TabPage portsTabPage;
-    protected System.Windows.Forms.Button setAlgorithmButton;
-    protected System.Windows.Forms.Button clearAlgorithmButton;
-    protected System.Windows.Forms.Panel algorithmPanel;
-    protected HeuristicLab.MainForm.WindowsForms.DragOverTabControl tabControl;
-    protected System.Windows.Forms.TabPage algorithmTabPage;
-    protected MainForm.WindowsForms.ViewHost algorithmViewHost;
-    protected System.Windows.Forms.TabPage runsTabPage;
-    protected Optimization.Views.RunCollectionView runCollectionView;
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/AlgorithmNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/AlgorithmNodeView.cs	(revision 11525)
+++ 	(revision )
@@ -1,130 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("AlgorithmNode View")]
-  [Content(typeof(AlgorithmNode), true)]
-  [Content(typeof(IAlgorithmNode), false)]
-  public partial class AlgorithmNodeView : EntityView {
-    protected TypeSelectorDialog typeSelectorDialog;
-
-    public new IAlgorithmNode Content {
-      get { return (IAlgorithmNode)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public AlgorithmNodeView() {
-      InitializeComponent();
-    }
-
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.AlgorithmChanged -= Content_AlgorithmChanged;
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.AlgorithmChanged += Content_AlgorithmChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        portCollectionView.Content = null;
-        algorithmViewHost.Content = null;
-        runCollectionView.Content = null;
-      } else {
-        portCollectionView.Content = Content.Ports;
-        algorithmViewHost.ViewType = null;
-        algorithmViewHost.Content = Content.Algorithm;
-        runCollectionView.Content = Content.Runs;
-      }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      portCollectionView.Enabled = Content != null && !ReadOnly;
-      setAlgorithmButton.Enabled = Content != null && !ReadOnly;
-      clearAlgorithmButton.Enabled = Content != null && Content.Algorithm != null && !ReadOnly;
-      algorithmPanel.Enabled = Content != null;
-      runCollectionView.Enabled = Content != null && !ReadOnly;
-    }
-
-    protected virtual void Content_AlgorithmChanged(object sender, System.EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_AlgorithmChanged), sender, e);
-      else {
-        clearAlgorithmButton.Enabled = Content.Algorithm != null && !ReadOnly;
-        algorithmViewHost.ViewType = null;
-        algorithmViewHost.Content = Content.Algorithm;
-      }
-    }
-
-    protected virtual void setAlgorithmButton_Click(object sender, EventArgs e) {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Algorithm";
-        typeSelectorDialog.TypeSelector.Configure(typeof(IAlgorithm), false, true);
-      }
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        try {
-          Content.Algorithm = (IAlgorithm)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-        }
-        catch (Exception ex) {
-          ErrorHandling.ShowErrorDialog(this, ex);
-        }
-      }
-    }
-    protected virtual void clearAlgorithmButton_Click(object sender, EventArgs e) {
-      Content.Algorithm = null;
-    }
-    protected virtual void algorithmPanel_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (!ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IAlgorithm)) {
-        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
-        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
-      }
-    }
-    protected virtual void algorithmPanel_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        IAlgorithm alg = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IAlgorithm;
-        if (e.Effect.HasFlag(DragDropEffects.Copy)) alg = (IAlgorithm)alg.Clone();
-        Content.Algorithm = alg;
-      }
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/ClientNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/ClientNodeView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,184 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class ClientNodeView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.portCollectionView = new HeuristicLab.Optimization.Networks.Views.PortCollectionView();
-      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.portsTabPage = new System.Windows.Forms.TabPage();
-      this.serviceCallsTabPage = new System.Windows.Forms.TabPage();
-      this.serviceParameterCollectionCollectionView = new HeuristicLab.Optimization.Networks.Views.ServiceParameterCollectionCollectionView();
-      this.callServicesButton = new System.Windows.Forms.Button();
-      this.cancelServicesButton = new System.Windows.Forms.Button();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tabControl.SuspendLayout();
-      this.portsTabPage.SuspendLayout();
-      this.serviceCallsTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      // 
-      // portCollectionView
-      // 
-      this.portCollectionView.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.portCollectionView.Caption = "PortCollection View";
-      this.portCollectionView.Content = null;
-      this.portCollectionView.Location = new System.Drawing.Point(6, 6);
-      this.portCollectionView.Name = "portCollectionView";
-      this.portCollectionView.ReadOnly = false;
-      this.portCollectionView.ShowDetails = true;
-      this.portCollectionView.Size = new System.Drawing.Size(625, 424);
-      this.portCollectionView.TabIndex = 0;
-      // 
-      // tabControl
-      // 
-      this.tabControl.AllowDrop = true;
-      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.portsTabPage);
-      this.tabControl.Controls.Add(this.serviceCallsTabPage);
-      this.tabControl.Location = new System.Drawing.Point(0, 26);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(645, 462);
-      this.tabControl.TabIndex = 3;
-      // 
-      // portsTabPage
-      // 
-      this.portsTabPage.Controls.Add(this.portCollectionView);
-      this.portsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.portsTabPage.Name = "portsTabPage";
-      this.portsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.portsTabPage.Size = new System.Drawing.Size(637, 436);
-      this.portsTabPage.TabIndex = 0;
-      this.portsTabPage.Text = "Ports";
-      this.portsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // serviceCallsTabPage
-      // 
-      this.serviceCallsTabPage.Controls.Add(this.serviceParameterCollectionCollectionView);
-      this.serviceCallsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.serviceCallsTabPage.Name = "serviceCallsTabPage";
-      this.serviceCallsTabPage.Size = new System.Drawing.Size(637, 428);
-      this.serviceCallsTabPage.TabIndex = 2;
-      this.serviceCallsTabPage.Text = "Service Calls";
-      this.serviceCallsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // serviceParameterCollectionCollectionView
-      // 
-      this.serviceParameterCollectionCollectionView.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.serviceParameterCollectionCollectionView.Caption = "ServiceParameterCollectionCollection View";
-      this.serviceParameterCollectionCollectionView.Content = null;
-      this.serviceParameterCollectionCollectionView.Location = new System.Drawing.Point(3, 3);
-      this.serviceParameterCollectionCollectionView.Name = "serviceParameterCollectionCollectionView";
-      this.serviceParameterCollectionCollectionView.ReadOnly = false;
-      this.serviceParameterCollectionCollectionView.ShowDetails = true;
-      this.serviceParameterCollectionCollectionView.Size = new System.Drawing.Size(631, 422);
-      this.serviceParameterCollectionCollectionView.TabIndex = 0;
-      // 
-      // callServicesButton
-      // 
-      this.callServicesButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.callServicesButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play;
-      this.callServicesButton.Location = new System.Drawing.Point(0, 494);
-      this.callServicesButton.Name = "callServicesButton";
-      this.callServicesButton.Size = new System.Drawing.Size(23, 23);
-      this.callServicesButton.TabIndex = 4;
-      this.callServicesButton.UseVisualStyleBackColor = true;
-      this.callServicesButton.Click += new System.EventHandler(this.callServicesButton_Click);
-      // 
-      // cancelServicesButton
-      // 
-      this.cancelServicesButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.cancelServicesButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Stop;
-      this.cancelServicesButton.Location = new System.Drawing.Point(29, 494);
-      this.cancelServicesButton.Name = "cancelServicesButton";
-      this.cancelServicesButton.Size = new System.Drawing.Size(23, 23);
-      this.cancelServicesButton.TabIndex = 5;
-      this.cancelServicesButton.UseVisualStyleBackColor = true;
-      this.cancelServicesButton.Click += new System.EventHandler(this.cancelServicesButton_Click);
-      // 
-      // ClientNodeView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.cancelServicesButton);
-      this.Controls.Add(this.callServicesButton);
-      this.Controls.Add(this.tabControl);
-      this.Name = "ClientNodeView";
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.tabControl, 0);
-      this.Controls.SetChildIndex(this.callServicesButton, 0);
-      this.Controls.SetChildIndex(this.cancelServicesButton, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.tabControl.ResumeLayout(false);
-      this.portsTabPage.ResumeLayout(false);
-      this.serviceCallsTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected PortCollectionView portCollectionView;
-    protected System.Windows.Forms.TabPage portsTabPage;
-    protected HeuristicLab.MainForm.WindowsForms.DragOverTabControl tabControl;
-    protected System.Windows.Forms.TabPage serviceCallsTabPage;
-    protected ServiceParameterCollectionCollectionView serviceParameterCollectionCollectionView;
-    protected System.Windows.Forms.Button callServicesButton;
-    protected System.Windows.Forms.Button cancelServicesButton;
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/ClientNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/ClientNodeView.cs	(revision 11525)
+++ 	(revision )
@@ -1,91 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Threading;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("ClientNode View")]
-  [Content(typeof(ClientNode), true)]
-  [Content(typeof(IClientNode), false)]
-  public partial class ClientNodeView : EntityView {
-    protected CancellationTokenSource tokenSource;
-    protected int openCalls = 0;
-
-    public new IClientNode Content {
-      get { return (IClientNode)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public ClientNodeView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-
-      if (tokenSource != null) tokenSource.Cancel();
-
-      if (Content == null) {
-        tokenSource = null;
-        portCollectionView.Content = null;
-        serviceParameterCollectionCollectionView.Content = null;
-      } else {
-        tokenSource = new CancellationTokenSource();
-        portCollectionView.Content = Content.Ports;
-        serviceParameterCollectionCollectionView.Content = Content.Calls;
-      }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      callServicesButton.Enabled = Content != null && !ReadOnly;
-      cancelServicesButton.Enabled = Content != null && !ReadOnly && openCalls > 0;
-      portCollectionView.Enabled = Content != null && !ReadOnly;
-      serviceParameterCollectionCollectionView.Enabled = Content != null && !ReadOnly;
-    }
-
-    protected virtual void callServicesButton_Click(object sender, EventArgs e) {
-      openCalls++;
-      cancelServicesButton.Enabled = Content != null && !ReadOnly && openCalls > 0;
-      Content.CallServicesAsync(tokenSource.Token).ContinueWith(t => {
-        Invoke(new Action(() => {
-          openCalls--;
-          cancelServicesButton.Enabled = Content != null && !ReadOnly && openCalls > 0;
-
-          try {
-            t.Wait();
-          }
-          catch (Exception ex) {
-            ErrorHandling.ShowErrorDialog(this, ex);
-          }
-        }));
-      });
-    }
-    protected virtual void cancelServicesButton_Click(object sender, EventArgs e) {
-      tokenSource.Cancel();
-      tokenSource = new CancellationTokenSource();
-    }
-  }
-}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelector.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelector.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelector.Designer.cs	(revision 11526)
@@ -0,0 +1,106 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class EntitySelector {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.entitiesTreeView = new System.Windows.Forms.TreeView();
+      this.entitiesGroupBox = new System.Windows.Forms.GroupBox();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.entitiesGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // entitiesTreeView
+      // 
+      this.entitiesTreeView.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.entitiesTreeView.HideSelection = false;
+      this.entitiesTreeView.ImageIndex = 0;
+      this.entitiesTreeView.ImageList = this.imageList;
+      this.entitiesTreeView.Location = new System.Drawing.Point(6, 19);
+      this.entitiesTreeView.Name = "entitiesTreeView";
+      this.entitiesTreeView.SelectedImageIndex = 0;
+      this.entitiesTreeView.ShowNodeToolTips = true;
+      this.entitiesTreeView.Size = new System.Drawing.Size(333, 263);
+      this.entitiesTreeView.TabIndex = 0;
+      this.entitiesTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.entitiesTreeView_AfterSelect);
+      // 
+      // entitiesGroupBox
+      // 
+      this.entitiesGroupBox.Controls.Add(this.entitiesTreeView);
+      this.entitiesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.entitiesGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.entitiesGroupBox.Name = "entitiesGroupBox";
+      this.entitiesGroupBox.Size = new System.Drawing.Size(345, 288);
+      this.entitiesGroupBox.TabIndex = 0;
+      this.entitiesGroupBox.TabStop = false;
+      this.entitiesGroupBox.Text = "Network Entities";
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // EntitySelector
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.entitiesGroupBox);
+      this.Name = "EntitySelector";
+      this.Size = new System.Drawing.Size(345, 288);
+      this.entitiesGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.GroupBox entitiesGroupBox;
+    protected System.Windows.Forms.TreeView entitiesTreeView;
+    protected System.Windows.Forms.ImageList imageList;
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelector.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelector.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelector.cs	(revision 11526)
@@ -0,0 +1,143 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  public partial class EntitySelector : UserControl {
+    protected Func<IEntity, bool> entityCondition;
+    protected IEntity root;
+    public IEntity Root {
+      get { return root; }
+    }
+    public string Caption {
+      get { return entitiesGroupBox.Text; }
+      set {
+        if (InvokeRequired)
+          Invoke(new Action<string>(s => { Caption = s; }), value);
+        else
+          entitiesGroupBox.Text = value;
+      }
+    }
+    public TreeView EntitiesTreeView {
+      get { return entitiesTreeView; }
+    }
+    protected IEntity selectedEntity;
+    public IEntity SelectedEntity {
+      get {
+        return selectedEntity;
+      }
+      protected set {
+        if (selectedEntity != value) {
+          selectedEntity = value;
+          OnSelectedEntityChanged();
+        }
+      }
+    }
+
+    public EntitySelector() {
+      InitializeComponent();
+      root = null;
+      entityCondition = null;
+      selectedEntity = null;
+    }
+
+    public virtual void Configure(IEntity root) {
+      Configure(root, null, (e) => true);
+    }
+    public virtual void Configure(IEntity root, IEntity selectedEntity) {
+      Configure(root, selectedEntity, (e) => true);
+    }
+    public virtual void Configure(IEntity root, IEntity selectedEntity, Type entityType) {
+      Configure(root, selectedEntity, (e) => { return entityType.IsAssignableFrom(e.GetType()); });
+    }
+    public virtual void Configure(IEntity root, IEntity selectedEntity, Func<IEntity, bool> entityCondition) {
+      if (root == null) throw new ArgumentNullException("root");
+      if (entityCondition == null) throw new ArgumentNullException("entityCondition");
+      if (InvokeRequired)
+        Invoke(new Action<IEntity, IEntity, Func<IEntity, bool>>(Configure), root, selectedEntity, entityCondition);
+      else {
+        this.root = root;
+        this.entityCondition = entityCondition;
+        this.selectedEntity = null;
+        entitiesTreeView.Nodes.Clear();
+        imageList.Images.Clear();
+
+        TreeNode selectedNode;
+        var n = CreateTreeNode(Root, selectedEntity, entityCondition, out selectedNode);
+        if (n != null)
+          entitiesTreeView.Nodes.Add(n);
+        if (selectedNode != null) {
+          entitiesTreeView.SelectedNode = selectedNode;
+          selectedNode.EnsureVisible();
+        }
+      }
+    }
+
+    public event EventHandler SelectedEntityChanged;
+    protected virtual void OnSelectedEntityChanged() {
+      var handler = SelectedEntityChanged;
+      if (handler != null) SelectedEntityChanged(this, EventArgs.Empty);
+    }
+
+    #region Control Events
+    protected virtual void entitiesTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      if (entitiesTreeView.SelectedNode == null)
+        SelectedEntity = null;
+      else {
+        var selected = (IEntity)entitiesTreeView.SelectedNode.Tag;
+        SelectedEntity = ((entityCondition != null) && !entityCondition(selected)) ? null : selected;
+      }
+    }
+    #endregion
+
+    #region Helpers
+    protected virtual TreeNode CreateTreeNode(IEntity entity, IEntity selectedEntity, Func<IEntity, bool> entityCondition, out TreeNode selectedNode) {
+      selectedNode = null;
+      if (entity == null) return null;
+
+      TreeNode node = new TreeNode(entity.Name);
+      node.Tag = entity;
+      foreach (var child in entity.Children) {
+        TreeNode selected;
+        var n = CreateTreeNode(child, selectedEntity, entityCondition, out selected);
+        if (n != null) {
+          node.Nodes.Add(n);
+          if (selected != null) selectedNode = selected;
+        }
+
+      }
+      if (!entityCondition(entity) && (node.Nodes.Count == 0))
+        return null;
+
+      imageList.Images.Add(entity.ItemImage);
+      node.ImageIndex = imageList.Images.Count - 1;
+      node.SelectedImageIndex = node.ImageIndex;
+      node.ToolTipText = entity.GetType().GetPrettyName();
+
+      if (entity == selectedEntity) selectedNode = node;
+      return node;
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelectorDialog.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelectorDialog.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelectorDialog.Designer.cs	(revision 11526)
@@ -0,0 +1,116 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class EntitySelectorDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.entitySelector = new HeuristicLab.Core.Networks.Views.EntitySelector();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Location = new System.Drawing.Point(320, 409);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 0;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(401, 409);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 0;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // entitySelector
+      // 
+      this.entitySelector.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.entitySelector.Caption = "Network Entities";
+      this.entitySelector.Location = new System.Drawing.Point(12, 12);
+      this.entitySelector.Name = "entitySelector";
+      this.entitySelector.Size = new System.Drawing.Size(464, 391);
+      this.entitySelector.TabIndex = 1;
+      this.entitySelector.SelectedEntityChanged += new System.EventHandler(this.entitySelector_SelectedEntityChanged);
+      // 
+      // EntitySelectorDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(488, 444);
+      this.Controls.Add(this.entitySelector);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "EntitySelectorDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Select Entity";
+      this.Load += new System.EventHandler(this.EntitySelectorDialog_Load);
+      this.Shown += new System.EventHandler(this.EntitySelectorDialog_Shown);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Button okButton;
+    protected System.Windows.Forms.Button cancelButton;
+    protected EntitySelector entitySelector;
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelectorDialog.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelectorDialog.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntitySelectorDialog.cs	(revision 11526)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  public partial class EntitySelectorDialog : Form {
+    public string Caption {
+      get { return Text; }
+      set {
+        if (InvokeRequired)
+          Invoke(new Action<string>(s => { Caption = s; }), value);
+        else
+          Text = value;
+      }
+    }
+    public EntitySelector EntitySelector {
+      get { return entitySelector; }
+    }
+
+    public EntitySelectorDialog() {
+      InitializeComponent();
+      okButton.Enabled = entitySelector.SelectedEntity != null;
+    }
+    protected virtual void EntitySelectorDialog_Load(object sender, EventArgs e) {
+      this.entitySelector.EntitiesTreeView.DoubleClick += new System.EventHandler(EntitiesTreeView_DoubleClick);
+    }
+    protected virtual void EntitySelectorDialog_Shown(object sender, EventArgs e) {
+      okButton.Enabled = entitySelector.SelectedEntity != null;
+    }
+    protected virtual void entitySelector_SelectedEntityChanged(object sender, EventArgs e) {
+      okButton.Enabled = entitySelector.SelectedEntity != null;
+    }
+    protected virtual void EntitiesTreeView_DoubleClick(object sender, System.EventArgs e) {
+      if (entitySelector.SelectedEntity != null) {
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntityView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntityView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntityView.Designer.cs	(revision 11526)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class EntityView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(69, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(551, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(626, 3);
+      // 
+      // EntityView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Name = "EntityView";
+      this.Size = new System.Drawing.Size(645, 517);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntityView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntityView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/EntityView.cs	(revision 11526)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("Entity View")]
+  [Content(typeof(Entity), true)]
+  [Content(typeof(IEntity), false)]
+  public partial class EntityView : NamedItemView {
+    public new IEntity Content {
+      get { return (IEntity)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public EntityView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.PathChanged -= Content_PathChanged;
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.PathChanged += Content_PathChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      toolTip.SetToolTip(nameTextBox, Content != null ? Content.Path : string.Empty);
+    }
+
+    protected virtual void Content_PathChanged(object sender, System.EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_PathChanged), sender, e);
+      else {
+        toolTip.SetToolTip(nameTextBox, Content != null ? Content.Path : string.Empty);
+      }
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericNodeView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericNodeView.Designer.cs	(revision 11526)
@@ -0,0 +1,52 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class GenericNodeView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+    }
+
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericNodeView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericNodeView.cs	(revision 11526)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.MainForm;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("GenericNode View")]
+  [Content(typeof(GenericNode), true)]
+  [Content(typeof(IGenericNode), false)]
+  public partial class GenericNodeView : NodeView {
+    public new IGenericNode Content {
+      get { return (IGenericNode)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public GenericNodeView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      portCollectionView.Content = Content == null ? null : Content.Ports;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericPortView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericPortView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericPortView.Designer.cs	(revision 11526)
@@ -0,0 +1,237 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class GenericPortView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.connectedPortGroupBox = new System.Windows.Forms.GroupBox();
+      this.setConnectedPortButton = new System.Windows.Forms.Button();
+      this.clearConnectedPortButton = new System.Windows.Forms.Button();
+      this.connectedPortView = new HeuristicLab.Core.Networks.Views.PortView();
+      this.cloneConnectedPortParametersButton = new System.Windows.Forms.Button();
+      this.sendMessageButton = new System.Windows.Forms.Button();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.portParameterCollectionView = new HeuristicLab.Core.Networks.Views.PortParameterCollectionView();
+      this.messageCollectionView = new HeuristicLab.Core.Networks.Views.MessageCollectionView();
+      this.logMessagesCheckBox = new System.Windows.Forms.CheckBox();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.connectedPortGroupBox.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(47, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(573, 20);
+      // 
+      // connectedPortGroupBox
+      // 
+      this.connectedPortGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.connectedPortGroupBox.Controls.Add(this.setConnectedPortButton);
+      this.connectedPortGroupBox.Controls.Add(this.clearConnectedPortButton);
+      this.connectedPortGroupBox.Controls.Add(this.connectedPortView);
+      this.connectedPortGroupBox.Location = new System.Drawing.Point(47, 26);
+      this.connectedPortGroupBox.Name = "connectedPortGroupBox";
+      this.connectedPortGroupBox.Size = new System.Drawing.Size(598, 50);
+      this.connectedPortGroupBox.TabIndex = 4;
+      this.connectedPortGroupBox.TabStop = false;
+      this.connectedPortGroupBox.Text = "&Connected Port";
+      // 
+      // setConnectedPortButton
+      // 
+      this.setConnectedPortButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Edit;
+      this.setConnectedPortButton.Location = new System.Drawing.Point(6, 19);
+      this.setConnectedPortButton.Name = "setConnectedPortButton";
+      this.setConnectedPortButton.Size = new System.Drawing.Size(24, 24);
+      this.setConnectedPortButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.setConnectedPortButton, "Set Connected Port");
+      this.setConnectedPortButton.UseVisualStyleBackColor = true;
+      this.setConnectedPortButton.Click += new System.EventHandler(this.setConnectedPortButton_Click);
+      // 
+      // clearConnectedPortButton
+      // 
+      this.clearConnectedPortButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
+      this.clearConnectedPortButton.Location = new System.Drawing.Point(36, 19);
+      this.clearConnectedPortButton.Name = "clearConnectedPortButton";
+      this.clearConnectedPortButton.Size = new System.Drawing.Size(24, 24);
+      this.clearConnectedPortButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.clearConnectedPortButton, "Remove Connected Port");
+      this.clearConnectedPortButton.UseVisualStyleBackColor = true;
+      this.clearConnectedPortButton.Click += new System.EventHandler(this.clearConnectedPortButton_Click);
+      // 
+      // connectedPortView
+      // 
+      this.connectedPortView.AllowDrop = true;
+      this.connectedPortView.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.connectedPortView.Caption = "Connected Port View";
+      this.connectedPortView.Content = null;
+      this.connectedPortView.Location = new System.Drawing.Point(66, 21);
+      this.connectedPortView.Name = "connectedPortView";
+      this.connectedPortView.ReadOnly = true;
+      this.connectedPortView.Size = new System.Drawing.Size(507, 23);
+      this.connectedPortView.TabIndex = 2;
+      this.connectedPortView.DragDrop += new System.Windows.Forms.DragEventHandler(this.connectedPortView_DragDrop);
+      this.connectedPortView.DragEnter += new System.Windows.Forms.DragEventHandler(this.connectedPortView_DragEnterOver);
+      this.connectedPortView.DragOver += new System.Windows.Forms.DragEventHandler(this.connectedPortView_DragEnterOver);
+      // 
+      // cloneConnectedPortParametersButton
+      // 
+      this.cloneConnectedPortParametersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Clone;
+      this.cloneConnectedPortParametersButton.Location = new System.Drawing.Point(156, 101);
+      this.cloneConnectedPortParametersButton.Name = "cloneConnectedPortParametersButton";
+      this.cloneConnectedPortParametersButton.Size = new System.Drawing.Size(24, 24);
+      this.cloneConnectedPortParametersButton.TabIndex = 5;
+      this.toolTip.SetToolTip(this.cloneConnectedPortParametersButton, "Clone Parameters from Connected Port");
+      this.cloneConnectedPortParametersButton.UseVisualStyleBackColor = true;
+      this.cloneConnectedPortParametersButton.Click += new System.EventHandler(this.cloneConnectedPortParametersButton_Click);
+      // 
+      // sendMessageButton
+      // 
+      this.sendMessageButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Exception;
+      this.sendMessageButton.Location = new System.Drawing.Point(6, 45);
+      this.sendMessageButton.Name = "sendMessageButton";
+      this.sendMessageButton.Size = new System.Drawing.Size(24, 24);
+      this.sendMessageButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.sendMessageButton, "Send Message");
+      this.sendMessageButton.UseVisualStyleBackColor = true;
+      this.sendMessageButton.Click += new System.EventHandler(this.sendMessageButton_Click);
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.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.splitContainer.Location = new System.Drawing.Point(0, 82);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.portParameterCollectionView);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.logMessagesCheckBox);
+      this.splitContainer.Panel2.Controls.Add(this.messageCollectionView);
+      this.splitContainer.Size = new System.Drawing.Size(645, 435);
+      this.splitContainer.SplitterDistance = 218;
+      this.splitContainer.TabIndex = 7;
+      // 
+      // portParameterCollectionView
+      // 
+      this.portParameterCollectionView.Caption = "PortParameterCollection View";
+      this.portParameterCollectionView.Content = null;
+      this.portParameterCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.portParameterCollectionView.Location = new System.Drawing.Point(0, 0);
+      this.portParameterCollectionView.Name = "portParameterCollectionView";
+      this.portParameterCollectionView.ReadOnly = false;
+      this.portParameterCollectionView.ShowDetails = true;
+      this.portParameterCollectionView.Size = new System.Drawing.Size(645, 218);
+      this.portParameterCollectionView.TabIndex = 0;
+      // 
+      // messageCollectionView
+      // 
+      this.messageCollectionView.Caption = "MessageCollection View";
+      this.messageCollectionView.Content = null;
+      this.messageCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.messageCollectionView.Location = new System.Drawing.Point(0, 0);
+      this.messageCollectionView.Name = "messageCollectionView";
+      this.messageCollectionView.ReadOnly = false;
+      this.messageCollectionView.ShowDetails = true;
+      this.messageCollectionView.Size = new System.Drawing.Size(645, 213);
+      this.messageCollectionView.TabIndex = 0;
+      // 
+      // logMessagesCheckBox
+      // 
+      this.logMessagesCheckBox.AutoSize = true;
+      this.logMessagesCheckBox.Location = new System.Drawing.Point(156, 24);
+      this.logMessagesCheckBox.Name = "logMessagesCheckBox";
+      this.logMessagesCheckBox.Size = new System.Drawing.Size(95, 17);
+      this.logMessagesCheckBox.TabIndex = 1;
+      this.logMessagesCheckBox.Text = "&Log Messages";
+      this.logMessagesCheckBox.UseVisualStyleBackColor = true;
+      this.logMessagesCheckBox.CheckedChanged += new System.EventHandler(this.logMessagesCheckBox_CheckedChanged);
+      // 
+      // GenericPortView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.sendMessageButton);
+      this.Controls.Add(this.cloneConnectedPortParametersButton);
+      this.Controls.Add(this.connectedPortGroupBox);
+      this.Controls.Add(this.splitContainer);
+      this.Name = "GenericPortView";
+      this.Controls.SetChildIndex(this.splitContainer, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.connectedPortGroupBox, 0);
+      this.Controls.SetChildIndex(this.cloneConnectedPortParametersButton, 0);
+      this.Controls.SetChildIndex(this.sendMessageButton, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.connectedPortGroupBox.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.GroupBox connectedPortGroupBox;
+    protected PortView connectedPortView;
+    protected System.Windows.Forms.Button clearConnectedPortButton;
+    protected System.Windows.Forms.Button setConnectedPortButton;
+    protected System.Windows.Forms.Button cloneConnectedPortParametersButton;
+    protected System.Windows.Forms.Button sendMessageButton;
+    protected System.Windows.Forms.SplitContainer splitContainer;
+    protected PortParameterCollectionView portParameterCollectionView;
+    protected MessageCollectionView messageCollectionView;
+    protected System.Windows.Forms.CheckBox logMessagesCheckBox;
+
+
+
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericPortView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericPortView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericPortView.cs	(revision 11526)
@@ -0,0 +1,165 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("GenericPort View")]
+  [Content(typeof(GenericPort), true)]
+  [Content(typeof(IGenericPort), false)]
+  public partial class GenericPortView : PortView {
+    protected EntitySelectorDialog entitySelectorDialog;
+
+    public new IGenericPort Content {
+      get { return (IGenericPort)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public GenericPortView() {
+      InitializeComponent();
+      errorProvider.SetIconAlignment(connectedPortView, ErrorIconAlignment.MiddleRight);
+      errorProvider.SetIconPadding(connectedPortView, 2);
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (entitySelectorDialog != null) entitySelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ConnectedPortChanged -= Content_ConnectedPortChanged;
+      Content.PortConnectionValidChanged -= Content_PortConnectionValidChanged;
+      Content.LogMessagesChanged -= Content_LogMessagesChanged;
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ConnectedPortChanged += Content_ConnectedPortChanged;
+      Content.PortConnectionValidChanged += Content_PortConnectionValidChanged;
+      Content.LogMessagesChanged += Content_LogMessagesChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      connectedPortView.Content = Content == null ? null : Content.ConnectedPort;
+      portParameterCollectionView.Content = Content == null ? null : Content.Parameters;
+      logMessagesCheckBox.Checked = Content == null ? false : Content.LogMessages;
+      messageCollectionView.Content = Content == null ? null : Content.Messages;
+      errorProvider.SetError(connectedPortView, ((Content == null) || Content.PortConnectionValid) ? string.Empty : "Port connection is not valid");
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      sendMessageButton.Enabled = Content != null;
+      connectedPortGroupBox.Enabled = Content != null && !ReadOnly;
+      setConnectedPortButton.Enabled = Content != null && !ReadOnly;
+      clearConnectedPortButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
+      portParameterCollectionView.Enabled = Content != null && !ReadOnly;
+      cloneConnectedPortParametersButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
+      logMessagesCheckBox.Enabled = Content != null && !ReadOnly;
+      messageCollectionView.Enabled = Content != null && !ReadOnly;
+    }
+
+    protected virtual void Content_ConnectedPortChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ConnectedPortChanged), sender, e);
+      else {
+        clearConnectedPortButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
+        cloneConnectedPortParametersButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
+        connectedPortView.Content = Content.ConnectedPort;
+      }
+    }
+    protected virtual void Content_PortConnectionValidChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_PortConnectionValidChanged), sender, e);
+      else {
+        errorProvider.SetError(connectedPortView, Content.PortConnectionValid ? string.Empty : "Port connection is not valid");
+      }
+    }
+    protected virtual void Content_LogMessagesChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_LogMessagesChanged), sender, e);
+      else {
+        logMessagesCheckBox.Checked = Content.LogMessages;
+      }
+    }
+
+    protected virtual void sendMessageButton_Click(object sender, EventArgs e) {
+      Content.SendMessageAsync(Content.PrepareMessage());
+    }
+
+    protected virtual void setConnectedPortButton_Click(object sender, EventArgs e) {
+      if (entitySelectorDialog == null) {
+        entitySelectorDialog = new EntitySelectorDialog();
+        entitySelectorDialog.Caption = "Select Connected Port";
+        entitySelectorDialog.EntitySelector.Caption = "Available Ports";
+      }
+
+      try {
+        IEntity root = Content;
+        while (root.Parent != null)
+          root = root.Parent;
+        entitySelectorDialog.EntitySelector.Configure(
+          root,
+          Content.ConnectedPort,
+          typeof(IConnectedPort)
+        );
+
+        if (entitySelectorDialog.ShowDialog(this) == DialogResult.OK) {
+          Content.ConnectedPort = entitySelectorDialog.EntitySelector.SelectedEntity as IConnectedPort;
+        }
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog(this, ex);
+      }
+    }
+    protected virtual void clearConnectedPortButton_Click(object sender, EventArgs e) {
+      Content.ConnectedPort = null;
+    }
+
+    protected virtual void connectedPortView_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IConnectedPort;
+
+      if (!ReadOnly && (data != null) && (Content.CanConnectToPort(data))) {
+        e.Effect = DragDropEffects.Link;
+      }
+    }
+    protected virtual void connectedPortView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        var port = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IConnectedPort;
+        Content.ConnectedPort = port;
+      }
+    }
+    protected virtual void cloneConnectedPortParametersButton_Click(object sender, EventArgs e) {
+      Content.CloneConnectedPortParameters();
+    }
+    protected virtual void logMessagesCheckBox_CheckedChanged(object sender, EventArgs e) {
+      Content.LogMessages = logMessagesCheckBox.Checked;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageCollectionView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageCollectionView.Designer.cs	(revision 11526)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class MessageCollectionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageCollectionView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageCollectionView.cs	(revision 11526)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("MessageCollection View")]
+  [Content(typeof(MessageCollection), true)]
+  [Content(typeof(IItemCollection<IMessage>), false)]
+  public partial class MessageCollectionView : ItemCollectionView<IMessage> {
+    public MessageCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Messages";
+    }
+
+    protected override IMessage CreateItem() {
+      return new Message();
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueCollectionView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueCollectionView.Designer.cs	(revision 11526)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class MessageValueCollectionView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.SuspendLayout();
+      // 
+      // MessageValueCollectionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Name = "MessageValueCollectionView";
+      this.Size = new System.Drawing.Size(532, 383);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueCollectionView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueCollectionView.cs	(revision 11526)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Collections;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("MessageValueCollection View")]
+  [Content(typeof(MessageValueCollection), true)]
+  [Content(typeof(IKeyedItemCollection<string, IMessageValue>), false)]
+  public partial class MessageValueCollectionView : ItemCollectionView<IMessageValue> {
+    public new IKeyedItemCollection<string, IMessageValue> Content {
+      get { return (IKeyedItemCollection<string, IMessageValue>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public MessageValueCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Message Values";
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ItemsReplaced -= new CollectionItemsChangedEventHandler<IMessageValue>(Content_ItemsReplaced);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ItemsReplaced += new CollectionItemsChangedEventHandler<IMessageValue>(Content_ItemsReplaced);
+    }
+
+    protected override void OnContentChanged() {
+      string selectedName = null;
+      if ((itemsListView.SelectedItems.Count == 1) && (itemsListView.SelectedItems[0].Tag != null &&
+        itemsListView.SelectedItems[0].Tag is IMessageValue))
+        selectedName = ((IMessageValue)itemsListView.SelectedItems[0].Tag).Name;
+      base.OnContentChanged();
+      if (selectedName != null) {
+        foreach (ListViewItem item in itemsListView.Items) {
+          if ((item.Tag != null) && (((IMessageValue)item.Tag).Name.Equals(selectedName)))
+            item.Selected = true;
+        }
+      }
+    }
+
+    #region Content Events
+    protected virtual void Content_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IMessageValue> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IMessageValue>(Content_ItemsReplaced), sender, e);
+      else {
+        foreach (IMessageValue value in e.Items) {
+          foreach (ListViewItem listViewItem in GetListViewItemsForItem(value))
+            UpdateListViewItemText(listViewItem);
+        }
+        AdjustListViewColumnSizes();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueView.Designer.cs	(revision 11526)
@@ -0,0 +1,141 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class MessageValueView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.valueGroupBox = new System.Windows.Forms.GroupBox();
+      this.valuePanel = new System.Windows.Forms.Panel();
+      this.valueViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
+      this.valueGroupBox.SuspendLayout();
+      this.valuePanel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // valueGroupBox
+      // 
+      this.valueGroupBox.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.valueGroupBox.Controls.Add(this.valuePanel);
+      this.valueGroupBox.Location = new System.Drawing.Point(0, 26);
+      this.valueGroupBox.Name = "valueGroupBox";
+      this.valueGroupBox.Size = new System.Drawing.Size(482, 271);
+      this.valueGroupBox.TabIndex = 2;
+      this.valueGroupBox.TabStop = false;
+      this.valueGroupBox.Text = "Value";
+      // 
+      // valuePanel
+      // 
+      this.valuePanel.AllowDrop = true;
+      this.valuePanel.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.valuePanel.Controls.Add(this.valueViewHost);
+      this.valuePanel.Location = new System.Drawing.Point(6, 19);
+      this.valuePanel.Name = "valuePanel";
+      this.valuePanel.Size = new System.Drawing.Size(470, 246);
+      this.valuePanel.TabIndex = 0;
+      // 
+      // valueViewHost
+      // 
+      this.valueViewHost.Caption = "View";
+      this.valueViewHost.Content = null;
+      this.valueViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.valueViewHost.Enabled = false;
+      this.valueViewHost.Location = new System.Drawing.Point(0, 0);
+      this.valueViewHost.Name = "valueViewHost";
+      this.valueViewHost.ReadOnly = false;
+      this.valueViewHost.Size = new System.Drawing.Size(470, 246);
+      this.valueViewHost.TabIndex = 0;
+      this.valueViewHost.ViewsLabelVisible = true;
+      this.valueViewHost.ViewType = null;
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 3);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 0;
+      this.dataTypeLabel.Text = "&Data Type:";
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTextBox.Location = new System.Drawing.Point(69, 0);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(413, 20);
+      this.dataTypeTextBox.TabIndex = 1;
+      // 
+      // MessageValueView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Controls.Add(this.valueGroupBox);
+      this.Name = "MessageValueView";
+      this.Size = new System.Drawing.Size(482, 297);
+      this.valueGroupBox.ResumeLayout(false);
+      this.valuePanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.GroupBox valueGroupBox;
+    protected System.Windows.Forms.Panel valuePanel;
+    protected MainForm.WindowsForms.ViewHost valueViewHost;
+    protected System.Windows.Forms.Label dataTypeLabel;
+    protected System.Windows.Forms.TextBox dataTypeTextBox;
+
+
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageValueView.cs	(revision 11526)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("MessageValue View")]
+  [Content(typeof(MessageValue<>), true)]
+  [Content(typeof(IMessageValue<>), false)]
+  [Content(typeof(IMessageValue), false)]
+  public partial class MessageValueView : ItemView {
+    public new IMessageValue Content {
+      get { return (IMessageValue)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public MessageValueView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ValueChanged -= Content_ValueChanged;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ValueChanged += Content_ValueChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        dataTypeTextBox.Text = string.Empty;
+        valueViewHost.Content = null;
+      } else {
+        dataTypeTextBox.Text = Content.DataType.GetPrettyName();
+        valueViewHost.ViewType = null;
+        valueViewHost.Content = Content.Value;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      dataTypeTextBox.Enabled = Content != null;
+      valueGroupBox.Enabled = Content != null;
+    }
+    protected virtual void Content_ValueChanged(object sender, System.EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ValueChanged), sender, e);
+      else {
+        valueViewHost.ViewType = null;
+        valueViewHost.Content = Content.Value;
+      }
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageView.Designer.cs	(revision 11526)
@@ -0,0 +1,80 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class MessageView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.messageValueCollectionView = new HeuristicLab.Core.Networks.Views.MessageValueCollectionView();
+      this.SuspendLayout();
+      // 
+      // messageValueCollectionView
+      // 
+      this.messageValueCollectionView.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.messageValueCollectionView.Caption = "MessageValueCollection View";
+      this.messageValueCollectionView.Content = null;
+      this.messageValueCollectionView.Location = new System.Drawing.Point(0, 0);
+      this.messageValueCollectionView.Name = "messageValueCollectionView";
+      this.messageValueCollectionView.ReadOnly = true;
+      this.messageValueCollectionView.ShowDetails = true;
+      this.messageValueCollectionView.Size = new System.Drawing.Size(645, 517);
+      this.messageValueCollectionView.TabIndex = 3;
+      // 
+      // MessageView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.messageValueCollectionView);
+      this.Name = "MessageView";
+      this.Size = new System.Drawing.Size(645, 517);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected MessageValueCollectionView messageValueCollectionView;
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessageView.cs	(revision 11526)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("Message View")]
+  [Content(typeof(Message), true)]
+  [Content(typeof(IMessage), false)]
+  public partial class MessageView : ItemView {
+    public new IMessage Content {
+      get { return (IMessage)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public MessageView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      messageValueCollectionView.Content = Content == null ? null : Content.Values;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      messageValueCollectionView.Enabled = Content != null;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NetworkView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NetworkView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NetworkView.Designer.cs	(revision 11526)
@@ -0,0 +1,98 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class NetworkView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.nodeCollectionView = new HeuristicLab.Core.Networks.Views.NodeCollectionView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(69, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(551, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(626, 3);
+      // 
+      // nodeCollectionView
+      // 
+      this.nodeCollectionView.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.nodeCollectionView.Caption = "NodeCollection View";
+      this.nodeCollectionView.Content = null;
+      this.nodeCollectionView.Location = new System.Drawing.Point(6, 26);
+      this.nodeCollectionView.Name = "nodeCollectionView";
+      this.nodeCollectionView.ReadOnly = false;
+      this.nodeCollectionView.ShowDetails = true;
+      this.nodeCollectionView.Size = new System.Drawing.Size(639, 491);
+      this.nodeCollectionView.TabIndex = 3;
+      // 
+      // NetworkView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.nodeCollectionView);
+      this.Name = "NetworkView";
+      this.Size = new System.Drawing.Size(645, 517);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.nodeCollectionView, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected NodeCollectionView nodeCollectionView;
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NetworkView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NetworkView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NetworkView.cs	(revision 11526)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.MainForm;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("Network View")]
+  [Content(typeof(Network), true)]
+  [Content(typeof(INetwork), false)]
+  public partial class NetworkView : EntityView {
+    public new INetwork Content {
+      get { return (INetwork)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NetworkView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      // remove events here
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      // add events here
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      nodeCollectionView.Content = Content == null ? null : Content.Nodes;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      nodeCollectionView.Enabled = Content != null;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeCollectionView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeCollectionView.Designer.cs	(revision 11526)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class NodeCollectionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeCollectionView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeCollectionView.cs	(revision 11526)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("NodeCollection View")]
+  [Content(typeof(NodeCollection), true)]
+  [Content(typeof(IKeyedItemCollection<string, INode>), false)]
+  public partial class NodeCollectionView : NamedItemCollectionView<INode> {
+    public NodeCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Nodes";
+    }
+
+    protected override INode CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Node";
+        typeSelectorDialog.TypeSelector.Caption = "Available Nodes";
+        typeSelectorDialog.TypeSelector.Configure(typeof(INode), false, true);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          var n = (INode)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+          n.Name = GetUniqueName(n.Name);
+          return n;
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeView.Designer.cs	(revision 11526)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class NodeView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.portCollectionView = new HeuristicLab.Core.Networks.Views.PortCollectionView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // portCollectionView
+      // 
+      this.portCollectionView.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.portCollectionView.Caption = "PortCollection View";
+      this.portCollectionView.Content = null;
+      this.portCollectionView.Location = new System.Drawing.Point(0, 26);
+      this.portCollectionView.Name = "portCollectionView";
+      this.portCollectionView.ReadOnly = false;
+      this.portCollectionView.ShowDetails = true;
+      this.portCollectionView.Size = new System.Drawing.Size(645, 491);
+      this.portCollectionView.TabIndex = 3;
+      // 
+      // NodeView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.portCollectionView);
+      this.Name = "NodeView";
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.portCollectionView, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected PortCollectionView portCollectionView;
+
+
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/NodeView.cs	(revision 11526)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.MainForm;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("Node View")]
+  [Content(typeof(Node), true)]
+  [Content(typeof(INode), false)]
+  public partial class NodeView : EntityView {
+    public new INode Content {
+      get { return (INode)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NodeView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      portCollectionView.Content = Content == null ? null : Content.Ports;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      portCollectionView.Enabled = Content != null && !ReadOnly;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/ParameterizedPortView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/ParameterizedPortView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/ParameterizedPortView.Designer.cs	(revision 11526)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class ParameterizedPortView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.portParameterCollectionView = new HeuristicLab.Core.Networks.Views.PortParameterCollectionView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // portParameterCollectionView
+      // 
+      this.portParameterCollectionView.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.portParameterCollectionView.Caption = "PortParameterCollection View";
+      this.portParameterCollectionView.Content = null;
+      this.portParameterCollectionView.Location = new System.Drawing.Point(0, 26);
+      this.portParameterCollectionView.Name = "portParameterCollectionView";
+      this.portParameterCollectionView.ReadOnly = false;
+      this.portParameterCollectionView.ShowDetails = true;
+      this.portParameterCollectionView.Size = new System.Drawing.Size(645, 491);
+      this.portParameterCollectionView.TabIndex = 3;
+      // 
+      // ParameterizedPortView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.portParameterCollectionView);
+      this.Name = "ParameterizedPortView";
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.portParameterCollectionView, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected PortParameterCollectionView portParameterCollectionView;
+
+
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/ParameterizedPortView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/ParameterizedPortView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/ParameterizedPortView.cs	(revision 11526)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.MainForm;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("ParameterizedPort View")]
+  [Content(typeof(ParameterizedPort), true)]
+  [Content(typeof(IParameterizedPort), false)]
+  public partial class ParameterizedPortView : PortView {
+    public new IParameterizedPort Content {
+      get { return (IParameterizedPort)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ParameterizedPortView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.InterfaceChanged -= Content_InterfaceChanged;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.InterfaceChanged += Content_InterfaceChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      portParameterCollectionView.Content = Content == null ? null : Content.Parameters;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      portParameterCollectionView.Enabled = Content != null && !ReadOnly;
+    }
+
+    protected virtual void Content_InterfaceChanged(object sender, EventArgs e) { }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortCollectionView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortCollectionView.Designer.cs	(revision 11526)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class PortCollectionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortCollectionView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortCollectionView.cs	(revision 11526)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("PortCollection View")]
+  [Content(typeof(PortCollection), true)]
+  [Content(typeof(IKeyedItemCollection<string, IPort>), false)]
+  public partial class PortCollectionView : NamedItemCollectionView<IPort> {
+    public PortCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Ports";
+    }
+
+    protected override IPort CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Port";
+        typeSelectorDialog.TypeSelector.Caption = "Available Ports";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IPort), false, true);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          var p = (IPort)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+          p.Name = GetUniqueName(p.Name);
+          return p;
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterCollectionView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterCollectionView.Designer.cs	(revision 11526)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class PortParameterCollectionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterCollectionView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterCollectionView.cs	(revision 11526)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("PortParameterCollection View")]
+  [Content(typeof(PortParameterCollection), true)]
+  [Content(typeof(IKeyedItemCollection<string, IPortParameter>), false)]
+  public partial class PortParameterCollectionView : NamedItemCollectionView<IPortParameter> {
+    public PortParameterCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Port Parameters";
+    }
+
+    protected override IPortParameter CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Port Parameter";
+        typeSelectorDialog.TypeSelector.Caption = "Available Port Parameters";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IPortParameter), false, true);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          var p = (IPortParameter)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+          p.Name = GetUniqueName(p.Name);
+          return p;
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterView.Designer.cs	(revision 11526)
@@ -0,0 +1,214 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class PortParameterView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.defaultValueGroupBox = new System.Windows.Forms.GroupBox();
+      this.clearDefaultValueButton = new System.Windows.Forms.Button();
+      this.setDefaultValueButton = new System.Windows.Forms.Button();
+      this.defaultValuePanel = new System.Windows.Forms.Panel();
+      this.defaultValueViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.typeLabel = new System.Windows.Forms.Label();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
+      this.inputTypeCheckBox = new System.Windows.Forms.CheckBox();
+      this.outputTypeCheckBox = new System.Windows.Forms.CheckBox();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.defaultValueGroupBox.SuspendLayout();
+      this.defaultValuePanel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // defaultValueGroupBox
+      // 
+      this.defaultValueGroupBox.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.defaultValueGroupBox.Controls.Add(this.clearDefaultValueButton);
+      this.defaultValueGroupBox.Controls.Add(this.setDefaultValueButton);
+      this.defaultValueGroupBox.Controls.Add(this.defaultValuePanel);
+      this.defaultValueGroupBox.Location = new System.Drawing.Point(0, 79);
+      this.defaultValueGroupBox.Name = "defaultValueGroupBox";
+      this.defaultValueGroupBox.Size = new System.Drawing.Size(645, 438);
+      this.defaultValueGroupBox.TabIndex = 8;
+      this.defaultValueGroupBox.TabStop = false;
+      this.defaultValueGroupBox.Text = "Default Value";
+      // 
+      // clearDefaultValueButton
+      // 
+      this.clearDefaultValueButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
+      this.clearDefaultValueButton.Location = new System.Drawing.Point(35, 19);
+      this.clearDefaultValueButton.Name = "clearDefaultValueButton";
+      this.clearDefaultValueButton.Size = new System.Drawing.Size(23, 23);
+      this.clearDefaultValueButton.TabIndex = 1;
+      this.clearDefaultValueButton.UseVisualStyleBackColor = true;
+      this.clearDefaultValueButton.Click += new System.EventHandler(this.clearDefaultValueButton_Click);
+      // 
+      // setDefaultValueButton
+      // 
+      this.setDefaultValueButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Edit;
+      this.setDefaultValueButton.Location = new System.Drawing.Point(6, 19);
+      this.setDefaultValueButton.Name = "setDefaultValueButton";
+      this.setDefaultValueButton.Size = new System.Drawing.Size(23, 23);
+      this.setDefaultValueButton.TabIndex = 0;
+      this.setDefaultValueButton.UseVisualStyleBackColor = true;
+      this.setDefaultValueButton.Click += new System.EventHandler(this.setDefaultValueButton_Click);
+      // 
+      // defaultValuePanel
+      // 
+      this.defaultValuePanel.AllowDrop = true;
+      this.defaultValuePanel.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.defaultValuePanel.Controls.Add(this.defaultValueViewHost);
+      this.defaultValuePanel.Location = new System.Drawing.Point(6, 48);
+      this.defaultValuePanel.Name = "defaultValuePanel";
+      this.defaultValuePanel.Size = new System.Drawing.Size(633, 384);
+      this.defaultValuePanel.TabIndex = 0;
+      this.defaultValuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.defaultValuePanel_DragDrop);
+      this.defaultValuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.defaultValuePanel_DragEnterOver);
+      this.defaultValuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.defaultValuePanel_DragEnterOver);
+      // 
+      // defaultValueViewHost
+      // 
+      this.defaultValueViewHost.Caption = "View";
+      this.defaultValueViewHost.Content = null;
+      this.defaultValueViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.defaultValueViewHost.Enabled = false;
+      this.defaultValueViewHost.Location = new System.Drawing.Point(0, 0);
+      this.defaultValueViewHost.Name = "defaultValueViewHost";
+      this.defaultValueViewHost.ReadOnly = false;
+      this.defaultValueViewHost.Size = new System.Drawing.Size(633, 384);
+      this.defaultValueViewHost.TabIndex = 0;
+      this.defaultValueViewHost.ViewsLabelVisible = true;
+      this.defaultValueViewHost.ViewType = null;
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 29);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 3;
+      this.dataTypeLabel.Text = "&Data Type:";
+      // 
+      // typeLabel
+      // 
+      this.typeLabel.AutoSize = true;
+      this.typeLabel.Location = new System.Drawing.Point(3, 55);
+      this.typeLabel.Name = "typeLabel";
+      this.typeLabel.Size = new System.Drawing.Size(34, 13);
+      this.typeLabel.TabIndex = 5;
+      this.typeLabel.Text = "&Type:";
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTextBox.Location = new System.Drawing.Point(69, 26);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(551, 20);
+      this.dataTypeTextBox.TabIndex = 4;
+      // 
+      // inputTypeCheckBox
+      // 
+      this.inputTypeCheckBox.AutoSize = true;
+      this.inputTypeCheckBox.Location = new System.Drawing.Point(69, 54);
+      this.inputTypeCheckBox.Name = "inputTypeCheckBox";
+      this.inputTypeCheckBox.Size = new System.Drawing.Size(50, 17);
+      this.inputTypeCheckBox.TabIndex = 6;
+      this.inputTypeCheckBox.Text = "&Input";
+      this.inputTypeCheckBox.UseVisualStyleBackColor = true;
+      this.inputTypeCheckBox.CheckedChanged += new System.EventHandler(this.inputTypeCheckBox_CheckedChanged);
+      // 
+      // outputTypeCheckBox
+      // 
+      this.outputTypeCheckBox.AutoSize = true;
+      this.outputTypeCheckBox.Location = new System.Drawing.Point(125, 54);
+      this.outputTypeCheckBox.Name = "outputTypeCheckBox";
+      this.outputTypeCheckBox.Size = new System.Drawing.Size(58, 17);
+      this.outputTypeCheckBox.TabIndex = 7;
+      this.outputTypeCheckBox.Text = "&Output";
+      this.outputTypeCheckBox.UseVisualStyleBackColor = true;
+      this.outputTypeCheckBox.CheckedChanged += new System.EventHandler(this.outputTypeCheckBox_CheckedChanged);
+      // 
+      // PortParameterView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.outputTypeCheckBox);
+      this.Controls.Add(this.inputTypeCheckBox);
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.typeLabel);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Controls.Add(this.defaultValueGroupBox);
+      this.Name = "PortParameterView";
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.defaultValueGroupBox, 0);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.typeLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.inputTypeCheckBox, 0);
+      this.Controls.SetChildIndex(this.outputTypeCheckBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.defaultValueGroupBox.ResumeLayout(false);
+      this.defaultValuePanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.GroupBox defaultValueGroupBox;
+    protected System.Windows.Forms.Panel defaultValuePanel;
+    protected MainForm.WindowsForms.ViewHost defaultValueViewHost;
+    protected System.Windows.Forms.Label dataTypeLabel;
+    protected System.Windows.Forms.Label typeLabel;
+    protected System.Windows.Forms.TextBox dataTypeTextBox;
+    protected System.Windows.Forms.Button setDefaultValueButton;
+    protected System.Windows.Forms.Button clearDefaultValueButton;
+    protected System.Windows.Forms.CheckBox inputTypeCheckBox;
+    protected System.Windows.Forms.CheckBox outputTypeCheckBox;
+
+
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortParameterView.cs	(revision 11526)
@@ -0,0 +1,153 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("PortParameter View")]
+  [Content(typeof(PortParameter<>), true)]
+  [Content(typeof(IPortParameter<>), false)]
+  [Content(typeof(IPortParameter), false)]
+  public partial class PortParameterView : EntityView {
+    protected TypeSelectorDialog typeSelectorDialog;
+
+    public new IPortParameter Content {
+      get { return (IPortParameter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public PortParameterView() {
+      InitializeComponent();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.TypeChanged -= Content_TypeChanged;
+      Content.DefaultValueChanged -= Content_DefaultValueChanged;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.TypeChanged += Content_TypeChanged;
+      Content.DefaultValueChanged += Content_DefaultValueChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        dataTypeTextBox.Text = string.Empty;
+        inputTypeCheckBox.Checked = false;
+        outputTypeCheckBox.Checked = false;
+        defaultValueViewHost.Content = null;
+      } else {
+        dataTypeTextBox.Text = Content.DataType.GetPrettyName();
+        inputTypeCheckBox.Checked = Content.Type.HasFlag(PortParameterType.Input);
+        outputTypeCheckBox.Checked = Content.Type.HasFlag(PortParameterType.Output);
+        defaultValueViewHost.ViewType = null;
+        defaultValueViewHost.Content = Content.DefaultValue;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      dataTypeTextBox.Enabled = Content != null;
+      inputTypeCheckBox.Enabled = Content != null && !ReadOnly;
+      outputTypeCheckBox.Enabled = Content != null && !ReadOnly;
+      defaultValueGroupBox.Enabled = Content != null;
+      setDefaultValueButton.Enabled = Content != null && !ReadOnly;
+      clearDefaultValueButton.Enabled = Content != null && Content.DefaultValue != null && !ReadOnly;
+    }
+    protected virtual void Content_TypeChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_TypeChanged), sender, e);
+      else {
+        inputTypeCheckBox.Checked = Content.Type.HasFlag(PortParameterType.Input);
+        outputTypeCheckBox.Checked = Content.Type.HasFlag(PortParameterType.Output);
+      }
+    }
+    protected virtual void Content_DefaultValueChanged(object sender, System.EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_DefaultValueChanged), sender, e);
+      else {
+        clearDefaultValueButton.Enabled = Content.DefaultValue != null;
+        defaultValueViewHost.ViewType = null;
+        defaultValueViewHost.Content = Content.DefaultValue;
+      }
+    }
+
+    protected virtual void inputTypeCheckBox_CheckedChanged(object sender, EventArgs e) {
+      Content.Type = inputTypeCheckBox.Checked ? Content.Type | PortParameterType.Input : Content.Type & ~PortParameterType.Input;
+    }
+    protected virtual void outputTypeCheckBox_CheckedChanged(object sender, EventArgs e) {
+      Content.Type = outputTypeCheckBox.Checked ? Content.Type | PortParameterType.Output : Content.Type & ~PortParameterType.Output;
+    }
+
+    protected virtual void setDefaultValueButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Default Value";
+      }
+      typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, true);
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.DefaultValue = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+    protected virtual void clearDefaultValueButton_Click(object sender, EventArgs e) {
+      Content.DefaultValue = null;
+    }
+
+    protected virtual void defaultValuePanel_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (!ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IItem)) {
+        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
+      }
+    }
+    protected virtual void defaultValuePanel_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IItem item = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IItem;
+        if (e.Effect.HasFlag(DragDropEffects.Copy)) item = (IItem)item.Clone();
+        Content.DefaultValue = item;
+      }
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortView.Designer.cs	(revision 11526)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks.Views {
+  partial class PortView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // PortView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Name = "PortView";
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/PortView.cs	(revision 11526)
@@ -0,0 +1,47 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.MainForm;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core.Networks.Views {
+  [View("Port View")]
+  [Content(typeof(Port), true)]
+  [Content(typeof(IPort), false)]
+  public partial class PortView : EntityView {
+    public new IPort Content {
+      get { return (IPort)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public PortView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+  }
+}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntitySelector.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntitySelector.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,106 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class EntitySelector {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.entitiesTreeView = new System.Windows.Forms.TreeView();
-      this.entitiesGroupBox = new System.Windows.Forms.GroupBox();
-      this.imageList = new System.Windows.Forms.ImageList(this.components);
-      this.entitiesGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // entitiesTreeView
-      // 
-      this.entitiesTreeView.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.entitiesTreeView.HideSelection = false;
-      this.entitiesTreeView.ImageIndex = 0;
-      this.entitiesTreeView.ImageList = this.imageList;
-      this.entitiesTreeView.Location = new System.Drawing.Point(6, 19);
-      this.entitiesTreeView.Name = "entitiesTreeView";
-      this.entitiesTreeView.SelectedImageIndex = 0;
-      this.entitiesTreeView.ShowNodeToolTips = true;
-      this.entitiesTreeView.Size = new System.Drawing.Size(333, 263);
-      this.entitiesTreeView.TabIndex = 0;
-      this.entitiesTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.entitiesTreeView_AfterSelect);
-      // 
-      // entitiesGroupBox
-      // 
-      this.entitiesGroupBox.Controls.Add(this.entitiesTreeView);
-      this.entitiesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.entitiesGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.entitiesGroupBox.Name = "entitiesGroupBox";
-      this.entitiesGroupBox.Size = new System.Drawing.Size(345, 288);
-      this.entitiesGroupBox.TabIndex = 0;
-      this.entitiesGroupBox.TabStop = false;
-      this.entitiesGroupBox.Text = "Network Entities";
-      // 
-      // imageList
-      // 
-      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
-      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
-      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
-      // 
-      // EntitySelector
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.entitiesGroupBox);
-      this.Name = "EntitySelector";
-      this.Size = new System.Drawing.Size(345, 288);
-      this.entitiesGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox entitiesGroupBox;
-    protected System.Windows.Forms.TreeView entitiesTreeView;
-    protected System.Windows.Forms.ImageList imageList;
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntitySelector.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntitySelector.cs	(revision 11525)
+++ 	(revision )
@@ -1,143 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Windows.Forms;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  public partial class EntitySelector : UserControl {
-    protected Func<IEntity, bool> entityCondition;
-    protected IEntity root;
-    public IEntity Root {
-      get { return root; }
-    }
-    public string Caption {
-      get { return entitiesGroupBox.Text; }
-      set {
-        if (InvokeRequired)
-          Invoke(new Action<string>(s => { Caption = s; }), value);
-        else
-          entitiesGroupBox.Text = value;
-      }
-    }
-    public TreeView EntitiesTreeView {
-      get { return entitiesTreeView; }
-    }
-    protected IEntity selectedEntity;
-    public IEntity SelectedEntity {
-      get {
-        return selectedEntity;
-      }
-      protected set {
-        if (selectedEntity != value) {
-          selectedEntity = value;
-          OnSelectedEntityChanged();
-        }
-      }
-    }
-
-    public EntitySelector() {
-      InitializeComponent();
-      root = null;
-      entityCondition = null;
-      selectedEntity = null;
-    }
-
-    public virtual void Configure(IEntity root) {
-      Configure(root, null, (e) => true);
-    }
-    public virtual void Configure(IEntity root, IEntity selectedEntity) {
-      Configure(root, selectedEntity, (e) => true);
-    }
-    public virtual void Configure(IEntity root, IEntity selectedEntity, Type entityType) {
-      Configure(root, selectedEntity, (e) => { return entityType.IsAssignableFrom(e.GetType()); });
-    }
-    public virtual void Configure(IEntity root, IEntity selectedEntity, Func<IEntity, bool> entityCondition) {
-      if (root == null) throw new ArgumentNullException("root");
-      if (entityCondition == null) throw new ArgumentNullException("entityCondition");
-      if (InvokeRequired)
-        Invoke(new Action<IEntity, IEntity, Func<IEntity, bool>>(Configure), root, selectedEntity, entityCondition);
-      else {
-        this.root = root;
-        this.entityCondition = entityCondition;
-        this.selectedEntity = null;
-        entitiesTreeView.Nodes.Clear();
-        imageList.Images.Clear();
-
-        TreeNode selectedNode;
-        var n = CreateTreeNode(Root, selectedEntity, entityCondition, out selectedNode);
-        if (n != null)
-          entitiesTreeView.Nodes.Add(n);
-        if (selectedNode != null) {
-          entitiesTreeView.SelectedNode = selectedNode;
-          selectedNode.EnsureVisible();
-        }
-      }
-    }
-
-    public event EventHandler SelectedEntityChanged;
-    protected virtual void OnSelectedEntityChanged() {
-      var handler = SelectedEntityChanged;
-      if (handler != null) SelectedEntityChanged(this, EventArgs.Empty);
-    }
-
-    #region Control Events
-    protected virtual void entitiesTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      if (entitiesTreeView.SelectedNode == null)
-        SelectedEntity = null;
-      else {
-        var selected = (IEntity)entitiesTreeView.SelectedNode.Tag;
-        SelectedEntity = ((entityCondition != null) && !entityCondition(selected)) ? null : selected;
-      }
-    }
-    #endregion
-
-    #region Helpers
-    protected virtual TreeNode CreateTreeNode(IEntity entity, IEntity selectedEntity, Func<IEntity, bool> entityCondition, out TreeNode selectedNode) {
-      selectedNode = null;
-      if (entity == null) return null;
-
-      TreeNode node = new TreeNode(entity.Name);
-      node.Tag = entity;
-      foreach (var child in entity.Children) {
-        TreeNode selected;
-        var n = CreateTreeNode(child, selectedEntity, entityCondition, out selected);
-        if (n != null) {
-          node.Nodes.Add(n);
-          if (selected != null) selectedNode = selected;
-        }
-
-      }
-      if (!entityCondition(entity) && (node.Nodes.Count == 0))
-        return null;
-
-      imageList.Images.Add(entity.ItemImage);
-      node.ImageIndex = imageList.Images.Count - 1;
-      node.SelectedImageIndex = node.ImageIndex;
-      node.ToolTipText = entity.GetType().GetPrettyName();
-
-      if (entity == selectedEntity) selectedNode = node;
-      return node;
-    }
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntitySelectorDialog.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntitySelectorDialog.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,116 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class EntitySelectorDialog {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.okButton = new System.Windows.Forms.Button();
-      this.cancelButton = new System.Windows.Forms.Button();
-      this.entitySelector = new HeuristicLab.Optimization.Networks.Views.EntitySelector();
-      this.SuspendLayout();
-      // 
-      // okButton
-      // 
-      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
-      this.okButton.Location = new System.Drawing.Point(320, 409);
-      this.okButton.Name = "okButton";
-      this.okButton.Size = new System.Drawing.Size(75, 23);
-      this.okButton.TabIndex = 0;
-      this.okButton.Text = "&OK";
-      this.okButton.UseVisualStyleBackColor = true;
-      // 
-      // cancelButton
-      // 
-      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.cancelButton.Location = new System.Drawing.Point(401, 409);
-      this.cancelButton.Name = "cancelButton";
-      this.cancelButton.Size = new System.Drawing.Size(75, 23);
-      this.cancelButton.TabIndex = 0;
-      this.cancelButton.Text = "&Cancel";
-      this.cancelButton.UseVisualStyleBackColor = true;
-      // 
-      // entitySelector
-      // 
-      this.entitySelector.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.entitySelector.Caption = "Network Entities";
-      this.entitySelector.Location = new System.Drawing.Point(12, 12);
-      this.entitySelector.Name = "entitySelector";
-      this.entitySelector.Size = new System.Drawing.Size(464, 391);
-      this.entitySelector.TabIndex = 1;
-      this.entitySelector.SelectedEntityChanged += new System.EventHandler(this.entitySelector_SelectedEntityChanged);
-      // 
-      // EntitySelectorDialog
-      // 
-      this.AcceptButton = this.okButton;
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.CancelButton = this.cancelButton;
-      this.ClientSize = new System.Drawing.Size(488, 444);
-      this.Controls.Add(this.entitySelector);
-      this.Controls.Add(this.cancelButton);
-      this.Controls.Add(this.okButton);
-      this.MaximizeBox = false;
-      this.MinimizeBox = false;
-      this.Name = "EntitySelectorDialog";
-      this.ShowIcon = false;
-      this.ShowInTaskbar = false;
-      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
-      this.Text = "Select Entity";
-      this.Load += new System.EventHandler(this.EntitySelectorDialog_Load);
-      this.Shown += new System.EventHandler(this.EntitySelectorDialog_Shown);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.Button okButton;
-    protected System.Windows.Forms.Button cancelButton;
-    protected EntitySelector entitySelector;
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntitySelectorDialog.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntitySelectorDialog.cs	(revision 11525)
+++ 	(revision )
@@ -1,60 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  public partial class EntitySelectorDialog : Form {
-    public string Caption {
-      get { return Text; }
-      set {
-        if (InvokeRequired)
-          Invoke(new Action<string>(s => { Caption = s; }), value);
-        else
-          Text = value;
-      }
-    }
-    public EntitySelector EntitySelector {
-      get { return entitySelector; }
-    }
-
-    public EntitySelectorDialog() {
-      InitializeComponent();
-      okButton.Enabled = entitySelector.SelectedEntity != null;
-    }
-    protected virtual void EntitySelectorDialog_Load(object sender, EventArgs e) {
-      this.entitySelector.EntitiesTreeView.DoubleClick += new System.EventHandler(EntitiesTreeView_DoubleClick);
-    }
-    protected virtual void EntitySelectorDialog_Shown(object sender, EventArgs e) {
-      okButton.Enabled = entitySelector.SelectedEntity != null;
-    }
-    protected virtual void entitySelector_SelectedEntityChanged(object sender, EventArgs e) {
-      okButton.Enabled = entitySelector.SelectedEntity != null;
-    }
-    protected virtual void EntitiesTreeView_DoubleClick(object sender, System.EventArgs e) {
-      if (entitySelector.SelectedEntity != null) {
-        DialogResult = DialogResult.OK;
-        Close();
-      }
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntityView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntityView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,77 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class EntityView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(69, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(551, 20);
-      // 
-      // infoLabel
-      // 
-      this.infoLabel.Location = new System.Drawing.Point(626, 3);
-      // 
-      // EntityView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Name = "EntityView";
-      this.Size = new System.Drawing.Size(645, 517);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntityView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/EntityView.cs	(revision 11525)
+++ 	(revision )
@@ -1,63 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("Entity View")]
-  [Content(typeof(Entity), true)]
-  [Content(typeof(IEntity), false)]
-  public partial class EntityView : NamedItemView {
-    public new IEntity Content {
-      get { return (IEntity)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public EntityView() {
-      InitializeComponent();
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.PathChanged -= Content_PathChanged;
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.PathChanged += Content_PathChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      toolTip.SetToolTip(nameTextBox, Content != null ? Content.Path : string.Empty);
-    }
-
-    protected virtual void Content_PathChanged(object sender, System.EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_PathChanged), sender, e);
-      else {
-        toolTip.SetToolTip(nameTextBox, Content != null ? Content.Path : string.Empty);
-      }
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/GenericNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/GenericNodeView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,31 +1,0 @@
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class GenericNodeView {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-    }
-
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/GenericNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/GenericNodeView.cs	(revision 11525)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.MainForm;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("GenericNode View")]
-  [Content(typeof(GenericNode), true)]
-  [Content(typeof(IGenericNode), false)]
-  public partial class GenericNodeView : NodeView {
-    public new IGenericNode Content {
-      get { return (IGenericNode)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public GenericNodeView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      portCollectionView.Content = Content == null ? null : Content.Ports;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/GenericPortView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/GenericPortView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,237 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class GenericPortView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.connectedPortGroupBox = new System.Windows.Forms.GroupBox();
-      this.setConnectedPortButton = new System.Windows.Forms.Button();
-      this.clearConnectedPortButton = new System.Windows.Forms.Button();
-      this.connectedPortView = new HeuristicLab.Optimization.Networks.Views.PortView();
-      this.cloneConnectedPortParametersButton = new System.Windows.Forms.Button();
-      this.sendMessageButton = new System.Windows.Forms.Button();
-      this.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.portParameterCollectionView = new HeuristicLab.Optimization.Networks.Views.PortParameterCollectionView();
-      this.messageCollectionView = new HeuristicLab.Optimization.Networks.Views.MessageCollectionView();
-      this.logMessagesCheckBox = new System.Windows.Forms.CheckBox();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.connectedPortGroupBox.SuspendLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(47, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(573, 20);
-      // 
-      // connectedPortGroupBox
-      // 
-      this.connectedPortGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.connectedPortGroupBox.Controls.Add(this.setConnectedPortButton);
-      this.connectedPortGroupBox.Controls.Add(this.clearConnectedPortButton);
-      this.connectedPortGroupBox.Controls.Add(this.connectedPortView);
-      this.connectedPortGroupBox.Location = new System.Drawing.Point(47, 26);
-      this.connectedPortGroupBox.Name = "connectedPortGroupBox";
-      this.connectedPortGroupBox.Size = new System.Drawing.Size(598, 50);
-      this.connectedPortGroupBox.TabIndex = 4;
-      this.connectedPortGroupBox.TabStop = false;
-      this.connectedPortGroupBox.Text = "&Connected Port";
-      // 
-      // setConnectedPortButton
-      // 
-      this.setConnectedPortButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Edit;
-      this.setConnectedPortButton.Location = new System.Drawing.Point(6, 19);
-      this.setConnectedPortButton.Name = "setConnectedPortButton";
-      this.setConnectedPortButton.Size = new System.Drawing.Size(24, 24);
-      this.setConnectedPortButton.TabIndex = 0;
-      this.toolTip.SetToolTip(this.setConnectedPortButton, "Set Connected Port");
-      this.setConnectedPortButton.UseVisualStyleBackColor = true;
-      this.setConnectedPortButton.Click += new System.EventHandler(this.setConnectedPortButton_Click);
-      // 
-      // clearConnectedPortButton
-      // 
-      this.clearConnectedPortButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
-      this.clearConnectedPortButton.Location = new System.Drawing.Point(36, 19);
-      this.clearConnectedPortButton.Name = "clearConnectedPortButton";
-      this.clearConnectedPortButton.Size = new System.Drawing.Size(24, 24);
-      this.clearConnectedPortButton.TabIndex = 1;
-      this.toolTip.SetToolTip(this.clearConnectedPortButton, "Remove Connected Port");
-      this.clearConnectedPortButton.UseVisualStyleBackColor = true;
-      this.clearConnectedPortButton.Click += new System.EventHandler(this.clearConnectedPortButton_Click);
-      // 
-      // connectedPortView
-      // 
-      this.connectedPortView.AllowDrop = true;
-      this.connectedPortView.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.connectedPortView.Caption = "Connected Port View";
-      this.connectedPortView.Content = null;
-      this.connectedPortView.Location = new System.Drawing.Point(66, 21);
-      this.connectedPortView.Name = "connectedPortView";
-      this.connectedPortView.ReadOnly = true;
-      this.connectedPortView.Size = new System.Drawing.Size(507, 23);
-      this.connectedPortView.TabIndex = 2;
-      this.connectedPortView.DragDrop += new System.Windows.Forms.DragEventHandler(this.connectedPortView_DragDrop);
-      this.connectedPortView.DragEnter += new System.Windows.Forms.DragEventHandler(this.connectedPortView_DragEnterOver);
-      this.connectedPortView.DragOver += new System.Windows.Forms.DragEventHandler(this.connectedPortView_DragEnterOver);
-      // 
-      // cloneConnectedPortParametersButton
-      // 
-      this.cloneConnectedPortParametersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Clone;
-      this.cloneConnectedPortParametersButton.Location = new System.Drawing.Point(156, 101);
-      this.cloneConnectedPortParametersButton.Name = "cloneConnectedPortParametersButton";
-      this.cloneConnectedPortParametersButton.Size = new System.Drawing.Size(24, 24);
-      this.cloneConnectedPortParametersButton.TabIndex = 5;
-      this.toolTip.SetToolTip(this.cloneConnectedPortParametersButton, "Clone Parameters from Connected Port");
-      this.cloneConnectedPortParametersButton.UseVisualStyleBackColor = true;
-      this.cloneConnectedPortParametersButton.Click += new System.EventHandler(this.cloneConnectedPortParametersButton_Click);
-      // 
-      // sendMessageButton
-      // 
-      this.sendMessageButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Exception;
-      this.sendMessageButton.Location = new System.Drawing.Point(6, 45);
-      this.sendMessageButton.Name = "sendMessageButton";
-      this.sendMessageButton.Size = new System.Drawing.Size(24, 24);
-      this.sendMessageButton.TabIndex = 3;
-      this.toolTip.SetToolTip(this.sendMessageButton, "Send Message");
-      this.sendMessageButton.UseVisualStyleBackColor = true;
-      this.sendMessageButton.Click += new System.EventHandler(this.sendMessageButton_Click);
-      // 
-      // splitContainer
-      // 
-      this.splitContainer.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.splitContainer.Location = new System.Drawing.Point(0, 82);
-      this.splitContainer.Name = "splitContainer";
-      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
-      // 
-      // splitContainer.Panel1
-      // 
-      this.splitContainer.Panel1.Controls.Add(this.portParameterCollectionView);
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.logMessagesCheckBox);
-      this.splitContainer.Panel2.Controls.Add(this.messageCollectionView);
-      this.splitContainer.Size = new System.Drawing.Size(645, 435);
-      this.splitContainer.SplitterDistance = 218;
-      this.splitContainer.TabIndex = 7;
-      // 
-      // portParameterCollectionView
-      // 
-      this.portParameterCollectionView.Caption = "PortParameterCollection View";
-      this.portParameterCollectionView.Content = null;
-      this.portParameterCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.portParameterCollectionView.Location = new System.Drawing.Point(0, 0);
-      this.portParameterCollectionView.Name = "portParameterCollectionView";
-      this.portParameterCollectionView.ReadOnly = false;
-      this.portParameterCollectionView.ShowDetails = true;
-      this.portParameterCollectionView.Size = new System.Drawing.Size(645, 218);
-      this.portParameterCollectionView.TabIndex = 0;
-      // 
-      // messageCollectionView
-      // 
-      this.messageCollectionView.Caption = "MessageCollection View";
-      this.messageCollectionView.Content = null;
-      this.messageCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.messageCollectionView.Location = new System.Drawing.Point(0, 0);
-      this.messageCollectionView.Name = "messageCollectionView";
-      this.messageCollectionView.ReadOnly = false;
-      this.messageCollectionView.ShowDetails = true;
-      this.messageCollectionView.Size = new System.Drawing.Size(645, 213);
-      this.messageCollectionView.TabIndex = 0;
-      // 
-      // logMessagesCheckBox
-      // 
-      this.logMessagesCheckBox.AutoSize = true;
-      this.logMessagesCheckBox.Location = new System.Drawing.Point(156, 24);
-      this.logMessagesCheckBox.Name = "logMessagesCheckBox";
-      this.logMessagesCheckBox.Size = new System.Drawing.Size(95, 17);
-      this.logMessagesCheckBox.TabIndex = 1;
-      this.logMessagesCheckBox.Text = "&Log Messages";
-      this.logMessagesCheckBox.UseVisualStyleBackColor = true;
-      this.logMessagesCheckBox.CheckedChanged += new System.EventHandler(this.logMessagesCheckBox_CheckedChanged);
-      // 
-      // GenericPortView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.sendMessageButton);
-      this.Controls.Add(this.cloneConnectedPortParametersButton);
-      this.Controls.Add(this.connectedPortGroupBox);
-      this.Controls.Add(this.splitContainer);
-      this.Name = "GenericPortView";
-      this.Controls.SetChildIndex(this.splitContainer, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.connectedPortGroupBox, 0);
-      this.Controls.SetChildIndex(this.cloneConnectedPortParametersButton, 0);
-      this.Controls.SetChildIndex(this.sendMessageButton, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.connectedPortGroupBox.ResumeLayout(false);
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.Panel2.PerformLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
-      this.splitContainer.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox connectedPortGroupBox;
-    protected PortView connectedPortView;
-    protected System.Windows.Forms.Button clearConnectedPortButton;
-    protected System.Windows.Forms.Button setConnectedPortButton;
-    protected System.Windows.Forms.Button cloneConnectedPortParametersButton;
-    protected System.Windows.Forms.Button sendMessageButton;
-    protected System.Windows.Forms.SplitContainer splitContainer;
-    protected PortParameterCollectionView portParameterCollectionView;
-    protected MessageCollectionView messageCollectionView;
-    protected System.Windows.Forms.CheckBox logMessagesCheckBox;
-
-
-
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/GenericPortView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/GenericPortView.cs	(revision 11525)
+++ 	(revision )
@@ -1,165 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("GenericPort View")]
-  [Content(typeof(GenericPort), true)]
-  [Content(typeof(IGenericPort), false)]
-  public partial class GenericPortView : PortView {
-    protected EntitySelectorDialog entitySelectorDialog;
-
-    public new IGenericPort Content {
-      get { return (IGenericPort)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public GenericPortView() {
-      InitializeComponent();
-      errorProvider.SetIconAlignment(connectedPortView, ErrorIconAlignment.MiddleRight);
-      errorProvider.SetIconPadding(connectedPortView, 2);
-    }
-
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (entitySelectorDialog != null) entitySelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.ConnectedPortChanged -= Content_ConnectedPortChanged;
-      Content.PortConnectionValidChanged -= Content_PortConnectionValidChanged;
-      Content.LogMessagesChanged -= Content_LogMessagesChanged;
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ConnectedPortChanged += Content_ConnectedPortChanged;
-      Content.PortConnectionValidChanged += Content_PortConnectionValidChanged;
-      Content.LogMessagesChanged += Content_LogMessagesChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      connectedPortView.Content = Content == null ? null : Content.ConnectedPort;
-      portParameterCollectionView.Content = Content == null ? null : Content.Parameters;
-      logMessagesCheckBox.Checked = Content == null ? false : Content.LogMessages;
-      messageCollectionView.Content = Content == null ? null : Content.Messages;
-      errorProvider.SetError(connectedPortView, ((Content == null) || Content.PortConnectionValid) ? string.Empty : "Port connection is not valid");
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      sendMessageButton.Enabled = Content != null;
-      connectedPortGroupBox.Enabled = Content != null && !ReadOnly;
-      setConnectedPortButton.Enabled = Content != null && !ReadOnly;
-      clearConnectedPortButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
-      portParameterCollectionView.Enabled = Content != null && !ReadOnly;
-      cloneConnectedPortParametersButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
-      logMessagesCheckBox.Enabled = Content != null && !ReadOnly;
-      messageCollectionView.Enabled = Content != null && !ReadOnly;
-    }
-
-    protected virtual void Content_ConnectedPortChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ConnectedPortChanged), sender, e);
-      else {
-        clearConnectedPortButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
-        cloneConnectedPortParametersButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
-        connectedPortView.Content = Content.ConnectedPort;
-      }
-    }
-    protected virtual void Content_PortConnectionValidChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_PortConnectionValidChanged), sender, e);
-      else {
-        errorProvider.SetError(connectedPortView, Content.PortConnectionValid ? string.Empty : "Port connection is not valid");
-      }
-    }
-    protected virtual void Content_LogMessagesChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_LogMessagesChanged), sender, e);
-      else {
-        logMessagesCheckBox.Checked = Content.LogMessages;
-      }
-    }
-
-    protected virtual void sendMessageButton_Click(object sender, EventArgs e) {
-      Content.SendMessageAsync(Content.PrepareMessage());
-    }
-
-    protected virtual void setConnectedPortButton_Click(object sender, EventArgs e) {
-      if (entitySelectorDialog == null) {
-        entitySelectorDialog = new EntitySelectorDialog();
-        entitySelectorDialog.Caption = "Select Connected Port";
-        entitySelectorDialog.EntitySelector.Caption = "Available Ports";
-      }
-
-      try {
-        IEntity root = Content;
-        while (root.Parent != null)
-          root = root.Parent;
-        entitySelectorDialog.EntitySelector.Configure(
-          root,
-          Content.ConnectedPort,
-          typeof(IConnectedPort)
-        );
-
-        if (entitySelectorDialog.ShowDialog(this) == DialogResult.OK) {
-          Content.ConnectedPort = entitySelectorDialog.EntitySelector.SelectedEntity as IConnectedPort;
-        }
-      }
-      catch (Exception ex) {
-        ErrorHandling.ShowErrorDialog(this, ex);
-      }
-    }
-    protected virtual void clearConnectedPortButton_Click(object sender, EventArgs e) {
-      Content.ConnectedPort = null;
-    }
-
-    protected virtual void connectedPortView_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IConnectedPort;
-
-      if (!ReadOnly && (data != null) && (Content.CanConnectToPort(data))) {
-        e.Effect = DragDropEffects.Link;
-      }
-    }
-    protected virtual void connectedPortView_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        var port = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IConnectedPort;
-        Content.ConnectedPort = port;
-      }
-    }
-    protected virtual void cloneConnectedPortParametersButton_Click(object sender, EventArgs e) {
-      Content.CloneConnectedPortParameters();
-    }
-    protected virtual void logMessagesCheckBox_CheckedChanged(object sender, EventArgs e) {
-      Content.LogMessages = logMessagesCheckBox.Checked;
-    }
-  }
-}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/HeuristicLab.Optimization.Networks.Views-3.3.csproj
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/HeuristicLab.Optimization.Networks.Views-3.3.csproj	(revision 11525)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/HeuristicLab.Optimization.Networks.Views-3.3.csproj	(revision 11526)
@@ -91,180 +91,120 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="### obsolete\ClientPortView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="### obsolete\ClientPortView.Designer.cs">
-      <DependentUpon>ClientPortView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="### obsolete\ClientServicePortView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="### obsolete\ClientServicePortView.Designer.cs">
-      <DependentUpon>ClientServicePortView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="### obsolete\InputOutputPortView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="### obsolete\InputOutputPortView.Designer.cs">
-      <DependentUpon>InputOutputPortView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="### obsolete\InputPortView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="### obsolete\InputPortView.Designer.cs">
-      <DependentUpon>InputPortView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="MessageCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="MessageCollectionView.Designer.cs">
+    <Compile Include="Core.Networks.Views\EntitySelector.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\EntitySelector.Designer.cs">
+      <DependentUpon>EntitySelector.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\EntitySelectorDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\EntitySelectorDialog.Designer.cs">
+      <DependentUpon>EntitySelectorDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\EntityView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\EntityView.Designer.cs">
+      <DependentUpon>EntityView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\GenericNodeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\GenericNodeView.Designer.cs">
+      <DependentUpon>GenericNodeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\GenericPortView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\GenericPortView.Designer.cs">
+      <DependentUpon>GenericPortView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\MessageCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\MessageCollectionView.Designer.cs">
       <DependentUpon>MessageCollectionView.cs</DependentUpon>
     </Compile>
-    <Compile Include="### obsolete\ServiceParameterCollectionCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="### obsolete\ServiceParameterCollectionCollectionView.Designer.cs">
-      <DependentUpon>ServiceParameterCollectionCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="### obsolete\ServiceParameterCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="### obsolete\ServiceParameterCollectionView.Designer.cs">
-      <DependentUpon>ServiceParameterCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="### obsolete\ServiceParameterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="### obsolete\ServiceParameterView.Designer.cs">
-      <DependentUpon>ServiceParameterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="### obsolete\ValuePortView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="### obsolete\ValuePortView.Designer.cs">
-      <DependentUpon>ValuePortView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ClientNodeView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ClientNodeView.Designer.cs">
-      <DependentUpon>ClientNodeView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="GenericPortView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="GenericPortView.Designer.cs">
-      <DependentUpon>GenericPortView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="MessageValueCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="MessageValueCollectionView.Designer.cs">
+    <Compile Include="Core.Networks.Views\MessageValueCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\MessageValueCollectionView.Designer.cs">
       <DependentUpon>MessageValueCollectionView.cs</DependentUpon>
     </Compile>
-    <Compile Include="MessageView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="MessageView.Designer.cs">
+    <Compile Include="Core.Networks.Views\MessageValueView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\MessageValueView.Designer.cs">
+      <DependentUpon>MessageValueView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\MessageView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\MessageView.Designer.cs">
       <DependentUpon>MessageView.cs</DependentUpon>
     </Compile>
-    <Compile Include="GenericNodeView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="GenericNodeView.Designer.cs">
-      <DependentUpon>GenericNodeView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="HookOperatorView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="HookOperatorView.Designer.cs">
+    <Compile Include="Core.Networks.Views\NetworkView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\NetworkView.Designer.cs">
+      <DependentUpon>NetworkView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\NodeCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\NodeCollectionView.Designer.cs">
+      <DependentUpon>NodeCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\NodeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\NodeView.Designer.cs">
+      <DependentUpon>NodeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\ParameterizedPortView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\ParameterizedPortView.Designer.cs">
+      <DependentUpon>ParameterizedPortView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\PortCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\PortCollectionView.Designer.cs">
+      <DependentUpon>PortCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\PortParameterCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\PortParameterCollectionView.Designer.cs">
+      <DependentUpon>PortParameterCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\PortParameterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\PortParameterView.Designer.cs">
+      <DependentUpon>PortParameterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\PortView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\PortView.Designer.cs">
+      <DependentUpon>PortView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Operators.Views\HookOperatorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Operators.Views\HookOperatorView.Designer.cs">
       <DependentUpon>HookOperatorView.cs</DependentUpon>
     </Compile>
-    <Compile Include="ParameterizedPortView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ParameterizedPortView.Designer.cs">
-      <DependentUpon>ParameterizedPortView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="EntitySelector.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="EntitySelector.Designer.cs">
-      <DependentUpon>EntitySelector.cs</DependentUpon>
-    </Compile>
-    <Compile Include="EntitySelectorDialog.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="EntitySelectorDialog.Designer.cs">
-      <DependentUpon>EntitySelectorDialog.cs</DependentUpon>
-    </Compile>
-    <Compile Include="EntityView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="EntityView.Designer.cs">
-      <DependentUpon>EntityView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="MessageValueView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="MessageValueView.Designer.cs">
-      <DependentUpon>MessageValueView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="PortParameterCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="PortParameterCollectionView.Designer.cs">
-      <DependentUpon>PortParameterCollectionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="PortView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="PortView.Designer.cs">
-      <DependentUpon>PortView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="PortParameterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="PortParameterView.Designer.cs">
-      <DependentUpon>PortParameterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="VariablesNodeView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="VariablesNodeView.Designer.cs">
-      <DependentUpon>VariablesNodeView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="AlgorithmNodeView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="AlgorithmNodeView.Designer.cs">
+    <Compile Include="Optimization.Networks.Views\AlgorithmNodeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Optimization.Networks.Views\AlgorithmNodeView.Designer.cs">
       <DependentUpon>AlgorithmNodeView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="NodeView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="NodeView.Designer.cs">
-      <DependentUpon>NodeView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="PortCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="PortCollectionView.Designer.cs">
-      <DependentUpon>PortCollectionView.cs</DependentUpon>
     </Compile>
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="NetworkView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="NetworkView.Designer.cs">
-      <DependentUpon>NetworkView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="NodeCollectionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="NodeCollectionView.Designer.cs">
-      <DependentUpon>NodeCollectionView.cs</DependentUpon>
-    </Compile>
   </ItemGroup>
   <ItemGroup>
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/HookOperatorView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/HookOperatorView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,138 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class HookOperatorView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.portGroupBox = new System.Windows.Forms.GroupBox();
-      this.clearPortButton = new System.Windows.Forms.Button();
-      this.portView = new HeuristicLab.Optimization.Networks.Views.PortView();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.portGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // breakpointCheckBox
-      // 
-      this.toolTip.SetToolTip(this.breakpointCheckBox, "Check if an engine should stop execution each time after this operator has been p" +
-        "rocessed.");
-      // 
-      // parameterCollectionView
-      // 
-      this.parameterCollectionView.Location = new System.Drawing.Point(0, 101);
-      this.parameterCollectionView.Size = new System.Drawing.Size(490, 252);
-      this.parameterCollectionView.TabIndex = 6;
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      // 
-      // portGroupBox
-      // 
-      this.portGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.portGroupBox.Controls.Add(this.clearPortButton);
-      this.portGroupBox.Controls.Add(this.portView);
-      this.portGroupBox.Location = new System.Drawing.Point(0, 46);
-      this.portGroupBox.Name = "portGroupBox";
-      this.portGroupBox.Size = new System.Drawing.Size(490, 49);
-      this.portGroupBox.TabIndex = 5;
-      this.portGroupBox.TabStop = false;
-      this.portGroupBox.Text = "Port:";
-      // 
-      // clearPortButton
-      // 
-      this.clearPortButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
-      this.clearPortButton.Location = new System.Drawing.Point(6, 19);
-      this.clearPortButton.Name = "clearPortButton";
-      this.clearPortButton.Size = new System.Drawing.Size(24, 24);
-      this.clearPortButton.TabIndex = 0;
-      this.clearPortButton.UseVisualStyleBackColor = true;
-      this.clearPortButton.Click += new System.EventHandler(this.clearPortButton_Click);
-      // 
-      // portView
-      // 
-      this.portView.AllowDrop = true;
-      this.portView.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.portView.Caption = "Port View";
-      this.portView.Content = null;
-      this.portView.Location = new System.Drawing.Point(36, 21);
-      this.portView.Name = "portView";
-      this.portView.ReadOnly = true;
-      this.portView.Size = new System.Drawing.Size(429, 24);
-      this.portView.TabIndex = 1;
-      this.portView.DragDrop += new System.Windows.Forms.DragEventHandler(this.portView_DragDrop);
-      this.portView.DragEnter += new System.Windows.Forms.DragEventHandler(this.portView_DragEnterOver);
-      this.portView.DragOver += new System.Windows.Forms.DragEventHandler(this.portView_DragEnterOver);
-      // 
-      // HookOperatorView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.portGroupBox);
-      this.Name = "HookOperatorView";
-      this.Controls.SetChildIndex(this.breakpointCheckBox, 0);
-      this.Controls.SetChildIndex(this.breakpointLabel, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
-      this.Controls.SetChildIndex(this.portGroupBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.portGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox portGroupBox;
-    protected PortView portView;
-    protected System.Windows.Forms.Button clearPortButton;
-
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/HookOperatorView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/HookOperatorView.cs	(revision 11525)
+++ 	(revision )
@@ -1,91 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.MainForm;
-using HeuristicLab.Operators.Views;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("HookOperator View")]
-  [Content(typeof(HookOperator), true)]
-  [Content(typeof(IHookOperator), false)]
-  public partial class HookOperatorView : OperatorView {
-    public new IHookOperator Content {
-      get { return (IHookOperator)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public HookOperatorView() {
-      InitializeComponent();
-      errorProvider.SetIconAlignment(portView, ErrorIconAlignment.MiddleRight);
-      errorProvider.SetIconPadding(portView, 2);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.PortChanged -= Content_PortChanged;
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.PortChanged += Content_PortChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      portView.Content = Content == null ? null : Content.Port;
-      parameterCollectionView.Content = Content == null ? null : Content.Parameters;
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      portGroupBox.Enabled = Content != null && !ReadOnly && !Locked;
-      clearPortButton.Enabled = Content != null && Content.Port != null && !ReadOnly && !Locked;
-    }
-
-    protected virtual void Content_PortChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_PortChanged), sender, e);
-      else {
-        clearPortButton.Enabled = Content.Port != null && !ReadOnly && !Locked;
-        portView.Content = Content.Port;
-      }
-    }
-
-    protected virtual void clearPortButton_Click(object sender, EventArgs e) {
-      Content.Port = null;
-    }
-    protected virtual void portView_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IGenericPort;
-
-      if (!ReadOnly && (data != null)) {
-        e.Effect = DragDropEffects.Link;
-      }
-    }
-    protected virtual void portView_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        var port = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IGenericPort;
-        Content.Port = port;
-      }
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageCollectionView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,53 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class MessageCollectionView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-    }
-
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageCollectionView.cs	(revision 11525)
+++ 	(revision )
@@ -1,41 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("MessageCollection View")]
-  [Content(typeof(MessageCollection), true)]
-  [Content(typeof(IItemCollection<IMessage>), false)]
-  public partial class MessageCollectionView : ItemCollectionView<IMessage> {
-    public MessageCollectionView() {
-      InitializeComponent();
-      itemsGroupBox.Text = "Messages";
-    }
-
-    protected override IMessage CreateItem() {
-      return new Message();
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageValueCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageValueCollectionView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,62 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class MessageValueCollectionView {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.SuspendLayout();
-      // 
-      // MessageValueCollectionView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.Name = "MessageValueCollectionView";
-      this.Size = new System.Drawing.Size(532, 383);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageValueCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageValueCollectionView.cs	(revision 11525)
+++ 	(revision )
@@ -1,83 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Collections;
-using HeuristicLab.MainForm;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("MessageValueCollection View")]
-  [Content(typeof(MessageValueCollection), true)]
-  [Content(typeof(IKeyedItemCollection<string, IMessageValue>), false)]
-  public partial class MessageValueCollectionView : ItemCollectionView<IMessageValue> {
-    public new IKeyedItemCollection<string, IMessageValue> Content {
-      get { return (IKeyedItemCollection<string, IMessageValue>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public MessageValueCollectionView() {
-      InitializeComponent();
-      itemsGroupBox.Text = "Message Values";
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.ItemsReplaced -= new CollectionItemsChangedEventHandler<IMessageValue>(Content_ItemsReplaced);
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ItemsReplaced += new CollectionItemsChangedEventHandler<IMessageValue>(Content_ItemsReplaced);
-    }
-
-    protected override void OnContentChanged() {
-      string selectedName = null;
-      if ((itemsListView.SelectedItems.Count == 1) && (itemsListView.SelectedItems[0].Tag != null &&
-        itemsListView.SelectedItems[0].Tag is IMessageValue))
-        selectedName = ((IMessageValue)itemsListView.SelectedItems[0].Tag).Name;
-      base.OnContentChanged();
-      if (selectedName != null) {
-        foreach (ListViewItem item in itemsListView.Items) {
-          if ((item.Tag != null) && (((IMessageValue)item.Tag).Name.Equals(selectedName)))
-            item.Selected = true;
-        }
-      }
-    }
-
-    #region Content Events
-    protected virtual void Content_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IMessageValue> e) {
-      if (InvokeRequired)
-        Invoke(new CollectionItemsChangedEventHandler<IMessageValue>(Content_ItemsReplaced), sender, e);
-      else {
-        foreach (IMessageValue value in e.Items) {
-          foreach (ListViewItem listViewItem in GetListViewItemsForItem(value))
-            UpdateListViewItemText(listViewItem);
-        }
-        AdjustListViewColumnSizes();
-      }
-    }
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageValueView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageValueView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,141 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class MessageValueView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.valueGroupBox = new System.Windows.Forms.GroupBox();
-      this.valuePanel = new System.Windows.Forms.Panel();
-      this.valueViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.dataTypeLabel = new System.Windows.Forms.Label();
-      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
-      this.valueGroupBox.SuspendLayout();
-      this.valuePanel.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // valueGroupBox
-      // 
-      this.valueGroupBox.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.valueGroupBox.Controls.Add(this.valuePanel);
-      this.valueGroupBox.Location = new System.Drawing.Point(0, 26);
-      this.valueGroupBox.Name = "valueGroupBox";
-      this.valueGroupBox.Size = new System.Drawing.Size(482, 271);
-      this.valueGroupBox.TabIndex = 2;
-      this.valueGroupBox.TabStop = false;
-      this.valueGroupBox.Text = "Value";
-      // 
-      // valuePanel
-      // 
-      this.valuePanel.AllowDrop = true;
-      this.valuePanel.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.valuePanel.Controls.Add(this.valueViewHost);
-      this.valuePanel.Location = new System.Drawing.Point(6, 19);
-      this.valuePanel.Name = "valuePanel";
-      this.valuePanel.Size = new System.Drawing.Size(470, 246);
-      this.valuePanel.TabIndex = 0;
-      // 
-      // valueViewHost
-      // 
-      this.valueViewHost.Caption = "View";
-      this.valueViewHost.Content = null;
-      this.valueViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.valueViewHost.Enabled = false;
-      this.valueViewHost.Location = new System.Drawing.Point(0, 0);
-      this.valueViewHost.Name = "valueViewHost";
-      this.valueViewHost.ReadOnly = false;
-      this.valueViewHost.Size = new System.Drawing.Size(470, 246);
-      this.valueViewHost.TabIndex = 0;
-      this.valueViewHost.ViewsLabelVisible = true;
-      this.valueViewHost.ViewType = null;
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.AutoSize = true;
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 3);
-      this.dataTypeLabel.Name = "dataTypeLabel";
-      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
-      this.dataTypeLabel.TabIndex = 0;
-      this.dataTypeLabel.Text = "&Data Type:";
-      // 
-      // dataTypeTextBox
-      // 
-      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.dataTypeTextBox.Location = new System.Drawing.Point(69, 0);
-      this.dataTypeTextBox.Name = "dataTypeTextBox";
-      this.dataTypeTextBox.ReadOnly = true;
-      this.dataTypeTextBox.Size = new System.Drawing.Size(413, 20);
-      this.dataTypeTextBox.TabIndex = 1;
-      // 
-      // MessageValueView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.dataTypeTextBox);
-      this.Controls.Add(this.dataTypeLabel);
-      this.Controls.Add(this.valueGroupBox);
-      this.Name = "MessageValueView";
-      this.Size = new System.Drawing.Size(482, 297);
-      this.valueGroupBox.ResumeLayout(false);
-      this.valuePanel.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox valueGroupBox;
-    protected System.Windows.Forms.Panel valuePanel;
-    protected MainForm.WindowsForms.ViewHost valueViewHost;
-    protected System.Windows.Forms.Label dataTypeLabel;
-    protected System.Windows.Forms.TextBox dataTypeTextBox;
-
-
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageValueView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageValueView.cs	(revision 11525)
+++ 	(revision )
@@ -1,81 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("MessageValue View")]
-  [Content(typeof(MessageValue<>), true)]
-  [Content(typeof(IMessageValue<>), false)]
-  [Content(typeof(IMessageValue), false)]
-  public partial class MessageValueView : ItemView {
-    public new IMessageValue Content {
-      get { return (IMessageValue)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public MessageValueView() {
-      InitializeComponent();
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.ValueChanged -= Content_ValueChanged;
-      base.DeregisterContentEvents();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ValueChanged += Content_ValueChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        dataTypeTextBox.Text = string.Empty;
-        valueViewHost.Content = null;
-      } else {
-        dataTypeTextBox.Text = Content.DataType.GetPrettyName();
-        valueViewHost.ViewType = null;
-        valueViewHost.Content = Content.Value;
-      }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      dataTypeTextBox.Enabled = Content != null;
-      valueGroupBox.Enabled = Content != null;
-    }
-    protected virtual void Content_ValueChanged(object sender, System.EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ValueChanged), sender, e);
-      else {
-        valueViewHost.ViewType = null;
-        valueViewHost.Content = Content.Value;
-      }
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,80 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class MessageView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.messageValueCollectionView = new HeuristicLab.Optimization.Networks.Views.MessageValueCollectionView();
-      this.SuspendLayout();
-      // 
-      // messageValueCollectionView
-      // 
-      this.messageValueCollectionView.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.messageValueCollectionView.Caption = "MessageValueCollection View";
-      this.messageValueCollectionView.Content = null;
-      this.messageValueCollectionView.Location = new System.Drawing.Point(0, 0);
-      this.messageValueCollectionView.Name = "messageValueCollectionView";
-      this.messageValueCollectionView.ReadOnly = true;
-      this.messageValueCollectionView.ShowDetails = true;
-      this.messageValueCollectionView.Size = new System.Drawing.Size(645, 517);
-      this.messageValueCollectionView.TabIndex = 3;
-      // 
-      // MessageView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.messageValueCollectionView);
-      this.Name = "MessageView";
-      this.Size = new System.Drawing.Size(645, 517);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    protected MessageValueCollectionView messageValueCollectionView;
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/MessageView.cs	(revision 11525)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("Message View")]
-  [Content(typeof(Message), true)]
-  [Content(typeof(IMessage), false)]
-  public partial class MessageView : ItemView {
-    public new IMessage Content {
-      get { return (IMessage)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public MessageView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      messageValueCollectionView.Content = Content == null ? null : Content.Values;
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      messageValueCollectionView.Enabled = Content != null;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NetworkView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NetworkView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,98 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class NetworkView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.nodeCollectionView = new HeuristicLab.Optimization.Networks.Views.NodeCollectionView();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(69, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(551, 20);
-      // 
-      // infoLabel
-      // 
-      this.infoLabel.Location = new System.Drawing.Point(626, 3);
-      // 
-      // nodeCollectionView
-      // 
-      this.nodeCollectionView.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.nodeCollectionView.Caption = "NodeCollection View";
-      this.nodeCollectionView.Content = null;
-      this.nodeCollectionView.Location = new System.Drawing.Point(6, 26);
-      this.nodeCollectionView.Name = "nodeCollectionView";
-      this.nodeCollectionView.ReadOnly = false;
-      this.nodeCollectionView.ShowDetails = true;
-      this.nodeCollectionView.Size = new System.Drawing.Size(639, 491);
-      this.nodeCollectionView.TabIndex = 3;
-      // 
-      // NetworkView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.nodeCollectionView);
-      this.Name = "NetworkView";
-      this.Size = new System.Drawing.Size(645, 517);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.nodeCollectionView, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected NodeCollectionView nodeCollectionView;
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NetworkView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NetworkView.cs	(revision 11525)
+++ 	(revision )
@@ -1,60 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("Network View")]
-  [Content(typeof(Network), true)]
-  [Content(typeof(INetwork), false)]
-  public partial class NetworkView : EntityView {
-    public new INetwork Content {
-      get { return (INetwork)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public NetworkView() {
-      InitializeComponent();
-    }
-
-    protected override void DeregisterContentEvents() {
-      // remove events here
-      base.DeregisterContentEvents();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      // add events here
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      nodeCollectionView.Content = Content == null ? null : Content.Nodes;
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      nodeCollectionView.Enabled = Content != null;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NodeCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NodeCollectionView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,53 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class NodeCollectionView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-    }
-
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NodeCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NodeCollectionView.cs	(revision 11525)
+++ 	(revision )
@@ -1,60 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("NodeCollection View")]
-  [Content(typeof(NodeCollection), true)]
-  [Content(typeof(IKeyedItemCollection<string, INode>), false)]
-  public partial class NodeCollectionView : NamedItemCollectionView<INode> {
-    public NodeCollectionView() {
-      InitializeComponent();
-      itemsGroupBox.Text = "Nodes";
-    }
-
-    protected override INode CreateItem() {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Node";
-        typeSelectorDialog.TypeSelector.Caption = "Available Nodes";
-        typeSelectorDialog.TypeSelector.Configure(typeof(INode), false, true);
-      }
-
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        try {
-          var n = (INode)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-          n.Name = GetUniqueName(n.Name);
-          return n;
-        }
-        catch (Exception ex) {
-          ErrorHandling.ShowErrorDialog(this, ex);
-        }
-      }
-      return null;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NodeView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,93 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class NodeView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.portCollectionView = new HeuristicLab.Optimization.Networks.Views.PortCollectionView();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      // 
-      // portCollectionView
-      // 
-      this.portCollectionView.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.portCollectionView.Caption = "PortCollection View";
-      this.portCollectionView.Content = null;
-      this.portCollectionView.Location = new System.Drawing.Point(0, 26);
-      this.portCollectionView.Name = "portCollectionView";
-      this.portCollectionView.ReadOnly = false;
-      this.portCollectionView.ShowDetails = true;
-      this.portCollectionView.Size = new System.Drawing.Size(645, 491);
-      this.portCollectionView.TabIndex = 3;
-      // 
-      // NodeView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.portCollectionView);
-      this.Name = "NodeView";
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.portCollectionView, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected PortCollectionView portCollectionView;
-
-
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/NodeView.cs	(revision 11525)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("Node View")]
-  [Content(typeof(Node), true)]
-  [Content(typeof(INode), false)]
-  public partial class NodeView : EntityView {
-    public new INode Content {
-      get { return (INode)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public NodeView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      portCollectionView.Content = Content == null ? null : Content.Ports;
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      portCollectionView.Enabled = Content != null && !ReadOnly;
-    }
-  }
-}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Operators.Views/HookOperatorView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Operators.Views/HookOperatorView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Operators.Views/HookOperatorView.Designer.cs	(revision 11526)
@@ -0,0 +1,138 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators.Views {
+  partial class HookOperatorView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.portGroupBox = new System.Windows.Forms.GroupBox();
+      this.clearPortButton = new System.Windows.Forms.Button();
+      this.portView = new HeuristicLab.Core.Networks.Views.PortView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.portGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // breakpointCheckBox
+      // 
+      this.toolTip.SetToolTip(this.breakpointCheckBox, "Check if an engine should stop execution each time after this operator has been p" +
+        "rocessed.");
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.Location = new System.Drawing.Point(0, 101);
+      this.parameterCollectionView.Size = new System.Drawing.Size(490, 252);
+      this.parameterCollectionView.TabIndex = 6;
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // portGroupBox
+      // 
+      this.portGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.portGroupBox.Controls.Add(this.clearPortButton);
+      this.portGroupBox.Controls.Add(this.portView);
+      this.portGroupBox.Location = new System.Drawing.Point(0, 46);
+      this.portGroupBox.Name = "portGroupBox";
+      this.portGroupBox.Size = new System.Drawing.Size(490, 49);
+      this.portGroupBox.TabIndex = 5;
+      this.portGroupBox.TabStop = false;
+      this.portGroupBox.Text = "Port:";
+      // 
+      // clearPortButton
+      // 
+      this.clearPortButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
+      this.clearPortButton.Location = new System.Drawing.Point(6, 19);
+      this.clearPortButton.Name = "clearPortButton";
+      this.clearPortButton.Size = new System.Drawing.Size(24, 24);
+      this.clearPortButton.TabIndex = 0;
+      this.clearPortButton.UseVisualStyleBackColor = true;
+      this.clearPortButton.Click += new System.EventHandler(this.clearPortButton_Click);
+      // 
+      // portView
+      // 
+      this.portView.AllowDrop = true;
+      this.portView.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.portView.Caption = "Port View";
+      this.portView.Content = null;
+      this.portView.Location = new System.Drawing.Point(36, 21);
+      this.portView.Name = "portView";
+      this.portView.ReadOnly = true;
+      this.portView.Size = new System.Drawing.Size(429, 24);
+      this.portView.TabIndex = 1;
+      this.portView.DragDrop += new System.Windows.Forms.DragEventHandler(this.portView_DragDrop);
+      this.portView.DragEnter += new System.Windows.Forms.DragEventHandler(this.portView_DragEnterOver);
+      this.portView.DragOver += new System.Windows.Forms.DragEventHandler(this.portView_DragEnterOver);
+      // 
+      // HookOperatorView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.portGroupBox);
+      this.Name = "HookOperatorView";
+      this.Controls.SetChildIndex(this.breakpointCheckBox, 0);
+      this.Controls.SetChildIndex(this.breakpointLabel, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
+      this.Controls.SetChildIndex(this.portGroupBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.portGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.GroupBox portGroupBox;
+    protected HeuristicLab.Core.Networks.Views.PortView portView;
+    protected System.Windows.Forms.Button clearPortButton;
+
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Operators.Views/HookOperatorView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Operators.Views/HookOperatorView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Operators.Views/HookOperatorView.cs	(revision 11526)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Networks;
+using HeuristicLab.MainForm;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Operators.Views {
+  [View("HookOperator View")]
+  [Content(typeof(HookOperator), true)]
+  [Content(typeof(IHookOperator), false)]
+  public partial class HookOperatorView : OperatorView {
+    public new IHookOperator Content {
+      get { return (IHookOperator)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public HookOperatorView() {
+      InitializeComponent();
+      errorProvider.SetIconAlignment(portView, ErrorIconAlignment.MiddleRight);
+      errorProvider.SetIconPadding(portView, 2);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.PortChanged -= Content_PortChanged;
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.PortChanged += Content_PortChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      portView.Content = Content == null ? null : Content.Port;
+      parameterCollectionView.Content = Content == null ? null : Content.Parameters;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      portGroupBox.Enabled = Content != null && !ReadOnly && !Locked;
+      clearPortButton.Enabled = Content != null && Content.Port != null && !ReadOnly && !Locked;
+    }
+
+    protected virtual void Content_PortChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_PortChanged), sender, e);
+      else {
+        clearPortButton.Enabled = Content.Port != null && !ReadOnly && !Locked;
+        portView.Content = Content.Port;
+      }
+    }
+
+    protected virtual void clearPortButton_Click(object sender, EventArgs e) {
+      Content.Port = null;
+    }
+    protected virtual void portView_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IGenericPort;
+
+      if (!ReadOnly && (data != null)) {
+        e.Effect = DragDropEffects.Link;
+      }
+    }
+    protected virtual void portView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        var port = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IGenericPort;
+        Content.Port = port;
+      }
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Optimization.Networks.Views/AlgorithmNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Optimization.Networks.Views/AlgorithmNodeView.Designer.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Optimization.Networks.Views/AlgorithmNodeView.Designer.cs	(revision 11526)
@@ -0,0 +1,220 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Optimization.Networks.Views {
+  partial class AlgorithmNodeView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AlgorithmNodeView));
+      this.portCollectionView = new HeuristicLab.Core.Networks.Views.PortCollectionView();
+      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.portsTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmPanel = new System.Windows.Forms.Panel();
+      this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.clearAlgorithmButton = new System.Windows.Forms.Button();
+      this.setAlgorithmButton = new System.Windows.Forms.Button();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.portsTabPage.SuspendLayout();
+      this.algorithmTabPage.SuspendLayout();
+      this.algorithmPanel.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // portCollectionView
+      // 
+      this.portCollectionView.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.portCollectionView.Caption = "PortCollection View";
+      this.portCollectionView.Content = null;
+      this.portCollectionView.Location = new System.Drawing.Point(6, 6);
+      this.portCollectionView.Name = "portCollectionView";
+      this.portCollectionView.ReadOnly = false;
+      this.portCollectionView.ShowDetails = true;
+      this.portCollectionView.Size = new System.Drawing.Size(625, 453);
+      this.portCollectionView.TabIndex = 0;
+      // 
+      // tabControl
+      // 
+      this.tabControl.AllowDrop = true;
+      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.portsTabPage);
+      this.tabControl.Controls.Add(this.algorithmTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 26);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(645, 491);
+      this.tabControl.TabIndex = 3;
+      // 
+      // portsTabPage
+      // 
+      this.portsTabPage.Controls.Add(this.portCollectionView);
+      this.portsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.portsTabPage.Name = "portsTabPage";
+      this.portsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.portsTabPage.Size = new System.Drawing.Size(637, 465);
+      this.portsTabPage.TabIndex = 0;
+      this.portsTabPage.Text = "Ports";
+      this.portsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmTabPage
+      // 
+      this.algorithmTabPage.Controls.Add(this.algorithmPanel);
+      this.algorithmTabPage.Controls.Add(this.clearAlgorithmButton);
+      this.algorithmTabPage.Controls.Add(this.setAlgorithmButton);
+      this.algorithmTabPage.Location = new System.Drawing.Point(4, 22);
+      this.algorithmTabPage.Name = "algorithmTabPage";
+      this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.algorithmTabPage.Size = new System.Drawing.Size(637, 465);
+      this.algorithmTabPage.TabIndex = 1;
+      this.algorithmTabPage.Text = "Algorithm";
+      this.algorithmTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmPanel
+      // 
+      this.algorithmPanel.AllowDrop = true;
+      this.algorithmPanel.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.algorithmPanel.Controls.Add(this.algorithmViewHost);
+      this.algorithmPanel.Location = new System.Drawing.Point(6, 36);
+      this.algorithmPanel.Name = "algorithmPanel";
+      this.algorithmPanel.Size = new System.Drawing.Size(625, 423);
+      this.algorithmPanel.TabIndex = 2;
+      this.algorithmPanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.algorithmPanel_DragDrop);
+      this.algorithmPanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.algorithmPanel_DragEnterOver);
+      this.algorithmPanel.DragOver += new System.Windows.Forms.DragEventHandler(this.algorithmPanel_DragEnterOver);
+      // 
+      // algorithmViewHost
+      // 
+      this.algorithmViewHost.Caption = "View";
+      this.algorithmViewHost.Content = null;
+      this.algorithmViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.algorithmViewHost.Enabled = false;
+      this.algorithmViewHost.Location = new System.Drawing.Point(0, 0);
+      this.algorithmViewHost.Name = "algorithmViewHost";
+      this.algorithmViewHost.ReadOnly = false;
+      this.algorithmViewHost.Size = new System.Drawing.Size(625, 423);
+      this.algorithmViewHost.TabIndex = 0;
+      this.algorithmViewHost.ViewsLabelVisible = true;
+      this.algorithmViewHost.ViewType = null;
+      // 
+      // clearAlgorithmButton
+      // 
+      this.clearAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
+      this.clearAlgorithmButton.Location = new System.Drawing.Point(36, 6);
+      this.clearAlgorithmButton.Name = "clearAlgorithmButton";
+      this.clearAlgorithmButton.Size = new System.Drawing.Size(24, 24);
+      this.clearAlgorithmButton.TabIndex = 1;
+      this.clearAlgorithmButton.UseVisualStyleBackColor = true;
+      this.clearAlgorithmButton.Click += new System.EventHandler(this.clearAlgorithmButton_Click);
+      // 
+      // setAlgorithmButton
+      // 
+      this.setAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Edit;
+      this.setAlgorithmButton.Location = new System.Drawing.Point(6, 6);
+      this.setAlgorithmButton.Name = "setAlgorithmButton";
+      this.setAlgorithmButton.Size = new System.Drawing.Size(24, 24);
+      this.setAlgorithmButton.TabIndex = 0;
+      this.setAlgorithmButton.UseVisualStyleBackColor = true;
+      this.setAlgorithmButton.Click += new System.EventHandler(this.setAlgorithmButton_Click);
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runCollectionView);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Size = new System.Drawing.Size(637, 465);
+      this.runsTabPage.TabIndex = 2;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runCollectionView
+      // 
+      this.runCollectionView.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.runCollectionView.Caption = "RunCollection View";
+      this.runCollectionView.Content = null;
+      this.runCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.runCollectionView.Name = "runCollectionView";
+      this.runCollectionView.ReadOnly = false;
+      this.runCollectionView.Size = new System.Drawing.Size(631, 459);
+      this.runCollectionView.TabIndex = 0;
+      // 
+      // AlgorithmNodeView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.tabControl);
+      this.Name = "AlgorithmNodeView";
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.portsTabPage.ResumeLayout(false);
+      this.algorithmTabPage.ResumeLayout(false);
+      this.algorithmPanel.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected HeuristicLab.Core.Networks.Views.PortCollectionView portCollectionView;
+    protected System.Windows.Forms.TabPage portsTabPage;
+    protected System.Windows.Forms.Button setAlgorithmButton;
+    protected System.Windows.Forms.Button clearAlgorithmButton;
+    protected System.Windows.Forms.Panel algorithmPanel;
+    protected HeuristicLab.MainForm.WindowsForms.DragOverTabControl tabControl;
+    protected System.Windows.Forms.TabPage algorithmTabPage;
+    protected MainForm.WindowsForms.ViewHost algorithmViewHost;
+    protected System.Windows.Forms.TabPage runsTabPage;
+    protected Optimization.Views.RunCollectionView runCollectionView;
+
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Optimization.Networks.Views/AlgorithmNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Optimization.Networks.Views/AlgorithmNodeView.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Optimization.Networks.Views/AlgorithmNodeView.cs	(revision 11526)
@@ -0,0 +1,131 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Networks.Views;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Optimization.Networks.Views {
+  [View("AlgorithmNode View")]
+  [Content(typeof(AlgorithmNode), true)]
+  [Content(typeof(IAlgorithmNode), false)]
+  public partial class AlgorithmNodeView : EntityView {
+    protected TypeSelectorDialog typeSelectorDialog;
+
+    public new IAlgorithmNode Content {
+      get { return (IAlgorithmNode)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AlgorithmNodeView() {
+      InitializeComponent();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.AlgorithmChanged -= Content_AlgorithmChanged;
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.AlgorithmChanged += Content_AlgorithmChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        portCollectionView.Content = null;
+        algorithmViewHost.Content = null;
+        runCollectionView.Content = null;
+      } else {
+        portCollectionView.Content = Content.Ports;
+        algorithmViewHost.ViewType = null;
+        algorithmViewHost.Content = Content.Algorithm;
+        runCollectionView.Content = Content.Runs;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      portCollectionView.Enabled = Content != null && !ReadOnly;
+      setAlgorithmButton.Enabled = Content != null && !ReadOnly;
+      clearAlgorithmButton.Enabled = Content != null && Content.Algorithm != null && !ReadOnly;
+      algorithmPanel.Enabled = Content != null;
+      runCollectionView.Enabled = Content != null && !ReadOnly;
+    }
+
+    protected virtual void Content_AlgorithmChanged(object sender, System.EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_AlgorithmChanged), sender, e);
+      else {
+        clearAlgorithmButton.Enabled = Content.Algorithm != null && !ReadOnly;
+        algorithmViewHost.ViewType = null;
+        algorithmViewHost.Content = Content.Algorithm;
+      }
+    }
+
+    protected virtual void setAlgorithmButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Algorithm";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IAlgorithm), false, true);
+      }
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.Algorithm = (IAlgorithm)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+    protected virtual void clearAlgorithmButton_Click(object sender, EventArgs e) {
+      Content.Algorithm = null;
+    }
+    protected virtual void algorithmPanel_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (!ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IAlgorithm)) {
+        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
+      }
+    }
+    protected virtual void algorithmPanel_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IAlgorithm alg = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IAlgorithm;
+        if (e.Effect.HasFlag(DragDropEffects.Copy)) alg = (IAlgorithm)alg.Clone();
+        Content.Algorithm = alg;
+      }
+    }
+  }
+}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/ParameterizedPortView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/ParameterizedPortView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,93 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class ParameterizedPortView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.portParameterCollectionView = new HeuristicLab.Optimization.Networks.Views.PortParameterCollectionView();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      // 
-      // portParameterCollectionView
-      // 
-      this.portParameterCollectionView.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.portParameterCollectionView.Caption = "PortParameterCollection View";
-      this.portParameterCollectionView.Content = null;
-      this.portParameterCollectionView.Location = new System.Drawing.Point(0, 26);
-      this.portParameterCollectionView.Name = "portParameterCollectionView";
-      this.portParameterCollectionView.ReadOnly = false;
-      this.portParameterCollectionView.ShowDetails = true;
-      this.portParameterCollectionView.Size = new System.Drawing.Size(645, 491);
-      this.portParameterCollectionView.TabIndex = 3;
-      // 
-      // ParameterizedPortView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.portParameterCollectionView);
-      this.Name = "ParameterizedPortView";
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.portParameterCollectionView, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected PortParameterCollectionView portParameterCollectionView;
-
-
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/ParameterizedPortView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/ParameterizedPortView.cs	(revision 11525)
+++ 	(revision )
@@ -1,62 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.MainForm;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("ParameterizedPort View")]
-  [Content(typeof(ParameterizedPort), true)]
-  [Content(typeof(IParameterizedPort), false)]
-  public partial class ParameterizedPortView : PortView {
-    public new IParameterizedPort Content {
-      get { return (IParameterizedPort)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public ParameterizedPortView() {
-      InitializeComponent();
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.InterfaceChanged -= Content_InterfaceChanged;
-      base.DeregisterContentEvents();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.InterfaceChanged += Content_InterfaceChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      portParameterCollectionView.Content = Content == null ? null : Content.Parameters;
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      portParameterCollectionView.Enabled = Content != null && !ReadOnly;
-    }
-
-    protected virtual void Content_InterfaceChanged(object sender, EventArgs e) { }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortCollectionView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,53 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class PortCollectionView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-    }
-
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortCollectionView.cs	(revision 11525)
+++ 	(revision )
@@ -1,60 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("PortCollection View")]
-  [Content(typeof(PortCollection), true)]
-  [Content(typeof(IKeyedItemCollection<string, IPort>), false)]
-  public partial class PortCollectionView : NamedItemCollectionView<IPort> {
-    public PortCollectionView() {
-      InitializeComponent();
-      itemsGroupBox.Text = "Ports";
-    }
-
-    protected override IPort CreateItem() {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Port";
-        typeSelectorDialog.TypeSelector.Caption = "Available Ports";
-        typeSelectorDialog.TypeSelector.Configure(typeof(IPort), false, true);
-      }
-
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        try {
-          var p = (IPort)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-          p.Name = GetUniqueName(p.Name);
-          return p;
-        }
-        catch (Exception ex) {
-          ErrorHandling.ShowErrorDialog(this, ex);
-        }
-      }
-      return null;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortParameterCollectionView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortParameterCollectionView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,53 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class PortParameterCollectionView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-    }
-
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortParameterCollectionView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortParameterCollectionView.cs	(revision 11525)
+++ 	(revision )
@@ -1,60 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("PortParameterCollection View")]
-  [Content(typeof(PortParameterCollection), true)]
-  [Content(typeof(IKeyedItemCollection<string, IPortParameter>), false)]
-  public partial class PortParameterCollectionView : NamedItemCollectionView<IPortParameter> {
-    public PortParameterCollectionView() {
-      InitializeComponent();
-      itemsGroupBox.Text = "Port Parameters";
-    }
-
-    protected override IPortParameter CreateItem() {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Port Parameter";
-        typeSelectorDialog.TypeSelector.Caption = "Available Port Parameters";
-        typeSelectorDialog.TypeSelector.Configure(typeof(IPortParameter), false, true);
-      }
-
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        try {
-          var p = (IPortParameter)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-          p.Name = GetUniqueName(p.Name);
-          return p;
-        }
-        catch (Exception ex) {
-          ErrorHandling.ShowErrorDialog(this, ex);
-        }
-      }
-      return null;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortParameterView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortParameterView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,214 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class PortParameterView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.defaultValueGroupBox = new System.Windows.Forms.GroupBox();
-      this.clearDefaultValueButton = new System.Windows.Forms.Button();
-      this.setDefaultValueButton = new System.Windows.Forms.Button();
-      this.defaultValuePanel = new System.Windows.Forms.Panel();
-      this.defaultValueViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.dataTypeLabel = new System.Windows.Forms.Label();
-      this.typeLabel = new System.Windows.Forms.Label();
-      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
-      this.inputTypeCheckBox = new System.Windows.Forms.CheckBox();
-      this.outputTypeCheckBox = new System.Windows.Forms.CheckBox();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.defaultValueGroupBox.SuspendLayout();
-      this.defaultValuePanel.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      // 
-      // defaultValueGroupBox
-      // 
-      this.defaultValueGroupBox.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.defaultValueGroupBox.Controls.Add(this.clearDefaultValueButton);
-      this.defaultValueGroupBox.Controls.Add(this.setDefaultValueButton);
-      this.defaultValueGroupBox.Controls.Add(this.defaultValuePanel);
-      this.defaultValueGroupBox.Location = new System.Drawing.Point(0, 79);
-      this.defaultValueGroupBox.Name = "defaultValueGroupBox";
-      this.defaultValueGroupBox.Size = new System.Drawing.Size(645, 438);
-      this.defaultValueGroupBox.TabIndex = 8;
-      this.defaultValueGroupBox.TabStop = false;
-      this.defaultValueGroupBox.Text = "Default Value";
-      // 
-      // clearDefaultValueButton
-      // 
-      this.clearDefaultValueButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
-      this.clearDefaultValueButton.Location = new System.Drawing.Point(35, 19);
-      this.clearDefaultValueButton.Name = "clearDefaultValueButton";
-      this.clearDefaultValueButton.Size = new System.Drawing.Size(23, 23);
-      this.clearDefaultValueButton.TabIndex = 1;
-      this.clearDefaultValueButton.UseVisualStyleBackColor = true;
-      this.clearDefaultValueButton.Click += new System.EventHandler(this.clearDefaultValueButton_Click);
-      // 
-      // setDefaultValueButton
-      // 
-      this.setDefaultValueButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Edit;
-      this.setDefaultValueButton.Location = new System.Drawing.Point(6, 19);
-      this.setDefaultValueButton.Name = "setDefaultValueButton";
-      this.setDefaultValueButton.Size = new System.Drawing.Size(23, 23);
-      this.setDefaultValueButton.TabIndex = 0;
-      this.setDefaultValueButton.UseVisualStyleBackColor = true;
-      this.setDefaultValueButton.Click += new System.EventHandler(this.setDefaultValueButton_Click);
-      // 
-      // defaultValuePanel
-      // 
-      this.defaultValuePanel.AllowDrop = true;
-      this.defaultValuePanel.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.defaultValuePanel.Controls.Add(this.defaultValueViewHost);
-      this.defaultValuePanel.Location = new System.Drawing.Point(6, 48);
-      this.defaultValuePanel.Name = "defaultValuePanel";
-      this.defaultValuePanel.Size = new System.Drawing.Size(633, 384);
-      this.defaultValuePanel.TabIndex = 0;
-      this.defaultValuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.defaultValuePanel_DragDrop);
-      this.defaultValuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.defaultValuePanel_DragEnterOver);
-      this.defaultValuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.defaultValuePanel_DragEnterOver);
-      // 
-      // defaultValueViewHost
-      // 
-      this.defaultValueViewHost.Caption = "View";
-      this.defaultValueViewHost.Content = null;
-      this.defaultValueViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.defaultValueViewHost.Enabled = false;
-      this.defaultValueViewHost.Location = new System.Drawing.Point(0, 0);
-      this.defaultValueViewHost.Name = "defaultValueViewHost";
-      this.defaultValueViewHost.ReadOnly = false;
-      this.defaultValueViewHost.Size = new System.Drawing.Size(633, 384);
-      this.defaultValueViewHost.TabIndex = 0;
-      this.defaultValueViewHost.ViewsLabelVisible = true;
-      this.defaultValueViewHost.ViewType = null;
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.AutoSize = true;
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 29);
-      this.dataTypeLabel.Name = "dataTypeLabel";
-      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
-      this.dataTypeLabel.TabIndex = 3;
-      this.dataTypeLabel.Text = "&Data Type:";
-      // 
-      // typeLabel
-      // 
-      this.typeLabel.AutoSize = true;
-      this.typeLabel.Location = new System.Drawing.Point(3, 55);
-      this.typeLabel.Name = "typeLabel";
-      this.typeLabel.Size = new System.Drawing.Size(34, 13);
-      this.typeLabel.TabIndex = 5;
-      this.typeLabel.Text = "&Type:";
-      // 
-      // dataTypeTextBox
-      // 
-      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.dataTypeTextBox.Location = new System.Drawing.Point(69, 26);
-      this.dataTypeTextBox.Name = "dataTypeTextBox";
-      this.dataTypeTextBox.ReadOnly = true;
-      this.dataTypeTextBox.Size = new System.Drawing.Size(551, 20);
-      this.dataTypeTextBox.TabIndex = 4;
-      // 
-      // inputTypeCheckBox
-      // 
-      this.inputTypeCheckBox.AutoSize = true;
-      this.inputTypeCheckBox.Location = new System.Drawing.Point(69, 54);
-      this.inputTypeCheckBox.Name = "inputTypeCheckBox";
-      this.inputTypeCheckBox.Size = new System.Drawing.Size(50, 17);
-      this.inputTypeCheckBox.TabIndex = 6;
-      this.inputTypeCheckBox.Text = "&Input";
-      this.inputTypeCheckBox.UseVisualStyleBackColor = true;
-      this.inputTypeCheckBox.CheckedChanged += new System.EventHandler(this.inputTypeCheckBox_CheckedChanged);
-      // 
-      // outputTypeCheckBox
-      // 
-      this.outputTypeCheckBox.AutoSize = true;
-      this.outputTypeCheckBox.Location = new System.Drawing.Point(125, 54);
-      this.outputTypeCheckBox.Name = "outputTypeCheckBox";
-      this.outputTypeCheckBox.Size = new System.Drawing.Size(58, 17);
-      this.outputTypeCheckBox.TabIndex = 7;
-      this.outputTypeCheckBox.Text = "&Output";
-      this.outputTypeCheckBox.UseVisualStyleBackColor = true;
-      this.outputTypeCheckBox.CheckedChanged += new System.EventHandler(this.outputTypeCheckBox_CheckedChanged);
-      // 
-      // PortParameterView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.outputTypeCheckBox);
-      this.Controls.Add(this.inputTypeCheckBox);
-      this.Controls.Add(this.dataTypeTextBox);
-      this.Controls.Add(this.typeLabel);
-      this.Controls.Add(this.dataTypeLabel);
-      this.Controls.Add(this.defaultValueGroupBox);
-      this.Name = "PortParameterView";
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.defaultValueGroupBox, 0);
-      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
-      this.Controls.SetChildIndex(this.typeLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
-      this.Controls.SetChildIndex(this.inputTypeCheckBox, 0);
-      this.Controls.SetChildIndex(this.outputTypeCheckBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.defaultValueGroupBox.ResumeLayout(false);
-      this.defaultValuePanel.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox defaultValueGroupBox;
-    protected System.Windows.Forms.Panel defaultValuePanel;
-    protected MainForm.WindowsForms.ViewHost defaultValueViewHost;
-    protected System.Windows.Forms.Label dataTypeLabel;
-    protected System.Windows.Forms.Label typeLabel;
-    protected System.Windows.Forms.TextBox dataTypeTextBox;
-    protected System.Windows.Forms.Button setDefaultValueButton;
-    protected System.Windows.Forms.Button clearDefaultValueButton;
-    protected System.Windows.Forms.CheckBox inputTypeCheckBox;
-    protected System.Windows.Forms.CheckBox outputTypeCheckBox;
-
-
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortParameterView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortParameterView.cs	(revision 11525)
+++ 	(revision )
@@ -1,154 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("PortParameter View")]
-  [Content(typeof(PortParameter<>), true)]
-  [Content(typeof(IPortParameter<>), false)]
-  [Content(typeof(IPortParameter), false)]
-  public partial class PortParameterView : EntityView {
-    protected TypeSelectorDialog typeSelectorDialog;
-
-    public new IPortParameter Content {
-      get { return (IPortParameter)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public PortParameterView() {
-      InitializeComponent();
-    }
-
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.TypeChanged -= Content_TypeChanged;
-      Content.DefaultValueChanged -= Content_DefaultValueChanged;
-      base.DeregisterContentEvents();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.TypeChanged += Content_TypeChanged;
-      Content.DefaultValueChanged += Content_DefaultValueChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        dataTypeTextBox.Text = string.Empty;
-        inputTypeCheckBox.Checked = false;
-        outputTypeCheckBox.Checked = false;
-        defaultValueViewHost.Content = null;
-      } else {
-        dataTypeTextBox.Text = Content.DataType.GetPrettyName();
-        inputTypeCheckBox.Checked = Content.Type.HasFlag(PortParameterType.Input);
-        outputTypeCheckBox.Checked = Content.Type.HasFlag(PortParameterType.Output);
-        defaultValueViewHost.ViewType = null;
-        defaultValueViewHost.Content = Content.DefaultValue;
-      }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      dataTypeTextBox.Enabled = Content != null;
-      inputTypeCheckBox.Enabled = Content != null && !ReadOnly;
-      outputTypeCheckBox.Enabled = Content != null && !ReadOnly;
-      defaultValueGroupBox.Enabled = Content != null;
-      setDefaultValueButton.Enabled = Content != null && !ReadOnly;
-      clearDefaultValueButton.Enabled = Content != null && Content.DefaultValue != null && !ReadOnly;
-    }
-    protected virtual void Content_TypeChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_TypeChanged), sender, e);
-      else {
-        inputTypeCheckBox.Checked = Content.Type.HasFlag(PortParameterType.Input);
-        outputTypeCheckBox.Checked = Content.Type.HasFlag(PortParameterType.Output);
-      }
-    }
-    protected virtual void Content_DefaultValueChanged(object sender, System.EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_DefaultValueChanged), sender, e);
-      else {
-        clearDefaultValueButton.Enabled = Content.DefaultValue != null;
-        defaultValueViewHost.ViewType = null;
-        defaultValueViewHost.Content = Content.DefaultValue;
-      }
-    }
-
-    protected virtual void inputTypeCheckBox_CheckedChanged(object sender, EventArgs e) {
-      Content.Type = inputTypeCheckBox.Checked ? Content.Type | PortParameterType.Input : Content.Type & ~PortParameterType.Input;
-    }
-    protected virtual void outputTypeCheckBox_CheckedChanged(object sender, EventArgs e) {
-      Content.Type = outputTypeCheckBox.Checked ? Content.Type | PortParameterType.Output : Content.Type & ~PortParameterType.Output;
-    }
-
-    protected virtual void setDefaultValueButton_Click(object sender, EventArgs e) {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Default Value";
-      }
-      typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, true);
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        try {
-          Content.DefaultValue = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-        }
-        catch (Exception ex) {
-          ErrorHandling.ShowErrorDialog(this, ex);
-        }
-      }
-    }
-    protected virtual void clearDefaultValueButton_Click(object sender, EventArgs e) {
-      Content.DefaultValue = null;
-    }
-
-    protected virtual void defaultValuePanel_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (!ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IItem)) {
-        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
-        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
-      }
-    }
-    protected virtual void defaultValuePanel_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        IItem item = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IItem;
-        if (e.Effect.HasFlag(DragDropEffects.Copy)) item = (IItem)item.Clone();
-        Content.DefaultValue = item;
-      }
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,70 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class PortView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      // 
-      // PortView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Name = "PortView";
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/PortView.cs	(revision 11525)
+++ 	(revision )
@@ -1,49 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("Port View")]
-  [Content(typeof(Port), true)]
-  [Content(typeof(IPort), false)]
-  public partial class PortView : EntityView {
-    public new IPort Content {
-      get { return (IPort)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public PortView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/VariablesNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/VariablesNodeView.Designer.cs	(revision 11525)
+++ 	(revision )
@@ -1,133 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  partial class VariablesNodeView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.variableCollectionView = new HeuristicLab.Core.Views.VariableCollectionView();
-      this.portCollectionView = new HeuristicLab.Optimization.Networks.Views.PortCollectionView();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      // 
-      // splitContainer
-      // 
-      this.splitContainer.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.splitContainer.Location = new System.Drawing.Point(0, 26);
-      this.splitContainer.Name = "splitContainer";
-      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
-      // 
-      // splitContainer.Panel1
-      // 
-      this.splitContainer.Panel1.Controls.Add(this.portCollectionView);
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.variableCollectionView);
-      this.splitContainer.Size = new System.Drawing.Size(645, 491);
-      this.splitContainer.SplitterDistance = 237;
-      this.splitContainer.TabIndex = 3;
-      // 
-      // variableCollectionView
-      // 
-      this.variableCollectionView.Caption = "VariableCollection View";
-      this.variableCollectionView.Content = null;
-      this.variableCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variableCollectionView.Location = new System.Drawing.Point(0, 0);
-      this.variableCollectionView.Name = "variableCollectionView";
-      this.variableCollectionView.ReadOnly = false;
-      this.variableCollectionView.ShowDetails = true;
-      this.variableCollectionView.Size = new System.Drawing.Size(645, 250);
-      this.variableCollectionView.TabIndex = 0;
-      // 
-      // portCollectionView
-      // 
-      this.portCollectionView.Caption = "PortCollection View";
-      this.portCollectionView.Content = null;
-      this.portCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.portCollectionView.Location = new System.Drawing.Point(0, 0);
-      this.portCollectionView.Name = "portCollectionView";
-      this.portCollectionView.ReadOnly = false;
-      this.portCollectionView.ShowDetails = true;
-      this.portCollectionView.Size = new System.Drawing.Size(645, 237);
-      this.portCollectionView.TabIndex = 0;
-      // 
-      // VariablesNodeView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.splitContainer);
-      this.Name = "VariablesNodeView";
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.splitContainer, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel2.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
-      this.splitContainer.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.SplitContainer splitContainer;
-    protected Core.Views.VariableCollectionView variableCollectionView;
-    private PortCollectionView portCollectionView;
-
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/VariablesNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/VariablesNodeView.cs	(revision 11525)
+++ 	(revision )
@@ -1,54 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Optimization.Networks.Views {
-  [View("VariablesNode View")]
-  [Content(typeof(VariablesNode), true)]
-  [Content(typeof(IVariablesNode), false)]
-  public partial class VariablesNodeView : EntityView {
-    public new IVariablesNode Content {
-      get { return (IVariablesNode)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public VariablesNodeView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      portCollectionView.Content = Content == null ? null : Content.Ports;
-      variableCollectionView.Content = Content == null ? null : Content.Variables;
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      portCollectionView.Enabled = Content != null && !ReadOnly;
-      variableCollectionView.Enabled = Content != null && !ReadOnly;
-    }
-  }
-}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/ClientNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/ClientNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/ClientNode.cs	(revision 11526)
@@ -0,0 +1,99 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.Optimization.Networks {
+  [Item("ClientNode", "A node of an optimization network which calls service nodes.")]
+  [StorableClass]
+  public class ClientNode : Node, IClientNode {
+    private object locker = new object();
+
+    new public PortCollection Ports {
+      get { return base.Ports; }
+    }
+
+    [Storable]
+    private IItemCollection<ServiceParameterCollection> calls;
+    public IItemCollection<ServiceParameterCollection> Calls {
+      get { return calls; }
+    }
+
+    [StorableConstructor]
+    protected ClientNode(bool deserializing) : base(deserializing) { }
+    protected ClientNode(ClientNode original, Cloner cloner)
+      : base(original, cloner) {
+      calls = cloner.Clone(original.calls);
+    }
+    public ClientNode()
+      : base("ClientNode") {
+      calls = new ItemCollection<ServiceParameterCollection>();
+    }
+    public ClientNode(string name)
+      : base(name) {
+      calls = new ItemCollection<ServiceParameterCollection>();
+    }
+    public ClientNode(string name, string description)
+      : base(name, description) {
+      calls = new ItemCollection<ServiceParameterCollection>();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ClientNode(this, cloner);
+    }
+
+    public virtual async Task CallServicesAsync() {
+      await CallServicesAsync(CancellationToken.None);
+    }
+    public virtual async Task CallServicesAsync(CancellationToken token) {
+      foreach (var clientPort in Ports.OfType<IClientPort>()) {
+        var parameters = clientPort.PrepareParameters();
+
+        // retrieve inputs
+        foreach (var inputPort in Ports.OfType<IInputPort>().
+                                        Where(x => parameters.ContainsKey(x.Name) &&
+                                                    parameters[x.Name].Type == ServiceParameterType.Input &&
+                                                    parameters[x.Name].DataType.IsAssignableFrom(x.DataType))) {
+          parameters[inputPort.Name].Value = (IItem)inputPort.Value.Clone();
+        }
+
+        parameters = await clientPort.CallServiceAsync(parameters, token);
+
+        lock (locker) {
+          // set outputs
+          foreach (var outputPort in Ports.OfType<IOutputPort>().
+                                            Where(x => parameters.ContainsKey(x.Name) &&
+                                                      parameters[x.Name].Type == ServiceParameterType.Output &&
+                                                      x.DataType.IsAssignableFrom(parameters[x.Name].DataType))) {
+            outputPort.Value = (IItem)parameters[outputPort.Name].Value.Clone();
+          }
+
+          Calls.Add(parameters);
+        }
+      }
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/IClientNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/IClientNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/IClientNode.cs	(revision 11526)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.Optimization.Networks {
+  public interface IClientNode : INode {
+    new PortCollection Ports { get; }
+    IItemCollection<ServiceParameterCollection> Calls { get; }
+
+    Task CallServicesAsync();
+    Task CallServicesAsync(CancellationToken token);
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/IVariablesNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/IVariablesNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/IVariablesNode.cs	(revision 11526)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using System;
+
+namespace HeuristicLab.Optimization.Networks {
+  public interface IVariablesNode : INode {
+    new PortCollection Ports { get; }
+
+    VariableCollection Variables { get; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/MultiplierNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/MultiplierNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/MultiplierNode.cs	(revision 11526)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+
+namespace HeuristicLab.Optimization.Networks {
+  [Item("MultiplierNode", "A node for multiplying integer values.")]
+  [StorableClass]
+  public class MultiplierNode : Node {
+    protected static readonly string MultiplierPortName = "Multiplier";
+    protected static readonly string ValuePortName = "Value";
+
+    public IInputPort<IntValue> MultiplierPort {
+      get { return (IInputPort<IntValue>)Ports[MultiplierPortName]; }
+    }
+    public IInputOutputPort<IntValue, IntValue> ValuePort {
+      get { return (IInputOutputPort<IntValue, IntValue>)Ports[ValuePortName]; }
+    }
+
+    [StorableConstructor]
+    protected MultiplierNode(bool deserializing) : base(deserializing) { }
+    protected MultiplierNode(MultiplierNode original, Cloner cloner) : base(original, cloner) { }
+    public MultiplierNode()
+      : base("MultiplierNode") {
+      Initialize();
+    }
+    public MultiplierNode(string name)
+      : base(name) {
+      Initialize();
+    }
+    public MultiplierNode(string name, string description)
+      : base(name, description) {
+      Initialize();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiplierNode(this, cloner);
+    }
+
+    protected virtual void Initialize() {
+      Ports.Add(new InputPort<IntValue>(MultiplierPortName));
+      Ports.Add(new InputOutputPort<IntValue, IntValue>(ValuePortName));
+      RegisterPortEvents();
+    }
+
+    protected virtual void RegisterPortEvents() {
+      ValuePort.ValueReceived += ValuePort_ValueReceived;
+    }
+
+    protected virtual void ValuePort_ValueReceived(object sender, OutputInputPortEventArgs<IntValue, IntValue> e) {
+      if (MultiplierPort.Value == null) throw new InvalidOperationException("Multiplier is null");
+      if (e.Value != null) {
+        e.Result = new IntValue(e.Value.Value * MultiplierPort.Value.Value);
+      }
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/VariablesNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/VariablesNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/### obsolete/VariablesNode.cs	(revision 11526)
@@ -0,0 +1,248 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+
+namespace HeuristicLab.Optimization.Networks {
+  [Item("VariablesNode", "A node of an optimization network which contains variables.")]
+  [StorableClass]
+  public class VariablesNode : Node, IVariablesNode {
+    new public PortCollection Ports {
+      get { return base.Ports; }
+    }
+
+    [Storable]
+    private VariableCollection variables;
+    public VariableCollection Variables {
+      get { return variables; }
+    }
+
+    [StorableConstructor]
+    protected VariablesNode(bool deserializing) : base(deserializing) { }
+    protected VariablesNode(VariablesNode original, Cloner cloner)
+      : base(original, cloner) {
+      variables = cloner.Clone(original.variables);
+      RegisterVariablesEvents();
+    }
+    public VariablesNode()
+      : base("VariablesNode") {
+      variables = new VariableCollection();
+      RegisterVariablesEvents();
+    }
+    public VariablesNode(string name)
+      : base(name) {
+      variables = new VariableCollection();
+      RegisterVariablesEvents();
+    }
+    public VariablesNode(string name, string description)
+      : base(name, description) {
+      variables = new VariableCollection();
+      RegisterVariablesEvents();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterVariablesEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new VariablesNode(this, cloner);
+    }
+
+    private void UpdateVariable(IInputPort port) {
+      if (!variables.ContainsKey(port.Name))
+        variables.Add(new Variable(port.Name));
+      variables[port.Name].Value = (IItem)port.Value;
+    }
+    private void UpdateOutputPort(IVariable variable) {
+      IPort port = null;
+      if (Ports.TryGetValue(variable.Name, out port)) {
+        IOutputPort o = port as IOutputPort;
+        if (o != null) {
+          o.Value = variable.Value;
+        }
+        IOutputInputPort oi = port as IOutputInputPort;
+        if (oi != null) {
+          var result = (IItem)oi.SendValue(variable.Value);
+          if (!variables.ContainsKey(oi.Name + "Result"))
+            variables.Add(new Variable(oi.Name + "Result"));
+          variables[oi.Name + "Result"].Value = result;
+        }
+      }
+    }
+    private void UpdateOutputPort(IOutputPort port) {
+      IVariable var = null;
+      if (variables.TryGetValue(port.Name, out var)) {
+        port.Value = var.Value;
+      } else {
+        port.Value = null;
+      }
+    }
+    private void UpdateOutputInputPort(IOutputInputPort port) {
+      IVariable var = null;
+      IItem result = null;
+      if (variables.TryGetValue(port.Name, out var)) {
+        result = (IItem)port.SendValue(var.Value);
+      } else {
+        result = (IItem)port.SendValue(null);
+      }
+      if (!variables.ContainsKey(port.Name + "Result"))
+        variables.Add(new Variable(port.Name + "Result"));
+      variables[port.Name + "Result"].Value = result;
+    }
+
+    #region Ports Events
+    protected override void RegisterPortsEvents() {
+      base.RegisterPortsEvents();
+      foreach (var p in Ports)
+        RegisterPortEvents(p);
+    }
+    protected override void Ports_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      base.Ports_ItemsAdded(sender, e);
+      foreach (var p in e.Items)
+        RegisterPortEvents(p);
+    }
+    protected override void Ports_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      base.Ports_ItemsRemoved(sender, e);
+      foreach (var p in e.Items)
+        DeregisterPortEvents(p);
+    }
+    protected override void Ports_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      base.Ports_ItemsReplaced(sender, e);
+      foreach (var p in e.OldItems)
+        DeregisterPortEvents(p);
+      foreach (var p in e.Items)
+        RegisterPortEvents(p);
+    }
+    protected override void Ports_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      base.Ports_CollectionReset(sender, e);
+      foreach (var p in e.OldItems)
+        DeregisterPortEvents(p);
+      foreach (var p in e.Items)
+        RegisterPortEvents(p);
+    }
+    #endregion
+
+    #region Port Events
+    private void RegisterPortEvents(IPort port) {
+      IInputPort i = port as IInputPort;
+      if (i != null) {
+        i.NameChanged += InputPort_NameChanged;
+        i.ValueChanged += InputPort_ValueChanged;
+        UpdateVariable(i);
+      }
+      IOutputPort o = port as IOutputPort;
+      if (o != null) {
+        o.NameChanged += OutputPort_NameChanged;
+        UpdateOutputPort(o);
+      }
+      IOutputInputPort oi = port as IOutputInputPort;
+      if (oi != null) {
+        oi.NameChanged += OutputInputPort_NameChanged;
+        UpdateOutputInputPort(oi);
+      }
+    }
+    private void DeregisterPortEvents(IPort port) {
+      IInputPort i = port as IInputPort;
+      if (i != null) {
+        i.NameChanged -= InputPort_NameChanged;
+        i.ValueChanged -= InputPort_ValueChanged;
+      }
+      IOutputPort o = port as IOutputPort;
+      if (o != null) {
+        o.NameChanged -= OutputPort_NameChanged;
+      }
+      IOutputInputPort oi = port as IOutputInputPort;
+      if (oi != null) {
+        oi.NameChanged -= OutputInputPort_NameChanged;
+      }
+    }
+    private void InputPort_NameChanged(object sender, EventArgs e) {
+      UpdateVariable((IInputPort)sender);
+    }
+    private void InputPort_ValueChanged(object sender, EventArgs e) {
+      UpdateVariable((IInputPort)sender);
+    }
+    private void OutputPort_NameChanged(object sender, EventArgs e) {
+      UpdateOutputPort((IOutputPort)sender);
+    }
+    private void OutputInputPort_NameChanged(object sender, EventArgs e) {
+      UpdateOutputInputPort((IOutputInputPort)sender);
+    }
+    #endregion
+
+    #region Variables Events
+    private void RegisterVariablesEvents() {
+      variables.ItemsAdded += Variables_ItemsAdded;
+      variables.ItemsRemoved += Variables_ItemsRemoved;
+      variables.ItemsReplaced += Variables_ItemsReplaced;
+      variables.CollectionReset += Variables_CollectionReset;
+      foreach (var v in variables)
+        RegisterVariableEvents(v);
+    }
+    private void Variables_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IVariable> e) {
+      foreach (var v in e.Items)
+        RegisterVariableEvents(v);
+    }
+    private void Variables_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IVariable> e) {
+      foreach (var v in e.Items)
+        DeregisterVariableEvents(v);
+    }
+    private void Variables_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IVariable> e) {
+      foreach (var v in e.OldItems)
+        DeregisterVariableEvents(v);
+      foreach (var v in e.Items)
+        RegisterVariableEvents(v);
+    }
+    private void Variables_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IVariable> e) {
+      foreach (var v in e.OldItems)
+        DeregisterVariableEvents(v);
+      foreach (var v in e.Items)
+        RegisterVariableEvents(v);
+    }
+    #endregion
+
+    #region Variable Events
+    private void RegisterVariableEvents(IVariable variable) {
+      if (variable != null) {
+        variable.ValueChanged += Variable_ValueChanged;
+        variable.ToStringChanged += Variable_ToStringChanged;
+        UpdateOutputPort(variable);
+      }
+    }
+    private void DeregisterVariableEvents(IVariable variable) {
+      if (variable != null) {
+        variable.ValueChanged -= Variable_ValueChanged;
+        variable.ToStringChanged += Variable_ToStringChanged;
+      }
+    }
+    private void Variable_ValueChanged(object sender, EventArgs e) {
+      UpdateOutputPort((IVariable)sender);
+    }
+    private void Variable_ToStringChanged(object sender, EventArgs e) {
+      UpdateOutputPort((IVariable)sender);
+    }
+    #endregion
+  }
+}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/AlgorithmNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/AlgorithmNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,258 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("AlgorithmNode", "A node of an optimization network which contains a HeuristicLab algorithm.")]
-  [StorableClass]
-  public class AlgorithmNode : Node, IAlgorithmNode {
-    new public PortCollection Ports {
-      get { return base.Ports; }
-    }
-
-    [Storable]
-    private IAlgorithm algorithm;
-    public IAlgorithm Algorithm {
-      get { return algorithm; }
-      set {
-        if (value != algorithm) {
-          DeregisterAlgorithmEvents();
-          algorithm = value;
-          RegisterAlgorithmEvents();
-          OnAlgorithmChanged();
-        }
-      }
-    }
-
-    [StorableConstructor]
-    protected AlgorithmNode(bool deserializing) : base(deserializing) { }
-    protected AlgorithmNode(AlgorithmNode original, Cloner cloner)
-      : base(original, cloner) {
-      algorithm = cloner.Clone(original.algorithm);
-      RegisterAlgorithmEvents();
-    }
-    public AlgorithmNode() : base("AlgorithmNode") { }
-    public AlgorithmNode(string name) : base(name) { }
-    public AlgorithmNode(string name, string description) : base(name, description) { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterAlgorithmEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new AlgorithmNode(this, cloner);
-    }
-
-    private void UpdateParameter(IInputPort port) {
-      if (algorithm != null) {
-        IParameter param = null;
-        if (algorithm.Parameters.TryGetValue(port.Name, out param)) {
-          IValueParameter p = param as IValueParameter;
-          if ((p != null) && (port.Value != null)) {
-            p.Value = (IItem)port.Value;
-          }
-        }
-      }
-    }
-    private void UpdateOutputPort(IResult result) {
-      IPort port = null;
-      if (Ports.TryGetValue(result.Name, out port)) {
-        IOutputPort p = port as IOutputPort;
-        if (p != null) {
-          p.Value = result.Value;
-        }
-      }
-    }
-    private void UpdateOutputPort(IOutputPort port) {
-      if ((algorithm != null) && (algorithm.Results != null)) {
-        IResult result = null;
-        if (algorithm.Results.TryGetValue(port.Name, out result)) {
-          port.Value = result != null ? result.Value : null;
-        } else {
-          port.Value = null;
-        }
-      }
-    }
-
-    public event EventHandler AlgorithmChanged;
-    protected virtual void OnAlgorithmChanged() {
-      var handler = AlgorithmChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    #region Ports Events
-    protected override void RegisterPortsEvents() {
-      base.RegisterPortsEvents();
-      foreach (var p in Ports)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsAdded(sender, e);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsRemoved(sender, e);
-      foreach (var p in e.Items)
-        DeregisterPortEvents(p);
-    }
-    protected override void Ports_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsReplaced(sender, e);
-      foreach (var p in e.OldItems)
-        DeregisterPortEvents(p);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_CollectionReset(sender, e);
-      foreach (var p in e.OldItems)
-        DeregisterPortEvents(p);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    #endregion
-
-    #region Port Events
-    private void RegisterPortEvents(IPort port) {
-      IInputPort i = port as IInputPort;
-      if (i != null) {
-        i.NameChanged += InputPort_NameChanged;
-        i.ValueChanged += InputPort_ValueChanged;
-        UpdateParameter(i);
-      }
-      IOutputPort o = port as IOutputPort;
-      if (o != null) {
-        o.NameChanged += OutputPort_NameChanged;
-        UpdateOutputPort(o);
-      }
-    }
-    private void DeregisterPortEvents(IPort port) {
-      IInputPort i = port as IInputPort;
-      if (i != null) {
-        i.NameChanged -= InputPort_NameChanged;
-        i.ValueChanged -= InputPort_ValueChanged;
-      }
-      IOutputPort o = port as IOutputPort;
-      if (o != null) {
-        o.NameChanged -= OutputPort_NameChanged;
-      }
-    }
-    private void InputPort_NameChanged(object sender, EventArgs e) {
-      UpdateParameter((IInputPort)sender);
-    }
-    private void InputPort_ValueChanged(object sender, EventArgs e) {
-      UpdateParameter((IInputPort)sender);
-    }
-    private void OutputPort_NameChanged(object sender, EventArgs e) {
-      UpdateOutputPort((IOutputPort)sender);
-    }
-    #endregion
-
-    #region Algorithm Events
-    private void RegisterAlgorithmEvents() {
-      if (algorithm != null) {
-        algorithm.Prepared += Algorithm_Prepared;
-        RegisterResultsEvents();
-      }
-    }
-
-    private void DeregisterAlgorithmEvents() {
-      if (algorithm != null) {
-        algorithm.Prepared -= Algorithm_Prepared;
-        DeregisterResultsEvents();
-      }
-    }
-    private void Algorithm_Prepared(object sender, EventArgs e) {
-      RegisterResultsEvents();
-    }
-    #endregion
-
-    #region Results Events
-    private void RegisterResultsEvents() {
-      if ((algorithm != null) && (algorithm.Results != null)) {
-        algorithm.Results.ItemsAdded += Results_ItemsAdded;
-        algorithm.Results.ItemsRemoved += Results_ItemsRemoved;
-        algorithm.Results.ItemsReplaced += Results_ItemsReplaced;
-        algorithm.Results.CollectionReset += Results_CollectionReset;
-        foreach (var r in algorithm.Results)
-          RegisterResultEvents(r);
-      }
-    }
-    private void DeregisterResultsEvents() {
-      if ((algorithm != null) && (algorithm.Results != null)) {
-        algorithm.Results.ItemsAdded -= Results_ItemsAdded;
-        algorithm.Results.ItemsRemoved -= Results_ItemsRemoved;
-        algorithm.Results.ItemsReplaced -= Results_ItemsReplaced;
-        algorithm.Results.CollectionReset -= Results_CollectionReset;
-        foreach (var r in algorithm.Results)
-          DeregisterResultEvents(r);
-      }
-    }
-    private void Results_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IResult> e) {
-      foreach (var r in e.Items)
-        RegisterResultEvents(r);
-    }
-    private void Results_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IResult> e) {
-      foreach (var r in e.Items)
-        DeregisterResultEvents(r);
-    }
-    private void Results_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IResult> e) {
-      foreach (var r in e.OldItems)
-        DeregisterResultEvents(r);
-      foreach (var r in e.Items)
-        RegisterResultEvents(r);
-    }
-    private void Results_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IResult> e) {
-      foreach (var r in e.OldItems)
-        DeregisterResultEvents(r);
-      foreach (var r in e.Items)
-        RegisterResultEvents(r);
-    }
-    #endregion
-
-    #region Result Events
-    private void RegisterResultEvents(IResult result) {
-      if (result != null) {
-        result.ValueChanged += Result_ValueChanged;
-        result.ToStringChanged += Result_ToStringChanged;
-        UpdateOutputPort(result);
-      }
-    }
-    private void DeregisterResultEvents(IResult result) {
-      if (result != null) {
-        result.ValueChanged -= Result_ValueChanged;
-        result.ToStringChanged += Result_ToStringChanged;
-      }
-    }
-    private void Result_ValueChanged(object sender, EventArgs e) {
-      UpdateOutputPort((IResult)sender);
-    }
-    private void Result_ToStringChanged(object sender, EventArgs e) {
-      UpdateOutputPort((IResult)sender);
-    }
-    #endregion
-  }
-}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/ClassDiagram.cd
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/ClassDiagram.cd	(revision 11525)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/ClassDiagram.cd	(revision 11526)
@@ -1,46 +1,99 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <ClassDiagram MajorVersion="1" MinorVersion="1">
-  <Class Name="HeuristicLab.Optimization.Networks.AlgorithmNode" Collapsed="true">
-    <Position X="14" Y="3.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>BICABACCABFAgBAQBAEAQACwIQCAAhIAAAAAACUoABQ=</HashCode>
-      <FileName>AlgorithmNode.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.AlgorithmServiceNode" Collapsed="true">
-    <Position X="16.25" Y="3.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AIAEBAASAFEAMBRQBAAAAAAQAAGAAAAAAEAAAAAIABw=</HashCode>
-      <FileName>AlgorithmServiceNode.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.ClientNode" Collapsed="true">
-    <Position X="18.5" Y="3.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAIAAADABAAAgAAAAAAAAAAAAAAAAAABA=</HashCode>
-      <FileName>ClientNode.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
   <Class Name="HeuristicLab.Optimization.Networks.ClientPort" Collapsed="true">
-    <Position X="0.5" Y="4.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AEAAQAAAAAgAAAAQAkBAAAAAAAAAABAAAAEADAIBgBQ=</HashCode>
-      <FileName>ClientPort.cs</FileName>
+    <Position X="29.25" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>gEAAAAAAAAgAAAAQAsAAEAAAAAAAABAAAAEADAIBgBQ=</HashCode>
+      <FileName>### obsolete\ClientPort.cs</FileName>
     </TypeIdentifier>
     <Lollipop Position="0.2" />
   </Class>
   <Class Name="HeuristicLab.Optimization.Networks.ClientServicePort" Collapsed="true">
-    <Position X="1.75" Y="3.5" Width="1.5" />
+    <Position X="30.25" Y="3.5" Width="1.5" />
     <TypeIdentifier>
       <HashCode>gEQAIIACAAAAAEAAAABEAAAAAAAAgRAAAIAQAACAAAA=</HashCode>
-      <FileName>ClientServicePort.cs</FileName>
+      <FileName>### obsolete\ClientServicePort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.OutputInputPortEventArgs&lt;TOut, TIn&gt;" Collapsed="true">
+    <Position X="46" Y="1.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAgAAAAAAA=</HashCode>
+      <FileName>### obsolete\EventArgs.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.InputOutputPort&lt;TIn, TOut&gt;" Collapsed="true">
+    <Position X="20.25" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAQAAAQAAAAAAQgAAEQBAAABBAAAAQAAAAIABA=</HashCode>
+      <FileName>### obsolete\InputOutputPort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.InputPort&lt;T&gt;" Collapsed="true">
+    <Position X="22.5" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>QAABAACAAAAACIAAAAAgAAAAgAAAABAAAEAAAAAQARA=</HashCode>
+      <FileName>### obsolete\InputPort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.OutputInputPort&lt;TOut, TIn&gt;" Collapsed="true">
+    <Position X="24.75" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AEAAAAAAAAAAAAAAAQAAAAAAAAAAAAgAAAAAAAAAABA=</HashCode>
+      <FileName>### obsolete\OutputInputPort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.OutputPort&lt;T&gt;" Collapsed="true">
+    <Position X="27" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABA=</HashCode>
+      <FileName>### obsolete\OutputPort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ServiceParameter&lt;T&gt;" Collapsed="true">
+    <Position X="18" Y="2" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAACAAAqAACBUAAAAQAAAAECBADEAAQAgAAQAABA=</HashCode>
+      <FileName>### obsolete\ServiceParameter.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ServiceParameterCollection" Collapsed="true">
+    <Position X="44.25" Y="2.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>### obsolete\ServiceParameterCollection.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ServiceParameterCollectionCollection" Collapsed="true">
+    <Position X="46" Y="2.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>### obsolete\ServiceParameterCollectionCollection.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ServicePort" Collapsed="true">
+    <Position X="31.5" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAIAAAAgAAAAAAAAAAAAAAAAAAAAIQABA=</HashCode>
+      <FileName>### obsolete\ServicePort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ValuePort&lt;T&gt;" Collapsed="true">
+    <Position X="23.5" Y="3.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAKAAIAUAAAAAAAAAEAAADEAAAAgAAQAAAA=</HashCode>
+      <FileName>### obsolete\ValuePort.cs</FileName>
     </TypeIdentifier>
     <Lollipop Position="0.2" />
   </Class>
   <Class Name="HeuristicLab.Optimization.Networks.Entity" Collapsed="true">
-    <Position X="14" Y="0.5" Width="1.5" />
+    <Position X="20.25" Y="0.5" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAiAACAAAAAQAJAAAAEQQAAAAAAQAAAAAAAAAAEAEQ=</HashCode>
@@ -49,75 +102,90 @@
     <Lollipop Position="0.2" />
   </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.OutputInputPortEventArgs&lt;TOut, TIn&gt;" Collapsed="true">
-    <Position X="33.5" Y="0.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAgAAAAAAA=</HashCode>
-      <FileName>EventArgs.cs</FileName>
-    </TypeIdentifier>
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.InputOutputPort&lt;TIn, TOut&gt;" Collapsed="true">
-    <Position X="9.5" Y="4.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAQAAAQAAAAAAQgAAEQBAAABBAAAAQAAAAIABA=</HashCode>
-      <FileName>InputOutputPort.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.InputPort&lt;T&gt;" Collapsed="true">
-    <Position X="11.75" Y="4.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>QAABAACAAAAACIAAAAAgAAAAgAAAABAAAEAAAAAQARA=</HashCode>
-      <FileName>InputPort.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
+  <Class Name="HeuristicLab.Optimization.Networks.HookOperator" Collapsed="true" BaseTypeListCollapsed="true">
+    <Position X="42.5" Y="0.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAABAAEAAEAAAAAAAACAAAAAgAAIAAAAAAABA=</HashCode>
+      <FileName>HookOperator.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" Collapsed="true" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.AlgorithmNode" Collapsed="true">
+    <Position X="4.5" Y="3.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>BAAABAASABECMBQABABAQAAQggCAAAIAAEAAAAQAABw=</HashCode>
+      <FileName>Nodes\AlgorithmNode.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ClientNode" Collapsed="true">
+    <Position X="9" Y="3.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAABAAAAIAAADAAAAAgAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Nodes\ClientNode.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.GenericNode" Collapsed="true">
+    <Position X="11.25" Y="3.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Nodes\GenericNode.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.KSPTSPConnector" Collapsed="true">
+    <Position X="6.75" Y="3.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>ABAAAAAAAAAAAQAAAAAAAAAAAAAAABAAAAAAAAAQABA=</HashCode>
+      <FileName>Nodes\KSPTSPConnector.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.KSPTSPNetwork" Collapsed="true">
+    <Position X="15.75" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Nodes\KSPTSPNetwork.cs</FileName>
+    </TypeIdentifier>
   </Class>
   <Class Name="HeuristicLab.Optimization.Networks.MultiplierNode" Collapsed="true">
-    <Position X="20.75" Y="3.5" Width="1.5" />
+    <Position X="13.5" Y="3.5" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AEAAEAAAAAAAAQABAQAAAAAQEAAAAAAAAAAAAAAAABA=</HashCode>
-      <FileName>MultiplierNode.cs</FileName>
+      <FileName>Nodes\MultiplierNode.cs</FileName>
     </TypeIdentifier>
   </Class>
   <Class Name="HeuristicLab.Optimization.Networks.Network" Collapsed="true">
-    <Position X="23" Y="3.5" Width="1.5" />
+    <Position X="15.75" Y="3.5" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAgAACAgAAAQIAAAAAEAAAAEAAAABACAAAAAAAAIBA=</HashCode>
-      <FileName>Network.cs</FileName>
+      <FileName>Nodes\Network.cs</FileName>
     </TypeIdentifier>
     <Lollipop Position="0.2" />
   </Class>
   <Class Name="HeuristicLab.Optimization.Networks.Node" Collapsed="true">
-    <Position X="19.75" Y="2" Width="1.5" />
+    <Position X="9" Y="2" Width="1.5" />
     <TypeIdentifier>
       <HashCode>QAAAAACCABEEAAAABAAEQAAAAACAABAAAACAAAAAABQ=</HashCode>
-      <FileName>Node.cs</FileName>
+      <FileName>Nodes\Node.cs</FileName>
     </TypeIdentifier>
     <Lollipop Position="0.2" />
   </Class>
   <Class Name="HeuristicLab.Optimization.Networks.NodeCollection" Collapsed="true">
-    <Position X="31.75" Y="0.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
-      <FileName>NodeCollection.cs</FileName>
-    </TypeIdentifier>
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.OutputInputPort&lt;TOut, TIn&gt;" Collapsed="true">
-    <Position X="5" Y="4.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AEAAAAAAAAAAAAAAAQAAAAAAAAAAAAgAAAAAAAAAABA=</HashCode>
-      <FileName>OutputInputPort.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.OutputPort&lt;T&gt;" Collapsed="true">
-    <Position X="7.25" Y="4.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABA=</HashCode>
-      <FileName>OutputPort.cs</FileName>
+    <Position X="44.25" Y="1.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Nodes\NodeCollection.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.VariablesNode" Collapsed="true">
+    <Position X="2.25" Y="3.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AICARAECQBEAKEAABAAAAQAQAQCAABAQAAQABAAMABU=</HashCode>
+      <FileName>Nodes\VariablesNode.cs</FileName>
     </TypeIdentifier>
     <Lollipop Position="0.2" />
   </Class>
   <Class Name="HeuristicLab.Optimization.Networks.HeuristicLabOptimizationNetworksPlugin" Collapsed="true">
-    <Position X="30" Y="0.5" Width="1.5" />
+    <Position X="40.75" Y="0.5" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
@@ -125,102 +193,203 @@
     </TypeIdentifier>
   </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ConfigurationPort" Collapsed="true">
+    <Position X="33.75" Y="6.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Ports\ConfigurationPort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ExecutionPort" Collapsed="true">
+    <Position X="36" Y="6.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Ports\ExecutionPort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.GenericPort" Collapsed="true">
+    <Position X="34.75" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AVAgMQQQQAgAACQBACIAAAAAAiQACBIpAAAACQAABhQ=</HashCode>
+      <FileName>Ports\GenericPort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.Message" Collapsed="true" BaseTypeListCollapsed="true">
+    <Position X="44.25" Y="0.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAACAAAAAAAAACAAAAAAAAAAAACAAAAAgAAAAABA=</HashCode>
+      <FileName>Ports\Message.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" Collapsed="true" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.MessageCollection" Collapsed="true">
+    <Position X="46" Y="0.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Ports\MessageCollection.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.MessageValue&lt;T&gt;" Collapsed="true" BaseTypeListCollapsed="true">
+    <Position X="40.75" Y="1.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAEAACAAAqAAAAUAAAAAAQAAEAEADEAAAEgAAQAABA=</HashCode>
+      <FileName>Ports\MessageValue.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" Collapsed="true" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.MessageValueCollection" Collapsed="true">
+    <Position X="42.5" Y="1.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Ports\MessageValueCollection.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.ParameterizedPort" Collapsed="true">
+    <Position X="34.75" Y="3.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>gEQAAIACAAAAAEAAAABEAAAAEAAAgRAACIAAAACAAAA=</HashCode>
+      <FileName>Ports\ParameterizedPort.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
   <Class Name="HeuristicLab.Optimization.Networks.Port" Collapsed="true">
-    <Position X="6.25" Y="2" Width="1.5" />
+    <Position X="28" Y="2" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAAAACAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
-      <FileName>Port.cs</FileName>
+      <FileName>Ports\Port.cs</FileName>
     </TypeIdentifier>
     <Lollipop Position="0.2" />
   </Class>
   <Class Name="HeuristicLab.Optimization.Networks.PortCollection" Collapsed="true">
-    <Position X="30" Y="1.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
-      <FileName>PortCollection.cs</FileName>
-    </TypeIdentifier>
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.ServiceParameter&lt;T&gt;" Collapsed="true">
-    <Position X="27.5" Y="2" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAACAAAqAACBUAAAAQAAAAECBADEAAQAgAAQAABA=</HashCode>
-      <FileName>ServiceParameter.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.ServiceParameterCollection" Collapsed="true">
-    <Position X="31.75" Y="1.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
-      <FileName>ServiceParameterCollection.cs</FileName>
-    </TypeIdentifier>
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.ServiceParameterCollectionCollection" Collapsed="true">
-    <Position X="33.5" Y="1.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
-      <FileName>ServiceParameterCollectionCollection.cs</FileName>
-    </TypeIdentifier>
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.ServicePort" Collapsed="true">
-    <Position X="2.75" Y="4.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIQABA=</HashCode>
-      <FileName>ServicePort.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.ValuePort&lt;T&gt;" Collapsed="true">
-    <Position X="8.5" Y="3.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAKAAIAUAAAAAAAAAEAAADEAAAAgAAQAAAA=</HashCode>
-      <FileName>ValuePort.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
-  <Class Name="HeuristicLab.Optimization.Networks.VariablesNode" Collapsed="true">
-    <Position X="25.25" Y="3.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AICARAECQBEAKEAABAAAAQAQAQCAABAQAAQABAAMABU=</HashCode>
-      <FileName>VariablesNode.cs</FileName>
-    </TypeIdentifier>
-    <Lollipop Position="0.2" />
-  </Class>
-  <Interface Name="HeuristicLab.Optimization.Networks.IAlgorithmNode" Collapsed="true">
-    <Position X="0.5" Y="9.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAQAAAA=</HashCode>
-      <FileName>IAlgorithmNode.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IAlgorithmServiceNode" Collapsed="true">
-    <Position X="2.75" Y="9.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAEAAEAAABAAAAAAAAAAAAAAAAAAAAAAAAAg=</HashCode>
-      <FileName>IAlgorithmServiceNode.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IClientNode" Collapsed="true">
-    <Position X="5" Y="9.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAABABAAAgAAAAAAAAAAAAAAAAAAAA=</HashCode>
-      <FileName>IClientNode.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
+    <Position X="40.75" Y="2.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Ports\PortCollection.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.PortParameter&lt;T&gt;" Collapsed="true">
+    <Position X="38.25" Y="2" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAACAAAoAQABMAAQAQgAAAALhABAgUQAAAAAAABA=</HashCode>
+      <FileName>Ports\PortParameter.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Optimization.Networks.PortParameterCollection" Collapsed="true">
+    <Position X="42.5" Y="2.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+      <FileName>Ports\PortParameterCollection.cs</FileName>
+    </TypeIdentifier>
+  </Class>
   <Interface Name="HeuristicLab.Optimization.Networks.IClientPort" Collapsed="true">
-    <Position X="25.25" Y="10.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAQAAAAAgAAAAAAgBAAAAAAAAAAAAAAAAADAABAAA=</HashCode>
-      <FileName>IClientPort.cs</FileName>
+    <Position X="27" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>gAAAAAAAAAgAAAAAAoAAEAAAAAAAAAAAAAAADAABAAA=</HashCode>
+      <FileName>### obsolete\IClientPort.cs</FileName>
     </TypeIdentifier>
   </Interface>
   <Interface Name="HeuristicLab.Optimization.Networks.IClientServicePort" Collapsed="true">
-    <Position X="24.25" Y="9.5" Width="1.5" />
+    <Position X="28" Y="10.5" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA=</HashCode>
-      <FileName>IClientServicePort.cs</FileName>
+      <FileName>### obsolete\IClientServicePort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IInputOutputPort" Collapsed="true">
+    <Position X="22.5" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAA=</HashCode>
+      <FileName>### obsolete\IInputOutputPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IInputOutputPort&lt;TIn, TOut&gt;" Collapsed="true">
+    <Position X="19" Y="15.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAA=</HashCode>
+      <FileName>### obsolete\IInputOutputPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IInputPort" Collapsed="true">
+    <Position X="24.75" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAABAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>### obsolete\IInputPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IInputPort&lt;T&gt;" Collapsed="true">
+    <Position X="22.25" Y="13.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>### obsolete\IInputPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IOutputInputPort" Collapsed="true">
+    <Position X="18" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA=</HashCode>
+      <FileName>### obsolete\IOutputInputPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IOutputInputPort&lt;TOut, TIn&gt;" Collapsed="true">
+    <Position X="16.75" Y="13.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA=</HashCode>
+      <FileName>### obsolete\IOutputInputPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IOutputPort" Collapsed="true">
+    <Position X="20.25" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
+      <FileName>### obsolete\IOutputPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IOutputPort&lt;T&gt;" Collapsed="true">
+    <Position X="20" Y="13.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
+      <FileName>### obsolete\IOutputPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IServiceParameter" Collapsed="true">
+    <Position X="13.5" Y="9" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAIAAAAAAAAAQAAAAECAAAAAAQAgAAAAAAA=</HashCode>
+      <FileName>### obsolete\IServiceParameter.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IServiceParameter&lt;T&gt;" Collapsed="true">
+    <Position X="13.5" Y="10.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
+      <FileName>### obsolete\IServiceParameter.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IServicePort" Collapsed="true">
+    <Position X="29.25" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAIAAAAgAAAAAAAAAAAAAAAAAAAAAQAAA=</HashCode>
+      <FileName>### obsolete\IServicePort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IValuePort" Collapsed="true">
+    <Position X="20.25" Y="10.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAIAAAAAAAAAAAAAAEAAAAAAAAAgAAAAAAA=</HashCode>
+      <FileName>### obsolete\IValuePort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IValuePort&lt;T&gt;" Collapsed="true">
+    <Position X="15.75" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
+      <FileName>### obsolete\IValuePort.cs</FileName>
     </TypeIdentifier>
   </Interface>
   <Interface Name="HeuristicLab.Optimization.Networks.IEntity" Collapsed="true">
-    <Position X="14" Y="6.5" Width="1.5" />
+    <Position X="20.25" Y="7.5" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAAAAAAAAAAAAIAAAAEQAAAAAAAAAAAAAAAAAAAAAQ=</HashCode>
@@ -228,128 +397,142 @@
     </TypeIdentifier>
   </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IInputOutputPort" Collapsed="true">
-    <Position X="20.75" Y="10.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAA=</HashCode>
-      <FileName>IInputOutputPort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IInputOutputPort&lt;TIn, TOut&gt;" Collapsed="true">
-    <Position X="20.75" Y="12.25" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAA=</HashCode>
-      <FileName>IInputOutputPort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IInputPort" Collapsed="true">
-    <Position X="14" Y="10.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAABAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA=</HashCode>
-      <FileName>IInputPort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IInputPort&lt;T&gt;" Collapsed="true">
-    <Position X="18.25" Y="12.25" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
-      <FileName>IInputPort.cs</FileName>
+  <Interface Name="HeuristicLab.Optimization.Networks.IHookOperator" Collapsed="true">
+    <Position X="40.75" Y="3.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAEAAAAAAAAAAACAAAAAAAAIAAAAAAAAA=</HashCode>
+      <FileName>IHookOperator.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IAlgorithmNode" Collapsed="true">
+    <Position X="11.25" Y="10.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAEAAABAAAQAAAAAAAAAAAAAAAAAQAAAA=</HashCode>
+      <FileName>Nodes\IAlgorithmNode.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IClientNode" Collapsed="true">
+    <Position X="2.25" Y="10.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAABAAAAAAAABAAAAAgAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>Nodes\IClientNode.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IGenericNode" Collapsed="true">
+    <Position X="4.5" Y="10.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>Nodes\IGenericNode.cs</FileName>
     </TypeIdentifier>
   </Interface>
   <Interface Name="HeuristicLab.Optimization.Networks.INetwork" Collapsed="true">
-    <Position X="7.25" Y="9.5" Width="1.5" />
+    <Position X="6.75" Y="10.5" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
-      <FileName>INetwork.cs</FileName>
+      <FileName>Nodes\INetwork.cs</FileName>
     </TypeIdentifier>
   </Interface>
   <Interface Name="HeuristicLab.Optimization.Networks.INode" Collapsed="true">
-    <Position X="5" Y="8" Width="1.5" />
+    <Position X="6.75" Y="9" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
-      <FileName>INode.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IOutputInputPort" Collapsed="true">
-    <Position X="11.75" Y="10.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA=</HashCode>
-      <FileName>IOutputInputPort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IOutputInputPort&lt;TOut, TIn&gt;" Collapsed="true">
-    <Position X="15.25" Y="12.25" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA=</HashCode>
-      <FileName>IOutputInputPort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IOutputPort" Collapsed="true">
-    <Position X="16.25" Y="10.75" Width="1.5" />
+      <FileName>Nodes\INode.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IVariablesNode" Collapsed="true">
+    <Position X="9" Y="10.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAQAAAAAAAA=</HashCode>
+      <FileName>Nodes\IVariablesNode.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IConfigurationPort" Collapsed="true">
+    <Position X="33.75" Y="13.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>Ports\IConfigurationPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IConnectedPort" Collapsed="true">
+    <Position X="36" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAQAAAAAAAAAACAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>Ports\IConnectedPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IExecutionPort" Collapsed="true">
+    <Position X="31.5" Y="13.25" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+      <FileName>Ports\IExecutionPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IGenericPort" Collapsed="true">
+    <Position X="32.5" Y="11.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>ARAAMAAAQAAAACABACAAAAAAAgQAAAAAAAAACQAAAAQ=</HashCode>
+      <FileName>Ports\IGenericPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IMessage" Collapsed="true">
+    <Position X="42.5" Y="3.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
+      <FileName>Ports\IMessage.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IMessageValue" Collapsed="true">
+    <Position X="0.5" Y="4.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAIAAAAAAAAAAAQAAEAAAAAAAAAgAAAAAAA=</HashCode>
+      <FileName>Ports\IMessageValue.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IMessageValue&lt;T&gt;" Collapsed="true">
+    <Position X="0.5" Y="6" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
-      <FileName>IOutputPort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IOutputPort&lt;T&gt;" Collapsed="true">
-    <Position X="17.5" Y="14.25" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
-      <FileName>IOutputPort.cs</FileName>
+      <FileName>Ports\IMessageValue.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IParameterizedPort" Collapsed="true">
+    <Position X="33.75" Y="10.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA=</HashCode>
+      <FileName>Ports\IParameterizedPort.cs</FileName>
     </TypeIdentifier>
   </Interface>
   <Interface Name="HeuristicLab.Optimization.Networks.IPort" Collapsed="true">
-    <Position X="18.5" Y="8" Width="1.5" />
+    <Position X="25.75" Y="9" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
-      <FileName>IPort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IServiceParameter" Collapsed="true">
-    <Position X="27.5" Y="8" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAIAAAAAAAAAQAAAAECAAAAAAQAgAAAAAAA=</HashCode>
-      <FileName>IServiceParameter.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IServiceParameter&lt;T&gt;" Collapsed="true">
-    <Position X="27.5" Y="9.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
-      <FileName>IServiceParameter.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IServicePort" Collapsed="true">
-    <Position X="23" Y="10.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAQAAA=</HashCode>
-      <FileName>IServicePort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IValuePort" Collapsed="true">
-    <Position X="16.25" Y="9.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAIAAAAAAAAAAAAAAEAAAAAAAAAgAAAAAAA=</HashCode>
-      <FileName>IValuePort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IValuePort&lt;T&gt;" Collapsed="true">
-    <Position X="18.5" Y="10.75" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
-      <FileName>IValuePort.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
-  <Interface Name="HeuristicLab.Optimization.Networks.IVariablesNode" Collapsed="true">
-    <Position X="9.5" Y="9.5" Width="1.5" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAQAAAAAAAA=</HashCode>
-      <FileName>IVariablesNode.cs</FileName>
+      <FileName>Ports\IPort.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IPortParameter" Collapsed="true">
+    <Position X="38.25" Y="9" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAIAQAAAAAAAQAAAAADAAAAAEQAAAAAAAAA=</HashCode>
+      <FileName>Ports\IPortParameter.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Optimization.Networks.IPortParameter&lt;T&gt;" Collapsed="true">
+    <Position X="38.25" Y="10.5" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAAAAAAAA=</HashCode>
+      <FileName>Ports\IPortParameter.cs</FileName>
     </TypeIdentifier>
   </Interface>
   <Enum Name="HeuristicLab.Optimization.Networks.ServiceParameterType" Collapsed="true">
-    <Position X="30" Y="2.75" Width="1.5" />
+    <Position X="42.5" Y="4.75" Width="1.5" />
     <TypeIdentifier>
       <HashCode>AAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAAAAAAAA=</HashCode>
-      <FileName>ServiceParameterType.cs</FileName>
+      <FileName>### obsolete\ServiceParameterType.cs</FileName>
+    </TypeIdentifier>
+  </Enum>
+  <Enum Name="HeuristicLab.Optimization.Networks.PortParameterType" Collapsed="true">
+    <Position X="40.75" Y="4.75" Width="1.5" />
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAAAEAAAA=</HashCode>
+      <FileName>Ports\PortParameterType.cs</FileName>
     </TypeIdentifier>
   </Enum>
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Entity.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Entity.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Entity.cs	(revision 11526)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("Entity", "Abstract base class for entities of an optimization network.")]
+  [StorableClass]
+  public abstract class Entity : NamedItem, IEntity {
+    public static readonly string PathSeparator = " => ";
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
+    }
+
+    private IEntity parent;
+    public IEntity Parent {
+      get { return parent; }
+      protected set {
+        if (value != parent) {
+          DeregisterParentEvents();
+          parent = value;
+          RegisterParentEvents();
+          OnPathChanged();
+        }
+      }
+    }
+    public virtual IEnumerable<IEntity> Children {
+      get { return Enumerable.Empty<IEntity>(); }
+    }
+    public string Path {
+      get {
+        return parent != null ? parent.Path + PathSeparator + Name : Name;
+      }
+    }
+
+    [StorableConstructor]
+    protected Entity(bool deserializing) : base(deserializing) { }
+    protected Entity(Entity original, Cloner cloner) : base(original, cloner) { }
+    protected Entity() : base("Entity") { }
+    protected Entity(string name) : base(name) { }
+    protected Entity(string name, string description) : base(name, description) { }
+
+    protected override void OnNameChanging(CancelEventArgs<string> e) {
+      base.OnNameChanging(e);
+      e.Cancel = e.Cancel || e.Value.Contains(PathSeparator);
+    }
+    protected override void OnNameChanged() {
+      base.OnNameChanged();
+      OnPathChanged();
+    }
+
+    public event EventHandler PathChanged;
+    protected virtual void OnPathChanged() {
+      var handler = PathChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    #region Parent Events
+    protected virtual void RegisterParentEvents() {
+      if (parent != null) {
+        parent.PathChanged += Parent_PathChanged;
+      }
+    }
+    protected virtual void DeregisterParentEvents() {
+      if (parent != null) {
+        parent.PathChanged -= Parent_PathChanged;
+      }
+    }
+    void Parent_PathChanged(object sender, EventArgs e) {
+      OnPathChanged();
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericNode.cs	(revision 11526)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("GenericNode", "A generic node of an optimization network.")]
+  [StorableClass]
+  public class GenericNode : Node, IGenericNode {
+    new public PortCollection Ports {
+      get { return base.Ports; }
+    }
+
+    [StorableConstructor]
+    protected GenericNode(bool deserializing) : base(deserializing) { }
+    protected GenericNode(GenericNode original, Cloner cloner) : base(original, cloner) { }
+    public GenericNode() : base("GenericNode") { }
+    public GenericNode(string name) : base(name) { }
+    public GenericNode(string name, string description) : base(name, description) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GenericNode(this, cloner);
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericPort.cs	(revision 11526)
@@ -0,0 +1,269 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using System.Drawing;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("GenericPort", "A generic port of an optimization network node.")]
+  [StorableClass]
+  public class GenericPort : ParameterizedPort, IGenericPort, IConnectedPort {
+    public override Image ItemImage {
+      get {
+        if (PortConnectionValid) return base.ItemImage;
+        else return HeuristicLab.Common.Resources.VSImageLibrary.Error;
+      }
+    }
+
+    [Storable]
+    protected IConnectedPort connectedPort;
+    public IConnectedPort ConnectedPort {
+      get { return connectedPort; }
+      set {
+        if (connectedPort != value) {
+          DeregisterConnectedPortEvents();
+          connectedPort = value;
+          RegisterConnectedPortEvents();
+          OnConnectedPortChanged();
+          OnInterfaceChanged();
+        }
+      }
+    }
+    [Storable]
+    protected bool portConnectionValid;
+    public bool PortConnectionValid {
+      get { return portConnectionValid; }
+      protected set {
+        if (value != portConnectionValid) {
+          portConnectionValid = value;
+          OnPortConnectionValidChanged();
+          OnItemImageChanged();
+        }
+      }
+    }
+    [Storable]
+    protected bool logMessages;
+    public bool LogMessages {
+      get { return logMessages; }
+      set {
+        if (value != logMessages) {
+          logMessages = value;
+          OnLogMessagesChanged();
+        }
+      }
+    }
+    [Storable]
+    protected MessageCollection messages;
+    public MessageCollection Messages {
+      get { return messages; }
+    }
+
+    [StorableConstructor]
+    protected GenericPort(bool deserializing) : base(deserializing) { }
+    protected GenericPort(GenericPort original, Cloner cloner)
+      : base(original, cloner) {
+      connectedPort = cloner.Clone(original.connectedPort);
+      portConnectionValid = original.portConnectionValid;
+      logMessages = original.logMessages;
+      messages = cloner.Clone(original.messages);
+      RegisterConnectedPortEvents();
+    }
+    public GenericPort()
+      : base("GenericPort") {
+      portConnectionValid = true;
+      logMessages = false;
+      messages = new MessageCollection();
+    }
+    public GenericPort(string name)
+      : base(name) {
+      portConnectionValid = true;
+      logMessages = false;
+      messages = new MessageCollection();
+    }
+    public GenericPort(string name, string description)
+      : base(name, description) {
+      portConnectionValid = true;
+      logMessages = false;
+      messages = new MessageCollection();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterConnectedPortEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GenericPort(this, cloner);
+    }
+
+    public bool CanConnectToPort(IPort port) {
+      if (port == null) return true;
+
+      var cp = port as IConnectedPort;
+      if (cp == null) return false;
+
+      // check connected port input parameters
+      foreach (var input in cp.Parameters.Where(p => p.Type.HasFlag(PortParameterType.Input))) {
+        IPortParameter param;
+        Parameters.TryGetValue(input.Name, out param);
+        if ((param == null) && (input.DefaultValue == null)) return false;
+        if (!param.Type.HasFlag(PortParameterType.Output)) return false;
+        if (!input.DataType.IsAssignableFrom(param.DataType)) return false;
+      }
+      // check local port input parameters
+      foreach (var input in Parameters.Where(p => p.Type.HasFlag(PortParameterType.Input))) {
+        IPortParameter param;
+        cp.Parameters.TryGetValue(input.Name, out param);
+        if ((param == null) && (input.DefaultValue == null)) return false;
+        if (!param.Type.HasFlag(PortParameterType.Output)) return false;
+        if (!input.DataType.IsAssignableFrom(param.DataType)) return false;
+      }
+      return true;
+    }
+    public void CloneConnectedPortParameters() {
+      Parameters.Clear();
+      foreach (var p in connectedPort.Parameters) {
+        var param = (IPortParameter)p.Clone();
+        if (!(param.Type.HasFlag(PortParameterType.Input) && param.Type.HasFlag(PortParameterType.Output))) {
+          param.Type = ~param.Type;  // bitwise negation: input -> output, output -> input
+        }
+        Parameters.Add(param);
+      }
+    }
+
+    public IMessage PrepareMessage() {
+      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
+      var message = new Message();
+
+      // collect output parameters from local port
+      message.Values.AddRange(
+        Parameters.
+        Where(p => p.Type.HasFlag(PortParameterType.Output)).
+        Select(p => p.CreateMessageValue())
+      );
+
+      // collect remaining input parameters from connected port
+      if (ConnectedPort != null) {
+        message.Values.AddRange(
+          ConnectedPort.Parameters.
+          Where(p => p.Type.HasFlag(PortParameterType.Input) && !message.Values.ContainsKey(p.Name)).
+          Select(p => p.CreateMessageValue())
+        );
+      }
+
+      // collect output parameters from connected port
+      if (ConnectedPort != null) {
+        message.Values.AddRange(
+          ConnectedPort.Parameters.
+          Where(p => p.Type.HasFlag(PortParameterType.Output) && !message.Values.ContainsKey(p.Name)).
+          Select(p => p.CreateMessageValue())
+        );
+      }
+
+      // collect remaining input parameters from local port
+      message.Values.AddRange(
+        Parameters.
+        Where(p => p.Type.HasFlag(PortParameterType.Input) && !message.Values.ContainsKey(p.Name)).
+        Select(p => p.CreateMessageValue())
+      );
+
+      return message;
+    }
+    public void SendMessage(IMessage message) {
+      SendMessage(message, CancellationToken.None);
+    }
+    public void SendMessage(IMessage message, CancellationToken token) {
+      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
+      if (LogMessages) Messages.Add(message);
+      if (ConnectedPort != null) ConnectedPort.ReceiveMessage(message, token);
+      OnMessageSent(message, token);
+    }
+    public async Task SendMessageAsync(IMessage message) {
+      await SendMessageAsync(message, CancellationToken.None);
+    }
+    public async Task SendMessageAsync(IMessage message, CancellationToken token) {
+      await Task.Run(() => { SendMessage(message, token); }, token);
+    }
+    public event EventHandler<EventArgs<IMessage, CancellationToken>> MessageSent;
+    protected virtual void OnMessageSent(IMessage message, CancellationToken token) {
+      var handler = MessageSent;
+      if (handler != null) handler(this, new EventArgs<IMessage, CancellationToken>(message, token));
+    }
+
+    public void ReceiveMessage(IMessage message, CancellationToken token) {
+      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
+      if (LogMessages) Messages.Add(message);
+      OnMessageReceived(message, token);
+    }
+    public event EventHandler<EventArgs<IMessage, CancellationToken>> MessageReceived;
+    protected virtual void OnMessageReceived(IMessage message, CancellationToken token) {
+      var handler = MessageReceived;
+      if (handler != null) handler(this, new EventArgs<IMessage, CancellationToken>(message, token));
+    }
+
+    public event EventHandler ConnectedPortChanged;
+    protected virtual void OnConnectedPortChanged() {
+      var handler = ConnectedPortChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler PortConnectionValidChanged;
+    protected virtual void OnPortConnectionValidChanged() {
+      var handler = PortConnectionValidChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler LogMessagesChanged;
+    protected virtual void OnLogMessagesChanged() {
+      var handler = LogMessagesChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    protected override void OnInterfaceChanged() {
+      PortConnectionValid = CanConnectToPort(connectedPort);
+      base.OnInterfaceChanged();
+    }
+
+    #region ConnectedPort Events
+    protected virtual void RegisterConnectedPortEvents() {
+      if (connectedPort != null) {
+        connectedPort.InterfaceChanged += ConnectedPort_InterfaceChanged;
+        connectedPort.MessageSent += ConnectedPort_MessageSent;
+      }
+    }
+    protected virtual void DeregisterConnectedPortEvents() {
+      if (connectedPort != null) {
+        connectedPort.InterfaceChanged -= ConnectedPort_InterfaceChanged;
+        connectedPort.MessageSent -= ConnectedPort_MessageSent;
+      }
+    }
+    protected virtual void ConnectedPort_InterfaceChanged(object sender, EventArgs e) {
+      OnInterfaceChanged();
+    }
+    protected virtual void ConnectedPort_MessageSent(object sender, EventArgs<IMessage, CancellationToken> e) {
+      ReceiveMessage(e.Value, e.Value2);
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IConnectedPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IConnectedPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IConnectedPort.cs	(revision 11526)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using System;
+using System.Threading;
+
+namespace HeuristicLab.Core.Networks {
+  public interface IConnectedPort : IParameterizedPort {
+    void ReceiveMessage(IMessage message, CancellationToken token);
+    event EventHandler<EventArgs<IMessage, CancellationToken>> MessageSent;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IEntity.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IEntity.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IEntity.cs	(revision 11526)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Core.Networks {
+  public interface IEntity : INamedItem {
+    IEntity Parent { get; }
+    IEnumerable<IEntity> Children { get; }
+    string Path { get; }
+    event EventHandler PathChanged;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericNode.cs	(revision 11526)
@@ -0,0 +1,26 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks {
+  public interface IGenericNode : INode {
+    new PortCollection Ports { get; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericPort.cs	(revision 11526)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.Core.Networks {
+  public interface IGenericPort : IParameterizedPort {
+    IConnectedPort ConnectedPort { get; set; }
+    bool PortConnectionValid { get; }
+    bool LogMessages { get; set; }
+    MessageCollection Messages { get; }
+
+    event EventHandler ConnectedPortChanged;
+    event EventHandler PortConnectionValidChanged;
+    event EventHandler LogMessagesChanged;
+
+    bool CanConnectToPort(IPort port);
+    void CloneConnectedPortParameters();
+
+    IMessage PrepareMessage();
+    void SendMessage(IMessage message);
+    void SendMessage(IMessage message, CancellationToken token);
+    Task SendMessageAsync(IMessage message);
+    Task SendMessageAsync(IMessage message, CancellationToken token);
+
+    event EventHandler<EventArgs<IMessage, CancellationToken>> MessageReceived;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IMessage.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IMessage.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IMessage.cs	(revision 11526)
@@ -0,0 +1,27 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks {
+  public interface IMessage : IItem {
+    MessageValueCollection Values { get; }
+    IItem this[string valueName] { get; set; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IMessageValue.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IMessageValue.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IMessageValue.cs	(revision 11526)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Core.Networks {
+  public interface IMessageValue : IItem {
+    string Name { get; }
+    Type DataType { get; }
+    IItem Value { get; set; }
+
+    event EventHandler ValueChanged;
+  }
+
+  public interface IMessageValue<T> : IMessageValue where T : class, IItem {
+    new T Value { get; set; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INetwork.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INetwork.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INetwork.cs	(revision 11526)
@@ -0,0 +1,26 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks {
+  public interface INetwork : INode {
+    NodeCollection Nodes { get; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INode.cs	(revision 11526)
@@ -0,0 +1,27 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks {
+  public interface INode : IEntity {
+    new INetwork Parent { get; set; }
+    IKeyedItemCollection<string, IPort> Ports { get; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IParameterizedPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IParameterizedPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IParameterizedPort.cs	(revision 11526)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Core.Networks {
+  public interface IParameterizedPort : IPort {
+    PortParameterCollection Parameters { get; }
+
+    event EventHandler InterfaceChanged;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IPort.cs	(revision 11526)
@@ -0,0 +1,26 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks {
+  public interface IPort : IEntity {
+    new INode Parent { get; set; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IPortParameter.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IPortParameter.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IPortParameter.cs	(revision 11526)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Core.Networks {
+  public interface IPortParameter : IEntity {
+    new IPort Parent { get; set; }
+    Type DataType { get; }
+    PortParameterType Type { get; set; }
+    IItem DefaultValue { get; set; }
+
+    event EventHandler TypeChanged;
+    event EventHandler DefaultValueChanged;
+
+    IMessageValue CreateMessageValue();
+  }
+
+  public interface IPortParameter<T> : IPortParameter where T : class, IItem {
+    new T DefaultValue { get; set; }
+
+    new IMessageValue<T> CreateMessageValue();
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Message.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Message.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Message.cs	(revision 11526)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Drawing;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("Message", "A message sent between ports.")]
+  [StorableClass]
+  public class Message : Item, IMessage {
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Field; }
+    }
+
+    [Storable]
+    protected MessageValueCollection values;
+    public MessageValueCollection Values {
+      get { return values; }
+    }
+    public IItem this[string valueName] {
+      get { return Values[valueName].Value; }
+      set { Values[valueName].Value = value; }
+    }
+
+    [StorableConstructor]
+    protected Message(bool deserializing) : base(deserializing) { }
+    protected Message(Message original, Cloner cloner)
+      : base(original, cloner) {
+      values = cloner.Clone(original.values);
+    }
+    public Message() {
+      values = new MessageValueCollection();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Message(this, cloner);
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageCollection.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageCollection.cs	(revision 11526)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Core.Networks {
+  [StorableClass]
+  [Item("MessageCollection", "Represents a collection of messages.")]
+  public class MessageCollection : ItemCollection<IMessage> {
+    [StorableConstructor]
+    protected MessageCollection(bool deserializing) : base(deserializing) { }
+    protected MessageCollection(MessageCollection original, Cloner cloner) : base(original, cloner) { }
+    public MessageCollection() : base() { }
+    public MessageCollection(int capacity) : base(capacity) { }
+    public MessageCollection(IEnumerable<IMessage> collection) : base(collection) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new MessageCollection(this, cloner); }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageValue.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageValue.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageValue.cs	(revision 11526)
@@ -0,0 +1,138 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using System.Drawing;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("MessageValue", "A value of a message sent between ports.")]
+  [StorableClass]
+  public class MessageValue<T> : Item, IMessageValue<T> where T : class, IItem {
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Field; }
+    }
+    public override Image ItemImage {
+      get {
+        if (value != null) return value.ItemImage;
+        else return base.ItemImage;
+      }
+    }
+
+    [Storable]
+    protected string name;
+    public string Name {
+      get { return name; }
+    }
+    public Type DataType {
+      get { return typeof(T); }
+    }
+    [Storable]
+    protected T value;
+    public T Value {
+      get { return value; }
+      set {
+        if (value != this.value) {
+          DeregisterValueEvents();
+          this.value = value;
+          RegisterValueEvents();
+          OnValueChanged();
+        }
+      }
+    }
+    IItem IMessageValue.Value {
+      get { return Value; }
+      set {
+        T val = value as T;
+        if ((value != null) && (val == null))
+          throw new InvalidOperationException(
+            string.Format("Type mismatch. Value is not a \"{0}\".",
+                          typeof(T).GetPrettyName())
+          );
+        Value = val;
+      }
+    }
+
+    [StorableConstructor]
+    protected MessageValue(bool deserializing) : base(deserializing) { }
+    protected MessageValue(MessageValue<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.name = original.name;
+      this.value = cloner.Clone(original.value);
+      RegisterValueEvents();
+    }
+    public MessageValue() {
+      name = "MessageValue";
+    }
+    public MessageValue(string name) {
+      if (name == null) this.name = string.Empty;
+      else this.name = name;
+    }
+    public MessageValue(string name, T value)
+      : this(name) {
+      this.value = value;
+      RegisterValueEvents();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterValueEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MessageValue<T>(this, cloner);
+    }
+
+    public override string ToString() {
+      if (Value == null)
+        return string.Format("{0}: null", Name);
+      else
+        return string.Format("{0}: {1}", Name, Value.ToString());
+    }
+
+    public event EventHandler ValueChanged;
+    protected virtual void OnValueChanged() {
+      var handler = ValueChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+      OnItemImageChanged();
+      OnToStringChanged();
+    }
+    protected virtual void RegisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged += Value_ItemImageChanged;
+        value.ToStringChanged += Value_ToStringChanged;
+      }
+    }
+    protected virtual void DeregisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged -= Value_ItemImageChanged;
+        value.ToStringChanged -= Value_ToStringChanged;
+      }
+    }
+    private void Value_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
+    }
+    private void Value_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageValueCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageValueCollection.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessageValueCollection.cs	(revision 11526)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Core.Networks {
+  [StorableClass]
+  [Item("MessageValueCollection", "Represents a collection of message values.")]
+  public class MessageValueCollection : KeyedItemCollection<string, IMessageValue> {
+    [StorableConstructor]
+    protected MessageValueCollection(bool deserializing) : base(deserializing) { }
+    protected MessageValueCollection(MessageValueCollection original, Cloner cloner) : base(original, cloner) { }
+    public MessageValueCollection() : base() { }
+    public MessageValueCollection(int capacity) : base(capacity) { }
+    public MessageValueCollection(IEnumerable<IMessageValue> collection) : base(collection) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new MessageValueCollection(this, cloner); }
+
+    protected override string GetKeyForItem(IMessageValue item) {
+      return item.Name;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Network.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Network.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Network.cs	(revision 11526)
@@ -0,0 +1,114 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("Network", "An optimization network.")]
+  [Creatable("Optimization Networks")]
+  [StorableClass]
+  public class Network : Node, INetwork, IStorableContent {
+    public string Filename { get; set; }
+
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Module; }
+    }
+
+    public override IEnumerable<IEntity> Children {
+      get { return base.Children.Concat(Nodes.AsEnumerable<IEntity>()); }
+    }
+
+    [Storable]
+    private NodeCollection nodes;
+    public NodeCollection Nodes {
+      get { return nodes; }
+    }
+
+    [StorableConstructor]
+    protected Network(bool deserializing) : base(deserializing) { }
+    protected Network(Network original, Cloner cloner)
+      : base(original, cloner) {
+      nodes = cloner.Clone(original.nodes);
+      foreach (var n in Nodes)
+        n.Parent = this;
+      RegisterNodesEvents();
+    }
+    public Network()
+      : base("Network") {
+      nodes = new NodeCollection();
+      RegisterNodesEvents();
+    }
+    public Network(string name)
+      : base(name) {
+      nodes = new NodeCollection();
+      RegisterNodesEvents();
+    }
+    public Network(string name, string description)
+      : base(name, description) {
+      nodes = new NodeCollection();
+      RegisterNodesEvents();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      foreach (var n in Nodes)
+        n.Parent = this;
+      RegisterNodesEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Network(this, cloner);
+    }
+
+    #region Nodes Events
+    protected virtual void RegisterNodesEvents() {
+      nodes.ItemsAdded += Nodes_ItemsAdded;
+      nodes.ItemsRemoved += Nodes_ItemsRemoved;
+      nodes.ItemsReplaced += Nodes_ItemsReplaced;
+      nodes.CollectionReset += Nodes_CollectionReset;
+    }
+    protected virtual void Nodes_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<INode> e) {
+      foreach (var n in e.Items)
+        n.Parent = this;
+    }
+    protected virtual void Nodes_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<INode> e) {
+      foreach (var n in e.Items)
+        n.Parent = null;
+    }
+    protected virtual void Nodes_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<INode> e) {
+      foreach (var n in e.OldItems)
+        n.Parent = null;
+      foreach (var n in e.Items)
+        n.Parent = this;
+    }
+    protected virtual void Nodes_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<INode> e) {
+      foreach (var n in e.OldItems)
+        n.Parent = null;
+      foreach (var n in e.Items)
+        n.Parent = this;
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Node.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Node.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Node.cs	(revision 11526)
@@ -0,0 +1,129 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("Node", "A node of an optimization network.")]
+  [StorableClass]
+  public class Node : Entity, INode {
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.RadialChart; }
+    }
+
+    new public INetwork Parent {
+      get { return (INetwork)base.Parent; }
+      set {
+        // NOTE: never call setter directly as the Parent property is set by the network which contains the node
+        base.Parent = value;
+      }
+    }
+    public override IEnumerable<IEntity> Children {
+      get { return base.Children.Concat(Ports.AsEnumerable<IEntity>()); }
+    }
+
+    [Storable]
+    private PortCollection ports;
+    protected PortCollection Ports {
+      get { return ports; }
+    }
+    private ReadOnlyKeyedItemCollection<string, IPort> readOnlyPorts;
+    IKeyedItemCollection<string, IPort> INode.Ports {
+      get {
+        if (readOnlyPorts == null) readOnlyPorts = ports.AsReadOnly();
+        return readOnlyPorts;
+      }
+    }
+
+    [StorableConstructor]
+    protected Node(bool deserializing) : base(deserializing) { }
+    protected Node(Node original, Cloner cloner)
+      : base(original, cloner) {
+      ports = cloner.Clone(original.ports);
+      foreach (var p in Ports)
+        p.Parent = this;
+      readOnlyPorts = null;
+      RegisterPortsEvents();
+    }
+    public Node()
+      : base("Node") {
+      ports = new PortCollection();
+      readOnlyPorts = null;
+      RegisterPortsEvents();
+    }
+    public Node(string name)
+      : base(name) {
+      ports = new PortCollection();
+      readOnlyPorts = null;
+      RegisterPortsEvents();
+    }
+    public Node(string name, string description)
+      : base(name, description) {
+      ports = new PortCollection();
+      readOnlyPorts = null;
+      RegisterPortsEvents();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      foreach (var p in Ports)
+        p.Parent = this;
+      RegisterPortsEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Node(this, cloner);
+    }
+
+    #region Ports Events
+    protected virtual void RegisterPortsEvents() {
+      ports.ItemsAdded += Ports_ItemsAdded;
+      ports.ItemsRemoved += Ports_ItemsRemoved;
+      ports.ItemsReplaced += Ports_ItemsReplaced;
+      ports.CollectionReset += Ports_CollectionReset;
+    }
+    protected virtual void Ports_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      foreach (var p in e.Items)
+        p.Parent = this;
+    }
+    protected virtual void Ports_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      foreach (var p in e.Items)
+        p.Parent = null;
+    }
+    protected virtual void Ports_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      foreach (var p in e.OldItems)
+        p.Parent = null;
+      foreach (var p in e.Items)
+        p.Parent = this;
+    }
+    protected virtual void Ports_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      foreach (var p in e.OldItems)
+        p.Parent = null;
+      foreach (var p in e.Items)
+        p.Parent = this;
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/NodeCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/NodeCollection.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/NodeCollection.cs	(revision 11526)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Core.Networks {
+  [StorableClass]
+  [Item("NodeCollection", "Represents a collection of optimization network nodes.")]
+  public class NodeCollection : NamedItemCollection<INode> {
+    [StorableConstructor]
+    protected NodeCollection(bool deserializing) : base(deserializing) { }
+    protected NodeCollection(NodeCollection original, Cloner cloner) : base(original, cloner) { }
+    public NodeCollection() : base() { }
+    public NodeCollection(int capacity) : base(capacity) { }
+    public NodeCollection(IEnumerable<INode> collection) : base(collection) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new NodeCollection(this, cloner); }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/ParameterizedPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/ParameterizedPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/ParameterizedPort.cs	(revision 11526)
@@ -0,0 +1,144 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("ParameterizedPort", "An abstract base class for parameterized ports of optimization network nodes.")]
+  [StorableClass]
+  public abstract class ParameterizedPort : Port, IParameterizedPort {
+    public override IEnumerable<IEntity> Children {
+      get { return base.Children.Concat(Parameters.AsEnumerable<IEntity>()); }
+    }
+
+    [Storable]
+    protected PortParameterCollection parameters;
+    public PortParameterCollection Parameters {
+      get { return parameters; }
+    }
+
+    [StorableConstructor]
+    protected ParameterizedPort(bool deserializing) : base(deserializing) { }
+    protected ParameterizedPort(ParameterizedPort original, Cloner cloner)
+      : base(original, cloner) {
+      parameters = cloner.Clone(original.parameters);
+      foreach (var p in Parameters)
+        p.Parent = this;
+      RegisterParametersEvents();
+    }
+    protected ParameterizedPort()
+      : base("ParameterizedPort") {
+      parameters = new PortParameterCollection();
+      RegisterParametersEvents();
+    }
+    protected ParameterizedPort(string name)
+      : base(name) {
+      parameters = new PortParameterCollection();
+      RegisterParametersEvents();
+    }
+    protected ParameterizedPort(string name, string description)
+      : base(name, description) {
+      parameters = new PortParameterCollection();
+      RegisterParametersEvents();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      foreach (var p in Parameters)
+        p.Parent = this;
+      RegisterParametersEvents();
+    }
+
+    public event EventHandler InterfaceChanged;
+    protected virtual void OnInterfaceChanged() {
+      var handler = InterfaceChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    #region Parameters Events
+    protected virtual void RegisterParametersEvents() {
+      parameters.ItemsAdded += Parameters_ItemsAdded;
+      parameters.ItemsRemoved += Parameters_ItemsRemoved;
+      parameters.ItemsReplaced += Parameters_ItemsReplaced;
+      parameters.CollectionReset += Parameters_CollectionReset;
+      foreach (var p in parameters)
+        RegisterParameterEvents(p);
+    }
+    protected virtual void Parameters_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPortParameter> e) {
+      foreach (var p in e.Items) {
+        p.Parent = this;
+        RegisterParameterEvents(p);
+      }
+      OnInterfaceChanged();
+    }
+    protected virtual void Parameters_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPortParameter> e) {
+      foreach (var p in e.Items) {
+        p.Parent = null;
+        DeregisterParameterEvents(p);
+      }
+      OnInterfaceChanged();
+    }
+    protected virtual void Parameters_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPortParameter> e) {
+      foreach (var p in e.OldItems) {
+        p.Parent = null;
+        DeregisterParameterEvents(p);
+      }
+      foreach (var p in e.Items) {
+        p.Parent = this;
+        RegisterParameterEvents(p);
+      }
+      OnInterfaceChanged();
+    }
+    protected virtual void Parameters_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPortParameter> e) {
+      foreach (var p in e.OldItems) {
+        p.Parent = null;
+        DeregisterParameterEvents(p);
+      }
+      foreach (var p in e.Items) {
+        p.Parent = this;
+        RegisterParameterEvents(p);
+      }
+      OnInterfaceChanged();
+    }
+    #endregion
+
+    #region Parameter Events
+    protected virtual void RegisterParameterEvents(IPortParameter parameter) {
+      parameter.NameChanged += Parameter_NameChanged;
+      parameter.TypeChanged += Parameter_TypeChanged;
+    }
+    protected virtual void DeregisterParameterEvents(IPortParameter parameter) {
+      parameter.NameChanged -= Parameter_NameChanged;
+      parameter.TypeChanged -= Parameter_TypeChanged;
+    }
+    protected virtual void Parameter_NameChanged(object sender, EventArgs e) {
+      OnInterfaceChanged();
+    }
+    protected virtual void Parameter_TypeChanged(object sender, EventArgs e) {
+      OnInterfaceChanged();
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Port.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Port.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Port.cs	(revision 11526)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Drawing;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("Port", "Abstract base class for ports of an optimization network node.")]
+  [StorableClass]
+  public abstract class Port : Entity, IPort {
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Field; }
+    }
+
+    new public INode Parent {
+      get { return (INode)base.Parent; }
+      set {
+        // NOTE: never call setter directly as the Parent property is set by the node which contains the port
+        base.Parent = value;
+      }
+    }
+
+    [StorableConstructor]
+    protected Port(bool deserializing) : base(deserializing) { }
+    protected Port(Port original, Cloner cloner) : base(original, cloner) { }
+    protected Port() : base("Port") { }
+    protected Port(string name) : base(name) { }
+    protected Port(string name, string description) : base(name, description) { }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortCollection.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortCollection.cs	(revision 11526)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Core.Networks {
+  [StorableClass]
+  [Item("PortCollection", "Represents a collection of ports in an optimization network node.")]
+  public class PortCollection : NamedItemCollection<IPort> {
+    [StorableConstructor]
+    protected PortCollection(bool deserializing) : base(deserializing) { }
+    protected PortCollection(PortCollection original, Cloner cloner) : base(original, cloner) { }
+    public PortCollection() : base() { }
+    public PortCollection(INode node, int capacity) : base(capacity) { }
+    public PortCollection(INode node, IEnumerable<IPort> collection) : base(collection) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new PortCollection(this, cloner); }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameter.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameter.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameter.cs	(revision 11526)
@@ -0,0 +1,171 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using System.Drawing;
+
+namespace HeuristicLab.Core.Networks {
+  [Item("PortParameter", "A parameter of a port.")]
+  [StorableClass]
+  public class PortParameter<T> : Entity, IPortParameter<T> where T : class, IItem {
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Field; }
+    }
+    public override Image ItemImage {
+      get {
+        if (Type.HasFlag(PortParameterType.Input) && Type.HasFlag(PortParameterType.Output))
+          return HeuristicLab.Common.Resources.VSImageLibrary.Field;
+        else if (Type.HasFlag(PortParameterType.Input))
+          return HeuristicLab.Common.Resources.VSImageLibrary.ArrowDown;
+        else if (Type.HasFlag(PortParameterType.Output))
+          return HeuristicLab.Common.Resources.VSImageLibrary.ArrowUp;
+        else
+          return base.ItemImage;
+      }
+    }
+
+    new public IPort Parent {
+      get { return (IPort)base.Parent; }
+      set {
+        // NOTE: never call setter directly as the Parent property is set by the node which contains the port
+        base.Parent = value;
+      }
+    }
+    public Type DataType {
+      get { return typeof(T); }
+    }
+    [Storable]
+    private PortParameterType type;
+    public PortParameterType Type {
+      get { return type; }
+      set {
+        if (value != type) {
+          type = value;
+          OnTypeChanged();
+        }
+      }
+    }
+    [Storable]
+    protected T defaultValue;
+    public T DefaultValue {
+      get { return defaultValue; }
+      set {
+        if (value != this.defaultValue) {
+          DeregisterDefaultValueEvents();
+          this.defaultValue = value;
+          RegisterDefaultValueEvents();
+          OnDefaultValueChanged();
+        }
+      }
+    }
+    IItem IPortParameter.DefaultValue {
+      get { return DefaultValue; }
+      set {
+        T val = value as T;
+        if ((value != null) && (val == null))
+          throw new InvalidOperationException(
+            string.Format("Type mismatch. Value is not a \"{0}\".",
+                          typeof(T).GetPrettyName())
+          );
+        DefaultValue = val;
+      }
+    }
+
+    [StorableConstructor]
+    protected PortParameter(bool deserializing) : base(deserializing) { }
+    protected PortParameter(PortParameter<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.type = original.type;
+      this.defaultValue = cloner.Clone(original.defaultValue);
+      RegisterDefaultValueEvents();
+    }
+    public PortParameter()
+      : base("PortParameter") {
+      type = PortParameterType.Input;
+    }
+    public PortParameter(string name)
+      : base(name) {
+      type = PortParameterType.Input;
+    }
+    public PortParameter(string name, string description)
+      : base(name, description) {
+      type = PortParameterType.Input;
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterDefaultValueEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PortParameter<T>(this, cloner);
+    }
+
+    public override string ToString() {
+      var s = base.ToString();
+      if (DefaultValue != null)
+        s += ": " + DefaultValue.ToString();
+      return s;
+    }
+
+    public event EventHandler TypeChanged;
+    protected virtual void OnTypeChanged() {
+      var handler = TypeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+      OnItemImageChanged();
+    }
+
+    public event EventHandler DefaultValueChanged;
+    protected virtual void OnDefaultValueChanged() {
+      var handler = DefaultValueChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+      OnToStringChanged();
+    }
+
+    public IMessageValue<T> CreateMessageValue() {
+      if (DefaultValue == null)
+        return new MessageValue<T>(Name);
+      else
+        return new MessageValue<T>(Name, (T)DefaultValue.Clone());
+    }
+    IMessageValue IPortParameter.CreateMessageValue() {
+      return CreateMessageValue();
+    }
+
+    #region DefaultValue Events
+    protected virtual void RegisterDefaultValueEvents() {
+      if (defaultValue != null) {
+        defaultValue.ToStringChanged += new EventHandler(DefaultValue_ToStringChanged);
+      }
+    }
+    protected virtual void DeregisterDefaultValueEvents() {
+      if (defaultValue != null) {
+        defaultValue.ToStringChanged -= new EventHandler(DefaultValue_ToStringChanged);
+      }
+    }
+    private void DefaultValue_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterCollection.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterCollection.cs	(revision 11526)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Core.Networks {
+  [StorableClass]
+  [Item("PortParameterCollection", "Represents a collection of port parameters.")]
+  public class PortParameterCollection : NamedItemCollection<IPortParameter> {
+    [StorableConstructor]
+    protected PortParameterCollection(bool deserializing) : base(deserializing) { }
+    protected PortParameterCollection(PortParameterCollection original, Cloner cloner) : base(original, cloner) { }
+    public PortParameterCollection() : base() { }
+    public PortParameterCollection(int capacity) : base(capacity) { }
+    public PortParameterCollection(IEnumerable<IPortParameter> collection) : base(collection) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new PortParameterCollection(this, cloner); }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterType.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterType.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterType.cs	(revision 11526)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Core.Networks {
+  [Flags]
+  public enum PortParameterType {
+    None = 0,
+    Input = 1,
+    Output = 2
+  }
+}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Entity.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Entity.cs	(revision 11525)
+++ 	(revision )
@@ -1,98 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("Entity", "Abstract base class for entities of an optimization network.")]
-  [StorableClass]
-  public abstract class Entity : NamedItem, IEntity {
-    public static readonly string PathSeparator = " => ";
-    public static new Image StaticItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
-    }
-
-    private IEntity parent;
-    public IEntity Parent {
-      get { return parent; }
-      protected set {
-        if (value != parent) {
-          DeregisterParentEvents();
-          parent = value;
-          RegisterParentEvents();
-          OnPathChanged();
-        }
-      }
-    }
-    public virtual IEnumerable<IEntity> Children {
-      get { return Enumerable.Empty<IEntity>(); }
-    }
-    public string Path {
-      get {
-        return parent != null ? parent.Path + PathSeparator + Name : Name;
-      }
-    }
-
-    [StorableConstructor]
-    protected Entity(bool deserializing) : base(deserializing) { }
-    protected Entity(Entity original, Cloner cloner) : base(original, cloner) { }
-    protected Entity() : base("Entity") { }
-    protected Entity(string name) : base(name) { }
-    protected Entity(string name, string description) : base(name, description) { }
-
-    protected override void OnNameChanging(CancelEventArgs<string> e) {
-      base.OnNameChanging(e);
-      e.Cancel = e.Cancel || e.Value.Contains(PathSeparator);
-    }
-    protected override void OnNameChanged() {
-      base.OnNameChanged();
-      OnPathChanged();
-    }
-
-    public event EventHandler PathChanged;
-    protected virtual void OnPathChanged() {
-      var handler = PathChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    #region Parent Events
-    protected virtual void RegisterParentEvents() {
-      if (parent != null) {
-        parent.PathChanged += Parent_PathChanged;
-      }
-    }
-    protected virtual void DeregisterParentEvents() {
-      if (parent != null) {
-        parent.PathChanged -= Parent_PathChanged;
-      }
-    }
-    void Parent_PathChanged(object sender, EventArgs e) {
-      OnPathChanged();
-    }
-    #endregion
-  }
-}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/HeuristicLab.Optimization.Networks-3.3.csproj
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/HeuristicLab.Optimization.Networks-3.3.csproj	(revision 11525)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/HeuristicLab.Optimization.Networks-3.3.csproj	(revision 11526)
@@ -90,70 +90,43 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="### obsolete\ClientPort.cs" />
-    <Compile Include="### obsolete\ClientServicePort.cs" />
-    <Compile Include="### obsolete\EventArgs.cs" />
-    <Compile Include="### obsolete\IClientPort.cs" />
-    <Compile Include="### obsolete\IClientServicePort.cs" />
-    <Compile Include="### obsolete\IInputOutputPort.cs" />
-    <Compile Include="### obsolete\IInputPort.cs" />
-    <Compile Include="### obsolete\InputOutputPort.cs" />
-    <Compile Include="### obsolete\InputPort.cs" />
-    <Compile Include="### obsolete\IOutputInputPort.cs" />
-    <Compile Include="### obsolete\IOutputPort.cs" />
-    <Compile Include="### obsolete\IServiceParameter.cs" />
-    <Compile Include="### obsolete\IServicePort.cs" />
-    <Compile Include="### obsolete\IValuePort.cs" />
-    <Compile Include="### obsolete\OutputInputPort.cs" />
-    <Compile Include="### obsolete\OutputPort.cs" />
-    <Compile Include="### obsolete\ServiceParameter.cs" />
-    <Compile Include="### obsolete\ServiceParameterCollection.cs" />
-    <Compile Include="IHookOperator.cs" />
-    <Compile Include="Nodes\KSPTSPNetwork.cs" />
-    <Compile Include="Nodes\KSPTSPConnector.cs" />
-    <Compile Include="Nodes\GenericNode.cs" />
-    <Compile Include="Nodes\IGenericNode.cs" />
-    <Compile Include="Ports\ConfigurationPort.cs" />
-    <Compile Include="Ports\ExecutionPort.cs" />
-    <Compile Include="Ports\IConfigurationPort.cs" />
-    <Compile Include="Ports\IExecutionPort.cs" />
-    <Compile Include="Ports\MessageCollection.cs" />
-    <Compile Include="### obsolete\ServiceParameterCollectionCollection.cs" />
-    <Compile Include="### obsolete\ServiceParameterType.cs" />
-    <Compile Include="### obsolete\ServicePort.cs" />
-    <Compile Include="### obsolete\ValuePort.cs" />
-    <Compile Include="Nodes\AlgorithmNode.cs" />
-    <Compile Include="Nodes\ClientNode.cs" />
-    <Compile Include="Nodes\IAlgorithmNode.cs" />
-    <Compile Include="Nodes\IClientNode.cs" />
-    <Compile Include="Nodes\INetwork.cs" />
-    <Compile Include="Nodes\INode.cs" />
-    <Compile Include="Nodes\IVariablesNode.cs" />
-    <Compile Include="Nodes\MultiplierNode.cs" />
-    <Compile Include="Nodes\Network.cs" />
-    <Compile Include="Nodes\Node.cs" />
-    <Compile Include="Nodes\NodeCollection.cs" />
-    <Compile Include="Nodes\VariablesNode.cs" />
-    <Compile Include="IEntity.cs" />
-    <Compile Include="Ports\GenericPort.cs" />
-    <Compile Include="Ports\IConnectedPort.cs" />
-    <Compile Include="Ports\IGenericPort.cs" />
-    <Compile Include="Ports\IMessage.cs" />
-    <Compile Include="Ports\IMessageValue.cs" />
-    <Compile Include="Ports\IParameterizedPort.cs" />
-    <Compile Include="Ports\IPort.cs" />
-    <Compile Include="Ports\IPortParameter.cs" />
-    <Compile Include="Ports\Message.cs" />
-    <Compile Include="Ports\MessageValue.cs" />
-    <Compile Include="Ports\MessageValueCollection.cs" />
-    <Compile Include="Ports\ParameterizedPort.cs" />
-    <Compile Include="Ports\Port.cs" />
-    <Compile Include="Ports\PortCollection.cs" />
-    <Compile Include="Ports\PortParameter.cs" />
-    <Compile Include="Ports\PortParameterCollection.cs" />
-    <Compile Include="Ports\PortParameterType.cs" />
-    <Compile Include="Entity.cs" />
+    <Compile Include="Core.Networks\Entity.cs" />
+    <Compile Include="Core.Networks\GenericNode.cs" />
+    <Compile Include="Core.Networks\GenericPort.cs" />
+    <Compile Include="Core.Networks\IConnectedPort.cs" />
+    <Compile Include="Core.Networks\IEntity.cs" />
+    <Compile Include="Core.Networks\IGenericNode.cs" />
+    <Compile Include="Core.Networks\IGenericPort.cs" />
+    <Compile Include="Core.Networks\IMessage.cs" />
+    <Compile Include="Core.Networks\IMessageValue.cs" />
+    <Compile Include="Core.Networks\INetwork.cs" />
+    <Compile Include="Core.Networks\INode.cs" />
+    <Compile Include="Core.Networks\IParameterizedPort.cs" />
+    <Compile Include="Core.Networks\IPort.cs" />
+    <Compile Include="Core.Networks\IPortParameter.cs" />
+    <Compile Include="Core.Networks\Message.cs" />
+    <Compile Include="Core.Networks\MessageCollection.cs" />
+    <Compile Include="Core.Networks\MessageValue.cs" />
+    <Compile Include="Core.Networks\MessageValueCollection.cs" />
+    <Compile Include="Core.Networks\Network.cs" />
+    <Compile Include="Core.Networks\Node.cs" />
+    <Compile Include="Core.Networks\NodeCollection.cs" />
+    <Compile Include="Core.Networks\ParameterizedPort.cs" />
+    <Compile Include="Core.Networks\Port.cs" />
+    <Compile Include="Core.Networks\PortCollection.cs" />
+    <Compile Include="Core.Networks\PortParameter.cs" />
+    <Compile Include="Core.Networks\PortParameterCollection.cs" />
+    <Compile Include="Core.Networks\PortParameterType.cs" />
+    <Compile Include="Operators\HookOperator.cs" />
+    <Compile Include="Operators\IHookOperator.cs" />
+    <Compile Include="Optimization.Networks.KSPTSP\KSPTSPConnector.cs" />
+    <Compile Include="Optimization.Networks.KSPTSP\KSPTSPNetwork.cs" />
+    <Compile Include="Optimization.Networks\AlgorithmNode.cs" />
+    <Compile Include="Optimization.Networks\ConfigurationPort.cs" />
+    <Compile Include="Optimization.Networks\ExecutionPort.cs" />
+    <Compile Include="Optimization.Networks\IAlgorithmNode.cs" />
+    <Compile Include="Optimization.Networks\IConfigurationPort.cs" />
+    <Compile Include="Optimization.Networks\IExecutionPort.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="HookOperator.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -230,4 +203,5 @@
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/HookOperator.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/HookOperator.cs	(revision 11525)
+++ 	(revision )
@@ -1,90 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Operators;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Linq;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("HookOperator", "An operator which interacts with an optimization network port.")]
-  [StorableClass]
-  public class HookOperator : Operator, IHookOperator {
-    public new ParameterCollection Parameters {
-      get { return base.Parameters; }
-    }
-
-    [Storable]
-    protected IGenericPort port;
-    public IGenericPort Port {
-      get { return port; }
-      set {
-        if (port != value) {
-          port = value;
-          OnPortChanged();
-        }
-      }
-    }
-
-    [StorableConstructor]
-    protected HookOperator(bool deserializing) : base(deserializing) { }
-    protected HookOperator(HookOperator original, Cloner cloner)
-      : base(original, cloner) {
-      // ATTENTION: port is intentionally NOT cloned
-      port = original.port;
-    }
-    public HookOperator() : base() { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new HookOperator(this, cloner);
-    }
-
-    public event EventHandler PortChanged;
-    protected virtual void OnPortChanged() {
-      var handler = PortChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public override IOperation Apply() {
-      if (Port != null) {
-        var msg = Port.PrepareMessage();
-        foreach (var output in Port.Parameters.Where(p => p.Type.HasFlag(PortParameterType.Output))) {
-          IParameter param;
-          if (Parameters.TryGetValue(output.Name, out param)) {
-            msg[output.Name] = param.ActualValue;
-          }
-        }
-
-        Port.SendMessage(msg, CancellationToken);
-
-        foreach (var input in Port.Parameters.Where(p => p.Type.HasFlag(PortParameterType.Input))) {
-          IParameter param;
-          if (Parameters.TryGetValue(input.Name, out param)) {
-            param.ActualValue = msg[input.Name];
-          }
-        }
-      }
-      return null;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/IEntity.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/IEntity.cs	(revision 11525)
+++ 	(revision )
@@ -1,33 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-using System.Collections.Generic;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IEntity : INamedItem {
-    IEntity Parent { get; }
-    IEnumerable<IEntity> Children { get; }
-    string Path { get; }
-    event EventHandler PathChanged;
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/IHookOperator.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/IHookOperator.cs	(revision 11525)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IHookOperator : IOperator {
-    new ParameterCollection Parameters { get; }
-    IGenericPort Port { get; set; }
-
-    event EventHandler PortChanged;
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/AlgorithmNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/AlgorithmNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,241 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("AlgorithmNode", "A node of an optimization network which contains a HeuristicLab algorithm.")]
-  [StorableClass]
-  public class AlgorithmNode : Node, IAlgorithmNode {
-    private object locker = new object();
-    private Dictionary<IAlgorithm, AutoResetEvent> waitHandles = new Dictionary<IAlgorithm, AutoResetEvent>();
-    private Dictionary<IAlgorithm, Exception> exceptions = new Dictionary<IAlgorithm, Exception>();
-
-    new public PortCollection Ports {
-      get { return base.Ports; }
-    }
-
-    [Storable]
-    private IAlgorithm algorithm;
-    public IAlgorithm Algorithm {
-      get { return algorithm; }
-      set {
-        if (value != algorithm) {
-          algorithm = value;
-          OnAlgorithmChanged();
-        }
-      }
-    }
-
-    [Storable]
-    private RunCollection runs;
-    public RunCollection Runs {
-      get { return runs; }
-    }
-
-    [StorableConstructor]
-    protected AlgorithmNode(bool deserializing) : base(deserializing) { }
-    protected AlgorithmNode(AlgorithmNode original, Cloner cloner)
-      : base(original, cloner) {
-      algorithm = cloner.Clone(original.algorithm);
-      runs = cloner.Clone(original.runs);
-    }
-    public AlgorithmNode()
-      : base("AlgorithmNode") {
-      runs = new RunCollection();
-    }
-    public AlgorithmNode(string name)
-      : base(name) {
-      runs = new RunCollection();
-    }
-    public AlgorithmNode(string name, string description)
-      : base(name, description) {
-      runs = new RunCollection();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new AlgorithmNode(this, cloner);
-    }
-
-    protected virtual void Configure(IConfigurationPort port, IMessage message, CancellationToken token) {
-      // set algorithm and problem parameters
-      lock (locker) {
-        if (algorithm != null) {
-          foreach (var v in message.Values) {
-            IParameter param = null;
-            if (Algorithm.Parameters.TryGetValue(v.Name, out param)) {
-              var vp = param as IValueParameter;
-              if (vp != null) vp.Value = v.Value;
-            }
-            if (Algorithm.Problem.Parameters.TryGetValue(v.Name, out param)) {
-              var vp = param as IValueParameter;
-              if (vp != null) vp.Value = v.Value;
-            }
-          }
-        }
-      }
-    }
-
-    protected virtual void Execute(IExecutionPort port, IMessage message, CancellationToken token) {
-      if (Algorithm == null) throw new InvalidOperationException("Algorithm is null");
-
-      IAlgorithm algorithm;
-      lock (locker) {
-        algorithm = (IAlgorithm)Algorithm.Clone();
-        waitHandles.Add(algorithm, new AutoResetEvent(false));
-      }
-
-      // set parameters
-      foreach (var v in message.Values) {
-        IParameter param = null;
-        if (algorithm.Parameters.TryGetValue(v.Name, out param)) {
-          var vp = param as IValueParameter;
-          if (vp != null) vp.Value = v.Value;
-        }
-        if (algorithm.Problem.Parameters.TryGetValue(v.Name, out param)) {
-          var vp = param as IValueParameter;
-          if (vp != null) vp.Value = v.Value;
-        }
-      }
-
-      algorithm.StoreAlgorithmInEachRun = false;
-      algorithm.Runs.Clear();
-      algorithm.Prepare();
-      algorithm.ExceptionOccurred += Algorithm_ExceptionOccurred;
-      algorithm.Stopped += Algorithm_Stopped;
-
-      using (token.Register(() => { algorithm.Stop(); })) {
-        algorithm.Start();
-        waitHandles[algorithm].WaitOne();
-      }
-
-      lock (locker) {
-        waitHandles[algorithm].Dispose();
-        waitHandles.Remove(algorithm);
-
-        Exception ex = null;
-        if (exceptions.TryGetValue(algorithm, out ex)) {
-          exceptions.Remove(algorithm);
-          throw ex;
-        }
-      }
-
-      // retrieve results
-      var run = algorithm.Runs.First();
-      foreach (var v in message.Values) {
-        IItem result = null;
-        if (run.Results.TryGetValue(v.Name, out result)) {
-          v.Value = result;
-        }
-      }
-
-      lock (locker) {
-        Runs.Add(run);
-      }
-    }
-
-    private void Algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {
-      var algorithm = (IAlgorithm)sender;
-      lock (locker) {
-        exceptions.Add(algorithm, e.Value);
-      }
-      algorithm.Stop();
-    }
-    private void Algorithm_Stopped(object sender, EventArgs e) {
-      lock (locker) {
-        waitHandles[(IAlgorithm)sender].Set();
-      }
-    }
-
-    public event EventHandler AlgorithmChanged;
-    protected virtual void OnAlgorithmChanged() {
-      var handler = AlgorithmChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    #region Ports Events
-    protected override void RegisterPortsEvents() {
-      base.RegisterPortsEvents();
-      foreach (var p in Ports)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsAdded(sender, e);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsRemoved(sender, e);
-      foreach (var p in e.Items)
-        DeregisterPortEvents(p);
-    }
-    protected override void Ports_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsReplaced(sender, e);
-      foreach (var p in e.OldItems)
-        DeregisterPortEvents(p);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_CollectionReset(sender, e);
-      foreach (var p in e.OldItems)
-        DeregisterPortEvents(p);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    #endregion
-
-    #region Port Events
-    private void RegisterPortEvents(IPort port) {
-      IConfigurationPort c = port as IConfigurationPort;
-      if (c != null) {
-        c.MessageReceived += ConfigurationPort_MessageReceived;
-      }
-      IExecutionPort e = port as IExecutionPort;
-      if (e != null) {
-        e.MessageReceived += ExecutionPort_MessageReceived;
-      }
-    }
-    private void DeregisterPortEvents(IPort port) {
-      IConfigurationPort c = port as IConfigurationPort;
-      if (c != null) {
-        c.MessageReceived -= ConfigurationPort_MessageReceived;
-      }
-      IExecutionPort e = port as IExecutionPort;
-      if (e != null) {
-        e.MessageReceived -= ExecutionPort_MessageReceived;
-      }
-    }
-    protected virtual void ConfigurationPort_MessageReceived(object sender, EventArgs<IMessage, CancellationToken> e) {
-      Configure((IConfigurationPort)sender, e.Value, e.Value2);
-    }
-    protected virtual void ExecutionPort_MessageReceived(object sender, EventArgs<IMessage, CancellationToken> e) {
-      Execute((IExecutionPort)sender, e.Value, e.Value2);
-    }
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/ClientNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/ClientNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,99 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("ClientNode", "A node of an optimization network which calls service nodes.")]
-  [StorableClass]
-  public class ClientNode : Node, IClientNode {
-    private object locker = new object();
-
-    new public PortCollection Ports {
-      get { return base.Ports; }
-    }
-
-    [Storable]
-    private IItemCollection<ServiceParameterCollection> calls;
-    public IItemCollection<ServiceParameterCollection> Calls {
-      get { return calls; }
-    }
-
-    [StorableConstructor]
-    protected ClientNode(bool deserializing) : base(deserializing) { }
-    protected ClientNode(ClientNode original, Cloner cloner)
-      : base(original, cloner) {
-      calls = cloner.Clone(original.calls);
-    }
-    public ClientNode()
-      : base("ClientNode") {
-      calls = new ItemCollection<ServiceParameterCollection>();
-    }
-    public ClientNode(string name)
-      : base(name) {
-      calls = new ItemCollection<ServiceParameterCollection>();
-    }
-    public ClientNode(string name, string description)
-      : base(name, description) {
-      calls = new ItemCollection<ServiceParameterCollection>();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ClientNode(this, cloner);
-    }
-
-    public virtual async Task CallServicesAsync() {
-      await CallServicesAsync(CancellationToken.None);
-    }
-    public virtual async Task CallServicesAsync(CancellationToken token) {
-      foreach (var clientPort in Ports.OfType<IClientPort>()) {
-        var parameters = clientPort.PrepareParameters();
-
-        // retrieve inputs
-        foreach (var inputPort in Ports.OfType<IInputPort>().
-                                        Where(x => parameters.ContainsKey(x.Name) &&
-                                                    parameters[x.Name].Type == ServiceParameterType.Input &&
-                                                    parameters[x.Name].DataType.IsAssignableFrom(x.DataType))) {
-          parameters[inputPort.Name].Value = (IItem)inputPort.Value.Clone();
-        }
-
-        parameters = await clientPort.CallServiceAsync(parameters, token);
-
-        lock (locker) {
-          // set outputs
-          foreach (var outputPort in Ports.OfType<IOutputPort>().
-                                            Where(x => parameters.ContainsKey(x.Name) &&
-                                                      parameters[x.Name].Type == ServiceParameterType.Output &&
-                                                      x.DataType.IsAssignableFrom(parameters[x.Name].DataType))) {
-            outputPort.Value = (IItem)parameters[outputPort.Name].Value.Clone();
-          }
-
-          Calls.Add(parameters);
-        }
-      }
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/GenericNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/GenericNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("GenericNode", "A generic node of an optimization network.")]
-  [StorableClass]
-  public class GenericNode : Node, IGenericNode {
-    new public PortCollection Ports {
-      get { return base.Ports; }
-    }
-
-    [StorableConstructor]
-    protected GenericNode(bool deserializing) : base(deserializing) { }
-    protected GenericNode(GenericNode original, Cloner cloner) : base(original, cloner) { }
-    public GenericNode() : base("GenericNode") { }
-    public GenericNode(string name) : base(name) { }
-    public GenericNode(string name, string description) : base(name, description) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new GenericNode(this, cloner);
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/IAlgorithmNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/IAlgorithmNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IAlgorithmNode : INode {
-    new PortCollection Ports { get; }
-    IAlgorithm Algorithm { get; set; }
-    RunCollection Runs { get; }
-
-    event EventHandler AlgorithmChanged;
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/IClientNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/IClientNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,35 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IClientNode : INode {
-    new PortCollection Ports { get; }
-    IItemCollection<ServiceParameterCollection> Calls { get; }
-
-    Task CallServicesAsync();
-    Task CallServicesAsync(CancellationToken token);
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/IGenericNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/IGenericNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,31 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IGenericNode : INode {
-    new PortCollection Ports { get; }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/INetwork.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/INetwork.cs	(revision 11525)
+++ 	(revision )
@@ -1,29 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface INetwork : INode {
-    NodeCollection Nodes { get; }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/INode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/INode.cs	(revision 11525)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface INode : IEntity {
-    new INetwork Parent { get; set; }
-    IKeyedItemCollection<string, IPort> Ports { get; }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/IVariablesNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/IVariablesNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,31 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IVariablesNode : INode {
-    new PortCollection Ports { get; }
-
-    VariableCollection Variables { get; }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/KSPTSPConnector.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/KSPTSPConnector.cs	(revision 11525)
+++ 	(revision )
@@ -1,126 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.BinaryVectorEncoding;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.TravelingSalesman;
-using System.Linq;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("KSPTSPConnector", "A node of an optimization network which connects a KSP and a TSP.")]
-  [StorableClass]
-  public class KSPTSPConnector : Node {
-    [StorableConstructor]
-    protected KSPTSPConnector(bool deserializing) : base(deserializing) { }
-    protected KSPTSPConnector(KSPTSPConnector original, Cloner cloner)
-      : base(original, cloner) {
-      RegisterEvents();
-    }
-    public KSPTSPConnector()
-      : base("KSPTSPConnector") {
-      Initialize();
-      RegisterEvents();
-    }
-    public KSPTSPConnector(string name)
-      : base(name) {
-      Initialize();
-      RegisterEvents();
-    }
-    public KSPTSPConnector(string name, string description)
-      : base(name, description) {
-      Initialize();
-      RegisterEvents();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new KSPTSPConnector(this, cloner);
-    }
-
-    protected virtual void Initialize() {
-      var parameters = new GenericPort("Parameters");
-      Ports.Add(parameters);
-      parameters.Parameters.Add(new PortParameter<DoubleMatrix>("Cities") { Type = PortParameterType.Input });
-      parameters.Parameters.Add(new PortParameter<DoubleValue>("TransportCostsFactor") { Type = PortParameterType.Input });
-
-      var ksp = new GenericPort("KSP Connector");
-      Ports.Add(ksp);
-      ksp.Parameters.Add(new PortParameter<BinaryVector>("KnapsackSolution") { Type = PortParameterType.Input });
-      ksp.Parameters.Add(new PortParameter<DoubleValue>("Quality") { Type = PortParameterType.Input | PortParameterType.Output });
-      ksp.Parameters.Add(new PortParameter<DoubleValue>("TransportCosts") { Type = PortParameterType.Output });
-      ksp.Parameters.Add(new PortParameter<PathTSPTour>("Route") { Type = PortParameterType.Output });
-
-      var tsp = new GenericPort("TSP Connector");
-      Ports.Add(tsp);
-      tsp.Parameters.Add(new PortParameter<DoubleMatrix>("Coordinates") { Type = PortParameterType.Output });
-      tsp.Parameters.Add(new PortParameter<PathTSPTour>("Best TSP Solution") { Type = PortParameterType.Input });
-      tsp.Parameters.Add(new PortParameter<DoubleValue>("BestQuality") { Type = PortParameterType.Input });
-    }
-
-    protected virtual void RegisterEvents() {
-      var ksp = (IGenericPort)Ports["KSP Connector"];
-      ksp.MessageReceived += Knapsack_MessageReceived;
-    }
-
-    protected virtual void Knapsack_MessageReceived(object sender, EventArgs<IMessage, System.Threading.CancellationToken> e) {
-      // get parameters
-      var parametersPort = (IGenericPort)Ports["Parameters"];
-      var parameters = parametersPort.PrepareMessage();
-      parametersPort.SendMessage(parameters, e.Value2);
-      var cities = (DoubleMatrix)parameters["Cities"];
-      var factor = ((DoubleValue)parameters["TransportCostsFactor"]).Value;
-
-      // build coordinates
-      var kspMsg = e.Value;
-      var kspSolution = (BinaryVector)kspMsg["KnapsackSolution"];
-      var kspQuality = ((DoubleValue)kspMsg["Quality"]).Value;
-      var coords = new DoubleMatrix(kspSolution.Count(x => x), 2);
-      int j = 0;
-      for (int i = 0; i < kspSolution.Length; i++) {
-        if (kspSolution[i]) {
-          coords[j, 0] = cities[i, 0];
-          coords[j, 1] = cities[i, 1];
-          j++;
-        }
-      }
-
-      // solve TSP
-      var tspConnectorPort = (IGenericPort)Ports["TSP Connector"];
-      var tspMsg = tspConnectorPort.PrepareMessage();
-      tspMsg["Coordinates"] = coords;
-      tspConnectorPort.SendMessage(tspMsg, e.Value2);
-      var tspSolution = (PathTSPTour)tspMsg["Best TSP Solution"];
-      var tspQuality = ((DoubleValue)tspMsg["BestQuality"]).Value;
-
-      // calculate transport costs
-      ((DoubleValue)kspMsg["Quality"]).Value = kspQuality - factor * tspQuality;
-      kspMsg["TransportCosts"] = new DoubleValue(factor * tspQuality);
-      kspMsg["Route"] = tspSolution;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/KSPTSPNetwork.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/KSPTSPNetwork.cs	(revision 11525)
+++ 	(revision )
@@ -1,183 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Algorithms.GeneticAlgorithm;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.BinaryVectorEncoding;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.Knapsack;
-using HeuristicLab.Problems.TravelingSalesman;
-using System.Linq;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("KSPTSPNetwork", "An optimization network which connects a KSP and a TSP.")]
-  [Creatable("Optimization Networks")]
-  [StorableClass]
-  public class KSPTSPNetwork : Network {
-    [StorableConstructor]
-    protected KSPTSPNetwork(bool deserializing) : base(deserializing) { }
-    protected KSPTSPNetwork(KSPTSPNetwork original, Cloner cloner) : base(original, cloner) { }
-    public KSPTSPNetwork()
-      : base("KSPTSPNetwork") {
-      Initialize();
-    }
-    public KSPTSPNetwork(string name)
-      : base(name) {
-      Initialize();
-    }
-    public KSPTSPNetwork(string name, string description)
-      : base(name, description) {
-      Initialize();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new KSPTSPNetwork(this, cloner);
-    }
-
-    protected virtual void Initialize() {
-      #region ParametersNode
-      var paramsNode = new GenericNode("ParametersNode");
-      Nodes.Add(paramsNode);
-
-      var paramsPort = new GenericPort("Parameters");
-      paramsNode.Ports.Add(paramsPort);
-
-      paramsPort.Parameters.Add(new PortParameter<DoubleMatrix>("Cities") {
-        Type = PortParameterType.Output,
-        DefaultValue = new DoubleMatrix(new double[,] {
-          {00, 00}, {10, 00}, {20, 00}, {30, 00}, {40, 00}, 
-          {00, 10}, {10, 10}, {20, 10}, {30, 10}, {40, 10}, 
-          {00, 20}, {10, 20}, {20, 20}, {30, 20}, {40, 20}, 
-          {00, 30}, {10, 30}, {20, 30}, {30, 30}, {40, 30}, 
-          {00, 40}, {10, 40}, {20, 40}, {30, 40}, {40, 40}
-        })
-      });
-      paramsPort.Parameters.Add(new PortParameter<DoubleValue>("TransportCostsFactor") {
-        Type = PortParameterType.Output,
-        DefaultValue = new DoubleValue(0.1)
-      });
-      paramsPort.Parameters.Add(new PortParameter<IntValue>("KnapsackCapacity") {
-        Type = PortParameterType.Output,
-        DefaultValue = new IntValue(10)
-      });
-      paramsPort.Parameters.Add(new PortParameter<IntArray>("Values") {
-        Type = PortParameterType.Output,
-        DefaultValue = new IntArray(new int[] { 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5 })
-      });
-      paramsPort.Parameters.Add(new PortParameter<IntArray>("Weights") {
-        Type = PortParameterType.Output,
-        DefaultValue = new IntArray(new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 })
-      });
-      #endregion
-
-      #region KSPNode
-      var kspNode = new AlgorithmNode("KSPNode");
-      Nodes.Add(kspNode);
-
-      var configPort = new ConfigurationPort("ConfigureKSP");
-      kspNode.Ports.Add(configPort);
-
-      configPort.Parameters.Add(new PortParameter<IntValue>("KnapsackCapacity") {
-        Type = PortParameterType.Input
-      });
-      configPort.Parameters.Add(new PortParameter<IntArray>("Values") {
-        Type = PortParameterType.Input
-      });
-      configPort.Parameters.Add(new PortParameter<IntArray>("Weights") {
-        Type = PortParameterType.Input
-      });
-
-      var evaluatePort = new GenericPort("EvaluateRoute");
-      kspNode.Ports.Add(evaluatePort);
-
-      evaluatePort.Parameters.Add(new PortParameter<BinaryVector>("KnapsackSolution") {
-        Type = PortParameterType.Output
-      });
-      evaluatePort.Parameters.Add(new PortParameter<DoubleValue>("Quality") {
-        Type = PortParameterType.Output | PortParameterType.Input
-      });
-      evaluatePort.Parameters.Add(new PortParameter<DoubleValue>("TransportCosts") {
-        Type = PortParameterType.Input
-      });
-      evaluatePort.Parameters.Add(new PortParameter<PathTSPTour>("Route") {
-        Type = PortParameterType.Input
-      });
-
-      var kspGA = new GeneticAlgorithm();
-      kspGA.Problem = new KnapsackProblem();
-      kspGA.MaximumGenerations.Value = 50;
-      kspGA.PopulationSize.Value = 10;
-      kspGA.Mutator = kspGA.MutatorParameter.ValidValues.Where(x => x.Name == "SinglePositionBitflipManipulator").First();
-      kspNode.Algorithm = kspGA;
-
-      var hook = new HookOperator();
-      hook.Parameters.Add(new LookupParameter<BinaryVector>("KnapsackSolution") { Hidden = false });
-      hook.Parameters.Add(new LookupParameter<DoubleValue>("Quality") { Hidden = false });
-      hook.Parameters.Add(new LookupParameter<DoubleValue>("TransportCosts") { Hidden = false });
-      hook.Parameters.Add(new LookupParameter<PathTSPTour>("Route") { Hidden = false });
-      ((FixedValueParameter<OperatorList>)kspGA.Problem.Evaluator.Parameters["AfterExecutionOperators"]).Value.Add(hook);
-      #endregion
-
-      #region TSPNode
-      var tspNode = new AlgorithmNode("TSPNode");
-      Nodes.Add(tspNode);
-
-      var executePort = new ExecutionPort("Execute");
-      tspNode.Ports.Add(executePort);
-
-      executePort.Parameters.Add(new PortParameter<DoubleMatrix>("Coordinates") {
-        Type = PortParameterType.Input
-      });
-      executePort.Parameters.Add(new PortParameter<DoubleValue>("BestQuality") {
-        Type = PortParameterType.Output
-      });
-      executePort.Parameters.Add(new PortParameter<PathTSPTour>("Best TSP Solution") {
-        Type = PortParameterType.Output
-      });
-
-      var tspGA = new GeneticAlgorithm();
-      tspGA.Problem = new TravelingSalesmanProblem();
-      tspGA.MaximumGenerations.Value = 100;
-      tspGA.PopulationSize.Value = 50;
-      tspGA.Mutator = tspGA.MutatorParameter.ValidValues.Where(x => x.Name == "InversionManipulator").First();
-      tspNode.Algorithm = tspGA;
-      #endregion
-
-      #region KSPTSPConnector
-      var ksptspConnector = (INode)new KSPTSPConnector();
-      Nodes.Add(ksptspConnector);
-      #endregion
-
-      #region Wire Ports
-      hook.Port = evaluatePort;
-      configPort.ConnectedPort = paramsPort;
-      evaluatePort.ConnectedPort = (IConnectedPort)ksptspConnector.Ports["KSP Connector"];
-      ((IGenericPort)ksptspConnector.Ports["Parameters"]).ConnectedPort = paramsPort;
-      ((IGenericPort)ksptspConnector.Ports["TSP Connector"]).ConnectedPort = executePort;
-
-      paramsPort.SendMessage(paramsPort.PrepareMessage());
-      #endregion
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/MultiplierNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/MultiplierNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,79 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("MultiplierNode", "A node for multiplying integer values.")]
-  [StorableClass]
-  public class MultiplierNode : Node {
-    protected static readonly string MultiplierPortName = "Multiplier";
-    protected static readonly string ValuePortName = "Value";
-
-    public IInputPort<IntValue> MultiplierPort {
-      get { return (IInputPort<IntValue>)Ports[MultiplierPortName]; }
-    }
-    public IInputOutputPort<IntValue, IntValue> ValuePort {
-      get { return (IInputOutputPort<IntValue, IntValue>)Ports[ValuePortName]; }
-    }
-
-    [StorableConstructor]
-    protected MultiplierNode(bool deserializing) : base(deserializing) { }
-    protected MultiplierNode(MultiplierNode original, Cloner cloner) : base(original, cloner) { }
-    public MultiplierNode()
-      : base("MultiplierNode") {
-      Initialize();
-    }
-    public MultiplierNode(string name)
-      : base(name) {
-      Initialize();
-    }
-    public MultiplierNode(string name, string description)
-      : base(name, description) {
-      Initialize();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new MultiplierNode(this, cloner);
-    }
-
-    protected virtual void Initialize() {
-      Ports.Add(new InputPort<IntValue>(MultiplierPortName));
-      Ports.Add(new InputOutputPort<IntValue, IntValue>(ValuePortName));
-      RegisterPortEvents();
-    }
-
-    protected virtual void RegisterPortEvents() {
-      ValuePort.ValueReceived += ValuePort_ValueReceived;
-    }
-
-    protected virtual void ValuePort_ValueReceived(object sender, OutputInputPortEventArgs<IntValue, IntValue> e) {
-      if (MultiplierPort.Value == null) throw new InvalidOperationException("Multiplier is null");
-      if (e.Value != null) {
-        e.Result = new IntValue(e.Value.Value * MultiplierPort.Value.Value);
-      }
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/Network.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/Network.cs	(revision 11525)
+++ 	(revision )
@@ -1,115 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("Network", "An optimization network.")]
-  [Creatable("Optimization Networks")]
-  [StorableClass]
-  public class Network : Node, INetwork, IStorableContent {
-    public string Filename { get; set; }
-
-    public static new Image StaticItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Module; }
-    }
-
-    public override IEnumerable<IEntity> Children {
-      get { return base.Children.Concat(Nodes.AsEnumerable<IEntity>()); }
-    }
-
-    [Storable]
-    private NodeCollection nodes;
-    public NodeCollection Nodes {
-      get { return nodes; }
-    }
-
-    [StorableConstructor]
-    protected Network(bool deserializing) : base(deserializing) { }
-    protected Network(Network original, Cloner cloner)
-      : base(original, cloner) {
-      nodes = cloner.Clone(original.nodes);
-      foreach (var n in Nodes)
-        n.Parent = this;
-      RegisterNodesEvents();
-    }
-    public Network()
-      : base("Network") {
-      nodes = new NodeCollection();
-      RegisterNodesEvents();
-    }
-    public Network(string name)
-      : base(name) {
-      nodes = new NodeCollection();
-      RegisterNodesEvents();
-    }
-    public Network(string name, string description)
-      : base(name, description) {
-      nodes = new NodeCollection();
-      RegisterNodesEvents();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      foreach (var n in Nodes)
-        n.Parent = this;
-      RegisterNodesEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Network(this, cloner);
-    }
-
-    #region Nodes Events
-    protected virtual void RegisterNodesEvents() {
-      nodes.ItemsAdded += Nodes_ItemsAdded;
-      nodes.ItemsRemoved += Nodes_ItemsRemoved;
-      nodes.ItemsReplaced += Nodes_ItemsReplaced;
-      nodes.CollectionReset += Nodes_CollectionReset;
-    }
-    protected virtual void Nodes_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<INode> e) {
-      foreach (var n in e.Items)
-        n.Parent = this;
-    }
-    protected virtual void Nodes_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<INode> e) {
-      foreach (var n in e.Items)
-        n.Parent = null;
-    }
-    protected virtual void Nodes_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<INode> e) {
-      foreach (var n in e.OldItems)
-        n.Parent = null;
-      foreach (var n in e.Items)
-        n.Parent = this;
-    }
-    protected virtual void Nodes_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<INode> e) {
-      foreach (var n in e.OldItems)
-        n.Parent = null;
-      foreach (var n in e.Items)
-        n.Parent = this;
-    }
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/Node.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/Node.cs	(revision 11525)
+++ 	(revision )
@@ -1,131 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Drawing;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("Node", "A node of an optimization network.")]
-  [StorableClass]
-  public class Node : Entity, INode {
-    public static new Image StaticItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.RadialChart; }
-    }
-
-    new public INetwork Parent {
-      get { return (INetwork)base.Parent; }
-      set {
-        // NOTE: never call setter directly as the Parent property is set by the network which contains the node
-        base.Parent = value;
-      }
-    }
-    public override IEnumerable<IEntity> Children {
-      get { return base.Children.Concat(Ports.AsEnumerable<IEntity>()); }
-    }
-
-    [Storable]
-    private PortCollection ports;
-    protected PortCollection Ports {
-      get { return ports; }
-    }
-    private ReadOnlyKeyedItemCollection<string, IPort> readOnlyPorts;
-    IKeyedItemCollection<string, IPort> INode.Ports {
-      get {
-        if (readOnlyPorts == null) readOnlyPorts = ports.AsReadOnly();
-        return readOnlyPorts;
-      }
-    }
-
-    [StorableConstructor]
-    protected Node(bool deserializing) : base(deserializing) { }
-    protected Node(Node original, Cloner cloner)
-      : base(original, cloner) {
-      ports = cloner.Clone(original.ports);
-      foreach (var p in Ports)
-        p.Parent = this;
-      readOnlyPorts = null;
-      RegisterPortsEvents();
-    }
-    public Node()
-      : base("Node") {
-      ports = new PortCollection();
-      readOnlyPorts = null;
-      RegisterPortsEvents();
-    }
-    public Node(string name)
-      : base(name) {
-      ports = new PortCollection();
-      readOnlyPorts = null;
-      RegisterPortsEvents();
-    }
-    public Node(string name, string description)
-      : base(name, description) {
-      ports = new PortCollection();
-      readOnlyPorts = null;
-      RegisterPortsEvents();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      foreach (var p in Ports)
-        p.Parent = this;
-      RegisterPortsEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Node(this, cloner);
-    }
-
-    #region Ports Events
-    protected virtual void RegisterPortsEvents() {
-      ports.ItemsAdded += Ports_ItemsAdded;
-      ports.ItemsRemoved += Ports_ItemsRemoved;
-      ports.ItemsReplaced += Ports_ItemsReplaced;
-      ports.CollectionReset += Ports_CollectionReset;
-    }
-    protected virtual void Ports_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      foreach (var p in e.Items)
-        p.Parent = this;
-    }
-    protected virtual void Ports_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      foreach (var p in e.Items)
-        p.Parent = null;
-    }
-    protected virtual void Ports_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      foreach (var p in e.OldItems)
-        p.Parent = null;
-      foreach (var p in e.Items)
-        p.Parent = this;
-    }
-    protected virtual void Ports_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      foreach (var p in e.OldItems)
-        p.Parent = null;
-      foreach (var p in e.Items)
-        p.Parent = this;
-    }
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/NodeCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/NodeCollection.cs	(revision 11525)
+++ 	(revision )
@@ -1,40 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Collections.Generic;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Optimization.Networks {
-  [StorableClass]
-  [Item("NodeCollection", "Represents a collection of optimization network nodes.")]
-  public class NodeCollection : NamedItemCollection<INode> {
-    [StorableConstructor]
-    protected NodeCollection(bool deserializing) : base(deserializing) { }
-    protected NodeCollection(NodeCollection original, Cloner cloner) : base(original, cloner) { }
-    public NodeCollection() : base() { }
-    public NodeCollection(int capacity) : base(capacity) { }
-    public NodeCollection(IEnumerable<INode> collection) : base(collection) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) { return new NodeCollection(this, cloner); }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/VariablesNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Nodes/VariablesNode.cs	(revision 11525)
+++ 	(revision )
@@ -1,248 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("VariablesNode", "A node of an optimization network which contains variables.")]
-  [StorableClass]
-  public class VariablesNode : Node, IVariablesNode {
-    new public PortCollection Ports {
-      get { return base.Ports; }
-    }
-
-    [Storable]
-    private VariableCollection variables;
-    public VariableCollection Variables {
-      get { return variables; }
-    }
-
-    [StorableConstructor]
-    protected VariablesNode(bool deserializing) : base(deserializing) { }
-    protected VariablesNode(VariablesNode original, Cloner cloner)
-      : base(original, cloner) {
-      variables = cloner.Clone(original.variables);
-      RegisterVariablesEvents();
-    }
-    public VariablesNode()
-      : base("VariablesNode") {
-      variables = new VariableCollection();
-      RegisterVariablesEvents();
-    }
-    public VariablesNode(string name)
-      : base(name) {
-      variables = new VariableCollection();
-      RegisterVariablesEvents();
-    }
-    public VariablesNode(string name, string description)
-      : base(name, description) {
-      variables = new VariableCollection();
-      RegisterVariablesEvents();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterVariablesEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new VariablesNode(this, cloner);
-    }
-
-    private void UpdateVariable(IInputPort port) {
-      if (!variables.ContainsKey(port.Name))
-        variables.Add(new Variable(port.Name));
-      variables[port.Name].Value = (IItem)port.Value;
-    }
-    private void UpdateOutputPort(IVariable variable) {
-      IPort port = null;
-      if (Ports.TryGetValue(variable.Name, out port)) {
-        IOutputPort o = port as IOutputPort;
-        if (o != null) {
-          o.Value = variable.Value;
-        }
-        IOutputInputPort oi = port as IOutputInputPort;
-        if (oi != null) {
-          var result = (IItem)oi.SendValue(variable.Value);
-          if (!variables.ContainsKey(oi.Name + "Result"))
-            variables.Add(new Variable(oi.Name + "Result"));
-          variables[oi.Name + "Result"].Value = result;
-        }
-      }
-    }
-    private void UpdateOutputPort(IOutputPort port) {
-      IVariable var = null;
-      if (variables.TryGetValue(port.Name, out var)) {
-        port.Value = var.Value;
-      } else {
-        port.Value = null;
-      }
-    }
-    private void UpdateOutputInputPort(IOutputInputPort port) {
-      IVariable var = null;
-      IItem result = null;
-      if (variables.TryGetValue(port.Name, out var)) {
-        result = (IItem)port.SendValue(var.Value);
-      } else {
-        result = (IItem)port.SendValue(null);
-      }
-      if (!variables.ContainsKey(port.Name + "Result"))
-        variables.Add(new Variable(port.Name + "Result"));
-      variables[port.Name + "Result"].Value = result;
-    }
-
-    #region Ports Events
-    protected override void RegisterPortsEvents() {
-      base.RegisterPortsEvents();
-      foreach (var p in Ports)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsAdded(sender, e);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsRemoved(sender, e);
-      foreach (var p in e.Items)
-        DeregisterPortEvents(p);
-    }
-    protected override void Ports_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_ItemsReplaced(sender, e);
-      foreach (var p in e.OldItems)
-        DeregisterPortEvents(p);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    protected override void Ports_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
-      base.Ports_CollectionReset(sender, e);
-      foreach (var p in e.OldItems)
-        DeregisterPortEvents(p);
-      foreach (var p in e.Items)
-        RegisterPortEvents(p);
-    }
-    #endregion
-
-    #region Port Events
-    private void RegisterPortEvents(IPort port) {
-      IInputPort i = port as IInputPort;
-      if (i != null) {
-        i.NameChanged += InputPort_NameChanged;
-        i.ValueChanged += InputPort_ValueChanged;
-        UpdateVariable(i);
-      }
-      IOutputPort o = port as IOutputPort;
-      if (o != null) {
-        o.NameChanged += OutputPort_NameChanged;
-        UpdateOutputPort(o);
-      }
-      IOutputInputPort oi = port as IOutputInputPort;
-      if (oi != null) {
-        oi.NameChanged += OutputInputPort_NameChanged;
-        UpdateOutputInputPort(oi);
-      }
-    }
-    private void DeregisterPortEvents(IPort port) {
-      IInputPort i = port as IInputPort;
-      if (i != null) {
-        i.NameChanged -= InputPort_NameChanged;
-        i.ValueChanged -= InputPort_ValueChanged;
-      }
-      IOutputPort o = port as IOutputPort;
-      if (o != null) {
-        o.NameChanged -= OutputPort_NameChanged;
-      }
-      IOutputInputPort oi = port as IOutputInputPort;
-      if (oi != null) {
-        oi.NameChanged -= OutputInputPort_NameChanged;
-      }
-    }
-    private void InputPort_NameChanged(object sender, EventArgs e) {
-      UpdateVariable((IInputPort)sender);
-    }
-    private void InputPort_ValueChanged(object sender, EventArgs e) {
-      UpdateVariable((IInputPort)sender);
-    }
-    private void OutputPort_NameChanged(object sender, EventArgs e) {
-      UpdateOutputPort((IOutputPort)sender);
-    }
-    private void OutputInputPort_NameChanged(object sender, EventArgs e) {
-      UpdateOutputInputPort((IOutputInputPort)sender);
-    }
-    #endregion
-
-    #region Variables Events
-    private void RegisterVariablesEvents() {
-      variables.ItemsAdded += Variables_ItemsAdded;
-      variables.ItemsRemoved += Variables_ItemsRemoved;
-      variables.ItemsReplaced += Variables_ItemsReplaced;
-      variables.CollectionReset += Variables_CollectionReset;
-      foreach (var v in variables)
-        RegisterVariableEvents(v);
-    }
-    private void Variables_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IVariable> e) {
-      foreach (var v in e.Items)
-        RegisterVariableEvents(v);
-    }
-    private void Variables_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IVariable> e) {
-      foreach (var v in e.Items)
-        DeregisterVariableEvents(v);
-    }
-    private void Variables_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IVariable> e) {
-      foreach (var v in e.OldItems)
-        DeregisterVariableEvents(v);
-      foreach (var v in e.Items)
-        RegisterVariableEvents(v);
-    }
-    private void Variables_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IVariable> e) {
-      foreach (var v in e.OldItems)
-        DeregisterVariableEvents(v);
-      foreach (var v in e.Items)
-        RegisterVariableEvents(v);
-    }
-    #endregion
-
-    #region Variable Events
-    private void RegisterVariableEvents(IVariable variable) {
-      if (variable != null) {
-        variable.ValueChanged += Variable_ValueChanged;
-        variable.ToStringChanged += Variable_ToStringChanged;
-        UpdateOutputPort(variable);
-      }
-    }
-    private void DeregisterVariableEvents(IVariable variable) {
-      if (variable != null) {
-        variable.ValueChanged -= Variable_ValueChanged;
-        variable.ToStringChanged += Variable_ToStringChanged;
-      }
-    }
-    private void Variable_ValueChanged(object sender, EventArgs e) {
-      UpdateOutputPort((IVariable)sender);
-    }
-    private void Variable_ToStringChanged(object sender, EventArgs e) {
-      UpdateOutputPort((IVariable)sender);
-    }
-    #endregion
-  }
-}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Operators/HookOperator.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Operators/HookOperator.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Operators/HookOperator.cs	(revision 11526)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using System.Linq;
+
+namespace HeuristicLab.Operators {
+  [Item("HookOperator", "An operator which interacts with an optimization network port.")]
+  [StorableClass]
+  public class HookOperator : Operator, IHookOperator {
+    public new ParameterCollection Parameters {
+      get { return base.Parameters; }
+    }
+
+    [Storable]
+    protected IGenericPort port;
+    public IGenericPort Port {
+      get { return port; }
+      set {
+        if (port != value) {
+          port = value;
+          OnPortChanged();
+        }
+      }
+    }
+
+    [StorableConstructor]
+    protected HookOperator(bool deserializing) : base(deserializing) { }
+    protected HookOperator(HookOperator original, Cloner cloner)
+      : base(original, cloner) {
+      // ATTENTION: port is intentionally NOT cloned
+      port = original.port;
+    }
+    public HookOperator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HookOperator(this, cloner);
+    }
+
+    public event EventHandler PortChanged;
+    protected virtual void OnPortChanged() {
+      var handler = PortChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public override IOperation Apply() {
+      if (Port != null) {
+        var msg = Port.PrepareMessage();
+        foreach (var output in Port.Parameters.Where(p => p.Type.HasFlag(PortParameterType.Output))) {
+          IParameter param;
+          if (Parameters.TryGetValue(output.Name, out param)) {
+            msg[output.Name] = param.ActualValue;
+          }
+        }
+
+        Port.SendMessage(msg, CancellationToken);
+
+        foreach (var input in Port.Parameters.Where(p => p.Type.HasFlag(PortParameterType.Input))) {
+          IParameter param;
+          if (Parameters.TryGetValue(input.Name, out param)) {
+            param.ActualValue = msg[input.Name];
+          }
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Operators/IHookOperator.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Operators/IHookOperator.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Operators/IHookOperator.cs	(revision 11526)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using System;
+
+namespace HeuristicLab.Operators {
+  public interface IHookOperator : IOperator {
+    new ParameterCollection Parameters { get; }
+    IGenericPort Port { get; set; }
+
+    event EventHandler PortChanged;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks.KSPTSP/KSPTSPConnector.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks.KSPTSP/KSPTSPConnector.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks.KSPTSP/KSPTSPConnector.cs	(revision 11526)
@@ -0,0 +1,127 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.TravelingSalesman;
+using System.Linq;
+
+namespace HeuristicLab.Optimization.Networks.KSPTSP {
+  [Item("KSPTSPConnector", "A node of an optimization network which connects a KSP and a TSP.")]
+  [StorableClass]
+  public class KSPTSPConnector : Node {
+    [StorableConstructor]
+    protected KSPTSPConnector(bool deserializing) : base(deserializing) { }
+    protected KSPTSPConnector(KSPTSPConnector original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEvents();
+    }
+    public KSPTSPConnector()
+      : base("KSPTSPConnector") {
+      Initialize();
+      RegisterEvents();
+    }
+    public KSPTSPConnector(string name)
+      : base(name) {
+      Initialize();
+      RegisterEvents();
+    }
+    public KSPTSPConnector(string name, string description)
+      : base(name, description) {
+      Initialize();
+      RegisterEvents();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new KSPTSPConnector(this, cloner);
+    }
+
+    protected virtual void Initialize() {
+      var parameters = new GenericPort("Parameters");
+      Ports.Add(parameters);
+      parameters.Parameters.Add(new PortParameter<DoubleMatrix>("Cities") { Type = PortParameterType.Input });
+      parameters.Parameters.Add(new PortParameter<DoubleValue>("TransportCostsFactor") { Type = PortParameterType.Input });
+
+      var ksp = new GenericPort("KSP Connector");
+      Ports.Add(ksp);
+      ksp.Parameters.Add(new PortParameter<BinaryVector>("KnapsackSolution") { Type = PortParameterType.Input });
+      ksp.Parameters.Add(new PortParameter<DoubleValue>("Quality") { Type = PortParameterType.Input | PortParameterType.Output });
+      ksp.Parameters.Add(new PortParameter<DoubleValue>("TransportCosts") { Type = PortParameterType.Output });
+      ksp.Parameters.Add(new PortParameter<PathTSPTour>("Route") { Type = PortParameterType.Output });
+
+      var tsp = new GenericPort("TSP Connector");
+      Ports.Add(tsp);
+      tsp.Parameters.Add(new PortParameter<DoubleMatrix>("Coordinates") { Type = PortParameterType.Output });
+      tsp.Parameters.Add(new PortParameter<PathTSPTour>("Best TSP Solution") { Type = PortParameterType.Input });
+      tsp.Parameters.Add(new PortParameter<DoubleValue>("BestQuality") { Type = PortParameterType.Input });
+    }
+
+    protected virtual void RegisterEvents() {
+      var ksp = (IGenericPort)Ports["KSP Connector"];
+      ksp.MessageReceived += Knapsack_MessageReceived;
+    }
+
+    protected virtual void Knapsack_MessageReceived(object sender, EventArgs<IMessage, System.Threading.CancellationToken> e) {
+      // get parameters
+      var parametersPort = (IGenericPort)Ports["Parameters"];
+      var parameters = parametersPort.PrepareMessage();
+      parametersPort.SendMessage(parameters, e.Value2);
+      var cities = (DoubleMatrix)parameters["Cities"];
+      var factor = ((DoubleValue)parameters["TransportCostsFactor"]).Value;
+
+      // build coordinates
+      var kspMsg = e.Value;
+      var kspSolution = (BinaryVector)kspMsg["KnapsackSolution"];
+      var kspQuality = ((DoubleValue)kspMsg["Quality"]).Value;
+      var coords = new DoubleMatrix(kspSolution.Count(x => x), 2);
+      int j = 0;
+      for (int i = 0; i < kspSolution.Length; i++) {
+        if (kspSolution[i]) {
+          coords[j, 0] = cities[i, 0];
+          coords[j, 1] = cities[i, 1];
+          j++;
+        }
+      }
+
+      // solve TSP
+      var tspConnectorPort = (IGenericPort)Ports["TSP Connector"];
+      var tspMsg = tspConnectorPort.PrepareMessage();
+      tspMsg["Coordinates"] = coords;
+      tspConnectorPort.SendMessage(tspMsg, e.Value2);
+      var tspSolution = (PathTSPTour)tspMsg["Best TSP Solution"];
+      var tspQuality = ((DoubleValue)tspMsg["BestQuality"]).Value;
+
+      // calculate transport costs
+      ((DoubleValue)kspMsg["Quality"]).Value = kspQuality - factor * tspQuality;
+      kspMsg["TransportCosts"] = new DoubleValue(factor * tspQuality);
+      kspMsg["Route"] = tspSolution;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks.KSPTSP/KSPTSPNetwork.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks.KSPTSP/KSPTSPNetwork.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks.KSPTSP/KSPTSPNetwork.cs	(revision 11526)
@@ -0,0 +1,185 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Algorithms.GeneticAlgorithm;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Knapsack;
+using HeuristicLab.Problems.TravelingSalesman;
+using System.Linq;
+
+namespace HeuristicLab.Optimization.Networks.KSPTSP {
+  [Item("KSPTSPNetwork", "An optimization network which connects a KSP and a TSP.")]
+  [Creatable("Optimization Networks")]
+  [StorableClass]
+  public class KSPTSPNetwork : Network {
+    [StorableConstructor]
+    protected KSPTSPNetwork(bool deserializing) : base(deserializing) { }
+    protected KSPTSPNetwork(KSPTSPNetwork original, Cloner cloner) : base(original, cloner) { }
+    public KSPTSPNetwork()
+      : base("KSPTSPNetwork") {
+      Initialize();
+    }
+    public KSPTSPNetwork(string name)
+      : base(name) {
+      Initialize();
+    }
+    public KSPTSPNetwork(string name, string description)
+      : base(name, description) {
+      Initialize();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new KSPTSPNetwork(this, cloner);
+    }
+
+    protected virtual void Initialize() {
+      #region ParametersNode
+      var paramsNode = new GenericNode("ParametersNode");
+      Nodes.Add(paramsNode);
+
+      var paramsPort = new GenericPort("Parameters");
+      paramsNode.Ports.Add(paramsPort);
+
+      paramsPort.Parameters.Add(new PortParameter<DoubleMatrix>("Cities") {
+        Type = PortParameterType.Output,
+        DefaultValue = new DoubleMatrix(new double[,] {
+          {00, 00}, {10, 00}, {20, 00}, {30, 00}, {40, 00}, 
+          {00, 10}, {10, 10}, {20, 10}, {30, 10}, {40, 10}, 
+          {00, 20}, {10, 20}, {20, 20}, {30, 20}, {40, 20}, 
+          {00, 30}, {10, 30}, {20, 30}, {30, 30}, {40, 30}, 
+          {00, 40}, {10, 40}, {20, 40}, {30, 40}, {40, 40}
+        })
+      });
+      paramsPort.Parameters.Add(new PortParameter<DoubleValue>("TransportCostsFactor") {
+        Type = PortParameterType.Output,
+        DefaultValue = new DoubleValue(0.1)
+      });
+      paramsPort.Parameters.Add(new PortParameter<IntValue>("KnapsackCapacity") {
+        Type = PortParameterType.Output,
+        DefaultValue = new IntValue(10)
+      });
+      paramsPort.Parameters.Add(new PortParameter<IntArray>("Values") {
+        Type = PortParameterType.Output,
+        DefaultValue = new IntArray(new int[] { 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5 })
+      });
+      paramsPort.Parameters.Add(new PortParameter<IntArray>("Weights") {
+        Type = PortParameterType.Output,
+        DefaultValue = new IntArray(new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 })
+      });
+      #endregion
+
+      #region KSPNode
+      var kspNode = new AlgorithmNode("KSPNode");
+      Nodes.Add(kspNode);
+
+      var configPort = new ConfigurationPort("ConfigureKSP");
+      kspNode.Ports.Add(configPort);
+
+      configPort.Parameters.Add(new PortParameter<IntValue>("KnapsackCapacity") {
+        Type = PortParameterType.Input
+      });
+      configPort.Parameters.Add(new PortParameter<IntArray>("Values") {
+        Type = PortParameterType.Input
+      });
+      configPort.Parameters.Add(new PortParameter<IntArray>("Weights") {
+        Type = PortParameterType.Input
+      });
+
+      var evaluatePort = new GenericPort("EvaluateRoute");
+      kspNode.Ports.Add(evaluatePort);
+
+      evaluatePort.Parameters.Add(new PortParameter<BinaryVector>("KnapsackSolution") {
+        Type = PortParameterType.Output
+      });
+      evaluatePort.Parameters.Add(new PortParameter<DoubleValue>("Quality") {
+        Type = PortParameterType.Output | PortParameterType.Input
+      });
+      evaluatePort.Parameters.Add(new PortParameter<DoubleValue>("TransportCosts") {
+        Type = PortParameterType.Input
+      });
+      evaluatePort.Parameters.Add(new PortParameter<PathTSPTour>("Route") {
+        Type = PortParameterType.Input
+      });
+
+      var kspGA = new GeneticAlgorithm();
+      kspGA.Problem = new KnapsackProblem();
+      kspGA.MaximumGenerations.Value = 50;
+      kspGA.PopulationSize.Value = 10;
+      kspGA.Mutator = kspGA.MutatorParameter.ValidValues.Where(x => x.Name == "SinglePositionBitflipManipulator").First();
+      kspNode.Algorithm = kspGA;
+
+      var hook = new HookOperator();
+      hook.Parameters.Add(new LookupParameter<BinaryVector>("KnapsackSolution") { Hidden = false });
+      hook.Parameters.Add(new LookupParameter<DoubleValue>("Quality") { Hidden = false });
+      hook.Parameters.Add(new LookupParameter<DoubleValue>("TransportCosts") { Hidden = false });
+      hook.Parameters.Add(new LookupParameter<PathTSPTour>("Route") { Hidden = false });
+      ((FixedValueParameter<OperatorList>)kspGA.Problem.Evaluator.Parameters["AfterExecutionOperators"]).Value.Add(hook);
+      #endregion
+
+      #region TSPNode
+      var tspNode = new AlgorithmNode("TSPNode");
+      Nodes.Add(tspNode);
+
+      var executePort = new ExecutionPort("Execute");
+      tspNode.Ports.Add(executePort);
+
+      executePort.Parameters.Add(new PortParameter<DoubleMatrix>("Coordinates") {
+        Type = PortParameterType.Input
+      });
+      executePort.Parameters.Add(new PortParameter<DoubleValue>("BestQuality") {
+        Type = PortParameterType.Output
+      });
+      executePort.Parameters.Add(new PortParameter<PathTSPTour>("Best TSP Solution") {
+        Type = PortParameterType.Output
+      });
+
+      var tspGA = new GeneticAlgorithm();
+      tspGA.Problem = new TravelingSalesmanProblem();
+      tspGA.MaximumGenerations.Value = 100;
+      tspGA.PopulationSize.Value = 50;
+      tspGA.Mutator = tspGA.MutatorParameter.ValidValues.Where(x => x.Name == "InversionManipulator").First();
+      tspNode.Algorithm = tspGA;
+      #endregion
+
+      #region KSPTSPConnector
+      var ksptspConnector = (INode)new KSPTSPConnector();
+      Nodes.Add(ksptspConnector);
+      #endregion
+
+      #region Wire Ports
+      hook.Port = evaluatePort;
+      configPort.ConnectedPort = paramsPort;
+      evaluatePort.ConnectedPort = (IConnectedPort)ksptspConnector.Ports["KSP Connector"];
+      ((IGenericPort)ksptspConnector.Ports["Parameters"]).ConnectedPort = paramsPort;
+      ((IGenericPort)ksptspConnector.Ports["TSP Connector"]).ConnectedPort = executePort;
+
+      paramsPort.SendMessage(paramsPort.PrepareMessage());
+      #endregion
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/AlgorithmNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/AlgorithmNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/AlgorithmNode.cs	(revision 11526)
@@ -0,0 +1,242 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+
+namespace HeuristicLab.Optimization.Networks {
+  [Item("AlgorithmNode", "A node of an optimization network which contains a HeuristicLab algorithm.")]
+  [StorableClass]
+  public class AlgorithmNode : Node, IAlgorithmNode {
+    private object locker = new object();
+    private Dictionary<IAlgorithm, AutoResetEvent> waitHandles = new Dictionary<IAlgorithm, AutoResetEvent>();
+    private Dictionary<IAlgorithm, Exception> exceptions = new Dictionary<IAlgorithm, Exception>();
+
+    new public PortCollection Ports {
+      get { return base.Ports; }
+    }
+
+    [Storable]
+    private IAlgorithm algorithm;
+    public IAlgorithm Algorithm {
+      get { return algorithm; }
+      set {
+        if (value != algorithm) {
+          algorithm = value;
+          OnAlgorithmChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private RunCollection runs;
+    public RunCollection Runs {
+      get { return runs; }
+    }
+
+    [StorableConstructor]
+    protected AlgorithmNode(bool deserializing) : base(deserializing) { }
+    protected AlgorithmNode(AlgorithmNode original, Cloner cloner)
+      : base(original, cloner) {
+      algorithm = cloner.Clone(original.algorithm);
+      runs = cloner.Clone(original.runs);
+    }
+    public AlgorithmNode()
+      : base("AlgorithmNode") {
+      runs = new RunCollection();
+    }
+    public AlgorithmNode(string name)
+      : base(name) {
+      runs = new RunCollection();
+    }
+    public AlgorithmNode(string name, string description)
+      : base(name, description) {
+      runs = new RunCollection();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlgorithmNode(this, cloner);
+    }
+
+    protected virtual void Configure(IConfigurationPort port, IMessage message, CancellationToken token) {
+      // set algorithm and problem parameters
+      lock (locker) {
+        if (algorithm != null) {
+          foreach (var v in message.Values) {
+            IParameter param = null;
+            if (Algorithm.Parameters.TryGetValue(v.Name, out param)) {
+              var vp = param as IValueParameter;
+              if (vp != null) vp.Value = v.Value;
+            }
+            if (Algorithm.Problem.Parameters.TryGetValue(v.Name, out param)) {
+              var vp = param as IValueParameter;
+              if (vp != null) vp.Value = v.Value;
+            }
+          }
+        }
+      }
+    }
+
+    protected virtual void Execute(IExecutionPort port, IMessage message, CancellationToken token) {
+      if (Algorithm == null) throw new InvalidOperationException("Algorithm is null");
+
+      IAlgorithm algorithm;
+      lock (locker) {
+        algorithm = (IAlgorithm)Algorithm.Clone();
+        waitHandles.Add(algorithm, new AutoResetEvent(false));
+      }
+
+      // set parameters
+      foreach (var v in message.Values) {
+        IParameter param = null;
+        if (algorithm.Parameters.TryGetValue(v.Name, out param)) {
+          var vp = param as IValueParameter;
+          if (vp != null) vp.Value = v.Value;
+        }
+        if (algorithm.Problem.Parameters.TryGetValue(v.Name, out param)) {
+          var vp = param as IValueParameter;
+          if (vp != null) vp.Value = v.Value;
+        }
+      }
+
+      algorithm.StoreAlgorithmInEachRun = false;
+      algorithm.Runs.Clear();
+      algorithm.Prepare();
+      algorithm.ExceptionOccurred += Algorithm_ExceptionOccurred;
+      algorithm.Stopped += Algorithm_Stopped;
+
+      using (token.Register(() => { algorithm.Stop(); })) {
+        algorithm.Start();
+        waitHandles[algorithm].WaitOne();
+      }
+
+      lock (locker) {
+        waitHandles[algorithm].Dispose();
+        waitHandles.Remove(algorithm);
+
+        Exception ex = null;
+        if (exceptions.TryGetValue(algorithm, out ex)) {
+          exceptions.Remove(algorithm);
+          throw ex;
+        }
+      }
+
+      // retrieve results
+      var run = algorithm.Runs.First();
+      foreach (var v in message.Values) {
+        IItem result = null;
+        if (run.Results.TryGetValue(v.Name, out result)) {
+          v.Value = result;
+        }
+      }
+
+      lock (locker) {
+        Runs.Add(run);
+      }
+    }
+
+    private void Algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      var algorithm = (IAlgorithm)sender;
+      lock (locker) {
+        exceptions.Add(algorithm, e.Value);
+      }
+      algorithm.Stop();
+    }
+    private void Algorithm_Stopped(object sender, EventArgs e) {
+      lock (locker) {
+        waitHandles[(IAlgorithm)sender].Set();
+      }
+    }
+
+    public event EventHandler AlgorithmChanged;
+    protected virtual void OnAlgorithmChanged() {
+      var handler = AlgorithmChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    #region Ports Events
+    protected override void RegisterPortsEvents() {
+      base.RegisterPortsEvents();
+      foreach (var p in Ports)
+        RegisterPortEvents(p);
+    }
+    protected override void Ports_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      base.Ports_ItemsAdded(sender, e);
+      foreach (var p in e.Items)
+        RegisterPortEvents(p);
+    }
+    protected override void Ports_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      base.Ports_ItemsRemoved(sender, e);
+      foreach (var p in e.Items)
+        DeregisterPortEvents(p);
+    }
+    protected override void Ports_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      base.Ports_ItemsReplaced(sender, e);
+      foreach (var p in e.OldItems)
+        DeregisterPortEvents(p);
+      foreach (var p in e.Items)
+        RegisterPortEvents(p);
+    }
+    protected override void Ports_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      base.Ports_CollectionReset(sender, e);
+      foreach (var p in e.OldItems)
+        DeregisterPortEvents(p);
+      foreach (var p in e.Items)
+        RegisterPortEvents(p);
+    }
+    #endregion
+
+    #region Port Events
+    private void RegisterPortEvents(IPort port) {
+      IConfigurationPort c = port as IConfigurationPort;
+      if (c != null) {
+        c.MessageReceived += ConfigurationPort_MessageReceived;
+      }
+      IExecutionPort e = port as IExecutionPort;
+      if (e != null) {
+        e.MessageReceived += ExecutionPort_MessageReceived;
+      }
+    }
+    private void DeregisterPortEvents(IPort port) {
+      IConfigurationPort c = port as IConfigurationPort;
+      if (c != null) {
+        c.MessageReceived -= ConfigurationPort_MessageReceived;
+      }
+      IExecutionPort e = port as IExecutionPort;
+      if (e != null) {
+        e.MessageReceived -= ExecutionPort_MessageReceived;
+      }
+    }
+    protected virtual void ConfigurationPort_MessageReceived(object sender, EventArgs<IMessage, CancellationToken> e) {
+      Configure((IConfigurationPort)sender, e.Value, e.Value2);
+    }
+    protected virtual void ExecutionPort_MessageReceived(object sender, EventArgs<IMessage, CancellationToken> e) {
+      Execute((IExecutionPort)sender, e.Value, e.Value2);
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/ConfigurationPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/ConfigurationPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/ConfigurationPort.cs	(revision 11526)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Optimization.Networks {
+  [Item("ConfigurationPort", "A port of an optimization network node which triggers configuration changes.")]
+  [StorableClass]
+  public class ConfigurationPort : GenericPort, IConfigurationPort {
+    [StorableConstructor]
+    protected ConfigurationPort(bool deserializing) : base(deserializing) { }
+    protected ConfigurationPort(ConfigurationPort original, Cloner cloner) : base(original, cloner) { }
+    public ConfigurationPort() : base("ConfigurationPort") { }
+    public ConfigurationPort(string name) : base(name) { }
+    public ConfigurationPort(string name, string description) : base(name, description) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ConfigurationPort(this, cloner);
+    }
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/ExecutionPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/ExecutionPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/ExecutionPort.cs	(revision 11526)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Optimization.Networks {
+  [Item("ExecutionPort", "A port of an optimization network node which triggers execution.")]
+  [StorableClass]
+  public class ExecutionPort : GenericPort, IExecutionPort {
+    [StorableConstructor]
+    protected ExecutionPort(bool deserializing) : base(deserializing) { }
+    protected ExecutionPort(ExecutionPort original, Cloner cloner) : base(original, cloner) { }
+    public ExecutionPort() : base("ExecutionPort") { }
+    public ExecutionPort(string name) : base(name) { }
+    public ExecutionPort(string name, string description) : base(name, description) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ExecutionPort(this, cloner);
+    }
+
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IAlgorithmNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IAlgorithmNode.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IAlgorithmNode.cs	(revision 11526)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Networks;
+using System;
+
+namespace HeuristicLab.Optimization.Networks {
+  public interface IAlgorithmNode : INode {
+    new PortCollection Ports { get; }
+    IAlgorithm Algorithm { get; set; }
+    RunCollection Runs { get; }
+
+    event EventHandler AlgorithmChanged;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IConfigurationPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IConfigurationPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IConfigurationPort.cs	(revision 11526)
@@ -0,0 +1,26 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Networks;
+
+namespace HeuristicLab.Optimization.Networks {
+  public interface IConfigurationPort : IGenericPort { }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IExecutionPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IExecutionPort.cs	(revision 11526)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/IExecutionPort.cs	(revision 11526)
@@ -0,0 +1,26 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Networks;
+
+namespace HeuristicLab.Optimization.Networks {
+  public interface IExecutionPort : IGenericPort { }
+}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/ConfigurationPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/ConfigurationPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,42 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("ConfigurationPort", "A port of an optimization network node which triggers configuration changes.")]
-  [StorableClass]
-  public class ConfigurationPort : GenericPort, IConfigurationPort {
-    [StorableConstructor]
-    protected ConfigurationPort(bool deserializing) : base(deserializing) { }
-    protected ConfigurationPort(ConfigurationPort original, Cloner cloner) : base(original, cloner) { }
-    public ConfigurationPort() : base("ConfigurationPort") { }
-    public ConfigurationPort(string name) : base(name) { }
-    public ConfigurationPort(string name, string description) : base(name, description) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ConfigurationPort(this, cloner);
-    }
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/ExecutionPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/ExecutionPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,42 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("ExecutionPort", "A port of an optimization network node which triggers execution.")]
-  [StorableClass]
-  public class ExecutionPort : GenericPort, IExecutionPort {
-    [StorableConstructor]
-    protected ExecutionPort(bool deserializing) : base(deserializing) { }
-    protected ExecutionPort(ExecutionPort original, Cloner cloner) : base(original, cloner) { }
-    public ExecutionPort() : base("ExecutionPort") { }
-    public ExecutionPort(string name) : base(name) { }
-    public ExecutionPort(string name, string description) : base(name, description) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ExecutionPort(this, cloner);
-    }
-
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/GenericPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/GenericPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,270 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Drawing;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("GenericPort", "A generic port of an optimization network node.")]
-  [StorableClass]
-  public class GenericPort : ParameterizedPort, IGenericPort, IConnectedPort {
-    public override Image ItemImage {
-      get {
-        if (PortConnectionValid) return base.ItemImage;
-        else return HeuristicLab.Common.Resources.VSImageLibrary.Error;
-      }
-    }
-
-    [Storable]
-    protected IConnectedPort connectedPort;
-    public IConnectedPort ConnectedPort {
-      get { return connectedPort; }
-      set {
-        if (connectedPort != value) {
-          DeregisterConnectedPortEvents();
-          connectedPort = value;
-          RegisterConnectedPortEvents();
-          OnConnectedPortChanged();
-          OnInterfaceChanged();
-        }
-      }
-    }
-    [Storable]
-    protected bool portConnectionValid;
-    public bool PortConnectionValid {
-      get { return portConnectionValid; }
-      protected set {
-        if (value != portConnectionValid) {
-          portConnectionValid = value;
-          OnPortConnectionValidChanged();
-          OnItemImageChanged();
-        }
-      }
-    }
-    [Storable]
-    protected bool logMessages;
-    public bool LogMessages {
-      get { return logMessages; }
-      set {
-        if (value != logMessages) {
-          logMessages = value;
-          OnLogMessagesChanged();
-        }
-      }
-    }
-    [Storable]
-    protected MessageCollection messages;
-    public MessageCollection Messages {
-      get { return messages; }
-    }
-
-    [StorableConstructor]
-    protected GenericPort(bool deserializing) : base(deserializing) { }
-    protected GenericPort(GenericPort original, Cloner cloner)
-      : base(original, cloner) {
-      connectedPort = cloner.Clone(original.connectedPort);
-      portConnectionValid = original.portConnectionValid;
-      logMessages = original.logMessages;
-      messages = cloner.Clone(original.messages);
-      RegisterConnectedPortEvents();
-    }
-    public GenericPort()
-      : base("GenericPort") {
-      portConnectionValid = true;
-      logMessages = false;
-      messages = new MessageCollection();
-    }
-    public GenericPort(string name)
-      : base(name) {
-      portConnectionValid = true;
-      logMessages = false;
-      messages = new MessageCollection();
-    }
-    public GenericPort(string name, string description)
-      : base(name, description) {
-      portConnectionValid = true;
-      logMessages = false;
-      messages = new MessageCollection();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterConnectedPortEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new GenericPort(this, cloner);
-    }
-
-    public bool CanConnectToPort(IPort port) {
-      if (port == null) return true;
-
-      var cp = port as IConnectedPort;
-      if (cp == null) return false;
-
-      // check connected port input parameters
-      foreach (var input in cp.Parameters.Where(p => p.Type.HasFlag(PortParameterType.Input))) {
-        IPortParameter param;
-        Parameters.TryGetValue(input.Name, out param);
-        if ((param == null) && (input.DefaultValue == null)) return false;
-        if (!param.Type.HasFlag(PortParameterType.Output)) return false;
-        if (!input.DataType.IsAssignableFrom(param.DataType)) return false;
-      }
-      // check local port input parameters
-      foreach (var input in Parameters.Where(p => p.Type.HasFlag(PortParameterType.Input))) {
-        IPortParameter param;
-        cp.Parameters.TryGetValue(input.Name, out param);
-        if ((param == null) && (input.DefaultValue == null)) return false;
-        if (!param.Type.HasFlag(PortParameterType.Output)) return false;
-        if (!input.DataType.IsAssignableFrom(param.DataType)) return false;
-      }
-      return true;
-    }
-    public void CloneConnectedPortParameters() {
-      Parameters.Clear();
-      foreach (var p in connectedPort.Parameters) {
-        var param = (IPortParameter)p.Clone();
-        if (!(param.Type.HasFlag(PortParameterType.Input) && param.Type.HasFlag(PortParameterType.Output))) {
-          param.Type = ~param.Type;  // bitwise negation: input -> output, output -> input
-        }
-        Parameters.Add(param);
-      }
-    }
-
-    public IMessage PrepareMessage() {
-      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
-      var message = new Message();
-
-      // collect output parameters from local port
-      message.Values.AddRange(
-        Parameters.
-        Where(p => p.Type.HasFlag(PortParameterType.Output)).
-        Select(p => p.CreateMessageValue())
-      );
-
-      // collect remaining input parameters from connected port
-      if (ConnectedPort != null) {
-        message.Values.AddRange(
-          ConnectedPort.Parameters.
-          Where(p => p.Type.HasFlag(PortParameterType.Input) && !message.Values.ContainsKey(p.Name)).
-          Select(p => p.CreateMessageValue())
-        );
-      }
-
-      // collect output parameters from connected port
-      if (ConnectedPort != null) {
-        message.Values.AddRange(
-          ConnectedPort.Parameters.
-          Where(p => p.Type.HasFlag(PortParameterType.Output) && !message.Values.ContainsKey(p.Name)).
-          Select(p => p.CreateMessageValue())
-        );
-      }
-
-      // collect remaining input parameters from local port
-      message.Values.AddRange(
-        Parameters.
-        Where(p => p.Type.HasFlag(PortParameterType.Input) && !message.Values.ContainsKey(p.Name)).
-        Select(p => p.CreateMessageValue())
-      );
-
-      return message;
-    }
-    public void SendMessage(IMessage message) {
-      SendMessage(message, CancellationToken.None);
-    }
-    public void SendMessage(IMessage message, CancellationToken token) {
-      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
-      if (LogMessages) Messages.Add(message);
-      if (ConnectedPort != null) ConnectedPort.ReceiveMessage(message, token);
-      OnMessageSent(message, token);
-    }
-    public async Task SendMessageAsync(IMessage message) {
-      await SendMessageAsync(message, CancellationToken.None);
-    }
-    public async Task SendMessageAsync(IMessage message, CancellationToken token) {
-      await Task.Run(() => { SendMessage(message, token); }, token);
-    }
-    public event EventHandler<EventArgs<IMessage, CancellationToken>> MessageSent;
-    protected virtual void OnMessageSent(IMessage message, CancellationToken token) {
-      var handler = MessageSent;
-      if (handler != null) handler(this, new EventArgs<IMessage, CancellationToken>(message, token));
-    }
-
-    public void ReceiveMessage(IMessage message, CancellationToken token) {
-      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
-      if (LogMessages) Messages.Add(message);
-      OnMessageReceived(message, token);
-    }
-    public event EventHandler<EventArgs<IMessage, CancellationToken>> MessageReceived;
-    protected virtual void OnMessageReceived(IMessage message, CancellationToken token) {
-      var handler = MessageReceived;
-      if (handler != null) handler(this, new EventArgs<IMessage, CancellationToken>(message, token));
-    }
-
-    public event EventHandler ConnectedPortChanged;
-    protected virtual void OnConnectedPortChanged() {
-      var handler = ConnectedPortChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler PortConnectionValidChanged;
-    protected virtual void OnPortConnectionValidChanged() {
-      var handler = PortConnectionValidChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler LogMessagesChanged;
-    protected virtual void OnLogMessagesChanged() {
-      var handler = LogMessagesChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    protected override void OnInterfaceChanged() {
-      PortConnectionValid = CanConnectToPort(connectedPort);
-      base.OnInterfaceChanged();
-    }
-
-    #region ConnectedPort Events
-    protected virtual void RegisterConnectedPortEvents() {
-      if (connectedPort != null) {
-        connectedPort.InterfaceChanged += ConnectedPort_InterfaceChanged;
-        connectedPort.MessageSent += ConnectedPort_MessageSent;
-      }
-    }
-    protected virtual void DeregisterConnectedPortEvents() {
-      if (connectedPort != null) {
-        connectedPort.InterfaceChanged -= ConnectedPort_InterfaceChanged;
-        connectedPort.MessageSent -= ConnectedPort_MessageSent;
-      }
-    }
-    protected virtual void ConnectedPort_InterfaceChanged(object sender, EventArgs e) {
-      OnInterfaceChanged();
-    }
-    protected virtual void ConnectedPort_MessageSent(object sender, EventArgs<IMessage, CancellationToken> e) {
-      ReceiveMessage(e.Value, e.Value2);
-    }
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IConfigurationPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IConfigurationPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,24 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IConfigurationPort : IGenericPort { }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IConnectedPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IConnectedPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,31 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using System;
-using System.Threading;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IConnectedPort : IParameterizedPort {
-    void ReceiveMessage(IMessage message, CancellationToken token);
-    event EventHandler<EventArgs<IMessage, CancellationToken>> MessageSent;
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IExecutionPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IExecutionPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,24 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IExecutionPort : IGenericPort { }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IGenericPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IGenericPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,49 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IGenericPort : IParameterizedPort {
-    IConnectedPort ConnectedPort { get; set; }
-    bool PortConnectionValid { get; }
-    bool LogMessages { get; set; }
-    MessageCollection Messages { get; }
-
-    event EventHandler ConnectedPortChanged;
-    event EventHandler PortConnectionValidChanged;
-    event EventHandler LogMessagesChanged;
-
-    bool CanConnectToPort(IPort port);
-    void CloneConnectedPortParameters();
-
-    IMessage PrepareMessage();
-    void SendMessage(IMessage message);
-    void SendMessage(IMessage message, CancellationToken token);
-    Task SendMessageAsync(IMessage message);
-    Task SendMessageAsync(IMessage message, CancellationToken token);
-
-    event EventHandler<EventArgs<IMessage, CancellationToken>> MessageReceived;
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IMessage.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IMessage.cs	(revision 11525)
+++ 	(revision )
@@ -1,29 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IMessage : IItem {
-    MessageValueCollection Values { get; }
-    IItem this[string valueName] { get; set; }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IMessageValue.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IMessageValue.cs	(revision 11525)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IMessageValue : IItem {
-    string Name { get; }
-    Type DataType { get; }
-    IItem Value { get; set; }
-
-    event EventHandler ValueChanged;
-  }
-
-  public interface IMessageValue<T> : IMessageValue where T : class, IItem {
-    new T Value { get; set; }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IParameterizedPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IParameterizedPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IParameterizedPort : IPort {
-    PortParameterCollection Parameters { get; }
-
-    event EventHandler InterfaceChanged;
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,29 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IPort : IEntity {
-    new INode Parent { get; set; }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IPortParameter.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/IPortParameter.cs	(revision 11525)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  public interface IPortParameter : IEntity {
-    new IPort Parent { get; set; }
-    Type DataType { get; }
-    PortParameterType Type { get; set; }
-    IItem DefaultValue { get; set; }
-
-    event EventHandler TypeChanged;
-    event EventHandler DefaultValueChanged;
-
-    IMessageValue CreateMessageValue();
-  }
-
-  public interface IPortParameter<T> : IPortParameter where T : class, IItem {
-    new T DefaultValue { get; set; }
-
-    new IMessageValue<T> CreateMessageValue();
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/Message.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/Message.cs	(revision 11525)
+++ 	(revision )
@@ -1,59 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Drawing;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("Message", "A message sent between ports.")]
-  [StorableClass]
-  public class Message : Item, IMessage {
-    public static new Image StaticItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Field; }
-    }
-
-    [Storable]
-    protected MessageValueCollection values;
-    public MessageValueCollection Values {
-      get { return values; }
-    }
-    public IItem this[string valueName] {
-      get { return Values[valueName].Value; }
-      set { Values[valueName].Value = value; }
-    }
-
-    [StorableConstructor]
-    protected Message(bool deserializing) : base(deserializing) { }
-    protected Message(Message original, Cloner cloner)
-      : base(original, cloner) {
-      values = cloner.Clone(original.values);
-    }
-    public Message() {
-      values = new MessageValueCollection();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Message(this, cloner);
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/MessageCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/MessageCollection.cs	(revision 11525)
+++ 	(revision )
@@ -1,40 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-
-namespace HeuristicLab.Optimization.Networks {
-  [StorableClass]
-  [Item("MessageCollection", "Represents a collection of messages.")]
-  public class MessageCollection : ItemCollection<IMessage> {
-    [StorableConstructor]
-    protected MessageCollection(bool deserializing) : base(deserializing) { }
-    protected MessageCollection(MessageCollection original, Cloner cloner) : base(original, cloner) { }
-    public MessageCollection() : base() { }
-    public MessageCollection(int capacity) : base(capacity) { }
-    public MessageCollection(IEnumerable<IMessage> collection) : base(collection) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) { return new MessageCollection(this, cloner); }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/MessageValue.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/MessageValue.cs	(revision 11525)
+++ 	(revision )
@@ -1,139 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Drawing;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("MessageValue", "A value of a message sent between ports.")]
-  [StorableClass]
-  public class MessageValue<T> : Item, IMessageValue<T> where T : class, IItem {
-    public static new Image StaticItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Field; }
-    }
-    public override Image ItemImage {
-      get {
-        if (value != null) return value.ItemImage;
-        else return base.ItemImage;
-      }
-    }
-
-    [Storable]
-    protected string name;
-    public string Name {
-      get { return name; }
-    }
-    public Type DataType {
-      get { return typeof(T); }
-    }
-    [Storable]
-    protected T value;
-    public T Value {
-      get { return value; }
-      set {
-        if (value != this.value) {
-          DeregisterValueEvents();
-          this.value = value;
-          RegisterValueEvents();
-          OnValueChanged();
-        }
-      }
-    }
-    IItem IMessageValue.Value {
-      get { return Value; }
-      set {
-        T val = value as T;
-        if ((value != null) && (val == null))
-          throw new InvalidOperationException(
-            string.Format("Type mismatch. Value is not a \"{0}\".",
-                          typeof(T).GetPrettyName())
-          );
-        Value = val;
-      }
-    }
-
-    [StorableConstructor]
-    protected MessageValue(bool deserializing) : base(deserializing) { }
-    protected MessageValue(MessageValue<T> original, Cloner cloner)
-      : base(original, cloner) {
-      this.name = original.name;
-      this.value = cloner.Clone(original.value);
-      RegisterValueEvents();
-    }
-    public MessageValue() {
-      name = "MessageValue";
-    }
-    public MessageValue(string name) {
-      if (name == null) this.name = string.Empty;
-      else this.name = name;
-    }
-    public MessageValue(string name, T value)
-      : this(name) {
-      this.value = value;
-      RegisterValueEvents();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterValueEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new MessageValue<T>(this, cloner);
-    }
-
-    public override string ToString() {
-      if (Value == null)
-        return string.Format("{0}: null", Name);
-      else
-        return string.Format("{0}: {1}", Name, Value.ToString());
-    }
-
-    public event EventHandler ValueChanged;
-    protected virtual void OnValueChanged() {
-      var handler = ValueChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-      OnItemImageChanged();
-      OnToStringChanged();
-    }
-    protected virtual void RegisterValueEvents() {
-      if (value != null) {
-        value.ItemImageChanged += Value_ItemImageChanged;
-        value.ToStringChanged += Value_ToStringChanged;
-      }
-    }
-    protected virtual void DeregisterValueEvents() {
-      if (value != null) {
-        value.ItemImageChanged -= Value_ItemImageChanged;
-        value.ToStringChanged -= Value_ToStringChanged;
-      }
-    }
-    private void Value_ItemImageChanged(object sender, EventArgs e) {
-      OnItemImageChanged();
-    }
-    private void Value_ToStringChanged(object sender, EventArgs e) {
-      OnToStringChanged();
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/MessageValueCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/MessageValueCollection.cs	(revision 11525)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-
-namespace HeuristicLab.Optimization.Networks {
-  [StorableClass]
-  [Item("MessageValueCollection", "Represents a collection of message values.")]
-  public class MessageValueCollection : KeyedItemCollection<string, IMessageValue> {
-    [StorableConstructor]
-    protected MessageValueCollection(bool deserializing) : base(deserializing) { }
-    protected MessageValueCollection(MessageValueCollection original, Cloner cloner) : base(original, cloner) { }
-    public MessageValueCollection() : base() { }
-    public MessageValueCollection(int capacity) : base(capacity) { }
-    public MessageValueCollection(IEnumerable<IMessageValue> collection) : base(collection) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) { return new MessageValueCollection(this, cloner); }
-
-    protected override string GetKeyForItem(IMessageValue item) {
-      return item.Name;
-    }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/ParameterizedPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/ParameterizedPort.cs	(revision 11525)
+++ 	(revision )
@@ -1,145 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("ParameterizedPort", "An abstract base class for parameterized ports of optimization network nodes.")]
-  [StorableClass]
-  public abstract class ParameterizedPort : Port, IParameterizedPort {
-    public override IEnumerable<IEntity> Children {
-      get { return base.Children.Concat(Parameters.AsEnumerable<IEntity>()); }
-    }
-
-    [Storable]
-    protected PortParameterCollection parameters;
-    public PortParameterCollection Parameters {
-      get { return parameters; }
-    }
-
-    [StorableConstructor]
-    protected ParameterizedPort(bool deserializing) : base(deserializing) { }
-    protected ParameterizedPort(ParameterizedPort original, Cloner cloner)
-      : base(original, cloner) {
-      parameters = cloner.Clone(original.parameters);
-      foreach (var p in Parameters)
-        p.Parent = this;
-      RegisterParametersEvents();
-    }
-    protected ParameterizedPort()
-      : base("ParameterizedPort") {
-      parameters = new PortParameterCollection();
-      RegisterParametersEvents();
-    }
-    protected ParameterizedPort(string name)
-      : base(name) {
-      parameters = new PortParameterCollection();
-      RegisterParametersEvents();
-    }
-    protected ParameterizedPort(string name, string description)
-      : base(name, description) {
-      parameters = new PortParameterCollection();
-      RegisterParametersEvents();
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      foreach (var p in Parameters)
-        p.Parent = this;
-      RegisterParametersEvents();
-    }
-
-    public event EventHandler InterfaceChanged;
-    protected virtual void OnInterfaceChanged() {
-      var handler = InterfaceChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    #region Parameters Events
-    protected virtual void RegisterParametersEvents() {
-      parameters.ItemsAdded += Parameters_ItemsAdded;
-      parameters.ItemsRemoved += Parameters_ItemsRemoved;
-      parameters.ItemsReplaced += Parameters_ItemsReplaced;
-      parameters.CollectionReset += Parameters_CollectionReset;
-      foreach (var p in parameters)
-        RegisterParameterEvents(p);
-    }
-    protected virtual void Parameters_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPortParameter> e) {
-      foreach (var p in e.Items) {
-        p.Parent = this;
-        RegisterParameterEvents(p);
-      }
-      OnInterfaceChanged();
-    }
-    protected virtual void Parameters_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPortParameter> e) {
-      foreach (var p in e.Items) {
-        p.Parent = null;
-        DeregisterParameterEvents(p);
-      }
-      OnInterfaceChanged();
-    }
-    protected virtual void Parameters_ItemsReplaced(object sender, Collections.CollectionItemsChangedEventArgs<IPortParameter> e) {
-      foreach (var p in e.OldItems) {
-        p.Parent = null;
-        DeregisterParameterEvents(p);
-      }
-      foreach (var p in e.Items) {
-        p.Parent = this;
-        RegisterParameterEvents(p);
-      }
-      OnInterfaceChanged();
-    }
-    protected virtual void Parameters_CollectionReset(object sender, Collections.CollectionItemsChangedEventArgs<IPortParameter> e) {
-      foreach (var p in e.OldItems) {
-        p.Parent = null;
-        DeregisterParameterEvents(p);
-      }
-      foreach (var p in e.Items) {
-        p.Parent = this;
-        RegisterParameterEvents(p);
-      }
-      OnInterfaceChanged();
-    }
-    #endregion
-
-    #region Parameter Events
-    protected virtual void RegisterParameterEvents(IPortParameter parameter) {
-      parameter.NameChanged += Parameter_NameChanged;
-      parameter.TypeChanged += Parameter_TypeChanged;
-    }
-    protected virtual void DeregisterParameterEvents(IPortParameter parameter) {
-      parameter.NameChanged -= Parameter_NameChanged;
-      parameter.TypeChanged -= Parameter_TypeChanged;
-    }
-    protected virtual void Parameter_NameChanged(object sender, EventArgs e) {
-      OnInterfaceChanged();
-    }
-    protected virtual void Parameter_TypeChanged(object sender, EventArgs e) {
-      OnInterfaceChanged();
-    }
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/Port.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/Port.cs	(revision 11525)
+++ 	(revision )
@@ -1,51 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Drawing;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("Port", "Abstract base class for ports of an optimization network node.")]
-  [StorableClass]
-  public abstract class Port : Entity, IPort {
-    public static new Image StaticItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Field; }
-    }
-
-    new public INode Parent {
-      get { return (INode)base.Parent; }
-      set {
-        // NOTE: never call setter directly as the Parent property is set by the node which contains the port
-        base.Parent = value;
-      }
-    }
-
-    [StorableConstructor]
-    protected Port(bool deserializing) : base(deserializing) { }
-    protected Port(Port original, Cloner cloner) : base(original, cloner) { }
-    protected Port() : base("Port") { }
-    protected Port(string name) : base(name) { }
-    protected Port(string name, string description) : base(name, description) { }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/PortCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/PortCollection.cs	(revision 11525)
+++ 	(revision )
@@ -1,41 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Collections.Generic;
-
-namespace HeuristicLab.Optimization.Networks {
-  [StorableClass]
-  [Item("PortCollection", "Represents a collection of ports in an optimization network node.")]
-  public class PortCollection : NamedItemCollection<IPort> {
-    [StorableConstructor]
-    protected PortCollection(bool deserializing) : base(deserializing) { }
-    protected PortCollection(PortCollection original, Cloner cloner) : base(original, cloner) { }
-    public PortCollection() : base() { }
-    public PortCollection(INode node, int capacity) : base(capacity) { }
-    public PortCollection(INode node, IEnumerable<IPort> collection) : base(collection) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) { return new PortCollection(this, cloner); }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/PortParameter.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/PortParameter.cs	(revision 11525)
+++ 	(revision )
@@ -1,172 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
-using System.Drawing;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Item("PortParameter", "A parameter of a port.")]
-  [StorableClass]
-  public class PortParameter<T> : Entity, IPortParameter<T> where T : class, IItem {
-    public static new Image StaticItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Field; }
-    }
-    public override Image ItemImage {
-      get {
-        if (Type.HasFlag(PortParameterType.Input) && Type.HasFlag(PortParameterType.Output))
-          return HeuristicLab.Common.Resources.VSImageLibrary.Field;
-        else if (Type.HasFlag(PortParameterType.Input))
-          return HeuristicLab.Common.Resources.VSImageLibrary.ArrowDown;
-        else if (Type.HasFlag(PortParameterType.Output))
-          return HeuristicLab.Common.Resources.VSImageLibrary.ArrowUp;
-        else
-          return base.ItemImage;
-      }
-    }
-
-    new public IPort Parent {
-      get { return (IPort)base.Parent; }
-      set {
-        // NOTE: never call setter directly as the Parent property is set by the node which contains the port
-        base.Parent = value;
-      }
-    }
-    public Type DataType {
-      get { return typeof(T); }
-    }
-    [Storable]
-    private PortParameterType type;
-    public PortParameterType Type {
-      get { return type; }
-      set {
-        if (value != type) {
-          type = value;
-          OnTypeChanged();
-        }
-      }
-    }
-    [Storable]
-    protected T defaultValue;
-    public T DefaultValue {
-      get { return defaultValue; }
-      set {
-        if (value != this.defaultValue) {
-          DeregisterDefaultValueEvents();
-          this.defaultValue = value;
-          RegisterDefaultValueEvents();
-          OnDefaultValueChanged();
-        }
-      }
-    }
-    IItem IPortParameter.DefaultValue {
-      get { return DefaultValue; }
-      set {
-        T val = value as T;
-        if ((value != null) && (val == null))
-          throw new InvalidOperationException(
-            string.Format("Type mismatch. Value is not a \"{0}\".",
-                          typeof(T).GetPrettyName())
-          );
-        DefaultValue = val;
-      }
-    }
-
-    [StorableConstructor]
-    protected PortParameter(bool deserializing) : base(deserializing) { }
-    protected PortParameter(PortParameter<T> original, Cloner cloner)
-      : base(original, cloner) {
-      this.type = original.type;
-      this.defaultValue = cloner.Clone(original.defaultValue);
-      RegisterDefaultValueEvents();
-    }
-    public PortParameter()
-      : base("PortParameter") {
-      type = PortParameterType.Input;
-    }
-    public PortParameter(string name)
-      : base(name) {
-      type = PortParameterType.Input;
-    }
-    public PortParameter(string name, string description)
-      : base(name, description) {
-      type = PortParameterType.Input;
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterDefaultValueEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PortParameter<T>(this, cloner);
-    }
-
-    public override string ToString() {
-      var s = base.ToString();
-      if (DefaultValue != null)
-        s += ": " + DefaultValue.ToString();
-      return s;
-    }
-
-    public event EventHandler TypeChanged;
-    protected virtual void OnTypeChanged() {
-      var handler = TypeChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-      OnItemImageChanged();
-    }
-
-    public event EventHandler DefaultValueChanged;
-    protected virtual void OnDefaultValueChanged() {
-      var handler = DefaultValueChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-      OnToStringChanged();
-    }
-
-    public IMessageValue<T> CreateMessageValue() {
-      if (DefaultValue == null)
-        return new MessageValue<T>(Name);
-      else
-        return new MessageValue<T>(Name, (T)DefaultValue.Clone());
-    }
-    IMessageValue IPortParameter.CreateMessageValue() {
-      return CreateMessageValue();
-    }
-
-    #region DefaultValue Events
-    protected virtual void RegisterDefaultValueEvents() {
-      if (defaultValue != null) {
-        defaultValue.ToStringChanged += new EventHandler(DefaultValue_ToStringChanged);
-      }
-    }
-    protected virtual void DeregisterDefaultValueEvents() {
-      if (defaultValue != null) {
-        defaultValue.ToStringChanged -= new EventHandler(DefaultValue_ToStringChanged);
-      }
-    }
-    private void DefaultValue_ToStringChanged(object sender, EventArgs e) {
-      OnToStringChanged();
-    }
-    #endregion
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/PortParameterCollection.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/PortParameterCollection.cs	(revision 11525)
+++ 	(revision )
@@ -1,40 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-
-namespace HeuristicLab.Optimization.Networks {
-  [StorableClass]
-  [Item("PortParameterCollection", "Represents a collection of port parameters.")]
-  public class PortParameterCollection : NamedItemCollection<IPortParameter> {
-    [StorableConstructor]
-    protected PortParameterCollection(bool deserializing) : base(deserializing) { }
-    protected PortParameterCollection(PortParameterCollection original, Cloner cloner) : base(original, cloner) { }
-    public PortParameterCollection() : base() { }
-    public PortParameterCollection(int capacity) : base(capacity) { }
-    public PortParameterCollection(IEnumerable<IPortParameter> collection) : base(collection) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) { return new PortParameterCollection(this, cloner); }
-  }
-}
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/PortParameterType.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Ports/PortParameterType.cs	(revision 11525)
+++ 	(revision )
@@ -1,31 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-
-namespace HeuristicLab.Optimization.Networks {
-  [Flags]
-  public enum PortParameterType {
-    None = 0,
-    Input = 1,
-    Output = 2
-  }
-}
