Index: /trunk/sources/HeuristicLab.Communication.Operators/CommunicatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/CommunicatorBase.cs	(revision 1206)
+++ /trunk/sources/HeuristicLab.Communication.Operators/CommunicatorBase.cs	(revision 1207)
@@ -28,6 +28,7 @@
       Message message = GetVariableValue<Message>("Message", scope, false, false);
 
-      if (message == null) { // RECEIVE MODE (no message present or not from this source)
+      if (message == null) { // RECEIVE MODE (no message present)
         message = Receive(scope, protocol, currentState);
+        if (message == null) throw new InvalidOperationException("ERROR in Communicator: Message could not be received");
         if (!info.Local) scope.AddVariable(new Variable(actualName, message));
         else AddVariable(new Variable(actualName, message));
Index: /trunk/sources/HeuristicLab.Communication.Operators/DataStreamCommunicator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/DataStreamCommunicator.cs	(revision 1206)
+++ /trunk/sources/HeuristicLab.Communication.Operators/DataStreamCommunicator.cs	(revision 1207)
@@ -43,5 +43,5 @@
     private string Encode(Message message) {
       XmlDocument document = new XmlDocument();
-      return message.GetXmlNode("Message", document, new Dictionary<Guid, IStorable>()).ToString();
+      return message.GetXmlNode("Message", document, new Dictionary<Guid, IStorable>()).OuterXml;
     }
 
@@ -57,10 +57,12 @@
       IDataStream connection = scope.GetVariableValue<IDataStream>("DataStream", true);
       connection.Write("PROTOCOL_ID " + protocol.Name);
-      if (connection.Read().Equals("ACK")) {
+      string s = connection.Read();
+      if (s.Trim().Equals("ACK")) {
         connection.Write("STATE_ID " + currentState.Name);
-        if (connection.Read().Equals("ACK")) {
+        s = connection.Read();
+        if (s.Trim().Equals("ACK")) {
           connection.Write(Encode(message));
-        }
-      }
+        } else throw new InvalidOperationException("Received unexpected response [2]: " + s);
+      } else throw new InvalidOperationException("Received unexpected response [1]: " + s);
     }
 
@@ -70,9 +72,9 @@
       string rcvd = connection.Read();
       if (rcvd.StartsWith("PROTOCOL_ID ")) {
-        if (rcvd.Substring(12).Equals(protocol.Name)) {
+        if (rcvd.Substring(12).Trim().Equals(protocol.Name)) {
           connection.Write("ACK");
           rcvd = connection.Read();
           if (rcvd.StartsWith("STATE_ID ")) {
-            if (rcvd.Substring(9).Equals(currentState.Name)) {
+            if (rcvd.Substring(9).Trim().Equals(currentState.Name)) {
               connection.Write("ACK");
               message = Decode(connection.Read());
Index: /trunk/sources/HeuristicLab.Communication.Operators/LocalProcessInitiator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/LocalProcessInitiator.cs	(revision 1206)
+++ /trunk/sources/HeuristicLab.Communication.Operators/LocalProcessInitiator.cs	(revision 1207)
@@ -42,4 +42,5 @@
       ProcessData proc = new ProcessData();
       proc.Initialize(config);
+      proc.Connect();
 
       IVariableInfo info = GetVariableInfo("Process");
Index: /trunk/sources/HeuristicLab.Communication.Operators/MessageProcessor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/MessageProcessor.cs	(revision 1206)
+++ /trunk/sources/HeuristicLab.Communication.Operators/MessageProcessor.cs	(revision 1207)
@@ -61,4 +61,11 @@
               message.Source = peerName;
               message.Timestamp = DateTime.Now;
+            } else { // otherwise delete the message
+              IVariableInfo messageInfo = GetVariableInfo("Message");
+              if (messageInfo.Local) {
+                RemoveVariable(messageInfo.ActualName);
+              } else {
+                scope.RemoveVariable(scope.TranslateName(messageInfo.ActualName));
+              }
             }
           }
Index: /trunk/sources/HeuristicLab.Communication.Operators/SubScopeMessageDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Communication.Operators/SubScopeMessageDecomposer.cs	(revision 1206)
+++ /trunk/sources/HeuristicLab.Communication.Operators/SubScopeMessageDecomposer.cs	(revision 1207)
@@ -22,5 +22,5 @@
       if (message.Expect.Count > scope.SubScopes.Count) throw new InvalidOperationException("ERROR in SubScopeMessageDecomposer: There are not enough subscopes to put the contents of the message into");
       int i = 0;
-      foreach (IVariable var in message.Expect) {
+      foreach (IVariable var in message.Give) {
         scope.SubScopes[i].AddVariable(var);
       }
