Index: anches/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 11528)
+++ 	(revision )
@@ -1,52 +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.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: anches/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 11528)
+++ 	(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.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.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericPortView.cs	(revision 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/GenericPortView.cs	(revision 11529)
@@ -66,4 +66,5 @@
     protected override void OnContentChanged() {
       base.OnContentChanged();
+      portParameterCollectionView.Content = Content == null ? null : Content.Parameters;
       connectedPortView.Content = Content == null ? null : Content.ConnectedPort;
       portParameterCollectionView.Content = Content == null ? null : Content.Parameters;
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNetworkView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNetworkView.Designer.cs	(revision 11529)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNetworkView.Designer.cs	(revision 11529)
@@ -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 UserDefinedNetworkView {
+    /// <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/UserDefinedNetworkView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNetworkView.cs	(revision 11529)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNetworkView.cs	(revision 11529)
@@ -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("UserDefinedNetwork View")]
+  [Content(typeof(UserDefinedNetwork), true)]
+  [Content(typeof(IUserDefinedNetwork), false)]
+  public partial class UserDefinedNetworkView : NetworkView {
+    public new IUserDefinedNetwork Content {
+      get { return (IUserDefinedNetwork)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public UserDefinedNetworkView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      nodeCollectionView.Content = Content == null ? null : Content.Nodes;
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNodeView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNodeView.Designer.cs	(revision 11529)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNodeView.Designer.cs	(revision 11529)
@@ -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 UserDefinedNodeView {
+    /// <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/UserDefinedNodeView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNodeView.cs	(revision 11529)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedNodeView.cs	(revision 11529)
@@ -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("UserDefinedNode View")]
+  [Content(typeof(UserDefinedNode), true)]
+  [Content(typeof(IUserDefinedNode), false)]
+  public partial class UserDefinedNodeView : NodeView {
+    public new IUserDefinedNode Content {
+      get { return (IUserDefinedNode)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public UserDefinedNodeView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      portCollectionView.Content = Content == null ? null : Content.Ports;
+    }
+  }
+}
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 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/HeuristicLab.Optimization.Networks.Views-3.3.csproj	(revision 11529)
@@ -91,10 +91,4 @@
   </ItemGroup>
   <ItemGroup>
-    <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>
@@ -192,4 +186,16 @@
     <Compile Include="Core.Networks.Views\PortView.Designer.cs">
       <DependentUpon>PortView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\UserDefinedNetworkView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\UserDefinedNetworkView.Designer.cs">
+      <DependentUpon>UserDefinedNetworkView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Core.Networks.Views\UserDefinedNodeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Core.Networks.Views\UserDefinedNodeView.Designer.cs">
+      <DependentUpon>UserDefinedNodeView.cs</DependentUpon>
     </Compile>
     <Compile Include="Operators.Views\HookOperatorView.cs">
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericNode.cs	(revision 11528)
+++ 	(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.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 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/GenericPort.cs	(revision 11529)
@@ -37,4 +37,8 @@
         else return HeuristicLab.Common.Resources.VSImageLibrary.Error;
       }
+    }
+
+    new public PortParameterCollection Parameters {
+      get { return base.Parameters; }
     }
 
Index: anches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericNode.cs	(revision 11528)
+++ 	(revision )
@@ -1,26 +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.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 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IGenericPort.cs	(revision 11529)
@@ -27,4 +27,6 @@
 namespace HeuristicLab.Core.Networks {
   public interface IGenericPort : IParameterizedPort {
+    new PortParameterCollection Parameters { get; }
+
     IConnectedPort ConnectedPort { get; set; }
     bool PortConnectionValid { get; }
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INetwork.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INetwork.cs	(revision 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/INetwork.cs	(revision 11529)
@@ -22,5 +22,5 @@
 namespace HeuristicLab.Core.Networks {
   public interface INetwork : INode {
-    NodeCollection Nodes { get; }
+    IKeyedItemCollection<string, INode> Nodes { 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 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IParameterizedPort.cs	(revision 11529)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Core.Networks {
   public interface IParameterizedPort : IPort {
-    PortParameterCollection Parameters { get; }
+    IKeyedItemCollection<string, IPortParameter> Parameters { get; }
 
     event EventHandler InterfaceChanged;
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IUserDefinedNetwork.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IUserDefinedNetwork.cs	(revision 11529)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IUserDefinedNetwork.cs	(revision 11529)
@@ -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 IUserDefinedNetwork : INetwork {
+    new PortCollection Ports { get; }
+    new NodeCollection Nodes { get; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IUserDefinedNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IUserDefinedNode.cs	(revision 11529)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/IUserDefinedNode.cs	(revision 11529)
@@ -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 IUserDefinedNode : INode {
+    new PortCollection Ports { get; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Network.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Network.cs	(revision 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Network.cs	(revision 11529)
@@ -27,8 +27,7 @@
 
 namespace HeuristicLab.Core.Networks {
-  [Item("Network", "An optimization network.")]
-  [Creatable("Optimization Networks")]
+  [Item("Network", "Abstract base class for networks.")]
   [StorableClass]
-  public class Network : Node, INetwork, IStorableContent {
+  public abstract class Network : Node, INetwork, IStorableContent {
     public string Filename { get; set; }
 
@@ -43,6 +42,13 @@
     [Storable]
     private NodeCollection nodes;
-    public NodeCollection Nodes {
+    protected NodeCollection Nodes {
       get { return nodes; }
+    }
+    private ReadOnlyKeyedItemCollection<string, INode> readOnlyNodes;
+    IKeyedItemCollection<string, INode> INetwork.Nodes {
+      get {
+        if (readOnlyNodes == null) readOnlyNodes = nodes.AsReadOnly();
+        return readOnlyNodes;
+      }
     }
 
@@ -54,19 +60,23 @@
       foreach (var n in Nodes)
         n.Parent = this;
+      readOnlyNodes = null;
       RegisterNodesEvents();
     }
-    public Network()
+    protected Network()
       : base("Network") {
       nodes = new NodeCollection();
+      readOnlyNodes = null;
       RegisterNodesEvents();
     }
-    public Network(string name)
+    protected Network(string name)
       : base(name) {
       nodes = new NodeCollection();
+      readOnlyNodes = null;
       RegisterNodesEvents();
     }
-    public Network(string name, string description)
+    protected Network(string name, string description)
       : base(name, description) {
       nodes = new NodeCollection();
+      readOnlyNodes = null;
       RegisterNodesEvents();
     }
@@ -77,8 +87,4 @@
         n.Parent = this;
       RegisterNodesEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Network(this, cloner);
     }
 
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Node.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Node.cs	(revision 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/Node.cs	(revision 11529)
@@ -27,7 +27,7 @@
 
 namespace HeuristicLab.Core.Networks {
-  [Item("Node", "A node of an optimization network.")]
+  [Item("Node", "Abstract base class for nodes of a network.")]
   [StorableClass]
-  public class Node : NetworkItem, INode {
+  public abstract class Node : NetworkItem, INode {
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.RadialChart; }
@@ -68,5 +68,5 @@
       RegisterPortsEvents();
     }
-    public Node()
+    protected Node()
       : base("Node") {
       ports = new PortCollection();
@@ -74,5 +74,5 @@
       RegisterPortsEvents();
     }
-    public Node(string name)
+    protected Node(string name)
       : base(name) {
       ports = new PortCollection();
@@ -80,5 +80,5 @@
       RegisterPortsEvents();
     }
-    public Node(string name, string description)
+    protected Node(string name, string description)
       : base(name, description) {
       ports = new PortCollection();
@@ -92,8 +92,4 @@
         p.Parent = this;
       RegisterPortsEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Node(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 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/ParameterizedPort.cs	(revision 11529)
@@ -35,7 +35,14 @@
 
     [Storable]
-    protected PortParameterCollection parameters;
-    public PortParameterCollection Parameters {
+    private PortParameterCollection parameters;
+    protected PortParameterCollection Parameters {
       get { return parameters; }
+    }
+    private ReadOnlyKeyedItemCollection<string, IPortParameter> readOnlyParameters;
+    IKeyedItemCollection<string, IPortParameter> IParameterizedPort.Parameters {
+      get {
+        if (readOnlyParameters == null) readOnlyParameters = parameters.AsReadOnly();
+        return readOnlyParameters;
+      }
     }
 
@@ -47,4 +54,5 @@
       foreach (var p in Parameters)
         p.Parent = this;
+      readOnlyParameters = null;
       RegisterParametersEvents();
     }
@@ -52,4 +60,5 @@
       : base("ParameterizedPort") {
       parameters = new PortParameterCollection();
+      readOnlyParameters = null;
       RegisterParametersEvents();
     }
@@ -57,4 +66,5 @@
       : base(name) {
       parameters = new PortParameterCollection();
+      readOnlyParameters = null;
       RegisterParametersEvents();
     }
@@ -62,4 +72,5 @@
       : base(name, description) {
       parameters = new PortParameterCollection();
+      readOnlyParameters = null;
       RegisterParametersEvents();
     }
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterType.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterType.cs	(revision 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/PortParameterType.cs	(revision 11529)
@@ -25,5 +25,4 @@
   [Flags]
   public enum PortParameterType {
-    None = 0,
     Input = 1,
     Output = 2
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/UserDefinedNetwork.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/UserDefinedNetwork.cs	(revision 11529)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/UserDefinedNetwork.cs	(revision 11529)
@@ -0,0 +1,48 @@
+#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("User-Defined Network", "A network which can be defined by the user.")]
+  [Creatable("Optimization Networks")]
+  [StorableClass]
+  public sealed class UserDefinedNetwork : Network, IUserDefinedNetwork {
+    new public PortCollection Ports {
+      get { return base.Ports; }
+    }
+    new public NodeCollection Nodes {
+      get { return base.Nodes; }
+    }
+
+    [StorableConstructor]
+    private UserDefinedNetwork(bool deserializing) : base(deserializing) { }
+    private UserDefinedNetwork(UserDefinedNetwork original, Cloner cloner) : base(original, cloner) { }
+    public UserDefinedNetwork() : base("UserDefinedNetwork") { }
+    public UserDefinedNetwork(string name) : base(name) { }
+    public UserDefinedNetwork(string name, string description) : base(name, description) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UserDefinedNetwork(this, cloner);
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/UserDefinedNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/UserDefinedNode.cs	(revision 11529)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/UserDefinedNode.cs	(revision 11529)
@@ -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("User-Defined Node", "A node of a network which can be defined by the user.")]
+  [StorableClass]
+  public sealed class UserDefinedNode : Node, IUserDefinedNode {
+    new public PortCollection Ports {
+      get { return base.Ports; }
+    }
+
+    [StorableConstructor]
+    private UserDefinedNode(bool deserializing) : base(deserializing) { }
+    private UserDefinedNode(UserDefinedNode original, Cloner cloner) : base(original, cloner) { }
+    public UserDefinedNode() : base("UserDefinedNode") { }
+    public UserDefinedNode(string name) : base(name) { }
+    public UserDefinedNode(string name, string description) : base(name, description) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UserDefinedNode(this, cloner);
+    }
+  }
+}
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 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/HeuristicLab.Optimization.Networks-3.3.csproj	(revision 11529)
@@ -90,8 +90,9 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Core.Networks\GenericNode.cs" />
+    <Compile Include="Core.Networks\IUserDefinedNetwork.cs" />
+    <Compile Include="Core.Networks\IUserDefinedNode.cs" />
+    <Compile Include="Core.Networks\UserDefinedNetwork.cs" />
     <Compile Include="Core.Networks\GenericPort.cs" />
     <Compile Include="Core.Networks\IConnectedPort.cs" />
-    <Compile Include="Core.Networks\IGenericNode.cs" />
     <Compile Include="Core.Networks\IGenericPort.cs" />
     <Compile Include="Core.Networks\IMessage.cs" />
@@ -117,4 +118,5 @@
     <Compile Include="Core.Networks\PortParameterCollection.cs" />
     <Compile Include="Core.Networks\PortParameterType.cs" />
+    <Compile Include="Core.Networks\UserDefinedNode.cs" />
     <Compile Include="Operators\HookOperator.cs" />
     <Compile Include="Operators\IHookOperator.cs" />
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 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks.KSPTSP/KSPTSPNetwork.cs	(revision 11529)
@@ -60,5 +60,5 @@
     protected virtual void Initialize() {
       #region ParametersNode
-      var paramsNode = new GenericNode("ParametersNode");
+      var paramsNode = new UserDefinedNode("ParametersNode");
       Nodes.Add(paramsNode);
 
Index: /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/AlgorithmNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/AlgorithmNode.cs	(revision 11528)
+++ /branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Optimization.Networks/AlgorithmNode.cs	(revision 11529)
@@ -125,6 +125,5 @@
 
       algorithm.StoreAlgorithmInEachRun = false;
-      algorithm.Runs.Clear();
-      algorithm.Prepare();
+      algorithm.Prepare(true);
       algorithm.ExceptionOccurred += Algorithm_ExceptionOccurred;
       algorithm.Stopped += Algorithm_Stopped;
