Index: branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessagePortView.Designer.cs
===================================================================
--- branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessagePortView.Designer.cs	(revision 11538)
+++ branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessagePortView.Designer.cs	(revision 11539)
@@ -180,11 +180,13 @@
       // lastMessageView
       // 
+      this.lastMessageView.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.lastMessageView.Caption = "Message View";
       this.lastMessageView.Content = null;
-      this.lastMessageView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.lastMessageView.Location = new System.Drawing.Point(3, 16);
+      this.lastMessageView.Location = new System.Drawing.Point(6, 19);
       this.lastMessageView.Name = "lastMessageView";
       this.lastMessageView.ReadOnly = true;
-      this.lastMessageView.Size = new System.Drawing.Size(639, 194);
+      this.lastMessageView.Size = new System.Drawing.Size(633, 188);
       this.lastMessageView.TabIndex = 0;
       // 
Index: branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessagePortView.cs
===================================================================
--- branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessagePortView.cs	(revision 11538)
+++ branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/MessagePortView.cs	(revision 11539)
@@ -80,5 +80,5 @@
       clearConnectedPortButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
       portParameterCollectionView.Enabled = Content != null && !ReadOnly;
-      cloneParametersFromPortButton.Enabled = Content != null && Content.ConnectedPort != null && !ReadOnly;
+      cloneParametersFromPortButton.Enabled = Content != null && !Content.Parameters.IsReadOnly && !ReadOnly;
       lastMessageView.Enabled = Content != null && !ReadOnly;
     }
@@ -89,5 +89,4 @@
       else {
         clearConnectedPortButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
-        cloneParametersFromPortButton.Enabled = Content.ConnectedPort != null && !ReadOnly;
         connectedPortView.Content = Content.ConnectedPort;
       }
@@ -163,5 +162,5 @@
       networkItemSelectorDialog.NetworkItemSelector.Configure(
         root,
-        null,
+        Content,
         typeof(IParameterizedPort)
       );
Index: branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedMessagePortView.cs
===================================================================
--- branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedMessagePortView.cs	(revision 11538)
+++ branches/OptimizationNetworks/HeuristicLab.Optimization.Networks.Views/3.3/Core.Networks.Views/UserDefinedMessagePortView.cs	(revision 11539)
@@ -41,4 +41,9 @@
       portParameterCollectionView.Content = Content == null ? null : Content.Parameters;
     }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      cloneParametersFromPortButton.Enabled = Content != null && !ReadOnly;
+    }
   }
 }
Index: branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessagePort.cs
===================================================================
--- branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessagePort.cs	(revision 11538)
+++ branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessagePort.cs	(revision 11539)
@@ -132,6 +132,10 @@
       var message = new Message();
 
-      // collect parameters from local port
-      message.Values.AddRange(Parameters.Select(p => p.CreateMessageValue()));
+      // collect output parameters from local port
+      message.Values.AddRange(
+        Parameters
+          .Where(p => p.Type.HasFlag(PortParameterType.Output))
+          .Select(p => p.CreateMessageValue())
+      );
 
       // collect remaining parameters from connected port
@@ -144,4 +148,11 @@
       }
 
+      // 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;
     }
@@ -151,6 +162,6 @@
     public void SendMessage(IMessage message, CancellationToken token) {
       if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
+      if (ConnectedPort != null) ConnectedPort.ReceiveMessage(message, token);
       LastMessage = message;
-      if (ConnectedPort != null) ConnectedPort.ReceiveMessage(message, token);
       OnMessageSent(message, token);
     }
